diff --git a/.agents/skills/test-t3-app/SKILL.md b/.agents/skills/test-t3-app/SKILL.md index 06fe9867b15ae..6fde6fff30984 100644 --- a/.agents/skills/test-t3-app/SKILL.md +++ b/.agents/skills/test-t3-app/SKILL.md @@ -21,6 +21,19 @@ Test with meaningful project and thread data. Read [references/sqlite-fixtures.md](references/sqlite-fixtures.md) only when inspecting or seeding SQLite. Stop the test server before direct fixture writes. +## Drive agent turns for free + +Do not spend a paid model to see a turn render. `vp run dev` registers the +`Replay (dev)` provider, which replays recorded turns with simulated streaming +through the real adapter and orchestration. Its models are scenarios: +`showcase` covers thinking, a plan, tool calls, an approval, and markdown. +Press `Ctrl+Alt+Shift+R` for a picker (GNOME takes that key for screen +recording), call `window.t3dev.replay("showcase")` +with `preview_evaluate`, or run +`node apps/server/src/bin.ts thread start --base-dir .t3 --provider devReplay --model showcase "go"`. +When the test needs real provider behavior, use that provider's cheapest +model, such as Haiku for Claude or Luna for Codex. + ## Use the Browser panel Call `preview_status`, then `preview_open` if the Browser panel is diff --git a/.agents/skills/test-t3-mobile/SKILL.md b/.agents/skills/test-t3-mobile/SKILL.md index b2f5443e431a1..f48bb0377ad94 100644 --- a/.agents/skills/test-t3-mobile/SKILL.md +++ b/.agents/skills/test-t3-mobile/SKILL.md @@ -31,11 +31,21 @@ when inspecting or seeding SQLite. Stop the test server before fixture writes. From the checkout being tested on the selected device host, run: ```bash -node scripts/mobile-native-client.ts ensure +vp run mobile:install ``` -This reuses a matching native client or builds and installs one. Authorized -mobile verification includes that build step unless the user prohibits it. +This installs the dev client for the checkout's native fingerprint: from the +device, the local cache, or the shared cache in seconds, building once only +when no machine has that fingerprint yet (5-15 minutes, logged to the file it +names). The device id may be omitted when exactly one device is booted. It +prints one JSON line; on failure it names the next command. Mobile verification +includes that step unless the user prohibits it. + +For a device you opened in an agent-device session elsewhere (a device pool, +cloud, or remote host), run `vp run mobile:install --session ` +from the directory you opened the session in. It installs the cached build into +that session (`--abi arm64-v8a` for an ARM Android device; `--metro ` also +opens it against Metro) and never builds. Start `vp run dev:client` from `apps/mobile`, or reuse a healthy Metro belonging to this checkout. Open its printed development-client URL with AgentDevice diff --git a/.coderabbit.config.ts b/.coderabbit.config.ts index 06983eaa71fd1..0b7d0182e6df7 100644 --- a/.coderabbit.config.ts +++ b/.coderabbit.config.ts @@ -26,6 +26,11 @@ export default defineConfig((ctx) => ({ path: "apps/web/src/**/*.{tsx,css}", instructions: "Hold changed code to the rules in docs/internals/web-ui.md.", }, + { + path: "**/*.test.*", + instructions: + "Hold changed tests to the rules in docs/internals/testing.md. Request tests only as those rules allow.", + }, ], }, knowledge_base: { @@ -33,6 +38,7 @@ export default defineConfig((ctx) => ({ filePatterns: [ { files: "docs/internals/effect-services.md", applyTo: "{apps,packages,infra}/**/*.ts" }, { files: "docs/internals/web-ui.md", applyTo: "apps/web/src/**/*.{tsx,css}" }, + { files: "docs/internals/testing.md", applyTo: "{apps,packages,infra}/**/*.{ts,tsx}" }, ], }, }, diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 5880459d75a12..144879ecdb565 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,4 +1,4 @@ -// Dev container for T3 Code. Mirrors CI (ubuntu-24.04, Node 24, Rust stable) +// Dev container for T3 Code. Mirrors CI (ubuntu-24.04, Node 26, Rust stable) // and the canonical setup in docs/operations/development.md: global `vp`, `vp i`. // Contributor doc: docs/internals/devcontainer.md { @@ -8,7 +8,7 @@ // nodeGypDependencies (default true) brings python3/make/g++, which Linux // needs for node-pty's node-gyp fallback (its prebuilds are mac/win only). "ghcr.io/devcontainers/features/node:2": { - "version": "24" + "version": "26" }, // native/resource-monitor (edition 2024, needs stable >= 1.85). The server // degrades gracefully without the binary, but CI checks cargo fmt + test. diff --git a/.github/VOUCHED.td b/.github/VOUCHED.td index 353a1f41a2616..1c4ae817060a9 100644 --- a/.github/VOUCHED.td +++ b/.github/VOUCHED.td @@ -59,6 +59,7 @@ github:myacoub91 github:naMqe-h github:nateEc github:naveed949 +github:nexxeln github:nmggithub github:Noojuno github:notkainoa diff --git a/.github/actions/setup-ci-deps/action.yml b/.github/actions/setup-ci-deps/action.yml index 7a6a1aa122a70..e9b7ae70a36ad 100644 --- a/.github/actions/setup-ci-deps/action.yml +++ b/.github/actions/setup-ci-deps/action.yml @@ -1,5 +1,18 @@ name: Setup CI dependencies description: Install Vite+ and the workspace dependencies from cache. +inputs: + task-cache-read-token: + description: Read-only credential for the private maintainer task cache + required: false + default: "" + install: + description: Set to "false" to set up Vite+ only, with no pnpm store or install + required: false + default: "true" + install-args: + description: Arguments for `vp install`, such as filters. Empty installs the whole workspace. + required: false + default: "" runs: using: composite steps: @@ -14,10 +27,11 @@ runs: echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" + # Pinned because release-desktop.yml signs builds with this action in the job. - name: Cache Vite+ id: vp_cache if: steps.vp.outputs.version != '' - uses: actions/cache@v6 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ~/.vite-plus key: vite-plus-home-v2-${{ runner.os }}-${{ runner.arch }}-${{ steps.vp.outputs.version }}-node${{ steps.vp.outputs.node }}-${{ steps.vp.outputs.pnpm }} @@ -33,35 +47,107 @@ runs: echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" "$HOME/.vite-plus/bin/vp" env use "${{ steps.vp.outputs.node }}" + # vp gives each Node.js download attempt 10 minutes by default, so one + # stalled stream holds the job that long. It retries 3 times and resumes + # partial bytes, so a shorter limit costs a slow download only a retry. - name: Setup Vite+ if: steps.vp_cache.outputs.cache-hit != 'true' - uses: voidzero-dev/setup-vp@v1 + uses: voidzero-dev/setup-vp@250f29ce396baf5e8f24498e17c0dfdebabc26eb # v1 + env: + VP_DOWNLOAD_TIMEOUT: "120" with: node-version-file: package.json cache: false run-install: false - - name: Resolve pnpm store path + # A shared key lets whichever install saves first, often a small filtered + # one, become every job's store. Each set of install args gets its own. + - name: Resolve pnpm store id: pnpm_store + if: inputs.install == 'true' shell: bash + env: + INSTALL_ARGS: ${{ inputs.install-args }} run: | - store_path="$(vp pm cache dir)" - echo "path=$store_path" >> "$GITHUB_OUTPUT" + echo "path=$(vp pm cache dir)" >> "$GITHUB_OUTPUT" + metadata_dir="${pnpm_config_cache_dir:-$RUNNER_TEMP/pnpm-metadata}" + echo "pnpm_config_cache_dir=$metadata_dir" >> "$GITHUB_ENV" + echo "verified=$metadata_dir/lockfile-verified.jsonl" >> "$GITHUB_OUTPUT" + if [[ -z "$INSTALL_ARGS" ]]; then + echo "namespace=full" >> "$GITHUB_OUTPUT" + else + echo "namespace=filtered-$(printf '%s' "$INSTALL_ARGS" | cksum | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" + fi - # setup-vp's shared cache key ignores install filters. Keep full installs in a - # separate namespace, including fallback restores. + # Filtered installs prefer the current full store, which holds every package, + # over an older store of their own. # The pnpm store stays a cache tarball on the runner's own disk. A store on a # Blacksmith sticky disk mounts in under a second, but pnpm then copies every # package across filesystems instead of hard-linking it: install took 28-49s # against 9s plus an 11s restore. - - name: Cache full pnpm store - uses: actions/cache@v6 + - name: Restore pnpm store + id: pnpm_cache + if: inputs.install == 'true' + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ${{ steps.pnpm_store.outputs.path }} - key: pnpm-full-v1-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('pnpm-lock.yaml', 'pnpm-workspace.yaml', 'package.json') }} + key: pnpm-${{ steps.pnpm_store.outputs.namespace }}-v1-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('pnpm-lock.yaml', 'pnpm-workspace.yaml', 'package.json') }} restore-keys: | + pnpm-full-v1-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('pnpm-lock.yaml', 'pnpm-workspace.yaml', 'package.json') }} + pnpm-${{ steps.pnpm_store.outputs.namespace }}-v1-${{ runner.os }}-${{ runner.arch }}- pnpm-full-v1-${{ runner.os }}-${{ runner.arch }}- + # pnpm accepts an earlier pass for the same lockfile and policy at any age, so + # a cached record skips fetching registry metadata for every package. + - name: Restore lockfile verification + id: pnpm_verified + if: inputs.install == 'true' + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 + with: + path: ${{ steps.pnpm_store.outputs.verified }} + key: pnpm-verified-v1-${{ hashFiles('pnpm-lock.yaml', 'pnpm-workspace.yaml', 'package.json') }} + - name: Install dependencies + if: inputs.install == 'true' + shell: bash + env: + INSTALL_ARGS: ${{ inputs.install-args }} + # Unquoted so each filter is its own argument. + run: vp install $INSTALL_ARGS + + - name: Save lockfile verification + if: inputs.install == 'true' && steps.pnpm_verified.outputs.cache-hit != 'true' + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 + with: + path: ${{ steps.pnpm_store.outputs.verified }} + key: ${{ steps.pnpm_verified.outputs.cache-primary-key }} + + # A filtered install that started from the current full store adds nothing + # worth a second copy of it. + - name: Save pnpm store + if: >- + inputs.install == 'true' && + steps.pnpm_cache.outputs.cache-hit != 'true' && + (steps.pnpm_store.outputs.namespace == 'full' || + steps.pnpm_cache.outputs.cache-matched-key != format('pnpm-full-v1-{0}-{1}-{2}', runner.os, runner.arch, hashFiles('pnpm-lock.yaml', 'pnpm-workspace.yaml', 'package.json'))) + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 + with: + path: ${{ steps.pnpm_store.outputs.path }} + key: ${{ steps.pnpm_cache.outputs.cache-primary-key }} + + - name: Enable shared task cache + if: >- + github.repository == 'pingdotgg/t3code' && + (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && + hashFiles('.task-cache.json') != '' && + inputs.task-cache-read-token != '' shell: bash - run: vp install + env: + T3_TASK_CACHE_READ_TOKEN: ${{ inputs.task-cache-read-token }} + run: | + node infra/task-cache/scripts/install-ci.ts + if [[ ( "$GITHUB_EVENT_NAME" == pull_request && "$GITHUB_BASE_REF" == main ) || ( "$GITHUB_EVENT_NAME" == push && "$GITHUB_REF" == refs/heads/main ) ]]; then + echo 'VP_REMOTE_CACHE=read-write' >> "$GITHUB_ENV" + else + echo 'VP_REMOTE_CACHE=read' >> "$GITHUB_ENV" + fi diff --git a/.github/scripts/ci-changes.cjs b/.github/scripts/ci-changes.cjs index d7ebb1a0790cd..77a526076de4d 100644 --- a/.github/scripts/ci-changes.cjs +++ b/.github/scripts/ci-changes.cjs @@ -1,21 +1,10 @@ -// Decides which CI jobs a change needs. Prints `key=value` lines for -// $GITHUB_OUTPUT; a job runs unless its key is "false". -// -// node ci-changes.cjs --paths gate by the listed paths -// node ci-changes.cjs --paths --full run every Linux job, gate only the macOS lint -// node ci-changes.cjs changed paths unknown: run everything -// -// scripts/check-changed.ts requires the same decisions so local runs match CI. -// -// Every changed path maps to workspace packages, which then pull in their -// dependents from package.json. A path this file does not recognize runs -// everything, so a new root file or directory can only cost minutes. +// Unknown paths run every job; recognized packages pull in their dependents. +// scripts/check-changed.ts shares these decisions so local checks match CI. const fs = require("node:fs"); const path = require("node:path"); const root = path.resolve(__dirname, "../.."); -// Never read by a build, typecheck, or test. Lint still formats them. const INERT = [ /^docs\//, /^\.(agents|cursor|vscode|devcontainer|macroscope|repos)\//, @@ -23,15 +12,13 @@ const INERT = [ /^LICENSE$/, ]; -// Run everything: the root vite.config.ts loads the first as setup for every -// package's tests, and the vendored mobile tarballs are installed dependencies. +// Shared test setup and vendored mobile dependencies affect every package. const RUNS_EVERYTHING = [ /^packages\/shared\/src\/(HostProcess|testing\/longTempDir)\.ts$/, /^apps\/mobile\/deps\//, ]; -// Paths outside a package, or files inside one that other packages read -// through relative imports rather than a package.json dependency. +// Includes cross-package reads absent from package.json dependencies. const EXTRA_OWNERS = [ // Vite configs and tsconfigs of these apps import scripts/lib directly. [/^scripts\/lib\//, ["@t3tools/desktop", "@t3tools/mobile", "@t3tools/web", "t3"]], @@ -43,10 +30,10 @@ const EXTRA_OWNERS = [ ]; const RUST = /^native\/(resource-monitor|kde-snap-shot|hyprland-snap-shot)\//; -// Tests that read another package's files without declaring it. The scripts -// tests read app manifests, assets, and sources (cursor-sdk-packaging, -// third-party-licenses, brand-assets, build-desktop-artifact). +// These tests read other packages without declaring dependencies. const TEST_ONLY_DEPS = { + // Evals import the server's source to test its real model-facing text. + "@t3tools/evals": ["t3"], "@t3tools/provider-pi": ["@t3tools/client-runtime"], "@t3tools/scripts": [ "@t3tools/desktop", @@ -56,17 +43,12 @@ const TEST_ONLY_DEPS = { "@t3tools/provider-cursor", ], }; -// Declared dependencies that only feed a build step: the server bundles the -// built web app (apps/server/vite.config.ts) but never imports it. +// The server bundles the web build without importing it. const BUILD_ONLY_DEPS = { t3: ["@t3tools/web"] }; -// Sources scripts/mobile-native-static-check.ts lints, plus the tool and rule -// configuration that decides how it lints them, plus the root package.json -// that defines the lint:mobile command. const MOBILE_NATIVE = /^apps\/mobile\/.*\.(swift|kt|kts)$|^apps\/mobile\/(\.swiftlint\.yml|detekt\.yml|\.editorconfig|Brewfile)$|^scripts\/mobile-native-static-check\.ts$|^package\.json$|^\.github\/workflows\/ci\.yml$|^\.github\/scripts\/ci-changes\.cjs$|^\.github\/actions\/ci-changes\//; -// Jobs that test every package except these, which have jobs of their own. const OWN_TEST_JOB = new Set(["t3", "@t3tools/web", "@t3tools/monorepo"]); function readWorkspace() { @@ -108,8 +90,7 @@ function readWorkspace() { return packages; } -// Returns the packages a path touches, [] for an inert path, or null when the -// path is not understood and everything must run. +// [] means inert; null means unknown and requires every job. function ownersOf(file, packages) { if (INERT.some((pattern) => pattern.test(file))) return []; // A manifest can change dependencies or versions other packages read. @@ -148,7 +129,6 @@ function decide(files, packages, full) { if (everything) { affected = all; } else { - // Add dependents until nothing changes. let grew = true; while (grew) { grew = false; diff --git a/.github/scripts/mirror-play-apk.cjs b/.github/scripts/mirror-play-apk.cjs index 90b368b2aa036..d017fc907f124 100644 --- a/.github/scripts/mirror-play-apk.cjs +++ b/.github/scripts/mirror-play-apk.cjs @@ -1,7 +1,4 @@ -// Publishes closed-testing betas, or downloads the internal APK for a normal -// nightly release. Play generates and signs the APK from the -// uploaded bundle with the app signing key, so it carries the same signature -// as the Play Store install. Run by .github/workflows/mobile-android-apk.yml. +// Play signs generated APKs with the app signing key, matching Play Store installs. const { execFileSync } = require("node:child_process"); const crypto = require("node:crypto"); const fs = require("node:fs"); @@ -50,10 +47,7 @@ async function play(token, method, url) { return response; } -// Highest version code the track serves, with its release name. Play names a -// release after the bundle's versionName unless the uploader sets one. This -// endpoint reads without opening an edit; an edit would invalidate any open -// EAS Submit edit made with the same service account. +// Opening an edit would invalidate any EAS Submit edit using the same service account. async function newestTrackBuild(token, appUrl, trackName) { const { releases = [] } = await ( await play(token, "GET", `${appUrl}/tracks/${trackName}/releases`) @@ -82,8 +76,7 @@ function readRelease(tag) { } } -// Download to a temporary directory so a failed request cannot leave a partial -// APK among the release assets. +// Stage downloads so failed requests cannot leave partial release assets. async function downloadApk({ token, appUrl, build, apkName }) { const generated = await ( await play(token, "GET", `${appUrl}/generatedApks/${build.versionCode}`) diff --git a/.github/scripts/stage-preview-bundle.py b/.github/scripts/stage-preview-bundle.py index 0b3a53285916b..1730ee5c8d752 100644 --- a/.github/scripts/stage-preview-bundle.py +++ b/.github/scripts/stage-preview-bundle.py @@ -12,8 +12,7 @@ "server/dist/client/index.html", "desktop/dist-electron/main.cjs", } -# The current bundle is about 32 MiB compressed. Bound extraction on the -# trusted runner even when the PR replaces the uploader entirely. +# Bound trusted-runner extraction even when a PR replaces the uploader. MAX_ARCHIVE_BYTES = 512 * 1024 * 1024 MAX_EXPANDED_BYTES = 2 * 1024 * 1024 * 1024 MAX_ENTRIES = 50_000 @@ -58,9 +57,7 @@ def stage_bundle(archive: Path, destination: Path): files.add(name) if not REQUIRED_FILES <= files: raise ValueError("Preview bundle is missing required entry points") - # Validate all names before writing anything. This is a fresh directory - # outside the checkout; neither pre-existing links nor trusted files - # can be followed or overwritten. ZIP permissions are never restored. + # Validate before writing into a fresh directory so existing links/files cannot be followed or overwritten. destination.mkdir(parents=True, exist_ok=False) for entry in entries: target = destination / entry.filename diff --git a/.github/scripts/thread-transfer-report.cjs b/.github/scripts/thread-transfer-report.cjs index 5ed6a6ff498a9..ca57769ed490c 100644 --- a/.github/scripts/thread-transfer-report.cjs +++ b/.github/scripts/thread-transfer-report.cjs @@ -294,8 +294,7 @@ async function resolve({ github, context, core }) { const sourceArtifacts = await artifactsForRun(github, owner, repo, source.id); const sourceArtifact = findResultArtifact(sourceArtifacts); - // CI requires the artifact whenever the server tests run, so a passing run - // without one skipped them because the PR cannot affect the server. + // Successful server tests require this artifact; its absence means CI skipped them. if (!sourceArtifact && source.conclusion === "success") { core.info("CI skipped the server tests for this change; nothing to report."); core.setOutput("publish", "false"); diff --git a/.github/triage/PLAYBOOK.md b/.github/triage/PLAYBOOK.md index 13ca38fed4ad6..cc922de448005 100644 --- a/.github/triage/PLAYBOOK.md +++ b/.github/triage/PLAYBOOK.md @@ -11,8 +11,8 @@ provided alongside this playbook. Everything machine-specific lives there, not h ## 1. Ask what went wrong -Your first message to the user: ask them to describe what went wrong, in their own -words. Ask them to paste screenshots directly into this session if they have any. +Unless the user already described it, your first message asks what went wrong, in +their own words. Ask them to paste screenshots directly into this session if they have any. Ask follow-up questions when the description is vague. Good repro steps are the most valuable thing you can extract from this conversation. @@ -125,10 +125,16 @@ of `main` for that work, never the tag-pinned diagnosis clone. - Show the user the complete final issue text and get an explicit yes before posting. Never post without it. - Note at the end of the issue which model and agent produced it. -- If `gh` is not authenticated, offer `gh auth login`, or build a prefilled - https://github.com/pingdotgg/t3code/issues/new URL with title and body query - parameters; print the URL, and open it in their browser only after they - approve. +- Post with `gh issue create --repo pingdotgg/t3code --label via-triage` only + if `gh api repos/pingdotgg/t3code --jq .permissions.triage` prints `true`. +- Otherwise, or if `gh` is not authenticated, build a prefilled + https://github.com/pingdotgg/t3code/issues/new?template=via-triage.yml URL. + The form applies the label whoever submits it. Add `title` plus one + URL-encoded query parameter per form field id: `what-happened`, `diagnosis`, + `steps`, `version`, `environment`, `evidence`, `related`, `workaround` and + `agent`. Keep the full encoded URL below 6,000 characters by shortening any + fields as needed. Give the user any omitted text to paste into the form before + submitting. Print the URL, and open it in their browser only after they approve. - If the user pasted screenshots, remind them to drag the images into the issue after it is created; they cannot be attached from here. diff --git a/.github/workflows/agent-context-budget.yml b/.github/workflows/agent-context-budget.yml new file mode 100644 index 0000000000000..35e1dbecec454 --- /dev/null +++ b/.github/workflows/agent-context-budget.yml @@ -0,0 +1,56 @@ +name: Agent Context Budget + +# Fails when a PR raises a value in agentContextBudget.json above its base. AgentContextBudget.test.ts +# keeps that file equal to the measured context, so the context cannot grow by editing the file. +# To accept growth on purpose, a maintainer adds the agent-context-increase label. +on: + pull_request: + types: [opened, synchronize, reopened, labeled, unlabeled] + +permissions: + contents: read + +concurrency: + group: agent-context-budget-${{ github.event.pull_request.number }} + cancel-in-progress: true + +jobs: + budget: + name: Agent context budget + runs-on: ubuntu-24.04 + timeout-minutes: 5 + env: + BUDGET: apps/server/src/provider/agentContextBudget.json + BASE_REF: ${{ github.base_ref }} + ALLOW_INCREASE: ${{ contains(github.event.pull_request.labels.*.name, 'agent-context-increase') }} + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + sparse-checkout: apps/server/src/provider/agentContextBudget.json + sparse-checkout-cone-mode: false + + - name: Compare with the target branch + run: | + git fetch --quiet --depth=1 origin "refs/heads/$BASE_REF" + if ! git cat-file -e "FETCH_HEAD:$BUDGET" 2>/dev/null; then + echo "The target branch has no agent context budget yet." + exit 0 + fi + git show "FETCH_HEAD:$BUDGET" > "$RUNNER_TEMP/main.json" + grown=$(jq -r --slurpfile main "$RUNNER_TEMP/main.json" ' + to_entries[] + | select($main[0][.key] != null and .value > $main[0][.key]) + | "\(.key): \($main[0][.key]) -> \(.value) (+\(.value - $main[0][.key]))" + ' "$BUDGET") + if [ -z "$grown" ]; then + echo "Agent context is not larger than the target branch." + exit 0 + fi + printf 'Agent context grew compared to the target branch:\n%s\n' "$grown" + if [ "$ALLOW_INCREASE" = "true" ]; then + echo "Accepted by the agent-context-increase label." + exit 0 + fi + echo "::error file=$BUDGET::Agent context grew compared to the target branch. Cut the added text and rerun the evals that cover it (evals/README.md), or ask a maintainer to add the agent-context-increase label." + exit 1 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b3e97d4d2ee01..a5f4f35e009ea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -61,6 +61,9 @@ jobs: # file, docs included. The `Check` job at the end of this file passes only # when every other job passes or was skipped by `changes`. lint: + permissions: + contents: read + id-token: write name: Lint runs-on: ${{ github.repository == 'pingdotgg/t3code' && 'blacksmith-8vcpu-ubuntu-2404' || 'ubuntu-24.04' }} timeout-minutes: 10 @@ -84,6 +87,8 @@ jobs: - name: Setup Vite+ uses: ./.github/actions/setup-ci-deps + with: + task-cache-read-token: ${{ secrets.T3_TASK_CACHE_READ_TOKEN }} # electron's install.js (run by ensure:electron) reads this cache before it # downloads from GitHub. The key changes only with the Electron version. @@ -110,6 +115,9 @@ jobs: run: vp check build: + permissions: + contents: read + id-token: write name: Build and Typecheck needs: changes if: ${{ !cancelled() && (needs.changes.outputs.build != 'false' || needs.changes.outputs.typecheck != 'false') }} @@ -141,6 +149,8 @@ jobs: - name: Setup Vite+ uses: ./.github/actions/setup-ci-deps + with: + task-cache-read-token: ${{ secrets.T3_TASK_CACHE_READ_TOKEN }} # electron's install.js (run by ensure:electron) reads this cache before it # downloads from GitHub. The key changes only with the Electron version. @@ -199,6 +209,9 @@ jobs: # dependency layers. The concurrency limit stays at the default 4 so peak load # per runner is unchanged. test: + permissions: + contents: read + id-token: write name: Test needs: changes if: ${{ !cancelled() && needs.changes.outputs.test != 'false' }} @@ -214,16 +227,6 @@ jobs: !/apps/mobile/modules/t3-terminal/Vendor/**/*.a sparse-checkout-cone-mode: false - # Blacksmith boots GitHub's Ubuntu runner image (gcc is usually present), - # but ACP process-tree live tests compile a small pthread fixture with `cc` - # and soft-skip when it is missing. Install build-essential so that path - # always runs in CI instead of silently no-oping. - - name: Install C toolchain for process-tree fixtures - run: | - sudo apt-get update - sudo apt-get install -y --no-install-recommends build-essential - command -v cc - - uses: ./.github/actions/setup-apt-mirrors # The desktop tests compile the browser secret helper. The install runs in @@ -239,6 +242,8 @@ jobs: - name: Setup Vite+ uses: ./.github/actions/setup-ci-deps + with: + task-cache-read-token: ${{ secrets.T3_TASK_CACHE_READ_TOKEN }} # electron's install.js (run by ensure:electron) reads this cache before it # downloads from GitHub. The key changes only with the Electron version. @@ -280,6 +285,9 @@ jobs: # started last and ran alone for about 40s after everything else finished. # release.yml mirrors this test, test_web, and test_server split. test_web: + permissions: + contents: read + id-token: write name: Test Web needs: changes if: ${{ !cancelled() && needs.changes.outputs.test_web != 'false' }} @@ -297,6 +305,8 @@ jobs: - name: Setup Vite+ uses: ./.github/actions/setup-ci-deps + with: + task-cache-read-token: ${{ secrets.T3_TASK_CACHE_READ_TOKEN }} # The browser project runs React tests in headless Chromium. Same cache key as # test_server, so both jobs share one downloaded browser. @@ -326,6 +336,12 @@ jobs: - name: Test run: vp run --filter @t3tools/web test + # Browser tests run source modules; this boots the production chunk graph. + - name: Boot the built web client + run: | + vp run --filter @t3tools/web build + node apps/web/scripts/verify-built-boot.ts + # apps/server sets `fileParallelism: false`, so its test files run strictly # one at a time. Sharding spreads them over separate runners instead of # separate workers, so no two server test files ever share a machine and the @@ -335,9 +351,12 @@ jobs: # The shards are the longest jobs, so they gate themselves instead of waiting # ~15s for `changes`: a shard the change cannot affect stops after checkout. test_server: + permissions: + contents: read + id-token: write name: Test Server ${{ matrix.shard }} runs-on: ${{ github.repository == 'pingdotgg/t3code' && 'blacksmith-4vcpu-ubuntu-2404' || 'ubuntu-24.04' }} - timeout-minutes: 10 + timeout-minutes: 20 strategy: fail-fast: false matrix: @@ -361,6 +380,8 @@ jobs: - name: Setup Vite+ if: steps.changes.outputs.test_server != 'false' uses: ./.github/actions/setup-ci-deps + with: + task-cache-read-token: ${{ secrets.T3_TASK_CACHE_READ_TOKEN }} # No Electron setup here: `t3` (apps/server) has no Electron dependency # and none of its tests touch the runtime. Only the non-server `test` @@ -397,7 +418,18 @@ jobs: env: T3CODE_TRANSFER_BUDGET_REPORT_PATH: ${{ runner.temp }}/t3code-transfer-budget.md T3CODE_TRANSFER_BUDGET_RESULT_PATH: ${{ runner.temp }}/thread-transfer-result.json - run: vp run --filter t3 test --shard ${{ matrix.shard }}/${{ strategy.job-total }} + run: >- + vp run test:cached -- --shard ${{ matrix.shard }}/${{ strategy.job-total }} + --uncached apps/server/integration/transferBudgetV2.integration.test.ts + --verify-hits 1 --report "${{ runner.temp }}/test-cache-${{ matrix.shard }}.json" apps/server + + - name: Upload test cache measurements + if: always() && steps.changes.outputs.test_server != 'false' + uses: actions/upload-artifact@v7 + with: + name: test-cache-${{ matrix.shard }} + path: ${{ runner.temp }}/test-cache-${{ matrix.shard }}.json + if-no-files-found: error # integration/transferBudgetV2.integration.test.ts writes the report; exactly one shard # produces these files. Gating the upload on their presence keeps a @@ -498,6 +530,9 @@ jobs: run: vp run lint:mobile release_smoke: + permissions: + contents: read + id-token: write name: Release Smoke needs: changes if: ${{ !cancelled() && needs.changes.outputs.release_smoke != 'false' }} @@ -515,6 +550,8 @@ jobs: - name: Setup Vite+ uses: ./.github/actions/setup-ci-deps + with: + task-cache-read-token: ${{ secrets.T3_TASK_CACHE_READ_TOKEN }} - name: Exercise release-only workflow steps run: node scripts/release-smoke.ts diff --git a/.github/workflows/deploy-relay.yml b/.github/workflows/deploy-relay.yml index bf8591f81da9b..5db7a86eb98c9 100644 --- a/.github/workflows/deploy-relay.yml +++ b/.github/workflows/deploy-relay.yml @@ -5,12 +5,11 @@ on: branches: - main # Redeploys main after a variable or secret change. Alchemy redeploys the - # Worker when a value it reads changes, so force is rarely needed, and it - # replaces the Postgres runtime role (alchemy-run/alchemy#1832). + # Worker when a value it reads changes, so force is rarely needed. workflow_dispatch: inputs: force: - description: Redeploy every resource, including ones with no detected changes. Replaces the Postgres runtime role. + description: Redeploy every resource, including ones with no detected changes. type: boolean default: false @@ -81,6 +80,7 @@ jobs: CLERK_SECRET_KEY: ${{ secrets.CLERK_SECRET_KEY }} APNS_PRIVATE_KEY: ${{ secrets.APNS_PRIVATE_KEY }} FCM_SERVICE_ACCOUNT: ${{ secrets.FCM_SERVICE_ACCOUNT }} + T3CHAT_LINK_SECRET: ${{ secrets.T3CHAT_LINK_SECRET }} - name: Publish relay deploy commit status uses: actions/github-script@v8 diff --git a/.github/workflows/desktop-macos-preview-publish.yml b/.github/workflows/desktop-macos-preview-publish.yml index bd6f59bc0f0bc..6e8805b7f790b 100644 --- a/.github/workflows/desktop-macos-preview-publish.yml +++ b/.github/workflows/desktop-macos-preview-publish.yml @@ -77,16 +77,19 @@ jobs: return; } - // workflow_run.pull_requests is empty for fork PRs, so resolve the - // PR from the built commit instead and require exactly one open PR - // from the same head repository and branch. The build baked its + // workflow_run.pull_requests and the commit-to-PR lookup are both + // empty for fork PRs, so list open PRs by head owner and branch + // and require exactly one at the built commit. The build baked its // PR number into the version, so two candidates would mean the // asset name could belong to either. - const associated = await github.paginate( - github.rest.repos.listPullRequestsAssociatedWithCommit, - { owner, repo, commit_sha: run.head_sha, per_page: 100 }, - ); - const matching = associated.filter( + const open = await github.paginate(github.rest.pulls.list, { + owner, + repo, + state: "open", + head: `${run.head_repository?.owner?.login}:${run.head_branch}`, + per_page: 100, + }); + const matching = open.filter( (candidate) => candidate.state === "open" && candidate.head.sha === run.head_sha && diff --git a/.github/workflows/fork-release.yml b/.github/workflows/fork-release.yml index e667f72a075b8..04583635ae977 100644 --- a/.github/workflows/fork-release.yml +++ b/.github/workflows/fork-release.yml @@ -41,6 +41,7 @@ jobs: tag: ${{ steps.meta.outputs.tag }} ref: ${{ steps.meta.outputs.ref }} platform: ${{ steps.meta.outputs.platform }} + build_required: ${{ steps.meta.outputs.build_required }} steps: - uses: actions/checkout@v6 with: @@ -65,6 +66,17 @@ jobs: # Preview versions deliberately carry no automatic update feed. [[ "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+-unlock\.[0-9]+-preview\.[0-9]{8}\.[0-9]+$ ]] [[ "$PLATFORM" == "mac-arm64" || "$PLATFORM" == "all" ]] + # Publishing a prepared release can also create its tag and trigger this workflow. + if gh api "repos/$GITHUB_REPOSITORY/releases/tags/$TAG" \ + --jq '.html_url' > "$RUNNER_TEMP/fork-existing-release.txt" \ + 2> "$RUNNER_TEMP/fork-release-probe.err"; then + echo "Release $TAG already exists; preserving its assets and skipping packaging." + echo "build_required=false" >> "$GITHUB_OUTPUT" + exit 0 + elif ! grep -q '(HTTP 404)' "$RUNNER_TEMP/fork-release-probe.err"; then + cat "$RUNNER_TEMP/fork-release-probe.err" >&2 + exit 1 + fi sha="$(git rev-parse "refs/tags/$TAG^{commit}")" git merge-base --is-ancestor "$sha" "origin/$DEFAULT_BRANCH" gh api "repos/$GITHUB_REPOSITORY/commits/$sha/check-runs?per_page=100" \ @@ -74,10 +86,12 @@ jobs: echo "tag=$TAG" >> "$GITHUB_OUTPUT" echo "ref=$sha" >> "$GITHUB_OUTPUT" echo "platform=$PLATFORM" >> "$GITHUB_OUTPUT" + echo "build_required=true" >> "$GITHUB_OUTPUT" build_bundle: name: Build JS bundle needs: [preflight] + if: needs.preflight.outputs.build_required == 'true' runs-on: ubuntu-24.04 timeout-minutes: 60 steps: diff --git a/.github/workflows/mobile-eas-preview-fork.yml b/.github/workflows/mobile-eas-preview-fork.yml new file mode 100644 index 0000000000000..e7615d46011bd --- /dev/null +++ b/.github/workflows/mobile-eas-preview-fork.yml @@ -0,0 +1,145 @@ +name: Mobile EAS Preview (Fork) + +# EAS previews for fork PRs. This runs the PR's code with an Expo token: the +# app config and plugins run on this runner, and native builds run on EAS +# with preview signing credentials. The label is the maintainer's sign-off +# that they reviewed that code, so it covers exactly the commit it was applied +# to: this pins that commit and consumes the label before running anything. A +# later push deploys nothing until the label is applied again. +# +# Same-repo PRs deploy on every push while labeled, via mobile-eas-preview.yml. + +on: + pull_request_target: + types: [labeled] + +permissions: + contents: read + +jobs: + preview: + name: EAS Preview + if: >- + github.event.pull_request.head.repo.full_name != github.repository && + github.event.label.name == '🚀 Mobile Continuous Deployment' + runs-on: blacksmith-8vcpu-ubuntu-2404 + concurrency: + group: mobile-eas-preview-fork-${{ github.event.pull_request.number }} + cancel-in-progress: true + permissions: + contents: read + pull-requests: write + env: + APP_VARIANT: preview + NODE_OPTIONS: --max-old-space-size=8192 + MOBILE_VERSION_POLICY: fingerprint + steps: + # If a maintainer removed the label first, that removal wins. + - id: consume + name: Consume the deployment label + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + with: + script: | + try { + await github.rest.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.payload.pull_request.number, + name: context.payload.label.name, + }); + core.setOutput("consumed", "true"); + } catch (error) { + if (error.status !== 404) throw error; + core.info("The label was removed before this run could consume it. Skipping."); + core.setOutput("consumed", "false"); + } + + - id: expo-token + name: Check for EXPO_PREVIEW_TOKEN + if: steps.consume.outputs.consumed == 'true' + env: + EXPO_TOKEN: ${{ secrets.EXPO_PREVIEW_TOKEN }} + run: | + if [ -n "$EXPO_TOKEN" ]; then + echo "present=true" >> "$GITHUB_OUTPUT" + else + echo "present=false" >> "$GITHUB_OUTPUT" + echo "EXPO_PREVIEW_TOKEN is not set; skipping EAS preview." + fi + + # The head SHA from the label event, not the branch, so a push after the + # label cannot swap in unreviewed code. No credentials stay in .git for + # the PR's scripts to read. + - name: Checkout reviewed commit + if: steps.expo-token.outputs.present == 'true' + uses: actions/checkout@v6 + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 + persist-credentials: false + # No sparse-checkout: see mobile-eas-preview.yml. + + # No caches: pull_request_target saves them under main's scope, where + # trusted workflows with other secrets would restore what PR code wrote. + - name: Setup Vite+ + if: steps.expo-token.outputs.present == 'true' + uses: voidzero-dev/setup-vp@v1 + with: + node-version-file: package.json + cache: false + run-install: | + args: + - --filter=@t3tools/mobile... + + - name: Expose pnpm + if: steps.expo-token.outputs.present == 'true' + run: | + pnpm_version="$(node --print "require('./package.json').packageManager.split('@').pop()")" + vp_pnpm_bin="$HOME/.vite-plus/package_manager/pnpm/$pnpm_version/pnpm/bin" + echo "$vp_pnpm_bin" >> "$GITHUB_PATH" + "$vp_pnpm_bin/pnpm" --version + + - name: Setup EAS + if: steps.expo-token.outputs.present == 'true' + uses: expo/expo-github-action@v8 + with: + # Pinned and installed with npm for the same reasons as mobile-eas-preview.yml. + eas-version: 21.8.0 + eas-cache: false + token: ${{ secrets.EXPO_PREVIEW_TOKEN }} + packager: npm + + - name: Pull preview environment variables + if: steps.expo-token.outputs.present == 'true' + working-directory: apps/mobile + env: + EXPO_TOKEN: ${{ secrets.EXPO_PREVIEW_TOKEN }} + run: | + eas env:pull preview --non-interactive + # See mobile-eas-preview.yml: keeps Android build and OTA fingerprints matching. + node --input-type=module <<'NODE' + import { appendFileSync, readFileSync } from "node:fs"; + import { parseEnv } from "node:util"; + const env = parseEnv(readFileSync(".env.local", "utf8")); + const googleServicesFile = env.T3CODE_ANDROID_GOOGLE_SERVICES_FILE; + if (googleServicesFile) { + appendFileSync(process.env.GITHUB_ENV, `T3CODE_ANDROID_GOOGLE_SERVICES_FILE=${googleServicesFile}\n`); + } + NODE + + - name: Deploy with fingerprint check + if: steps.expo-token.outputs.present == 'true' + uses: expo/expo-github-action/continuous-deploy-fingerprint@main + env: + EXPO_TOKEN: ${{ secrets.EXPO_PREVIEW_TOKEN }} + RUNNER_DEBUG: "1" + # The action only comments for pull_request events; this hook gives + # it the PR under pull_request_target. Without it, it skips the comment. + EXPO_TEST_GITHUB_PULL: ${{ github.event.pull_request.number }} + with: + profile: preview:dev + branch: pr-${{ github.event.pull_request.number }} + platform: all + environment: preview + working-directory: apps/mobile + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/mobile-eas-preview.yml b/.github/workflows/mobile-eas-preview.yml index 107c741424b08..08183d0385811 100644 --- a/.github/workflows/mobile-eas-preview.yml +++ b/.github/workflows/mobile-eas-preview.yml @@ -7,7 +7,9 @@ on: jobs: preview: name: EAS Preview + # Fork PRs deploy one reviewed commit per label through mobile-eas-preview-fork.yml. if: | + github.event.pull_request.head.repo.full_name == github.repository && contains(github.event.pull_request.labels.*.name, '🚀 Mobile Continuous Deployment') && (github.event.action != 'labeled' || github.event.label.name == '🚀 Mobile Continuous Deployment') runs-on: blacksmith-8vcpu-ubuntu-2404 @@ -23,15 +25,15 @@ jobs: MOBILE_VERSION_POLICY: fingerprint steps: - id: expo-token - name: Check for EXPO_TOKEN + name: Check for EXPO_PREVIEW_TOKEN env: - EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} + EXPO_TOKEN: ${{ secrets.EXPO_PREVIEW_TOKEN }} run: | if [ -n "$EXPO_TOKEN" ]; then echo "present=true" >> "$GITHUB_OUTPUT" else echo "present=false" >> "$GITHUB_OUTPUT" - echo "EXPO_TOKEN is not available; skipping EAS preview." + echo "EXPO_PREVIEW_TOKEN is not available; skipping EAS preview." fi - name: Checkout @@ -70,7 +72,7 @@ jobs: # continuous-deploy-fingerprint still reads `build.project.ownerAccount`. # Unpin once https://github.com/expo/expo-github-action/issues/358 is fixed. eas-version: 21.8.0 - token: ${{ secrets.EXPO_TOKEN }} + token: ${{ secrets.EXPO_PREVIEW_TOKEN }} # npm, not pnpm: this only installs eas-cli into the action's own # tool dir, and pnpm 11 hard-fails that install on dtrace-provider's # ignored build script (no allowBuilds config outside the repo). @@ -80,7 +82,7 @@ jobs: if: steps.expo-token.outputs.present == 'true' working-directory: apps/mobile env: - EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} + EXPO_TOKEN: ${{ secrets.EXPO_PREVIEW_TOKEN }} run: | eas env:pull preview --non-interactive # EAS Update disables dotenv loading. Keep the downloaded native config @@ -99,7 +101,7 @@ jobs: if: steps.expo-token.outputs.present == 'true' uses: expo/expo-github-action/continuous-deploy-fingerprint@main env: - EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} + EXPO_TOKEN: ${{ secrets.EXPO_PREVIEW_TOKEN }} # The Expo action otherwise suppresses the EAS command's failure output. RUNNER_DEBUG: "1" with: diff --git a/.github/workflows/mobile-eas-production.yml b/.github/workflows/mobile-eas-production.yml index b6581e0e8ea49..6877f5c831a08 100644 --- a/.github/workflows/mobile-eas-production.yml +++ b/.github/workflows/mobile-eas-production.yml @@ -97,13 +97,13 @@ jobs: - id: expo-token name: Check for EXPO_TOKEN env: - EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} + EXPO_TOKEN: ${{ secrets.EXPO_PRODUCTION_TOKEN }} run: | if [ -n "$EXPO_TOKEN" ]; then echo "present=true" >> "$GITHUB_OUTPUT" else echo "present=false" >> "$GITHUB_OUTPUT" - echo "EXPO_TOKEN is not available; skipping EAS production job." + echo "EXPO_PRODUCTION_TOKEN is not available; skipping EAS production job." fi - id: version_app_token @@ -149,7 +149,7 @@ jobs: uses: expo/expo-github-action@v8 with: eas-version: latest - token: ${{ secrets.EXPO_TOKEN }} + token: ${{ secrets.EXPO_PRODUCTION_TOKEN }} # npm, not pnpm: this only installs eas-cli into the action's own # tool dir, and pnpm 11 hard-fails that install on dtrace-provider's # ignored build script (no allowBuilds config outside the repo). @@ -159,8 +159,21 @@ jobs: if: steps.expo-token.outputs.present == 'true' working-directory: apps/mobile env: - EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} - run: eas env:pull production --non-interactive + EXPO_TOKEN: ${{ secrets.EXPO_PRODUCTION_TOKEN }} + run: | + eas env:pull production --non-interactive + # EAS commands skip dotenv, and the Android fingerprint hashes this + # file. Without it every merge misses the build's hash and rebuilds. + node --input-type=module <<'NODE' + import { appendFileSync, readFileSync } from "node:fs"; + import { parseEnv } from "node:util"; + const env = parseEnv(readFileSync(".env.local", "utf8")); + const googleServicesFile = env.T3CODE_ANDROID_GOOGLE_SERVICES_FILE; + if (!googleServicesFile) { + throw new Error("T3CODE_ANDROID_GOOGLE_SERVICES_FILE is missing from the production environment"); + } + appendFileSync(process.env.GITHUB_ENV, `T3CODE_ANDROID_GOOGLE_SERVICES_FILE=${googleServicesFile}\n`); + NODE - name: Apply manual version override if: steps.version_app_token.outcome == 'success' @@ -202,7 +215,7 @@ jobs: git config user.name "${APP_SLUG}[bot]" git config user.email "${user_id}+${APP_SLUG}[bot]@users.noreply.github.com" git add apps/mobile/app.config.ts - git commit \ + git commit --no-verify \ -m "chore(mobile): bump app version to $RELEASE_VERSION" \ -m "Co-authored-by: codex " git push origin "HEAD:refs/heads/${GITHUB_REF_NAME}" @@ -231,7 +244,7 @@ jobs: if: steps.expo-token.outputs.present == 'true' && github.event_name == 'workflow_dispatch' && inputs.mode == 'build' working-directory: apps/mobile env: - EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} + EXPO_TOKEN: ${{ secrets.EXPO_PRODUCTION_TOKEN }} MOBILE_BUILD_PROFILE: ${{ inputs.profile || 'production' }} run: eas build --platform ${{ inputs.platform }} --profile "$MOBILE_BUILD_PROFILE" --auto-submit --non-interactive --no-wait @@ -242,7 +255,7 @@ jobs: if: steps.expo-token.outputs.present == 'true' && (github.event_name == 'push' || inputs.mode == 'update') working-directory: apps/mobile env: - EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} + EXPO_TOKEN: ${{ secrets.EXPO_PRODUCTION_TOKEN }} PLATFORM: ${{ inputs.platform || 'all' }} run: | if [ "$PLATFORM" = "all" ]; then platforms="ios android"; else platforms="$PLATFORM"; fi @@ -262,7 +275,7 @@ jobs: if: steps.expo-token.outputs.present == 'true' && github.event_name == 'workflow_dispatch' && inputs.mode == 'update' working-directory: apps/mobile env: - EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} + EXPO_TOKEN: ${{ secrets.EXPO_PRODUCTION_TOKEN }} MOBILE_BUILD_PROFILE: ${{ inputs.profile || 'production' }} OTA_MESSAGE: ${{ inputs.message || format('Production OTA ({0})', github.sha) }} run: | @@ -275,6 +288,7 @@ jobs: --environment production \ --platform ${{ inputs.platform }} \ --message "$OTA_MESSAGE" \ + --emit-metadata \ --non-interactive # Reconcile each version separately because the major is in the fingerprint. @@ -285,7 +299,7 @@ jobs: if: steps.expo-token.outputs.present == 'true' && github.event_name == 'push' working-directory: apps/mobile env: - EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} + EXPO_TOKEN: ${{ secrets.EXPO_PRODUCTION_TOKEN }} run: | failed=0 message="$(git log -1 --pretty=%s | head -c 120) ($(git rev-parse --short=9 HEAD))" @@ -313,8 +327,11 @@ jobs: --environment production \ --platform "$platform" \ --message "$message" \ + --emit-metadata \ --non-interactive; then echo ":white_check_mark: $platform/$profile: OTA published to production (fingerprint \`$hash\`)" >> "$GITHUB_STEP_SUMMARY" + # The next target's export replaces dist; keep this one for the map upload. + rm -rf "dist-$platform-$profile" && mv dist "dist-$platform-$profile" else failed=1 echo ":x: $platform/$profile: OTA publish failed (fingerprint \`$hash\`)" >> "$GITHUB_STEP_SUMMARY" @@ -354,3 +371,18 @@ jobs: fi done exit "$failed" + + # Lets the relay symbolicate crash stacks from the updates published + # above. A step of its own so the R2 credentials reach only this script, + # not `eas update` and the dependencies it runs. Never fails the job. + - name: Upload OTA source maps + if: ${{ !cancelled() && steps.expo-token.outputs.present == 'true' }} + working-directory: apps/mobile + env: + MOBILE_SOURCEMAPS_R2: ${{ secrets.MOBILE_SOURCEMAPS_R2 }} + run: | + for dir in dist dist-*; do + if [ -f "$dir/eas-update-metadata.json" ]; then + node scripts/upload-sourcemaps.mts ota "$dir" + fi + done diff --git a/.github/workflows/mobile-fingerprint-check.yml b/.github/workflows/mobile-fingerprint-check.yml index 336f3c3739648..5d8ae1528b5bc 100644 --- a/.github/workflows/mobile-fingerprint-check.yml +++ b/.github/workflows/mobile-fingerprint-check.yml @@ -2,7 +2,8 @@ name: Mobile Fingerprint Check # Detects whether a PR changes the native fingerprint — i.e. whether merging # it would leave main un-OTA-able until a new store build ships. Native-change -# PRs get the "📱 Native Change" label so they can be held and merged as a +# PRs get the "📱 Native Change" label (applied by mobile-fingerprint-label.yml, +# which runs from main so fork PRs get it too) so they can be held and merged as a # batch right before the next store submission, keeping main OTA-able for # everything else in between. (Once one native PR merges, every later merge # inherits the drifted fingerprint and loses OTA reach too — that is why the @@ -27,8 +28,6 @@ jobs: runs-on: ${{ github.repository == 'pingdotgg/t3code' && 'blacksmith-8vcpu-ubuntu-2404' || 'ubuntu-24.04' }} permissions: contents: read - issues: write - pull-requests: write env: APP_VARIANT: production NODE_OPTIONS: --max-old-space-size=8192 @@ -127,94 +126,19 @@ jobs: } >> "$GITHUB_STEP_SUMMARY" echo "changed_platforms=${changed# }" >> "$GITHUB_OUTPUT" - - name: Sync native change label - # Fork PRs get a read-only token under pull_request; the check stays - # advisory there (summary only). This workflow must not move to - # pull_request_target — it installs and runs PR code. - if: github.event.pull_request.head.repo.full_name == github.repository - uses: actions/github-script@v8 + # mobile-fingerprint-label.yml reads this from main with a write token + # and syncs the label; this job's token is read-only for fork PRs. + - name: Record changed platforms env: CHANGED_PLATFORMS: ${{ steps.compare.outputs.changed_platforms }} - with: - script: | - const managedLabel = { - name: "📱 Native Change", - color: "d93f0b", - description: - "Changes the native fingerprint; merging blocks production OTAs until a new store build ships.", - }; - const nativeChanged = (process.env.CHANGED_PLATFORMS ?? "").trim() !== ""; - const issueNumber = context.payload.pull_request.number; - - try { - const { data: existing } = await github.rest.issues.getLabel({ - owner: context.repo.owner, - repo: context.repo.repo, - name: managedLabel.name, - }); - - if ( - existing.color !== managedLabel.color || - (existing.description ?? "") !== managedLabel.description - ) { - await github.rest.issues.updateLabel({ - owner: context.repo.owner, - repo: context.repo.repo, - name: managedLabel.name, - color: managedLabel.color, - description: managedLabel.description, - }); - } - } catch (error) { - if (error.status !== 404) { - throw error; - } - - try { - await github.rest.issues.createLabel({ - owner: context.repo.owner, - repo: context.repo.repo, - name: managedLabel.name, - color: managedLabel.color, - description: managedLabel.description, - }); - } catch (createError) { - if (createError.status !== 422) { - throw createError; - } - } - } - - const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: issueNumber, - per_page: 100, - }); - const hasLabel = currentLabels.some((label) => label.name === managedLabel.name); - - if (nativeChanged && !hasLabel) { - await github.rest.issues.addLabels({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: issueNumber, - labels: [managedLabel.name], - }); - } else if (!nativeChanged && hasLabel) { - try { - await github.rest.issues.removeLabel({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: issueNumber, - name: managedLabel.name, - }); - } catch (removeError) { - if (removeError.status !== 404) { - throw removeError; - } - } - } + run: | + mkdir -p "$RUNNER_TEMP/fingerprint-result" + printf '%s\n' "$CHANGED_PLATFORMS" > "$RUNNER_TEMP/fingerprint-result/changed-platforms" - core.info( - `PR #${issueNumber}: native fingerprint ${nativeChanged ? `changed (${process.env.CHANGED_PLATFORMS})` : "unchanged"}`, - ); + - name: Upload changed platforms + uses: actions/upload-artifact@v7 + with: + name: fingerprint-result + path: ${{ runner.temp }}/fingerprint-result + if-no-files-found: error + retention-days: 1 diff --git a/.github/workflows/mobile-fingerprint-label.yml b/.github/workflows/mobile-fingerprint-label.yml new file mode 100644 index 0000000000000..45e4c9f2ad42d --- /dev/null +++ b/.github/workflows/mobile-fingerprint-label.yml @@ -0,0 +1,189 @@ +name: Mobile Fingerprint Label + +# Trusted half of mobile-fingerprint-check.yml. That workflow runs PR code +# (fork PRs included) with a read-only token and records which platforms' +# fingerprints changed. This one runs from main with a write token and syncs +# the "📱 Native Change" label. It never checks out or runs PR code. +# +# A PR can edit the check workflow it runs under, so the recorded result is +# untrusted data: it is validated, and at worst a PR mislabels itself. + +on: + workflow_run: + workflows: [Mobile Fingerprint Check] + types: [completed] + +permissions: + contents: read + +jobs: + label: + name: Sync native change label + # A cancelled run was superseded by a newer push, whose run labels instead. + if: >- + github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.conclusion == 'success' + runs-on: ubuntu-24.04 + timeout-minutes: 5 + permissions: + actions: read + contents: read + issues: write + pull-requests: write + steps: + - id: pr + name: Resolve the pull request behind the check + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + with: + script: | + const run = context.payload.workflow_run; + const { owner, repo } = context.repo; + + const artifacts = await github.paginate(github.rest.actions.listWorkflowRunArtifacts, { + owner, + repo, + run_id: run.id, + per_page: 100, + }); + const results = artifacts.filter( + (artifact) => artifact.name === "fingerprint-result" && !artifact.expired, + ); + if (results.length !== 1) { + core.info(`Expected one fingerprint-result artifact; found ${results.length}. Skipping.`); + return; + } + + // workflow_run.pull_requests and the commit-to-PR lookup are both + // empty for fork PRs, so list open PRs by head owner and branch. + // Requiring the PR's current head to be the checked commit keeps a + // slow run for an older push from overwriting a newer result. + const open = await github.paginate(github.rest.pulls.list, { + owner, + repo, + state: "open", + head: `${run.head_repository?.owner?.login}:${run.head_branch}`, + per_page: 100, + }); + const matching = open.filter( + (candidate) => + candidate.state === "open" && + candidate.head.sha === run.head_sha && + candidate.head.ref === run.head_branch && + candidate.head.repo?.full_name === run.head_repository?.full_name, + ); + if (matching.length !== 1) { + core.info(`Expected one open PR at ${run.head_sha}; found ${matching.length}. Skipping.`); + return; + } + + core.setOutput("artifact_id", String(results[0].id)); + core.setOutput("pr_number", String(matching[0].number)); + + # Read the archive as bytes; never extract PR-produced files into a + # workspace this job runs code from. + - id: result + name: Read changed platforms + if: steps.pr.outputs.pr_number != '' + shell: bash + env: + GH_TOKEN: ${{ github.token }} + ARTIFACT_ID: ${{ steps.pr.outputs.artifact_id }} + run: | + set -euo pipefail + gh api "repos/${GITHUB_REPOSITORY}/actions/artifacts/${ARTIFACT_ID}/zip" > "$RUNNER_TEMP/fingerprint-result.zip" + changed="$(unzip -p "$RUNNER_TEMP/fingerprint-result.zip" changed-platforms)" + if [[ ! "$changed" =~ ^((ios|android)( (ios|android))?)?$ ]]; then + echo "Unexpected changed-platforms value '$changed'." >&2 + exit 1 + fi + echo "changed_platforms=$changed" >> "$GITHUB_OUTPUT" + + - name: Sync native change label + if: steps.pr.outputs.pr_number != '' + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + PR_NUMBER: ${{ steps.pr.outputs.pr_number }} + CHANGED_PLATFORMS: ${{ steps.result.outputs.changed_platforms }} + with: + script: | + const managedLabel = { + name: "📱 Native Change", + color: "d93f0b", + description: + "Changes the native fingerprint; merging blocks production OTAs until a new store build ships.", + }; + const nativeChanged = (process.env.CHANGED_PLATFORMS ?? "").trim() !== ""; + const issueNumber = Number(process.env.PR_NUMBER); + + try { + const { data: existing } = await github.rest.issues.getLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + name: managedLabel.name, + }); + + if ( + existing.color !== managedLabel.color || + (existing.description ?? "") !== managedLabel.description + ) { + await github.rest.issues.updateLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + name: managedLabel.name, + color: managedLabel.color, + description: managedLabel.description, + }); + } + } catch (error) { + if (error.status !== 404) { + throw error; + } + + try { + await github.rest.issues.createLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + name: managedLabel.name, + color: managedLabel.color, + description: managedLabel.description, + }); + } catch (createError) { + if (createError.status !== 422) { + throw createError; + } + } + } + + const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + per_page: 100, + }); + const hasLabel = currentLabels.some((label) => label.name === managedLabel.name); + + if (nativeChanged && !hasLabel) { + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + labels: [managedLabel.name], + }); + } else if (!nativeChanged && hasLabel) { + try { + await github.rest.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + name: managedLabel.name, + }); + } catch (removeError) { + if (removeError.status !== 404) { + throw removeError; + } + } + } + + core.info( + `PR #${issueNumber}: native fingerprint ${nativeChanged ? `changed (${process.env.CHANGED_PLATFORMS})` : "unchanged"}`, + ); diff --git a/.github/workflows/mobile-showcase-screenshots.yml b/.github/workflows/mobile-showcase-screenshots.yml index fc75c447c6db7..c02be425c1ab7 100644 --- a/.github/workflows/mobile-showcase-screenshots.yml +++ b/.github/workflows/mobile-showcase-screenshots.yml @@ -43,7 +43,7 @@ env: jobs: ios: - name: iPhone 6.9, iPhone 6.5, and iPad 13 + name: iPhone, iPhone Duo, and iPad 13 if: inputs.platform == 'all' || inputs.platform == 'ios' runs-on: blacksmith-12vcpu-macos-26 # Capturing every palette multiplies the device matrix by six, and only the @@ -87,6 +87,9 @@ jobs: brew install cameroncooke/axe/axe axe --version + - name: Install foldable simulator controls + run: npm install --global agent-device@0.21.25 + - name: Capture iOS showcase run: pnpm screenshots:mobile --platform ios --appearance "${{ inputs.appearance }}" --theme "${{ inputs.theme }}" diff --git a/.github/workflows/relay-preview-cleanup.yml b/.github/workflows/relay-preview-cleanup.yml new file mode 100644 index 0000000000000..eed067adfd773 --- /dev/null +++ b/.github/workflows/relay-preview-cleanup.yml @@ -0,0 +1,203 @@ +name: Clean up relay preview + +# Tears down stage `pr-` when `relay:preview` is removed or the PR closes, +# and retries teardown for closed labeled PRs on a schedule. A label stays on a +# PR only while its teardown is outstanding, so the scheduled retry lists +# exactly the failures. +# +# This runs under pull_request_target, so the workflow and the Alchemy program +# come from the default branch. No PR code runs here, which is why it needs no +# reviewer approval and why a PR cannot edit its own teardown to reach secrets. +on: + pull_request_target: + types: [unlabeled, closed] + schedule: + - cron: "17 7 * * *" + workflow_dispatch: + +permissions: + contents: read + issues: read + pull-requests: read + +jobs: + cleanup_pr: + name: Tear down relay preview + if: >- + github.ref == 'refs/heads/main' && + github.event_name == 'pull_request_target' && + ( + (github.event.action == 'unlabeled' && github.event.label.name == 'relay:preview') || + (github.event.action == 'closed' && contains(github.event.pull_request.labels.*.name, 'relay:preview')) + ) + # Job-level so that events which skip this job, such as a closed PR without + # the label, never take the group's pending slot. GitHub replaces a pending + # run in a group with a newer one, which would drop a queued teardown. + concurrency: + group: relay-preview-${{ github.event.pull_request.number }} + cancel-in-progress: false + permissions: + contents: read + issues: write + pull-requests: write + runs-on: blacksmith-8vcpu-ubuntu-2404 + timeout-minutes: 30 + environment: + name: relay-preview-cleanup + env: + GH_TOKEN: ${{ github.token }} + STAGE: pr-${{ github.event.pull_request.number }} + CLOUDFLARE_ACCOUNT_ID: ${{ vars.CLOUDFLARE_ACCOUNT_ID }} + PLANETSCALE_ORGANIZATION: ${{ vars.PLANETSCALE_ORGANIZATION }} + AXIOM_ORG_ID: ${{ vars.AXIOM_ORG_ID }} + RELAY_API_ZONE_NAME: ${{ vars.RELAY_API_ZONE_NAME }} + RELAY_TUNNEL_ZONE_NAME: ${{ vars.RELAY_TUNNEL_ZONE_NAME }} + CLERK_PUBLISHABLE_KEY: ${{ vars.CLERK_PUBLISHABLE_KEY }} + CLERK_JWT_AUDIENCE: ${{ vars.CLERK_JWT_AUDIENCE }} + APNS_ENABLED: "false" + ALCHEMY_TELEMETRY_DISABLED: "1" + steps: + - name: Checkout default branch + uses: actions/checkout@v6 + with: + ref: ${{ github.event.repository.default_branch }} + sparse-checkout: | + /* + !/.repos/ + sparse-checkout-cone-mode: false + + - name: Setup Vite+ + uses: voidzero-dev/setup-vp@v1 + with: + node-version-file: package.json + cache: true + run-install: | + args: + - --filter=t3code-relay... + + # Destroy also runs the preview tunnel sweep, which is part of the stack. + - name: Destroy preview stage + run: vp run --filter t3code-relay destroy --stage "$STAGE" --yes --no-input + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + PLANETSCALE_API_TOKEN_ID: ${{ secrets.PLANETSCALE_API_TOKEN_ID }} + PLANETSCALE_API_TOKEN: ${{ secrets.PLANETSCALE_API_TOKEN }} + AXIOM_TOKEN: ${{ secrets.AXIOM_TOKEN }} + CLERK_SECRET_KEY: ${{ secrets.CLERK_SECRET_KEY }} + + # Only reached after a successful destroy. A failed one keeps the label, + # so the scheduled retry picks the PR up again. + - name: Clear the teardown marker + if: github.event.action == 'closed' + run: gh pr edit "${{ github.event.pull_request.number }}" --repo "$GITHUB_REPOSITORY" --remove-label relay:preview + + # An unlabeled event has already removed the label, so a failed teardown + # must put it back or no retry will ever see the stage. Labels added with + # GITHUB_TOKEN do not start new runs, so this does not redeploy. + - name: Restore the teardown marker after a failed destroy + if: failure() && github.event.action == 'unlabeled' + run: gh pr edit "${{ github.event.pull_request.number }}" --repo "$GITHUB_REPOSITORY" --add-label relay:preview + + list_closed_previews: + name: List closed relay previews + if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request_target' + runs-on: blacksmith-8vcpu-ubuntu-2404 + timeout-minutes: 10 + outputs: + numbers: ${{ steps.list.outputs.numbers }} + steps: + # The issues endpoint is paginated by gh, so there is no listing cap. Pull + # requests appear there with a `pull_request` key. + - name: List closed PRs labeled relay:preview + id: list + env: + GH_TOKEN: ${{ github.token }} + run: | + numbers=$(gh api --paginate --method GET "repos/$GITHUB_REPOSITORY/issues" \ + -f labels=relay:preview -f state=closed -f per_page=100 \ + --jq '.[] | select(.pull_request) | .number') \ + || { echo "Could not list closed relay:preview PRs" >&2; exit 1; } + json=$(printf '%s\n' "$numbers" | jq -Rsc 'split("\n") | map(select(length > 0) | tonumber)') + echo "Closed relay:preview PRs: $json" + echo "numbers=$json" >> "$GITHUB_OUTPUT" + + sweep_pr: + name: Retry teardown for PR ${{ matrix.number }} + needs: list_closed_previews + if: github.ref == 'refs/heads/main' && needs.list_closed_previews.outputs.numbers != '[]' + runs-on: blacksmith-8vcpu-ubuntu-2404 + timeout-minutes: 30 + strategy: + fail-fast: false + max-parallel: 4 + matrix: + number: ${{ fromJSON(needs.list_closed_previews.outputs.numbers) }} + # Same group as the deploy and teardown for this PR, so a reopened PR's + # deploy cannot run concurrently with a teardown of its previous stage. + concurrency: + group: relay-preview-${{ matrix.number }} + cancel-in-progress: false + permissions: + contents: read + issues: write + pull-requests: write + environment: + name: relay-preview-cleanup + env: + GH_TOKEN: ${{ github.token }} + STAGE: pr-${{ matrix.number }} + CLOUDFLARE_ACCOUNT_ID: ${{ vars.CLOUDFLARE_ACCOUNT_ID }} + PLANETSCALE_ORGANIZATION: ${{ vars.PLANETSCALE_ORGANIZATION }} + AXIOM_ORG_ID: ${{ vars.AXIOM_ORG_ID }} + RELAY_API_ZONE_NAME: ${{ vars.RELAY_API_ZONE_NAME }} + RELAY_TUNNEL_ZONE_NAME: ${{ vars.RELAY_TUNNEL_ZONE_NAME }} + CLERK_PUBLISHABLE_KEY: ${{ vars.CLERK_PUBLISHABLE_KEY }} + CLERK_JWT_AUDIENCE: ${{ vars.CLERK_JWT_AUDIENCE }} + APNS_ENABLED: "false" + ALCHEMY_TELEMETRY_DISABLED: "1" + steps: + # The lock above is taken before this runs, so the state read here is + # current. An open PR, including one reopened since the listing, is left + # alone. GitHub reports merged PRs as MERGED, so anything not OPEN counts. + - name: Confirm the PR is not open + id: eligible + run: | + state=$(gh pr view "${{ matrix.number }}" --repo "$GITHUB_REPOSITORY" \ + --json state --jq 'if .state == "OPEN" then "no" else "yes" end') \ + || { echo "Could not read PR ${{ matrix.number }}" >&2; exit 1; } + echo "eligible=$state" >> "$GITHUB_OUTPUT" + [ "$state" = yes ] || echo "PR ${{ matrix.number }} is open again; leaving $STAGE alone." + + - name: Checkout default branch + if: steps.eligible.outputs.eligible == 'yes' + uses: actions/checkout@v6 + with: + ref: ${{ github.event.repository.default_branch }} + sparse-checkout: | + /* + !/.repos/ + sparse-checkout-cone-mode: false + + - name: Setup Vite+ + if: steps.eligible.outputs.eligible == 'yes' + uses: voidzero-dev/setup-vp@v1 + with: + node-version-file: package.json + cache: true + run-install: | + args: + - --filter=t3code-relay... + + - name: Destroy preview stage + if: steps.eligible.outputs.eligible == 'yes' + run: vp run --filter t3code-relay destroy --stage "$STAGE" --yes --no-input + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + PLANETSCALE_API_TOKEN_ID: ${{ secrets.PLANETSCALE_API_TOKEN_ID }} + PLANETSCALE_API_TOKEN: ${{ secrets.PLANETSCALE_API_TOKEN }} + AXIOM_TOKEN: ${{ secrets.AXIOM_TOKEN }} + CLERK_SECRET_KEY: ${{ secrets.CLERK_SECRET_KEY }} + + - name: Clear the teardown marker + if: steps.eligible.outputs.eligible == 'yes' + run: gh pr edit "${{ matrix.number }}" --repo "$GITHUB_REPOSITORY" --remove-label relay:preview diff --git a/.github/workflows/relay-preview.yml b/.github/workflows/relay-preview.yml new file mode 100644 index 0000000000000..fdce22c68a59e --- /dev/null +++ b/.github/workflows/relay-preview.yml @@ -0,0 +1,83 @@ +name: Deploy relay preview + +# Labeling a same-repository PR `relay:preview` deploys Alchemy stage `pr-`. +# This job runs the PR's own code with account credentials, so it waits for an +# approval in the `relay-preview` environment on every run. Teardown is in +# relay-preview-cleanup.yml and never runs PR code. +on: + pull_request: + types: [labeled, synchronize, reopened] + +permissions: + contents: read + pull-requests: read + +concurrency: + group: relay-preview-${{ github.event.pull_request.number }} + cancel-in-progress: false + +jobs: + deploy_preview: + name: Deploy relay preview + if: >- + github.event.pull_request.head.repo.full_name == github.repository && + contains(github.event.pull_request.labels.*.name, 'relay:preview') + runs-on: blacksmith-8vcpu-ubuntu-2404 + timeout-minutes: 20 + environment: + name: relay-preview + env: + STAGE: pr-${{ github.event.pull_request.number }} + CLOUDFLARE_ACCOUNT_ID: ${{ vars.CLOUDFLARE_ACCOUNT_ID }} + PLANETSCALE_ORGANIZATION: ${{ vars.PLANETSCALE_ORGANIZATION }} + AXIOM_ORG_ID: ${{ vars.AXIOM_ORG_ID }} + RELAY_API_ZONE_NAME: ${{ vars.RELAY_API_ZONE_NAME }} + RELAY_TUNNEL_ZONE_NAME: ${{ vars.RELAY_TUNNEL_ZONE_NAME }} + CLERK_PUBLISHABLE_KEY: ${{ vars.CLERK_PUBLISHABLE_KEY }} + CLERK_JWT_AUDIENCE: ${{ vars.CLERK_JWT_AUDIENCE }} + # Previews take no alert notifier, no tunnel cleanup, and no custom + # domain, so they stay silent and reap nothing outside their own stage. + APNS_ENABLED: "false" + ALCHEMY_TELEMETRY_DISABLED: "1" + steps: + - name: Confirm the PR is still open and labeled + env: + GH_TOKEN: ${{ github.token }} + PR_NUMBER: ${{ github.event.pull_request.number }} + run: | + state=$(gh pr view "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --json state,labels \ + --jq 'if .state == "OPEN" and any(.labels[]; .name == "relay:preview") then "ok" else "stale" end') + if [ "$state" != "ok" ]; then + echo "PR #$PR_NUMBER is no longer open with relay:preview; not deploying." >&2 + exit 1 + fi + + - name: Checkout + uses: actions/checkout@v6 + with: + ref: ${{ github.event.pull_request.head.sha }} + sparse-checkout: | + /* + !/.repos/ + sparse-checkout-cone-mode: false + + - name: Setup Vite+ + uses: voidzero-dev/setup-vp@v1 + with: + node-version-file: package.json + cache: true + run-install: | + args: + - --filter=t3code-relay... + + - name: Deploy preview stage + run: vp run --filter t3code-relay deploy --stage "$STAGE" --yes --no-input + env: + T3CODE_RELAY_CLIENT_CONFIG_ENV: ${{ runner.temp }}/relay-client-config.env + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + PLANETSCALE_API_TOKEN_ID: ${{ secrets.PLANETSCALE_API_TOKEN_ID }} + PLANETSCALE_API_TOKEN: ${{ secrets.PLANETSCALE_API_TOKEN }} + AXIOM_TOKEN: ${{ secrets.AXIOM_TOKEN }} + CLERK_SECRET_KEY: ${{ secrets.CLERK_SECRET_KEY }} + # Unset by default, so previews keep the T3 Chat link off. + T3CHAT_LINK_SECRET: ${{ secrets.T3CHAT_LINK_SECRET }} diff --git a/.github/workflows/release-desktop.yml b/.github/workflows/release-desktop.yml index fbe4515317fc2..0154b18c641e6 100644 --- a/.github/workflows/release-desktop.yml +++ b/.github/workflows/release-desktop.yml @@ -68,6 +68,12 @@ on: required: false default: false type: boolean + # Whether the job opens the packaged app against a seeded database and + # opens a thread before uploading it. Linux AppImage or macOS DMG. + launch_check: + required: false + default: false + type: boolean # A runner of the target's own platform and architecture, for a `runner` # that cannot execute the target. The build job skips everything that # runs the packaged binaries, and a second job runs it there. @@ -145,13 +151,6 @@ jobs: git sparse-checkout set --no-cone '/*' '!/.repos/' git -c checkout.workers=0 checkout --detach FETCH_HEAD - - name: Setup Vite+ - uses: voidzero-dev/setup-vp@250f29ce396baf5e8f24498e17c0dfdebabc26eb # v1 - with: - node-version-file: package.json - cache: true - run-install: false - # pnpm checks the lockfile and policy before reusing this result. A missing # artifact leaves the cache empty, so installation runs the checks again. - name: Download dependency verification @@ -161,10 +160,35 @@ jobs: name: release-dependency-verification path: ${{ runner.temp }}/pnpm-metadata - - name: Install desktop dependencies + - name: Setup dependencies + uses: ./.github/actions/setup-ci-deps + with: + install-args: --filter=@t3tools/desktop... --filter=t3... --filter=@t3tools/scripts... env: pnpm_config_cache_dir: ${{ runner.temp }}/pnpm-metadata - run: vp install --filter=@t3tools/desktop... --filter=t3... --filter=@t3tools/scripts... + + # The CLI archive and the staged app install without a lockfile, so they + # ask the registry about every package and fetch platform packages the + # workspace store lacks. They share this registry metadata and store. A + # new week starts cold, which bounds how stale cached ranges can get. + - name: Resolve staged install cache + id: stage_pnpm + shell: bash + run: | + echo "dir=$RUNNER_TEMP/desktop-stage-pnpm" >> "$GITHUB_OUTPUT" + echo "prefix=desktop-stage-pnpm-v2-${{ inputs.platform }}-${{ inputs.arch }}-$(date -u +%G-%V)-" >> "$GITHUB_OUTPUT" + + - name: Restore staged install cache + id: stage_pnpm_cache + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 + with: + path: ${{ steps.stage_pnpm.outputs.dir }} + key: ${{ steps.stage_pnpm.outputs.prefix }}${{ github.run_id }}-${{ github.run_attempt }} + restore-keys: ${{ steps.stage_pnpm.outputs.prefix }} + + - name: Mark staged install cache + shell: bash + run: mkdir -p "${{ steps.stage_pnpm.outputs.dir }}" && touch "$RUNNER_TEMP/desktop-stage-pnpm.marker" - name: Cache resource monitor id: resource_monitor_cache @@ -257,6 +281,63 @@ jobs: if [[ "${{ inputs.version }}" =~ -nightly\.[0-9]{8}\.[0-9]+$ ]]; then brand=nightly; fi node scripts/apply-web-brand-assets.ts "$brand" apps/server/dist/client + - name: Resolve target Node.js for the CLI executable + id: target_node + if: inputs.cli_archive && inputs.platform == 'win' + shell: bash + run: echo "version=$(node -p 'require("./package.json").engines.node')" >> "$GITHUB_OUTPUT" + + # The download only changes with engines.node, so a cached copy keeps + # releases off nodejs.org, which stalls on the runners some days. + - name: Restore target Node.js for the CLI executable + id: target_node_cache + if: inputs.cli_archive && inputs.platform == 'win' + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 + with: + path: ${{ runner.temp }}/node-download + key: node-download-v${{ steps.target_node.outputs.version }}-win-${{ inputs.arch }} + + # tsdown downloads the target Node with one fetch and no retry, and + # nodejs.org drops that download often enough to fail releases. Seed + # tsdown's cache with a retried, checksum-verified copy instead. A transfer + # under 100 KB/s for 30s counts as failed, so a stall retries. + - name: Download target Node.js for the CLI executable + if: inputs.cli_archive && inputs.platform == 'win' && steps.target_node_cache.outputs.cache-hit != 'true' + shell: bash + env: + VERSION: ${{ steps.target_node.outputs.version }} + run: | + set -euo pipefail + name="node-v$VERSION-win-${{ inputs.arch }}" + dir="$RUNNER_TEMP/node-download" + mkdir -p "$dir" + fetch=(curl -fsSL --retry 5 --retry-all-errors --connect-timeout 10 --speed-limit 102400 --speed-time 30) + "${fetch[@]}" -o "$dir/$name.zip" "https://nodejs.org/dist/v$VERSION/$name.zip" + "${fetch[@]}" -o "$dir/SHASUMS256.txt" "https://nodejs.org/dist/v$VERSION/SHASUMS256.txt" + (cd "$dir" && grep " $name.zip\$" SHASUMS256.txt | sha256sum -c -) + + # Saved right away so a later failure in this job still keeps the download. + - name: Save target Node.js for the CLI executable + if: inputs.cli_archive && inputs.platform == 'win' && steps.target_node_cache.outputs.cache-hit != 'true' + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 + with: + path: ${{ runner.temp }}/node-download + key: ${{ steps.target_node_cache.outputs.cache-primary-key }} + + - name: Install target Node.js for the CLI executable + if: inputs.cli_archive && inputs.platform == 'win' + shell: bash + env: + VERSION: ${{ steps.target_node.outputs.version }} + run: | + set -euo pipefail + name="node-v$VERSION-win-${{ inputs.arch }}" + dir="$RUNNER_TEMP/node-download" + dest="${XDG_CACHE_HOME:-$HOME/.cache}/tsdown/node/v$VERSION/win-${{ inputs.arch }}" + mkdir -p "$dest" + (cd "$dir" && grep " $name.zip\$" SHASUMS256.txt | sha256sum -c -) + unzip -p "$dir/$name.zip" "$name/node.exe" > "$dest/node.exe" + # Setup Vite+ selects the exact engines.node version from package.json. # Native builds embed that executable; cross-target builds download the # same version for their target. @@ -313,10 +394,22 @@ jobs: mkdir -p "$target_dir" cp "native/resource-monitor/target/${{ inputs.rust_target }}/release/${binary_name}" "$target_dir/$binary_name" + - uses: ./.github/actions/setup-apt-mirrors + if: inputs.platform == 'linux' + + # The Linux archive ships libatomic.so.1 and points t3's RUNPATH at it. + - name: Install patchelf + if: inputs.cli_archive && inputs.platform == 'linux' + shell: bash + run: command -v patchelf || { sudo apt-get update && sudo apt-get install -y patchelf; } + - name: Build CLI archive if: inputs.cli_archive shell: bash env: + pnpm_config_cache_dir: ${{ steps.stage_pnpm.outputs.dir }}/cache + pnpm_config_store_dir: ${{ steps.stage_pnpm.outputs.dir }}/store + pnpm_config_prefer_offline: "true" APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }} APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }} APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }} @@ -353,9 +446,6 @@ jobs: path: release-cli/* if-no-files-found: error - - uses: ./.github/actions/setup-apt-mirrors - if: inputs.platform == 'linux' - - name: Install Linux desktop build libraries if: inputs.platform == 'linux' shell: bash @@ -436,7 +526,10 @@ jobs: - name: Build desktop artifact shell: bash env: - pnpm_config_cache_dir: ${{ runner.temp }}/pnpm-metadata + # pnpm only goes to the registry for packages or versions the cache lacks. + pnpm_config_cache_dir: ${{ steps.stage_pnpm.outputs.dir }}/cache + pnpm_config_store_dir: ${{ steps.stage_pnpm.outputs.dir }}/store + pnpm_config_prefer_offline: "true" T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR: true T3CODE_DESKTOP_REUSE_LINUX_CAPTURE_HELPERS: ${{ steps.capture_helper_cache.outputs.cache-hit == 'true' }} CSC_LINK: ${{ secrets.CSC_LINK }} @@ -521,6 +614,55 @@ jobs: vp run dist:desktop:artifact "${args[@]}" + # Warm installs only touch the store index, so new content means a fetch. + - name: Check staged install cache for new content + id: stage_pnpm_changed + shell: bash + run: | + dir="${{ steps.stage_pnpm.outputs.dir }}" + new=$(find "$dir/cache/v12" "$dir/store/v11/files" -type f -newer "$RUNNER_TEMP/desktop-stage-pnpm.marker" 2>/dev/null | wc -l | tr -d ' ') + echo "Staged installs added $new cached files." + echo "changed=$([[ "$new" -gt 0 ]] && echo true || echo false)" >> "$GITHUB_OUTPUT" + + - name: Save staged install cache + if: steps.stage_pnpm_changed.outputs.changed == 'true' + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 + with: + path: ${{ steps.stage_pnpm.outputs.dir }} + key: ${{ steps.stage_pnpm_cache.outputs.cache-primary-key }} + + # A build can package fine and still not open (a missing module in the + # backend or the bundle). This launches the app from the shipped + # AppImage or DMG. + - name: Launch check + if: inputs.launch_check + shell: bash + run: | + set -euo pipefail + check=(node scripts/smoke-desktop-app.ts --artifacts-dir "$RUNNER_TEMP/desktop-launch-check") + if [[ "${{ inputs.platform }}" == "mac" ]]; then + mount="$RUNNER_TEMP/desktop-launch-dmg" + hdiutil attach -nobrowse -readonly -mountpoint "$mount" "$(ls "$GITHUB_WORKSPACE"/release/*.dmg)" + trap 'hdiutil detach "$mount" -force >/dev/null || true' EXIT + app=$(ls -d "$mount"/*.app) + executable=$(/usr/libexec/PlistBuddy -c "Print :CFBundleExecutable" "$app/Contents/Info.plist") + "${check[@]}" --executable "$app/Contents/MacOS/$executable" + else + sudo apt-get install -y xvfb + appimage=$(ls "$GITHUB_WORKSPACE"/release/*.AppImage) + chmod +x "$appimage" + (cd "$RUNNER_TEMP" && "$appimage" --appimage-extract >/dev/null) + xvfb-run -a "${check[@]}" --executable "$RUNNER_TEMP/squashfs-root/t3code" + fi + + - name: Upload launch check output + if: failure() && inputs.launch_check + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: desktop-launch-check-${{ inputs.platform }}-${{ inputs.arch }} + path: ${{ runner.temp }}/desktop-launch-check + if-no-files-found: ignore + # The verify job runs what this host could not: the packaged natives and # the CLI. Its scripts are bundled so that job needs no install. - name: Stage verification inputs diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6a80220c28a87..c36d51bdadb1a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -131,6 +131,8 @@ jobs: - name: Setup dependencies uses: ./.github/actions/setup-ci-deps + with: + task-cache-read-token: ${{ secrets.T3_TASK_CACHE_READ_TOKEN }} env: pnpm_config_cache_dir: ${{ runner.temp }}/pnpm-metadata @@ -245,6 +247,8 @@ jobs: - name: Setup dependencies uses: ./.github/actions/setup-ci-deps + with: + task-cache-read-token: ${{ secrets.T3_TASK_CACHE_READ_TOKEN }} - name: Ensure Electron runtime is installed run: vp run --filter @t3tools/desktop ensure:electron @@ -275,6 +279,8 @@ jobs: - name: Setup dependencies uses: ./.github/actions/setup-ci-deps + with: + task-cache-read-token: ${{ secrets.T3_TASK_CACHE_READ_TOKEN }} - name: Ensure Electron runtime is installed run: vp run --filter @t3tools/desktop ensure:electron @@ -309,6 +315,8 @@ jobs: - name: Setup dependencies uses: ./.github/actions/setup-ci-deps + with: + task-cache-read-token: ${{ secrets.T3_TASK_CACHE_READ_TOKEN }} - name: Resolve Playwright version id: playwright_version @@ -336,6 +344,12 @@ jobs: - name: Test run: vp run --filter @t3tools/web test + # Browser tests run source modules; this boots the production chunk graph. + - name: Boot the built web client + run: | + vp run --filter @t3tools/web build + node apps/web/scripts/verify-built-boot.ts + # Server test files run one at a time, so more small runners beat fewer big ones. test_server: name: Release server tests ${{ matrix.shard }} @@ -359,6 +373,8 @@ jobs: - name: Setup dependencies uses: ./.github/actions/setup-ci-deps + with: + task-cache-read-token: ${{ secrets.T3_TASK_CACHE_READ_TOKEN }} # No Electron setup here: `t3` (apps/server) has no Electron dependency # and none of its tests touch the runtime. Only the non-server `test` @@ -404,14 +420,10 @@ jobs: !/.repos/ sparse-checkout-cone-mode: false - - name: Setup Vite+ - uses: voidzero-dev/setup-vp@v1 + - name: Setup dependencies + uses: ./.github/actions/setup-ci-deps with: - node-version-file: package.json - cache: true - run-install: | - args: - - --filter=t3code-relay... + install-args: --filter=t3code-relay... # The deployed stack's outputs, read from Alchemy's state store without # planning or applying. Select the backend explicitly to avoid loading @@ -506,13 +518,6 @@ jobs: !/.repos/ sparse-checkout-cone-mode: false - - name: Setup Vite+ - uses: voidzero-dev/setup-vp@v1 - with: - node-version-file: package.json - cache: true - run-install: false - # pnpm checks the lockfile and policy before reusing this result. A missing # artifact leaves the cache empty, so installation runs the checks again. - name: Download dependency verification @@ -522,10 +527,12 @@ jobs: name: release-dependency-verification path: ${{ runner.temp }}/pnpm-metadata - - name: Install bundle dependencies + - name: Setup dependencies + uses: ./.github/actions/setup-ci-deps + with: + install-args: --filter=t3... --filter=@t3tools/web... --filter=@t3tools/desktop... --filter=@t3tools/scripts... env: pnpm_config_cache_dir: ${{ runner.temp }}/pnpm-metadata - run: vp install --filter=t3... --filter=@t3tools/web... --filter=@t3tools/desktop... --filter=@t3tools/scripts... - name: Download relay client tracing config uses: actions/download-artifact@v8 @@ -603,6 +610,7 @@ jobs: rust_target: aarch64-apple-darwin resource_key: darwin-arm64 cli_archive: true + launch_check: true desktop_mac_x64: name: Desktop macOS x64 @@ -652,6 +660,7 @@ jobs: rust_target: x86_64-unknown-linux-gnu resource_key: linux-x64 cli_archive: true + launch_check: true # node-pty has no Linux prebuild and compiles from source, so the arm64 app # and archive are built on arm64 hardware rather than cross-built. @@ -753,24 +762,25 @@ jobs: timeout-minutes: 30 permissions: contents: write + # Release notes read PR bodies and authors. + pull-requests: read steps: - name: Checkout uses: actions/checkout@v6 with: ref: ${{ needs.preflight.outputs.ref }} + # Release notes need history back to the previous tag, not file contents. + fetch-depth: 0 + filter: blob:none sparse-checkout: | /* !/.repos/ sparse-checkout-cone-mode: false - - name: Setup Vite+ - uses: voidzero-dev/setup-vp@v1 + - name: Setup dependencies + uses: ./.github/actions/setup-ci-deps with: - node-version-file: package.json - cache: true - run-install: | - args: - - --filter=@t3tools/scripts... + install-args: --filter=@t3tools/scripts... - name: Download all desktop artifacts uses: actions/download-artifact@v8 @@ -887,6 +897,27 @@ jobs: echo 'EOF' } >> "$GITHUB_OUTPUT" + # A short model summary over GitHub's full list. Without a notes file, the + # release falls back to GitHub's generated notes. + - name: Write release notes + if: needs.preflight.outputs.release_channel != 'preview' && needs.preflight.outputs.previous_tag != '' + continue-on-error: true + timeout-minutes: 5 + env: + GH_TOKEN: ${{ github.token }} + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + run: | + node scripts/generate-release-notes.ts \ + --repository "${{ github.repository }}" \ + --tag "${{ needs.preflight.outputs.tag }}" \ + --ref "${{ needs.preflight.outputs.ref }}" \ + --previous-tag "${{ needs.preflight.outputs.previous_tag }}" \ + --version "${{ needs.preflight.outputs.version }}" \ + --output release-notes.md + if [[ -f release-notes.md ]]; then + cat release-notes.md >> "$GITHUB_STEP_SUMMARY" + fi + # A preview release gets a warning instead of generated notes. Generated # notes would list every commit since the previous preview, which is # unmerged branch history no one should read as a changelog, and would @@ -912,10 +943,11 @@ jobs: tag_name: ${{ needs.preflight.outputs.tag }} target_commitish: ${{ needs.preflight.outputs.ref }} name: ${{ needs.preflight.outputs.release_name }} - generate_release_notes: ${{ needs.preflight.outputs.release_channel != 'preview' }} - body_path: ${{ needs.preflight.outputs.release_channel == 'preview' && 'release-notes.md' || '' }} + generate_release_notes: ${{ hashFiles('release-notes.md') == '' }} + body_path: ${{ hashFiles('release-notes.md') != '' && 'release-notes.md' || '' }} previous_tag: ${{ needs.preflight.outputs.previous_tag }} prerelease: ${{ needs.preflight.outputs.is_prerelease }} + draft: ${{ needs.preflight.outputs.is_prerelease }} make_latest: ${{ needs.preflight.outputs.make_latest }} files: ${{ steps.release_files.outputs.files }} fail_on_unmatched_files: true @@ -931,11 +963,23 @@ jobs: generate_release_notes: ${{ needs.preflight.outputs.release_channel != 'preview' }} body_path: ${{ needs.preflight.outputs.release_channel == 'preview' && 'release-notes.md' || '' }} prerelease: ${{ needs.preflight.outputs.is_prerelease }} + draft: ${{ needs.preflight.outputs.is_prerelease }} make_latest: ${{ needs.preflight.outputs.make_latest }} files: ${{ steps.release_files.outputs.files }} fail_on_unmatched_files: true token: ${{ github.token }} + # The action keeps a stable release a draft until its assets finish uploading, but publishes a + # prerelease first. Desktop clients update connected servers from the CLI archives as soon as + # they see the release, so a prerelease also goes public only once every asset is attached. + - name: Publish prerelease + if: needs.preflight.outputs.is_prerelease == 'true' + env: + GH_TOKEN: ${{ github.token }} + GH_REPO: ${{ github.repository }} + RELEASE_TAG: ${{ needs.preflight.outputs.tag }} + run: gh release edit "$RELEASE_TAG" --draft=false + # The `t3` npm package is a launcher that downloads this version's CLI # archive from the GitHub Release, so it publishes only once that release # exists. Preview publishes too, under the `preview` dist-tag, which @@ -959,15 +1003,10 @@ jobs: !/.repos/ sparse-checkout-cone-mode: false - - name: Setup Vite+ - uses: voidzero-dev/setup-vp@v1 + - name: Setup dependencies + uses: ./.github/actions/setup-ci-deps with: - node-version-file: package.json - cache: true - run-install: | - args: - - --filter=t3... - - --filter=@t3tools/scripts... + install-args: --filter=t3... --filter=@t3tools/scripts... - name: Build the npm launcher run: node scripts/build-npm-launcher.ts --version "${{ needs.preflight.outputs.version }}" --output-dir npm-packages @@ -1023,15 +1062,10 @@ jobs: !/.repos/ sparse-checkout-cone-mode: false - - name: Setup Vite+ - uses: voidzero-dev/setup-vp@v1 + - name: Setup dependencies + uses: ./.github/actions/setup-ci-deps with: - node-version-file: package.json - cache: true - run-install: | - args: - - --filter=@t3tools/scripts... - - --filter=@t3tools/web... + install-args: --filter=@t3tools/scripts... --filter=@t3tools/web... - name: Download relay client tracing config uses: actions/download-artifact@v8 @@ -1127,11 +1161,9 @@ jobs: sparse-checkout-cone-mode: false - name: Setup Vite+ - uses: voidzero-dev/setup-vp@v1 + uses: ./.github/actions/setup-ci-deps with: - node-version-file: package.json - cache: false - run-install: false + install: false - name: Alias channel shell: bash @@ -1198,14 +1230,10 @@ jobs: !/.repos/ sparse-checkout-cone-mode: false - - name: Setup Vite+ - uses: voidzero-dev/setup-vp@v1 + - name: Setup dependencies + uses: ./.github/actions/setup-ci-deps with: - node-version-file: package.json - cache: true - run-install: | - args: - - --filter=@t3tools/marketing... + install-args: --filter=@t3tools/marketing... - id: deploy name: Build staged deployment @@ -1269,11 +1297,9 @@ jobs: sparse-checkout-cone-mode: false - name: Setup Vite+ - uses: voidzero-dev/setup-vp@v1 + uses: ./.github/actions/setup-ci-deps with: - node-version-file: package.json - cache: false - run-install: false + install: false - name: Promote marketing site shell: bash @@ -1328,15 +1354,10 @@ jobs: echo "name=${APP_SLUG}[bot]" >> "$GITHUB_OUTPUT" echo "email=${user_id}+${APP_SLUG}[bot]@users.noreply.github.com" >> "$GITHUB_OUTPUT" - - name: Setup Vite+ - uses: voidzero-dev/setup-vp@v1 + - name: Setup dependencies + uses: ./.github/actions/setup-ci-deps with: - node-version-file: package.json - cache: true - run-install: | - args: - - --filter=@t3tools/scripts... - - --filter=@t3tools/oxlint-plugin-t3code... + install-args: --filter=@t3tools/scripts... --filter=@t3tools/oxlint-plugin-t3code... - id: update_versions name: Update version strings @@ -1367,7 +1388,7 @@ jobs: git config user.email "${{ steps.app_bot.outputs.email }}" git add apps/server/package.json apps/desktop/package.json apps/web/package.json packages/contracts/package.json pnpm-lock.yaml - git commit -m "chore(release): prepare $RELEASE_TAG" + git commit --no-verify -m "chore(release): prepare $RELEASE_TAG" git push origin HEAD:main announce_discord: @@ -1393,14 +1414,10 @@ jobs: !/.repos/ sparse-checkout-cone-mode: false - - name: Setup Vite+ - uses: voidzero-dev/setup-vp@v1 + - name: Setup dependencies + uses: ./.github/actions/setup-ci-deps with: - node-version-file: package.json - cache: true - run-install: | - args: - - --filter=@t3tools/scripts... + install-args: --filter=@t3tools/scripts... - name: Read published release notes if: needs.preflight.outputs.is_prerelease == 'true' diff --git a/.github/workflows/stale-needs-more-info.yml b/.github/workflows/stale-needs-more-info.yml new file mode 100644 index 0000000000000..b7b475a6117dc --- /dev/null +++ b/.github/workflows/stale-needs-more-info.yml @@ -0,0 +1,30 @@ +name: Close stale "needs more info" issues + +on: + schedule: + - cron: "17 6 * * *" + workflow_dispatch: + +permissions: + actions: write + issues: write + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v9 + with: + only-issue-labels: "needs more info" + # The label is applied by the triage flow, so never auto-mark; close 7 days after it was added. + days-before-issue-stale: -1 + days-before-issue-close: 7 + days-before-pr-stale: -1 + days-before-pr-close: -1 + remove-issue-stale-when-updated: true + stale-issue-label: "needs more info" + close-issue-reason: not_planned + close-issue-message: >- + Closing: no reply in 7 days after we asked for more information. + Comment with the missing details and we will reopen. + operations-per-run: 200 diff --git a/.github/workflows/web-preview.yml b/.github/workflows/web-preview.yml index 3def8478bbdc2..4b3f8952d503d 100644 --- a/.github/workflows/web-preview.yml +++ b/.github/workflows/web-preview.yml @@ -82,7 +82,8 @@ jobs: --archive=tgz \ --yes \ --token "$VERCEL_TOKEN" \ - --scope "$vercel_scope" + --scope "$vercel_scope" \ + --build-env "VITE_RELEASE_CHANNEL=preview" )" printf '%s\n' "$deployment_output" # Vercel can print lockfile warnings to stdout before the deployment URL. diff --git a/.gitignore b/.gitignore index 26b8965ecab8b..b6b793e020ef1 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,8 @@ apps/mobile/.generated/ apps/mobile/.android-cache/ /.generated/ artifacts/app-store/screenshots/ +artifacts/mobile-e2e/ +artifacts/mobile-behavior/ .github/pr-assets/ native/**/target/ node_modules/ diff --git a/.macroscope/check-run-agents/effect-service-conventions.md b/.macroscope/check-run-agents/effect-service-conventions.md index f7cef3929ab10..f005f899595f5 100644 --- a/.macroscope/check-run-agents/effect-service-conventions.md +++ b/.macroscope/check-run-agents/effect-service-conventions.md @@ -1,7 +1,7 @@ --- title: Effect Service Conventions -model: gpt-6-sol -effort: max +model: gpt-6-1-sol +reasoning: low input: incremental tools: - browse_code diff --git a/.macroscope/check-run-agents/test-signal.md b/.macroscope/check-run-agents/test-signal.md new file mode 100644 index 0000000000000..5c5319aafb739 --- /dev/null +++ b/.macroscope/check-run-agents/test-signal.md @@ -0,0 +1,27 @@ +--- +title: Test Signal +model: gpt-6-1-terra +reasoning: low +input: incremental +tools: + - browse_code + - modify_pr +# An explicit include overrides ignore.md, which skips test files for every other check. +include: + - "**/*.test.*" +exclude: + - ".repos/**" +requires: + - Check +maxBudgetPerRun: 1 +maxBudgetPerPR: 5 +conclusion: neutral +--- + +# Test signal review + +Review only the tests this pull request adds or grows. Tests it moves, renames, or deletes are not findings. The rules are in `docs/internals/testing.md` under `## What to test`; read that section first and hold new tests to it. + +Post each finding as a brief inline comment on the new test with one fix. Ask only for fewer or smaller tests, never for more coverage. + +When there are no findings, make the entire final response exactly `All clear` on one line with nothing else. diff --git a/.macroscope/check-run-agents/ui-consistency.md b/.macroscope/check-run-agents/ui-consistency.md index ab37120ff344f..047dafbdd4be1 100644 --- a/.macroscope/check-run-agents/ui-consistency.md +++ b/.macroscope/check-run-agents/ui-consistency.md @@ -1,7 +1,7 @@ --- title: UI Consistency -model: gpt-6-sol -effort: max +model: gpt-6-1-sol +reasoning: low input: incremental tools: - browse_code diff --git a/.macroscope/ignore.md b/.macroscope/ignore.md index 0541e7407c0c9..66e5434c5ed13 100644 --- a/.macroscope/ignore.md +++ b/.macroscope/ignore.md @@ -255,3 +255,27 @@ ENV/** # (see scripts/lib/reference-repos.ts). Nothing imports from them; findings # there belong upstream. .repos/** + +# Generated code. Review its source (the script, GraphQL document, schema +# definition, or theme) instead; review agents can still read these on demand. +**/*.generated.ts +**/*.graphql.ts +apps/server/schema/expo.graphql +packages/source-control-github/schema/github.graphql +apps/mobile/generated-uniwind-* +apps/mobile/clerk-theme.json +apps/server/src/testUtils/shardWeights.json +infra/relay/migrations/**/snapshot.json + +# Provider transcripts recorded from real CLI runs for the orchestration replay +# tests. Each scenario's input.ts and *_output.ts assertions stay reviewed. +**/*.ndjson + +# Ghostty build output vendored from upstream. +apps/mobile/modules/t3-terminal/Vendor/** +native/libghostty-vt/include/** + +# @pierre/highlights compiled to C by wasm2c, plus the wasm2c runtime and simde +# it needs. Regenerated by apps/mobile/scripts/generate-highlights.mts; review +# that script and cpp/t3_highlights.c instead. +apps/mobile/modules/t3-highlights/Vendor/** diff --git a/.pnpmfile.cjs b/.pnpmfile.cjs index e79d0e71dc863..a7b10f64404a6 100644 --- a/.pnpmfile.cjs +++ b/.pnpmfile.cjs @@ -1,8 +1,5 @@ -// Windows WSL dev mode runs the server under Linux from the same node_modules -// as the Windows client, so Windows installs also need Linux x64 glibc native -// modules. Other platforms install only their own binaries; setting this -// everywhere added ~2.2 GB of foreign binaries to every macOS install. -// Release scripts stage their own installs with explicit architectures. +// Windows installs need Linux x64 glibc binaries because WSL shares node_modules. +// Keep other platforms native; release scripts set their own architectures. module.exports = { hooks: { // `typescript` is @tsc-rs/typescript (the catalog entry). Its npm version (0.8.x) is outside diff --git a/.repos/alchemy-effect/packages/frontend-frameworks/src/core/NodeServe.ts b/.repos/alchemy-effect/packages/frontend-frameworks/src/core/NodeServe.ts index cb2954120928e..3484d6696953b 100644 --- a/.repos/alchemy-effect/packages/frontend-frameworks/src/core/NodeServe.ts +++ b/.repos/alchemy-effect/packages/frontend-frameworks/src/core/NodeServe.ts @@ -48,7 +48,7 @@ export interface NodeServeHandler { export interface NodeServeEntryOptions { /** * JS expression resolving the on-disk client-assets directory - * (typically `fileURLToPath(new URL("../client/", import.meta.url))`). + * (typically `fileURLToPath(new URL("../shared/", import.meta.url))`). * Omit to skip static-file serving (Next.js handles its own assets). */ readonly clientDirExpression?: string | undefined; diff --git a/.repos/alchemy-effect/packages/frontend-frameworks/src/core/test/NodeServe.test.ts b/.repos/alchemy-effect/packages/frontend-frameworks/src/core/test/NodeServe.test.ts index 66667e6fb44c3..01147c61d5302 100644 --- a/.repos/alchemy-effect/packages/frontend-frameworks/src/core/test/NodeServe.test.ts +++ b/.repos/alchemy-effect/packages/frontend-frameworks/src/core/test/NodeServe.test.ts @@ -28,14 +28,14 @@ describe("relativeClientDirExpression", () => { "/project/dist/server/serve-node.mjs", "/project/dist/client", ), - ).toBe(`fileURLToPath(new URL("../client/", import.meta.url))`); + ).toBe(`fileURLToPath(new URL("../shared/", import.meta.url))`); }); }); describe("makeNodeServeEntrySource", () => { it("listens on PORT, answers /health, serves static files, then the fetch handler", () => { const source = makeNodeServeEntrySource({ - clientDirExpression: `fileURLToPath(new URL("../client/", import.meta.url))`, + clientDirExpression: `fileURLToPath(new URL("../shared/", import.meta.url))`, handler: { kind: "fetch", imports: `import { handler } from "./index.mjs";`, @@ -131,7 +131,7 @@ describe("makeNodeServeEntrySource", () => { it("does not map GET / onto public/index.html (SSR home stays on the handler)", () => { const source = makeNodeServeEntrySource({ - clientDirExpression: `fileURLToPath(new URL("../client/", import.meta.url))`, + clientDirExpression: `fileURLToPath(new URL("../shared/", import.meta.url))`, handler: { kind: "node", imports: `import { handler } from "./index.mjs";`, diff --git a/.task-cache.json b/.task-cache.json new file mode 100644 index 0000000000000..0e62827f9d64e --- /dev/null +++ b/.task-cache.json @@ -0,0 +1,3 @@ +{ + "endpoint": "https://t3-task-cache.pinglabs.workers.dev/projects/t3code" +} diff --git a/AGENTS.md b/AGENTS.md index c98a493d37380..d57e70927af6c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -91,22 +91,25 @@ The most common defect in this repo is a change that works on the path you teste An empty database is a bad test. Seed your worktree's `.t3` with a copy of real data instead of pointing at live state: -- The first `vp run dev` in a worktree does this for you when its database is missing. `--no-seed` or `T3CODE_DEV_SEED=0` skips it. -- Run `vp run migrate-dev-db` with your dev server stopped to refresh. It rebuilds `/.t3/userdata/statev2.sqlite` from a read-only snapshot of `~/.t3/userdata/statev2.sqlite`, the developer's real data. It keeps recent projects and their stopped threads, and drops scheduled tasks, pending work, and auth sessions, so your dev server never runs the developer's agents. Raise `--projects` and `--threads-per-project` for more data. +- The first `vp run dev` in a worktree does this for you when its database is missing and the source is at most 500 MiB. Larger sources warn and dev starts with an empty database. `--no-seed` or `T3CODE_DEV_SEED=0` skips seeding. Manual migration still accepts larger sources and may use substantial disk space before pruning. +- Run `vp run migrate-dev-db` with your dev server stopped to refresh. It rebuilds `/.t3/userdata/statev2.sqlite` from a read-only snapshot of `~/.t3/userdata/statev2.sqlite`, the developer's real data. It keeps recent projects and their stopped threads, and drops scheduled tasks, pending work, auth sessions, and links to other environments, so your dev server never runs the developer's agents or reaches their other machines. Raise `--projects` and `--threads-per-project` for more data. - Refresh `statev2.sqlite`, not `state.sqlite`. The server copies the V1 `state.sqlite` only when `statev2.sqlite` is missing. - Bring `secrets` and `settings.json` only if the flow under test needs them. - Copy in, never symlink. Data flows one way: into your sandbox, never back out. ## Verifying -- Before you push, run `vp run check:changed`. It runs CI's fast checks for changed files: format, lint, knip, typecheck of affected packages and dependents, and tests beside changes. CI still runs the full test suites. +- Before you push, run `vp run check:changed`. It runs CI's fast checks for changed files: format, lint, knip, typecheck of affected packages and dependents, tests beside changes, and the cross-file checks those miss. CI still runs the full test suites. - While you iterate, run `vp test run `. For big files, add `-t ""`. - Use `vp run typecheck`, not `npx tsc`; it caches per package. Both run tsc-rs (`typescript` is the `@tsc-rs/typescript` drop-in). - Run `node -e` snippets from `apps/server` or the owning package. `effect` does not resolve from the repo root. -- Test meaningful logic or observable behavior. Do not render components to static markup to assert props or attributes, or add tests that merely assert callback wiring or mirror the implementation. +- Test behavior that can break, such as orchestration and event-sourcing, provider protocol translation, auth and permission guards, persistence and migrations, external-format parsing, race fixes, and the logic a bug fix changed. Leave out tests for what types already guarantee, trivial logic, copy text, smoke runs, mock-call mirrors, callback wiring, and props rendered to static markup. +- Extend before you add. When an existing test or table covers the behavior, add a row or an assertion there. Write a new `it` only when no case fits. +- Test at one layer: the lowest one that fails on `main`. Do not repeat the case in a wrapper test, at each call site, or in web and mobile copies of the same logic. +- [Testing](docs/internals/testing.md) carries these same test rules, plus review guidance, for review bots. Change both together. - **Do not run repo-wide checks.** No `vp check`, no `vp run -r test`, no `vp run -r typecheck` unless I ask. CI owns the full suite. - Backend behavior changes ship with focused tests for that behavior. -- Proof for a bug fix depends on the bug. Logic, data, state, and protocol bugs get a failing test first (the fewest that fail on `main` for that reason, in the module's existing test file), then the fix. Purely visual bugs (spacing, colour, alignment, a layout shift) get before/after captures as their proof and no test: do not add UI tests for nitpicks, and do not ask for one in review when a capture already shows it. A server-only fix with no visible surface ships the test plus a short runtime transcript. +- Proof for a bug fix depends on the bug. Logic, data, state, and protocol bugs get a failing test first (the fewest that fail on `main` for that reason, in an existing case of the module's test file where one fits), then the fix. Purely visual bugs (spacing, colour, alignment, a layout shift) get before/after captures as their proof and no test: do not add UI tests for nitpicks, and do not ask for one in review when a capture already shows it. A server-only fix with no visible surface ships the test plus a short runtime transcript. - The server is event-sourced, and side effects run after the command commits. In tests, drain the effect worker (`OrchestrationEffectWorkerV2.drain`) or await the specific persisted event or `Deferred` that marks the milestone. Never wait on sleeps or polling. A test that needs a timeout to pass is wrong. Concretely: - `it.effect` runs on a `TestClock`; `Effect.sleep` only advances through `TestClock.adjust`. `it.live` is wall-clock and only for subprocess or network fixtures. - No `yieldNow` or `sleep` polling loops. Await the `Deferred`, take from the `Queue`, or drain the worker. @@ -133,13 +136,20 @@ An empty database is a bad test. Seed your worktree's `.t3` with a copy of real }); ``` -- Upon request, user-visible frontend changes should get one integrated pass in a real client: `test-t3-app` for web, `test-t3-mobile` for mobile. The primary agent does this once after integrating. Subagents do not launch their own dev servers. Ask permission before doing computer use or spinning up browsers. +- User-visible frontend changes should get one integrated pass in a real client: `test-t3-app` for web, `test-t3-mobile` for mobile. The primary agent does this once after integrating. Subagents do not launch their own dev servers. -For authorized mobile verification, a missing or outdated native client is a build step, not a blocker. Run `node scripts/mobile-native-client.ts ensure ` on the simulator host before starting Metro. It checks the local Expo fingerprint and builds/installs when needed. See `test-t3-mobile` for the full workflow. +- Real agent turns cost money. To watch a turn stream through the pipeline and UI, use the free `Replay (dev)` provider that `vp run dev` registers; [test-t3-app](.agents/skills/test-t3-app/SKILL.md) shows how to start one. Use a real provider only when the change depends on that provider's behavior, and then pick its cheapest model, such as Haiku for Claude or Luna for Codex. + +For mobile verification, a missing or outdated native client is an install step, not a blocker. Run `vp run mobile:install [device-id]` on the device host before starting Metro; it targets the only booted simulator or connected Android device when the id is omitted. It installs the dev client for this checkout's native fingerprint from the shared cache in seconds and builds only when no machine has built it yet, so prefer it over `expo run:*`, `xcodebuild`, or `gradlew`, which rebuild from scratch. Its stdout is one JSON line; build output goes to the log it names. See `test-t3-mobile` for the full workflow. + +## Evals + +`evals/` checks how real models behave with T3 Code's model-facing text: agent instructions, MCP tool descriptions and schemas, and generated titles. Before you change that text, read [evals/README.md](evals/README.md) and run the evals it names. When you fix a model behavior bug, add a case that fails before the fix. ## Pull requests - Never make a PR unless the developer explicitly asks you to do so. +- If `origin` is git.cafe, follow [GitCafe mirror](docs/operations/development.md#gitcafe-mirror-optional): push to `origin`, open and track PRs with `cafe` and their git.cafe URLs, and keep `gh` for merging. - Conventional commit titles, plain language: `fix(web): new threads no longer spike CPU`. - Body: the problem in a sentence or two, then how you fixed it. End with the model and harness that did the work. - UI changes need before/after images. Motion or timing needs a short video. @@ -153,7 +163,7 @@ Most code changes do not need an internal documentation change. Agents can read - `docs/internals/` is for architectural decisions and their reasons, constraints that span components, and implementation traps that are hard to discover from the source. Before adding a paragraph, ask what a maintainer would get wrong without it. If reading the relevant code answers the question, leave it out. - Do not document every feature, enumerate fields or methods, narrate control flow, maintain file catalogs, or append PR summaries. Types, tests, and code already record the implementation. The glossary defines shared vocabulary; it is not a feature index. -- Keep a local implementation explanation in a nearby code comment. Use an internal doc when the reasoning crosses boundaries or needs context the code cannot carry well. Link to the relevant source instead of copying it. +- A local reason the code can't show goes in a short nearby code comment. Use an internal doc when the reasoning crosses boundaries or needs context the code cannot carry well. Link to the relevant source instead of copying it. - When a documented decision or constraint changes, rewrite or remove the affected text. Do not append another account of the new behavior. A new internal page needs a distinct, durable reason to exist. - `docs/user/` helps users accomplish tasks. Give each major feature a concise section explaining what it does, how to start, and anything unintuitive. A settings path is useful; descriptions of visible buttons, icons, layouts, animations, or every UI state are not. Before adding text, ask what task or decision it helps the user with. - Keep user docs in the shipped product's voice, without implementation details or contributor tooling. Update the relevant feature section when how to use it changes. A UI tweak does not need a documentation entry, and a new control does not need its own page. @@ -193,11 +203,11 @@ Architecture and its constraints: `docs/internals/overview.md`. Glossary: `docs/ Named `Effect.fn` creates a span; the unnamed form does not. Preserve existing span names and options, and pass combinators as additional function-builder arguments. - Inferred types over annotations. `any` is the enemy. -- Comments say why: a constraint, an external quirk, or an invariant the code can't show. Don't restate names or signatures, narrate steps, or record history. `t3code/no-low-value-comments` catches the mechanical cases. +- Default to no comment. Write one only for a constraint, an external quirk, or an invariant the code can't show, in one line where you can and four at most. Don't restate names or signatures, narrate steps, record history, or explain the fix you just made; the PR carries that. `t3code/no-low-value-comments` enforces the length cap and the mechanical cases. +- React effects are for synchronizing with something outside React. Derive in render and act in handlers instead of syncing state, but don't hide real lifecycle work in refs or stores to dodge one. The `t3code/no-unreasoned-state-sync` lint rule reports every effect; one that stays states its reason with `// oxlint-disable-next-line t3code/no-unreasoned-state-sync -- `. - Our users drive agents all day and notice a dropped frame, a lying spinner, and a stale label. No continuously repainting animations; they peg the GPU on high-refresh displays. - If a rule here fights the task in front of you, say so loudly and get a human sign-off before breaking it. ## Additional tips -- Don't verify with browsers or computer use unless the user explicitly agrees or requests it. - Security is important, but should not be over-indexed on, especially for dev mode/maintainer-only features. diff --git a/README.md b/README.md index 836191b84b6b3..e0f25068422ca 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,14 @@ This repository is Unlock Digital's maintained fork of [T3 Code](https://github. Works with your subscriptions and configurations across Claude Code, Codex, Google Antigravity, OpenCode, Cursor, and Grok Build. +Current preview source integrates official **v0.1.6**. See [included improvements](docs/unlock-digital/CUSTOMIZATIONS.md), [Mac installation and profile isolation](docs/unlock-digital/PORTABLE_TRIAL.md), and [upstream maintenance](docs/unlock-digital/UPSTREAM_SYNC.md). Release assets identify the exact fork commit, validation, and signing status. + +## Current release · November 1, 2026 + +[Download for Apple-silicon Mac](https://github.com/unlockdigital/t3code/releases/download/v0.1.6-unlock.1-preview.20261101.1/T3-Code-0.1.6-unlock.1-preview.20261101.1-arm64.dmg) · [Source package](https://github.com/unlockdigital/t3code/releases/download/v0.1.6-unlock.1-preview.20261101.1/t3code-0.1.6-unlock.1-preview.20261101.1-source.tar.gz) · [Release notes](https://github.com/unlockdigital/t3code/releases/tag/v0.1.6-unlock.1-preview.20261101.1) + +This release includes the qualified Unlock Digital customizations and uses separate preview profiles. Follow the [install guide](https://github.com/unlockdigital/t3code/releases/download/v0.1.6-unlock.1-preview.20261101.1/INSTALL.md) and verify downloads with [SHA256SUMS](https://github.com/unlockdigital/t3code/releases/download/v0.1.6-unlock.1-preview.20261101.1/SHA256SUMS). The [validation report](https://github.com/unlockdigital/t3code/releases/download/v0.1.6-unlock.1-preview.20261101.1/VALIDATION.md) records signing, acceptance and security coverage. Updates and adoption remain manual. + ## Unlock Digital Enhancements This edition builds on upstream stable releases while providing tailored capabilities for multi-provider orchestration and local development: @@ -16,7 +24,7 @@ This edition builds on upstream stable releases while providing tailored capabil ## Upstream Relationship - Upstream canonical repository: [pingdotgg/t3code](https://github.com/pingdotgg/t3code) -- Base release: `v0.1.2` +- Base release: official `v0.1.6` - Operating branch: `unlock-digital/main` - Maintenance plan: See [docs/unlock-digital/UPSTREAM_SYNC.md](./docs/unlock-digital/UPSTREAM_SYNC.md) @@ -42,15 +50,74 @@ This edition is maintained as a reproducible source build with an isolated, pinn Install and authenticate at least one provider before use: -- **Codex**: install [Codex CLI](https://developers.openai.com/codex/cli) and run `codex login` -- **Claude**: install [Claude Code](https://claude.com/product/claude-code) and run `claude auth login` -- **Antigravity**: enable it in Settings, then use **Install Antigravity** and **Sign in with Google**. -- **OpenCode**: install [OpenCode](https://opencode.ai) and run `opencode auth login` -- **Cursor**: install [Cursor CLI](https://cursor.com/cli) and run `agent login` -- **Grok Build**: install [Grok Build CLI](https://x.ai/cli) and run `grok login` +The package-manager commands below install upstream T3 Code. Use the Unlock Digital download above for this fork's customizations. + +#### Windows (`winget`) + +```bash +winget install T3Tools.T3Code +``` + +#### Windows (`scoop`) + +```bash +scoop install extras/t3code +``` + +#### macOS (Homebrew) + +```bash +brew install --cask t3-code +``` + +#### Debian, Ubuntu (`.deb`) + +Download the `.deb` from [GitHub Releases](https://github.com/pingdotgg/t3code/releases), then: + +```bash +sudo apt install ./T3-Code-*.deb +``` + +#### Arch Linux (AUR) + +Stable: + +```bash +yay -S t3code-bin +``` + +Nightly: + +```bash +yay -S t3code-nightly-bin +``` + +The AUR packaging is maintained in this repository under [`packaging/aur`](./packaging/aur). + +#### Nix (nixpkgs) + +```bash +nix profile add github:NixOS/nixpkgs/nixos-unstable#t3code +``` + +The package is maintained in [nixpkgs](https://github.com/NixOS/nixpkgs/tree/nixos-unstable/pkgs/by-name/t3/t3code) +and includes the desktop app (`t3code-desktop`) and the `t3` command. +See [Nix installation](./docs/user/install.md#nix-nixpkgs) for NixOS configuration and updates. + +## Some notes + +We are very very early in this project. Expect bugs. + +We are (mostly) not accepting contributions yet. Small fixes may be considered. Big features will not be. ## Documentation +Full docs live in [docs/](./docs). There's no docs site yet. + +- [FAQ](./docs/user/faq.md) + +## Unlock Digital fork + - [Unlock Digital setup and customizations](./docs/unlock-digital/SETUP.md) - [Upstream synchronization guide](./docs/unlock-digital/UPSTREAM_SYNC.md) - [Provider connections & ledger](./docs/unlock-digital/PROVIDERS.md) diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 526b6e6a0c8ff..ddd457f4644b7 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -1,14 +1,13 @@ { "name": "@t3tools/desktop", - "version": "0.1.1", + "version": "0.1.6-unlock.1-preview.20261101.1", "private": true, "type": "module", "main": "dist-electron/boot.cjs", "scripts": { "ensure:electron": "node scripts/ensure-electron-runtime.mjs", "start": "node scripts/start-electron.mjs", - "test": "vp test run --passWithNoTests", - "smoke-test": "node scripts/smoke-test.mjs" + "test": "vp test run --passWithNoTests" }, "dependencies": { "@clerk/electron": "catalog:", diff --git a/apps/desktop/resources/installer.nsh b/apps/desktop/resources/installer.nsh index 092f641c3359f..7f277fdcbf9c2 100644 --- a/apps/desktop/resources/installer.nsh +++ b/apps/desktop/resources/installer.nsh @@ -1,3 +1,35 @@ +!include "StrFunc.nsh" +!ifdef BUILD_UNINSTALLER + ${UnStrRep} + !define T3StrRep '${UnStrRep}' +!else + ${StrRep} + !define T3StrRep '${StrRep}' +!endif + +!macro customAppRunningMessages + Push $0 + Push $1 + ${If} $IsPowerShellAvailable == 0 + System::Call 'kernel32::SetEnvironmentVariable(t "T3CODE_INSTALL_DIR", t "$INSTDIR")' + nsExec::ExecToStack `"$PowerShellPath" -NoProfile -NonInteractive -C "Get-CimInstance -ClassName Win32_Process | Where-Object { $$_.ExecutablePath -and [IO.Path]::GetDirectoryName($$_.ExecutablePath) -eq $$env:T3CODE_INSTALL_DIR } | ForEach-Object { [IO.Path]::GetFileNameWithoutExtension($$_.ExecutablePath) } | Where-Object { $$_ -in 'T3 Code (Alpha)', 'T3 Code (Beta)', 'T3 Code (Nightly)' } | Select-Object -First 1 | ForEach-Object { [Console]::Write($$_) }"` + Pop $0 + Pop $1 + System::Call 'kernel32::SetEnvironmentVariable(t "T3CODE_INSTALL_DIR", p 0)' + ${If} $0 == 0 + ${If} $1 == "T3 Code (Alpha)" + ${OrIf} $1 == "T3 Code (Beta)" + ${OrIf} $1 == "T3 Code (Nightly)" + ${T3StrRep} $appRunningMessage $appRunningMessage "${PRODUCT_NAME}" $1 + ${T3StrRep} $appClosingMessage $appClosingMessage "${PRODUCT_NAME}" $1 + ${T3StrRep} $appCannotBeClosedMessage $appCannotBeClosedMessage "${PRODUCT_NAME}" $1 + ${EndIf} + ${EndIf} + ${EndIf} + Pop $1 + Pop $0 +!macroend + !macro customInstall !ifndef DO_NOT_CREATE_START_MENU_SHORTCUT ${IfNot} ${FileExists} "$newStartMenuLink" diff --git a/apps/desktop/scripts/electron-launcher.mjs b/apps/desktop/scripts/electron-launcher.mjs index 787cacc4e6dce..afe8abedfcb3e 100644 --- a/apps/desktop/scripts/electron-launcher.mjs +++ b/apps/desktop/scripts/electron-launcher.mjs @@ -387,9 +387,7 @@ function buildMacLauncher(electronBinaryPath) { JSON.stringify(currentMetadata) === JSON.stringify(expectedMetadata) ) { if (isDevelopment) { - // The launcher also handles protocol activations outside the dev runner, - // so refresh its fallback environment on every launch. Never let a value - // captured by an older parent app override the live dev-runner environment. + // Protocol activations bypass the dev runner, so refresh the fallback environment on every launch. writeDevelopmentEnvironmentScript(); if (writeDevelopmentLauncherScript(launcherBinaryPath, runtimeElectronBinaryPath)) { signMacLauncherBundle(targetAppBundlePath); @@ -400,10 +398,7 @@ function buildMacLauncher(electronBinaryPath) { } NodeFS.rmSync(targetAppBundlePath, { recursive: true, force: true }); - // verbatimSymlinks keeps the framework's relative symlinks intact - // (e.g. Resources -> Versions/Current/Resources). Without it cpSync - // rewrites them to absolute paths into node_modules, which escape the - // bundle and crash sandboxed helper processes (icudtl.dat not found). + // Without verbatimSymlinks, cpSync makes framework symlinks point outside the bundle and crashes helpers. NodeFS.cpSync(sourceAppBundlePath, targetAppBundlePath, { recursive: true, verbatimSymlinks: true, @@ -415,10 +410,7 @@ function buildMacLauncher(electronBinaryPath) { ); patchHelperBundleInfoPlists(targetAppBundlePath); if (isDevelopment) { - // Launching the node_modules copy makes macOS associate the process (and Dock label) with - // Electron.app even though this bundle's Info.plist has the T3 Code name. Its conventional - // executable name also keeps Electron's default-app runtime in development mode instead of - // making app.isPackaged report true. + // Electron.app's executable name keeps default-app mode active without making app.isPackaged true. writeDevelopmentEnvironmentScript(); writeDevelopmentLauncherScript(launcherBinaryPath, runtimeElectronBinaryPath); } diff --git a/apps/desktop/scripts/smoke-test.mjs b/apps/desktop/scripts/smoke-test.mjs deleted file mode 100644 index 05195bb8d8cda..0000000000000 --- a/apps/desktop/scripts/smoke-test.mjs +++ /dev/null @@ -1,58 +0,0 @@ -import * as NodeChildProcess from "node:child_process"; -import * as NodePath from "node:path"; -import * as NodeURL from "node:url"; -import { resolveElectronLaunchCommand } from "./electron-launcher.mjs"; - -const __dirname = NodePath.dirname(NodeURL.fileURLToPath(import.meta.url)); -const desktopDir = NodePath.resolve(__dirname, ".."); -const mainJs = NodePath.resolve(desktopDir, "dist-electron/boot.cjs"); - -console.log("\nLaunching Electron smoke test..."); - -const electronCommand = resolveElectronLaunchCommand([mainJs]); -const child = NodeChildProcess.spawn(electronCommand.electronPath, electronCommand.args, { - stdio: ["pipe", "pipe", "pipe"], - env: { - ...process.env, - VITE_DEV_SERVER_URL: "", - ELECTRON_ENABLE_LOGGING: "1", - }, -}); - -let output = ""; -child.stdout.on("data", (chunk) => { - output += chunk.toString(); -}); -child.stderr.on("data", (chunk) => { - output += chunk.toString(); -}); - -const timeout = setTimeout(() => { - child.kill(); -}, 8_000); - -child.on("exit", () => { - clearTimeout(timeout); - - const fatalPatterns = [ - "Cannot find module", - "MODULE_NOT_FOUND", - "Refused to execute", - "Uncaught Error", - "Uncaught TypeError", - "Uncaught ReferenceError", - ]; - const failures = fatalPatterns.filter((pattern) => output.includes(pattern)); - - if (failures.length > 0) { - console.error("\nDesktop smoke test failed:"); - for (const failure of failures) { - console.error(` - ${failure}`); - } - console.error("\nFull output:\n" + output); - process.exit(1); - } - - console.log("Desktop smoke test passed."); - process.exit(0); -}); diff --git a/apps/desktop/src/app/ClerkTokenStore.test.ts b/apps/desktop/src/app/ClerkTokenStore.test.ts new file mode 100644 index 0000000000000..b7ac0e38d5142 --- /dev/null +++ b/apps/desktop/src/app/ClerkTokenStore.test.ts @@ -0,0 +1,189 @@ +// @effect-diagnostics nodeBuiltinImport:off -- These tests assert real POSIX modes on a temporary directory. +import * as NodeFS from "node:fs"; +import * as NodeOS from "node:os"; +import * as NodePath from "node:path"; +import { assert, describe, it } from "@effect/vitest"; +import { vi } from "vite-plus/test"; + +vi.mock("node:fs", { spy: true }); + +import { openClerkTokenStorage, type ClerkTokenStorage } from "./ClerkTokenStore.ts"; + +// oxlint-disable-next-line t3code/no-global-process-runtime -- Unix mode bits are the assertion; Windows reports them through ACLs. +const describePosix = describe.skipIf(process.platform === "win32"); + +const modeOf = (path: string): number => NodeFS.statSync(path).mode & 0o777; + +function writeLoose(path: string, contents: string): void { + NodeFS.writeFileSync(path, contents, { mode: 0o666 }); + NodeFS.chmodSync(path, 0o666); +} + +async function withStateDir(run: (stateDir: string) => Promise | void): Promise { + const stateDir = NodeFS.mkdtempSync(NodePath.join(NodeOS.tmpdir(), "t3-clerk-tokens-")); + try { + await run(stateDir); + } finally { + NodeFS.rmSync(stateDir, { recursive: true, force: true }); + } +} + +const idleStorage = (): ClerkTokenStorage => ({ + getItem: async () => null, + setItem: async () => undefined, + removeItem: () => undefined, +}); + +describePosix("ClerkTokenStore", () => { + it("keeps clerk tokens at 0600 inside a 0700 directory", async () => { + await withStateDir(async (stateDir) => { + NodeFS.chmodSync(stateDir, 0o755); + const directory = NodePath.join(stateDir, "clerk"); + const legacyPath = NodePath.join(stateDir, "clerk-tokens.json"); + const tokenPath = NodePath.join(directory, "clerk-tokens.json"); + NodeFS.mkdirSync(directory, { mode: 0o755 }); + NodeFS.chmodSync(directory, 0o755); + writeLoose(legacyPath, '{"__clerk_client_jwt":"enc:existing"}\n'); + + const opened: string[] = []; + const storage = openClerkTokenStorage(stateDir, (cwd) => { + opened.push(cwd); + return { + getItem: async () => { + writeLoose(tokenPath, "from-get"); + return "from-get"; + }, + setItem: (_key, value) => { + writeLoose(tokenPath, value); + }, + removeItem: () => { + NodeFS.rmSync(tokenPath, { force: true }); + }, + }; + }); + + assert.deepEqual(opened, [directory]); + assert.equal(modeOf(stateDir), 0o755); + assert.equal(modeOf(directory), 0o700); + assert.equal(modeOf(tokenPath), 0o600); + assert.equal(NodeFS.existsSync(legacyPath), false); + assert.equal( + NodeFS.readFileSync(tokenPath, "utf8"), + '{"__clerk_client_jwt":"enc:existing"}\n', + ); + + assert.equal(await storage.getItem("client"), "from-get"); + assert.equal(modeOf(tokenPath), 0o600); + await storage.setItem("client", "from-set"); + assert.equal(modeOf(tokenPath), 0o600); + assert.equal(NodeFS.readFileSync(tokenPath, "utf8"), "from-set"); + storage.removeItem("client"); + assert.equal(NodeFS.existsSync(tokenPath), false); + + writeLoose(tokenPath, "kept"); + writeLoose(legacyPath, "stale"); + NodeFS.chmodSync(directory, 0o755); + openClerkTokenStorage(stateDir, () => idleStorage()); + assert.equal(modeOf(directory), 0o700); + assert.equal(modeOf(tokenPath), 0o600); + assert.equal(NodeFS.existsSync(legacyPath), false); + assert.equal(NodeFS.readFileSync(tokenPath, "utf8"), "kept"); + }); + }); + + it("removes the legacy token file when the private copy already exists", async () => { + await withStateDir((stateDir) => { + const directory = NodePath.join(stateDir, "clerk"); + const legacyPath = NodePath.join(stateDir, "clerk-tokens.json"); + const tokenPath = NodePath.join(directory, "clerk-tokens.json"); + NodeFS.mkdirSync(directory, { mode: 0o755 }); + writeLoose(legacyPath, "stale-credential"); + writeLoose(tokenPath, "kept-credential"); + + openClerkTokenStorage(stateDir, () => idleStorage()); + + assert.equal(NodeFS.existsSync(legacyPath), false); + assert.equal(modeOf(directory), 0o700); + assert.equal(modeOf(tokenPath), 0o600); + assert.equal(NodeFS.readFileSync(tokenPath, "utf8"), "kept-credential"); + }); + }); + + it("resolves a relative state directory before opening storage", async () => { + await withStateDir(async (stateDir) => { + const relativeStateDir = NodePath.relative(process.cwd(), stateDir); + const opened: string[] = []; + openClerkTokenStorage(relativeStateDir, (directory) => { + opened.push(directory); + return idleStorage(); + }); + + const directory = NodePath.join(stateDir, "clerk"); + assert.equal(NodePath.isAbsolute(relativeStateDir), false); + assert.deepEqual(opened, [directory]); + assert.equal(modeOf(directory), 0o700); + }); + }); + + it("migrates relative state paths from Electron userData, not the working directory", async () => { + await withStateDir((stateDir) => { + const relativeStateDir = NodePath.relative(process.cwd(), stateDir); + const userData = NodePath.join( + stateDir, + "electron", + ...relativeStateDir.split(NodePath.sep).map(() => "profile"), + ); + const legacyStateDir = NodePath.join(userData, relativeStateDir); + const legacyPath = NodePath.join(legacyStateDir, "clerk-tokens.json"); + NodeFS.mkdirSync(legacyStateDir, { recursive: true }); + writeLoose(legacyPath, "existing-session"); + const unrelatedPath = NodePath.join(stateDir, "clerk-tokens.json"); + writeLoose(unrelatedPath, "not-the-electron-session"); + + openClerkTokenStorage(relativeStateDir, idleStorage, userData); + + const tokenPath = NodePath.join(stateDir, "clerk", "clerk-tokens.json"); + assert.equal(NodeFS.readFileSync(tokenPath, "utf8"), "existing-session"); + assert.equal(modeOf(tokenPath), 0o600); + assert.equal(NodeFS.existsSync(legacyPath), false); + assert.equal(NodeFS.readFileSync(unrelatedPath, "utf8"), "not-the-electron-session"); + }); + }); + + it("migrates tokens when the legacy directory is on another filesystem", async () => { + await withStateDir((stateDir) => { + const legacyPath = NodePath.join(stateDir, "clerk-tokens.json"); + writeLoose(legacyPath, "existing-session"); + using _rename = vi.spyOn(NodeFS, "renameSync").mockImplementation(() => { + throw Object.assign(new Error("cross-device link"), { code: "EXDEV" }); + }); + + openClerkTokenStorage(stateDir, idleStorage); + + const tokenPath = NodePath.join(stateDir, "clerk", "clerk-tokens.json"); + assert.equal(NodeFS.readFileSync(tokenPath, "utf8"), "existing-session"); + assert.equal(modeOf(tokenPath), 0o600); + assert.equal(NodeFS.existsSync(legacyPath), false); + }); + }); + + it("does not follow a symlinked clerk directory or token file", async () => { + await withStateDir(async (stateDir) => { + const outsideDirectory = NodePath.join(stateDir, "outside-dir"); + NodeFS.mkdirSync(outsideDirectory, { mode: 0o755 }); + NodeFS.chmodSync(outsideDirectory, 0o755); + NodeFS.symlinkSync(outsideDirectory, NodePath.join(stateDir, "clerk")); + + assert.throws(() => openClerkTokenStorage(stateDir, idleStorage), /must be a real directory/); + assert.equal(modeOf(outsideDirectory), 0o755); + NodeFS.unlinkSync(NodePath.join(stateDir, "clerk")); + + const outsideFile = NodePath.join(stateDir, "outside.json"); + NodeFS.writeFileSync(outsideFile, "secret", { mode: 0o644 }); + NodeFS.chmodSync(outsideFile, 0o644); + NodeFS.symlinkSync(outsideFile, NodePath.join(stateDir, "clerk-tokens.json")); + assert.throws(() => openClerkTokenStorage(stateDir, idleStorage), /must be a regular file/); + assert.equal(modeOf(outsideFile), 0o644); + }); + }); +}); diff --git a/apps/desktop/src/app/ClerkTokenStore.ts b/apps/desktop/src/app/ClerkTokenStore.ts new file mode 100644 index 0000000000000..005736c97cb38 --- /dev/null +++ b/apps/desktop/src/app/ClerkTokenStore.ts @@ -0,0 +1,117 @@ +// @effect-diagnostics nodeBuiltinImport:off -- The Clerk bridge must lock the token file down before startup can yield to Electron's ready event. +import * as NodeFS from "node:fs"; +import * as NodePath from "node:path"; + +// electron-store chmods every write to 0666; the private directory protects tokens during writes. +const CLERK_TOKEN_DIRECTORY_MODE = 0o700; +const CLERK_TOKEN_FILE_MODE = 0o600; +const CLERK_TOKEN_DIRECTORY_NAME = "clerk"; +const CLERK_TOKEN_FILE_NAME = "clerk-tokens.json"; + +type Awaitable = T | Promise; + +export interface ClerkTokenStorage { + readonly getItem: (key: string) => Awaitable; + readonly setItem: (key: string, value: string) => Awaitable; + readonly removeItem: (key: string) => Awaitable; +} + +function isErrno(error: unknown, code: string): boolean { + return typeof error === "object" && error !== null && "code" in error && error.code === code; +} + +function lstatIfExists(path: string): NodeFS.Stats | undefined { + try { + return NodeFS.lstatSync(path); + } catch (error) { + if (isErrno(error, "ENOENT")) return undefined; + throw error; + } +} + +function assertRegularFile(path: string, stat: NodeFS.Stats): void { + if (stat.isSymbolicLink() || !stat.isFile()) { + throw new Error(`Clerk token file "${path}" must be a regular file.`); + } +} + +function restrictClerkTokenFile(path: string): void { + const stat = lstatIfExists(path); + if (stat === undefined) return; + assertRegularFile(path, stat); + if ((stat.mode & 0o777) === CLERK_TOKEN_FILE_MODE) return; + NodeFS.chmodSync(path, CLERK_TOKEN_FILE_MODE); +} + +function migrateLegacyClerkTokenFile(stateDir: string, directory: string): void { + const legacyPath = NodePath.join(stateDir, CLERK_TOKEN_FILE_NAME); + const tokenPath = NodePath.join(directory, CLERK_TOKEN_FILE_NAME); + const legacy = lstatIfExists(legacyPath); + if (legacy !== undefined) { + assertRegularFile(legacyPath, legacy); + NodeFS.chmodSync(legacyPath, CLERK_TOKEN_FILE_MODE); + } + + const destination = lstatIfExists(tokenPath); + if (destination === undefined) { + if (legacy === undefined) return; + try { + NodeFS.copyFileSync(legacyPath, tokenPath, NodeFS.constants.COPYFILE_EXCL); + NodeFS.chmodSync(tokenPath, CLERK_TOKEN_FILE_MODE); + NodeFS.unlinkSync(legacyPath); + } catch (error) { + if (!isErrno(error, "ENOENT")) throw error; + } + return; + } + + assertRegularFile(tokenPath, destination); + NodeFS.chmodSync(tokenPath, CLERK_TOKEN_FILE_MODE); + if (legacy === undefined) return; + try { + NodeFS.unlinkSync(legacyPath); + } catch (error) { + if (!isErrno(error, "ENOENT")) throw error; + } +} + +function restrictAfter(run: () => Awaitable, tighten: () => void): Awaitable { + let result: Awaitable; + try { + result = run(); + } catch (error) { + tighten(); + throw error; + } + if (result instanceof Promise) return result.finally(tighten); + tighten(); + return result; +} + +/** Opens Clerk token storage in a private directory and keeps the file at `0600`. */ +export function openClerkTokenStorage( + stateDir: string, + createStorage: (directory: string) => ClerkTokenStorage, + userDataPath = ".", +): ClerkTokenStorage { + const absoluteStateDir = NodePath.resolve(stateDir); + const directory = NodePath.join(absoluteStateDir, CLERK_TOKEN_DIRECTORY_NAME); + NodeFS.mkdirSync(directory, { recursive: true, mode: CLERK_TOKEN_DIRECTORY_MODE }); + const stat = NodeFS.lstatSync(directory); + if (stat.isSymbolicLink() || !stat.isDirectory()) { + throw new Error(`Clerk token directory "${directory}" must be a real directory.`); + } + NodeFS.chmodSync(directory, CLERK_TOKEN_DIRECTORY_MODE); + // electron-store rebases relative paths under Electron userData, not the working directory. + migrateLegacyClerkTokenFile(NodePath.resolve(userDataPath, stateDir), directory); + const tokenPath = NodePath.join(directory, CLERK_TOKEN_FILE_NAME); + restrictClerkTokenFile(tokenPath); + + const storage = createStorage(directory); + const tighten = () => restrictClerkTokenFile(tokenPath); + return { + getItem: (key) => restrictAfter(() => storage.getItem(key), tighten), + setItem: (key, value) => restrictAfter(() => storage.setItem(key, value), tighten), + removeItem: (key) => restrictAfter(() => storage.removeItem(key), tighten), + }; +} diff --git a/apps/desktop/src/app/DesktopApp.ts b/apps/desktop/src/app/DesktopApp.ts index 7dffe9fe3b1f8..ffd58bf2e6724 100644 --- a/apps/desktop/src/app/DesktopApp.ts +++ b/apps/desktop/src/app/DesktopApp.ts @@ -29,6 +29,7 @@ import * as DesktopShutdown from "./DesktopShutdown.ts"; import * as DesktopServerExposure from "../backend/DesktopServerExposure.ts"; import * as DesktopAppSettings from "../settings/DesktopAppSettings.ts"; import * as DesktopShellEnvironment from "../shell/DesktopShellEnvironment.ts"; +import * as DesktopStartupRecovery from "./DesktopStartupRecovery.ts"; import * as DesktopState from "./DesktopState.ts"; import * as DesktopRemoteUpdates from "../updates/DesktopRemoteUpdates.ts"; import * as DesktopUpdates from "../updates/DesktopUpdates.ts"; @@ -171,7 +172,11 @@ const bootstrap = Effect.gen(function* () { const settings = yield* desktopSettings.get; const electronProtocol = yield* ElectronProtocol.ElectronProtocol; yield* electronProtocol.registerDesktopProtocol({ - scheme: ElectronProtocol.getDesktopScheme(environment.isDevelopment), + scheme: ElectronProtocol.getDesktopScheme( + environment.isDevelopment, + environment.appVersion, + environment.isPackaged, + ), ...(environment.isDevelopment ? { targetOrigin: Option.getOrThrow(environment.devServerUrl) } : { assetDirectory: environment.clientAssetsDir }), @@ -325,6 +330,7 @@ const startup = Effect.gen(function* () { yield* applicationMenu.configure; yield* updates.configure; yield* DesktopRemoteUpdates.listen; + yield* DesktopStartupRecovery.listen; yield* linuxUrlHandler.register; yield* bootstrap.pipe(Effect.catchCause((cause) => fatalStartupCause("bootstrap", cause))); }).pipe(Effect.withSpan("desktop.startup")); @@ -339,11 +345,7 @@ const scopedProgram = Effect.scoped( const rendererHistory = yield* DesktopRendererHistory.DesktopRendererHistory; yield* Effect.addFinalizer(() => - // Stop every backend in the pool, not just the primary. The - // electronApp.quit() path can race ahead of the layer-scope - // cascade, so leaving the WSL instance for its parent scope - // finalizer means it gets hard-killed by the OS instead of - // receiving SIGTERM + grace. + // Quit can outrun layer finalizers; stop pooled backends here so they receive SIGTERM before OS teardown. stopAllPoolInstances().pipe( Effect.ensuring(rendererHistory.shutdown), Effect.ensuring(shutdown.markComplete), diff --git a/apps/desktop/src/app/DesktopAppActivation.ts b/apps/desktop/src/app/DesktopAppActivation.ts index 688bd789572f7..094033192e088 100644 --- a/apps/desktop/src/app/DesktopAppActivation.ts +++ b/apps/desktop/src/app/DesktopAppActivation.ts @@ -1,4 +1,5 @@ // @effect-diagnostics nodeBuiltinImport:off -- Local socket ownership checks need lstat, an atomic rename, and a directory watch at the Node adapter boundary. +import { pipe } from "effect/Function"; import * as NodeCrypto from "node:crypto"; import * as NodeFS from "node:fs"; import * as NodeFSP from "node:fs/promises"; @@ -151,8 +152,10 @@ export async function startDesktopAppControlServer(input: { } if (!isDesktopAppActivationRequest(parsed)) { - finish( - invalidResponse(requestIdFromUnknown(parsed), "The desktop app request is invalid."), + pipe( + requestIdFromUnknown(parsed), + (requestId) => invalidResponse(requestId, "The desktop app request is invalid."), + finish, ); return; } @@ -186,10 +189,7 @@ export async function startDesktopAppControlServer(input: { server.listen(address); }); - // Closing a Unix socket server unlinks the path it was bound to, even when - // another app's socket lives there now. Bind a staging path and move it onto - // the address instead, so a later close only unlinks the staging path, which - // is already gone. + // Closing unlinks the original bind path, even if another app replaced it. Bind a staging path first. const bindUnix = async (directory: string, mode: "take-over" | "claim-free") => { const staging = NodePath.join(directory, `${NodeCrypto.randomBytes(6).toString("hex")}.tmp`); @@ -213,7 +213,6 @@ export async function startDesktopAppControlServer(input: { let server: NodeNet.Server; let inode: number | null = null; if (input.directory === null) { - // Named pipes close with the app that owns them, so no other app can remove this one. server = await listen(input.address); } else { await prepareUnixDirectory({ directory: input.directory, userId: input.userId }); @@ -222,10 +221,10 @@ export async function startDesktopAppControlServer(input: { let closed = false; const reclaimOnce = async () => { - // Never replace a socket that exists, so two apps cannot trade the path back and forth. + // Replacing an existing socket would let two apps trade the path indefinitely. if (closed || input.directory === null || (await inodeAt(input.address)) !== null) return; if (await prepareUnixDirectory({ directory: input.directory, userId: input.userId })) { - // A watch follows the directory's inode, so a recreated directory needs a new one. + // Directory watches follow inodes, so recreate the watch after directory replacement. watchDirectory(input.directory); } const next = await bindUnix(input.directory, "claim-free").catch( @@ -269,7 +268,7 @@ export async function startDesktopAppControlServer(input: { close: async () => { if (closed) return; closed = true; - // A running reclaim can replace the watcher, so close the watcher after it. + // Reclaim can replace the watcher; close it afterward. await pendingReclaim; watcher?.close(); for (const socket of sockets) socket.destroy(); @@ -386,7 +385,10 @@ export const make = Effect.gen(function* () { webContents.send(DESKTOP_APP_ACTIVATION_REQUEST_CHANNEL, request); }); }), - complete: (response) => Effect.sync(() => broker.complete(response)), + // The IPC handler owns the activation-completion span. + complete: Effect.fnUntraced(function* (response) { + return yield* Effect.sync(() => broker.complete(response)); + }), }); }); diff --git a/apps/desktop/src/app/DesktopAppIdentity.ts b/apps/desktop/src/app/DesktopAppIdentity.ts index 395c06141d64c..5fd6983c66682 100644 --- a/apps/desktop/src/app/DesktopAppIdentity.ts +++ b/apps/desktop/src/app/DesktopAppIdentity.ts @@ -38,7 +38,7 @@ const normalizeCommitHash = (value: string): Option.Option => { : Option.none(); }; -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const assets = yield* DesktopAssets.DesktopAssets; const electronApp = yield* ElectronApp.ElectronApp; @@ -91,9 +91,7 @@ export const make = Effect.gen(function* () { const configure = Effect.gen(function* () { const commitHash = yield* resolveAboutCommitHash; - // Electron removes spaces from this name to build the native User-Agent - // product token, but leaves parentheses intact. Keep the runtime name valid - // without rewriting preview sessions (which breaks Turnstile, #7110). + // Electron strips spaces but keeps parentheses in its User-Agent token, breaking Turnstile in preview sessions. yield* electronApp.setName( `${environment.branding.baseName} ${environment.branding.stageLabel}`, ); @@ -107,9 +105,7 @@ export const make = Effect.gen(function* () { yield* electronApp.setAppUserModelId(environment.appUserModelId); } - // Unpackaged runs only. A packaged bundle already carries its icon in - // Info.plist, so setting the dock tile again changes nothing except to - // overwrite a custom icon the user attached to the app themselves. + // Packaged bundles carry their icon in Info.plist; setting it again overwrites the user's custom icon. if (environment.platform === "darwin" && !environment.isPackaged) { const iconPaths = yield* assets.iconPaths; yield* Option.match(iconPaths.png, { diff --git a/apps/desktop/src/app/DesktopClerk.test.ts b/apps/desktop/src/app/DesktopClerk.test.ts index 1e572412d4693..8a823cde8db79 100644 --- a/apps/desktop/src/app/DesktopClerk.test.ts +++ b/apps/desktop/src/app/DesktopClerk.test.ts @@ -1,13 +1,21 @@ // @effect-diagnostics nodeBuiltinImport:off globalFetchInEffect:off - Hosted handoff test uses a real localhost listener without an OpenAI account. +import * as NodeFS from "node:fs"; import * as NodeHttp from "node:http"; -import * as NodePath from "@effect/platform-node/NodePath"; +import * as NodeOS from "node:os"; +import * as NodePath from "node:path"; +import * as NodePathLayer from "@effect/platform-node/NodePath"; import { codexAuthHandoffUrl, readCodexAuthDelivery } from "@t3tools/shared/codexAuthHandoff"; import { EnvironmentId, ProviderInstanceId } from "@t3tools/contracts"; import * as HostProcess from "@t3tools/shared/HostProcess"; import { assert, describe, it } from "@effect/vitest"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; -import { beforeEach, vi } from "vite-plus/test"; +import { afterAll, beforeEach, vi } from "vite-plus/test"; + +const clerkStateDir = NodeFS.mkdtempSync(NodePath.join(NodeOS.tmpdir(), "t3-desktop-clerk-")); +afterAll(() => { + NodeFS.rmSync(clerkStateDir, { recursive: true, force: true }); +}); const { createClerkBridgeMock, requestSingleInstanceLockMock, storageAdapter, storageMock } = vi.hoisted(() => ({ @@ -28,8 +36,6 @@ vi.mock("@clerk/electron", () => ({ vi.mock("@clerk/electron/storage", () => ({ storage: storageMock, })); - -import * as Option from "effect/Option"; import * as Exit from "effect/Exit"; import * as FileSystem from "effect/FileSystem"; import * as ElectronApp from "../electron/ElectronApp.ts"; @@ -60,7 +66,7 @@ const layerDesktopClerk = ( listeners = new Map void>(), ) => { const environment = DesktopEnvironment.DesktopEnvironment.of({ - stateDir: "/tmp/t3-state", + stateDir: clerkStateDir, isDevelopment, appDataDirectory: "/tmp/app-data", platform, @@ -94,7 +100,7 @@ const layerDesktopClerk = ( return DesktopClerk.layer.pipe( Layer.provide( Layer.mergeAll( - NodePath.layerPosix, + NodePathLayer.layerPosix, Layer.succeed(DesktopEnvironment.DesktopEnvironment, environment), Layer.succeed(ElectronApp.ElectronApp, electronApp), Layer.succeed(ElectronShell.ElectronShell, shell), @@ -158,8 +164,13 @@ describe("DesktopClerk", () => { `setPath:userData:${userData}`, "requestSingleInstanceLock", "on:second-instance", + "on:open-url", "createClerkBridge", ]); + assert.deepEqual(storageMock.mock.calls, [ + [{ path: NodePath.join(NodePath.resolve(clerkStateDir), "clerk") }], + ]); + assert.notStrictEqual(createClerkBridgeMock.mock.calls[0]?.[0]?.storage, storageAdapter); }, ); @@ -202,7 +213,7 @@ describe("DesktopClerk", () => { }, ); - it.effect("delivers queued startup links and later links once in arrival order", () => { + it.effect("delivers each queued startup link once, before later links", () => { storageMock.mockReturnValue(storageAdapter); createClerkBridgeMock.mockReturnValue({ cleanup: vi.fn(), isPrimaryInstance: true }); const listeners = new Map void>(); @@ -210,6 +221,7 @@ describe("DesktopClerk", () => { const first = "t3code://new?prompt=first"; const second = "t3code://threads/env-1/thread-1"; const later = "t3code://new?prompt=later"; + const launchPair = "t3code://pair?pairingUrl=https%3A%2F%2Fvps.example.com%2F%23token%3Dabc"; const delivered = Promise.withResolvers(); const electronApp = { on: (name: string, listener: (...args: unknown[]) => void) => @@ -222,13 +234,14 @@ describe("DesktopClerk", () => { const clerk = yield* DesktopClerk.DesktopClerk; listeners.get("second-instance")?.({}, ["t3", first]); listeners.get("second-instance")?.({}, ["t3", second]); + listeners.get("open-url")?.({ preventDefault: () => undefined }, launchPair); assert.deepEqual(received, []); yield* clerk.configure; listeners.get("second-instance")!({}, ["t3", later]); yield* Effect.promise(() => delivered.promise); - assert.deepEqual(received, [first, second, later]); + assert.deepEqual(received, [launchPair, first, second, later]); }).pipe( Effect.scoped, Effect.provide(layerDesktopClerk(true, [], "darwin", undefined, undefined, listeners)), @@ -297,7 +310,7 @@ it.effect( }), } as unknown as ElectronApp.ElectronApp["Service"]; const electronWindow = { - currentMainOrFirst: Effect.succeed(Option.some(window)), + currentMainOrFirst: Effect.succeedSome(window), reveal: () => Effect.sync(() => revealed.resolve()), } as unknown as ElectronWindow.ElectronWindow["Service"]; return Effect.gen(function* () { @@ -427,6 +440,7 @@ it.effect("hands web and app links to the renderer and leaves other links alone" }), } as unknown as ElectronApp.ElectronApp["Service"]; const received: Array = []; + const pairLink = "t3code://pair?pairingUrl=https%3A%2F%2Fvps.example.com%2F%23token%3Dabc"; yield* Effect.gen(function* () { const clerk = yield* DesktopClerk.DesktopClerk; yield* clerk.configure; @@ -439,6 +453,8 @@ it.effect("hands web and app links to the renderer and leaves other links alone" assert.strictEqual(open("http://localhost:3000/"), 1); assert.strictEqual(open("t3code://new?prompt=hi"), 1); assert.strictEqual(open("t3code://threads/env-1/thread-1"), 1); + assert.strictEqual(open(pairLink), 1); + assert.strictEqual(open("t3code://pair"), 0); assert.strictEqual(open("mailto:hello@example.com"), 0); assert.strictEqual(open("t3code://somewhere-else"), 0); yield* Effect.yieldNow; @@ -447,6 +463,7 @@ it.effect("hands web and app links to the renderer and leaves other links alone" "http://localhost:3000/", "t3code://new?prompt=hi", "t3code://threads/env-1/thread-1", + pairLink, ]); }).pipe( Effect.provide(layerDesktopClerk(true, [], "darwin", undefined, undefined, listeners)), diff --git a/apps/desktop/src/app/DesktopClerk.ts b/apps/desktop/src/app/DesktopClerk.ts index 505b48194cf7c..e569cb7530ebd 100644 --- a/apps/desktop/src/app/DesktopClerk.ts +++ b/apps/desktop/src/app/DesktopClerk.ts @@ -13,6 +13,7 @@ import { receiveCodexAuthCallback, CodexAuthCallbackError } from "./CodexAuthCal import * as ElectronShell from "../electron/ElectronShell.ts"; import { providerAuthReturnUrl } from "@t3tools/shared/providerAuthReturnUrl"; import { promptLinkAppPath } from "@t3tools/shared/promptLinks"; +import { readPairingAppLink } from "@t3tools/shared/remote"; import * as HostProcess from "@t3tools/shared/HostProcess"; import { clerkFrontendApiHostnameFromPublishableKey } from "@t3tools/shared/relayAuth"; import * as ElectronApp from "../electron/ElectronApp.ts"; @@ -20,6 +21,7 @@ import * as ElectronProtocol from "../electron/ElectronProtocol.ts"; import * as ElectronWindow from "../electron/ElectronWindow.ts"; import * as DesktopUserData from "./DesktopUserData.ts"; import * as DesktopEnvironment from "./DesktopEnvironment.ts"; +import { openClerkTokenStorage } from "./ClerkTokenStore.ts"; import * as DesktopWebLinks from "./DesktopWebLinks.ts"; declare const __T3CODE_BUILD_CLERK_PUBLISHABLE_KEY__: string | undefined; @@ -83,19 +85,29 @@ export const desktopClerkFrontendApiHostname = resolveDesktopClerkFrontendApiHos : __T3CODE_BUILD_CLERK_PUBLISHABLE_KEY__, ); -function createDesktopClerkBridge(stateDir: string, isDevelopment: boolean) { +function createDesktopClerkBridge( + stateDir: string, + isDevelopment: boolean, + userDataPath: string, + appVersion: string, + isPackaged: boolean, +) { return createClerkBridge({ - storage: storage({ path: stateDir }), + storage: openClerkTokenStorage( + stateDir, + (directory) => storage({ path: directory }), + userDataPath, + ), manageSingleInstanceLock: false, passkeys: true, renderer: { - scheme: ElectronProtocol.getDesktopScheme(isDevelopment), + scheme: ElectronProtocol.getDesktopScheme(isDevelopment, appVersion, isPackaged), host: ElectronProtocol.DESKTOP_HOST, }, }); } -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const environment = yield* DesktopEnvironment.DesktopEnvironment; const electronApp = yield* ElectronApp.ElectronApp; @@ -105,14 +117,12 @@ export const make = Effect.gen(function* () { const userDataPath = yield* DesktopUserData.resolveUserDataPath(environment); yield* electronApp.setPath("userData", userDataPath); - // T3 owns the profile-scoped lock on every platform; Clerk skips it on macOS. - // Quit is asynchronous, so interrupt before the application runtime is built. + // Clerk skips the profile lock on macOS. Interrupt before runtime construction because quit is asynchronous. if (!(yield* electronApp.requestSingleInstanceLock)) { yield* electronApp.quit; return yield* Effect.interrupt; } - // Retain launch arguments while asynchronous startup builds the application runtime. const pendingSecondInstances: Array = []; let handleSecondInstance = (argv: readonly string[]) => { pendingSecondInstances.push(argv); @@ -120,10 +130,26 @@ export const make = Effect.gen(function* () { yield* electronApp.on("second-instance", (_event: unknown, argv: readonly string[]) => { handleSecondInstance(argv); }); + // macOS hands a launch link to open-url, which can fire before configure runs. + const pendingOpenUrls: Array = []; + let handleOpenUrl = (url: string) => { + pendingOpenUrls.push(url); + return true; + }; + yield* electronApp.on("open-url", (event: { preventDefault: () => void }, url: string) => { + if (handleOpenUrl(url)) event.preventDefault(); + }); yield* Effect.acquireRelease( Effect.try({ - try: () => createDesktopClerkBridge(environment.stateDir, environment.isDevelopment), + try: () => + createDesktopClerkBridge( + environment.stateDir, + environment.isDevelopment, + userDataPath, + environment.appVersion, + environment.isPackaged, + ), catch: (cause) => new DesktopClerkBridgeInitializationError({ stateDir: environment.stateDir, @@ -153,7 +179,15 @@ export const make = Effect.gen(function* () { const startProviderAuthHandoff = (value: string | undefined) => { if (!value) return false; - const request = readCodexAuthHandoff(value, environment.isDevelopment); + const request = readCodexAuthHandoff( + value, + environment.isDevelopment, + ElectronProtocol.getDesktopScheme( + environment.isDevelopment, + environment.appVersion, + environment.isPackaged, + ), + ); if (!request) return false; void runPromise( Effect.gen(function* () { @@ -179,7 +213,7 @@ export const make = Effect.gen(function* () { }; const resumeProviderAuth = (value: string | undefined) => { const destination = providerAuthReturnUrl(value); - const expectedOrigin = `${ElectronProtocol.getDesktopScheme(environment.isDevelopment)}://app`; + const expectedOrigin = `${ElectronProtocol.getDesktopScheme(environment.isDevelopment, environment.appVersion, environment.isPackaged)}://app`; if (!destination?.startsWith(`${expectedOrigin}/`)) return false; void runPromise( Effect.gen(function* () { @@ -196,7 +230,8 @@ export const make = Effect.gen(function* () { return true; }; const openAppLink = (value: string | undefined) => { - if (!value || promptLinkAppPath(value) === null) return false; + if (!value || (promptLinkAppPath(value) === null && readPairingAppLink(value) === null)) + return false; void runPromise(webLinks.receive(value)); return true; }; @@ -207,15 +242,12 @@ export const make = Effect.gen(function* () { void runPromise(webLinks.receive(url)); return true; }; - yield* electronApp.on("open-url", (event: { preventDefault: () => void }, url: string) => { - if ( - startProviderAuthHandoff(url) || - resumeProviderAuth(url) || - openWebLink(url) || - openAppLink(url) - ) - event.preventDefault(); - }); + handleOpenUrl = (url) => + startProviderAuthHandoff(url) || + resumeProviderAuth(url) || + openWebLink(url) || + openAppLink(url); + for (const url of pendingOpenUrls.splice(0)) handleOpenUrl(url); yield* electronApp.on("open-file", (event: { preventDefault: () => void }, path: string) => { if (!DesktopWebLinks.isWebPageFile(path)) return; event.preventDefault(); diff --git a/apps/desktop/src/app/DesktopCliCommand.test.ts b/apps/desktop/src/app/DesktopCliCommand.test.ts index c9a79a81d3b55..f7ad8d908ae0f 100644 --- a/apps/desktop/src/app/DesktopCliCommand.test.ts +++ b/apps/desktop/src/app/DesktopCliCommand.test.ts @@ -1,5 +1,6 @@ import * as NodeServices from "@effect/platform-node/NodeServices"; import { afterEach, beforeEach, expect, it } from "@effect/vitest"; +import * as HostProcess from "@t3tools/shared/HostProcess"; import * as Effect from "effect/Effect"; import * as FileSystem from "effect/FileSystem"; import * as Option from "effect/Option"; @@ -14,10 +15,17 @@ import * as DesktopEnvironment from "./DesktopEnvironment.ts"; const environmentFor = ( path: Path.Path, - input: { home: string; baseDir: string; platform?: NodeJS.Platform; isPackaged?: boolean }, + input: { + home: string; + baseDir: string; + platform?: NodeJS.Platform; + isPackaged?: boolean; + appVersion?: string; + }, ) => DesktopEnvironment.DesktopEnvironment.of({ path, + appVersion: input.appVersion ?? "1.2.3", platform: input.platform ?? "linux", isPackaged: input.isPackaged ?? true, homeDirectory: input.home, @@ -28,7 +36,13 @@ const environmentFor = ( } as unknown as DesktopEnvironment.DesktopEnvironment["Service"]); const commandIn = ( - input: { home: string; baseDir?: string; platform?: NodeJS.Platform; isPackaged?: boolean }, + input: { + home: string; + baseDir?: string; + platform?: NodeJS.Platform; + isPackaged?: boolean; + appVersion?: string; + }, spawner?: ChildProcessSpawner.ChildProcessSpawner["Service"], ) => Effect.gen(function* () { @@ -83,7 +97,6 @@ const fakePowerShell = (initial: string) => { return { registry, spawner }; }; -// The machine's own PATH may already hold a t3; each test sets the PATH it means. const machinePath = process.env.PATH; beforeEach(() => { process.env.PATH = ""; @@ -101,9 +114,15 @@ it.layer(NodeServices.layer)("DesktopCliCommand", (it) => { const command = yield* commandIn({ home }); const link = path.join(home, ".local", "bin", "t3"); - expect(yield* command.state).toEqual({ supported: true, installedPath: null, onPath: false }); + expect(yield* command.state).toEqual({ + supported: true, + installedPath: null, + onPath: false, + launcherPath: null, + }); const installed = yield* command.install; expect(installed.installedPath).toBe(link); + expect(installed.launcherPath).toBe(path.join(home, ".t3", "bin", "t3")); expect(yield* fs.readLink(link)).toBe(path.join(home, ".t3", "bin", "t3")); expect((yield* command.install).installedPath).toBe(link); @@ -130,6 +149,14 @@ it.layer(NodeServices.layer)("DesktopCliCommand", (it) => { yield* command.uninstall; expect(yield* fs.readFileString(theirs)).toBe("npm's t3\n"); expect(yield* fs.readLink(path.join(home, "bin", "t3"))).toBe(path.join(home, "gone")); + + const launcher = path.join(home, ".t3", "bin", "t3"); + yield* fs.writeFileString(launcher, "npm's t3\n"); + process.env.PATH = path.dirname(launcher); + expect(yield* command.state).toMatchObject({ onPath: false, shadowedBy: launcher }); + expect((yield* Effect.flip(command.install)).message).toContain("Could not set up"); + yield* command.uninstall; + expect(yield* fs.readFileString(launcher)).toBe("npm's t3\n"); }).pipe(Effect.scoped), ); @@ -178,6 +205,67 @@ it.layer(NodeServices.layer)("DesktopCliCommand", (it) => { }).pipe(Effect.scoped), ); + it.effect.skipIf(HostProcess.Platform.defaultValue() === "win32")( + "skips a t3 directory or a file this user cannot execute", + () => + Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + const home = yield* fs.makeTempDirectoryScoped(); + const folder = path.join(home, "folder"); + const plain = path.join(home, "plain"); + const shadow = path.join(home, "shadow"); + yield* fs.makeDirectory(path.join(folder, "t3"), { recursive: true }); + yield* fs.makeDirectory(plain); + yield* fs.writeFileString(path.join(plain, "t3"), "notes\n"); + // Root can execute mode 0o601; other users must honor the owner permissions. + yield* fs.chmod(path.join(plain, "t3"), process.getuid?.() === 0 ? 0o600 : 0o601); + yield* fs.makeDirectory(shadow); + yield* fs.writeFileString(path.join(shadow, "t3"), "#!/bin/sh\n", { mode: 0o755 }); + process.env.PATH = [folder, plain, shadow, path.join(home, ".local", "bin")].join(":"); + + const command = yield* commandIn({ home }); + expect((yield* command.state).shadowedBy).toBe(path.join(shadow, "t3")); + + const error = yield* Effect.flip(command.install); + expect(error.message).toContain(path.join(shadow, "t3")); + + yield* fs.remove(shadow, { recursive: true }); + expect(yield* command.install).toMatchObject({ + onPath: true, + installedPath: path.join(home, ".local", "bin", "t3"), + }); + }).pipe(Effect.scoped), + ); + + it.effect("does not treat its own launcher as another t3 when its folder is first on PATH", () => + Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + const home = yield* fs.makeTempDirectoryScoped(); + const launcher = path.join(home, ".t3", "bin", "t3"); + process.env.PATH = [path.dirname(launcher), path.join(home, ".local", "bin")].join(":"); + + const command = yield* commandIn({ home }); + const installed = yield* command.install; + + expect(yield* fs.exists(launcher)).toBe(true); + expect(installed).toMatchObject({ + onPath: true, + installedPath: path.join(home, ".local", "bin", "t3"), + }); + expect(installed.shadowedBy).toBeUndefined(); + expect(yield* command.state).toEqual(installed); + + const removed = yield* command.uninstall; + expect(removed.installedPath).toBeNull(); + expect(removed.onPath).toBe(true); + expect(yield* command.state).toEqual(removed); + expect(yield* fs.exists(installed.installedPath!)).toBe(false); + expect(yield* fs.exists(launcher)).toBe(true); + }).pipe(Effect.scoped), + ); + it.effect("leaves the Windows PATH alone when it cannot be read", () => Effect.gen(function* () { const fs = yield* FileSystem.FileSystem; @@ -222,3 +310,24 @@ it.layer(NodeServices.layer)("DesktopCliCommand", (it) => { }).pipe(Effect.scoped), ); }); + +it.effect("preserves an upstream shim when the fork installs or uninstalls its CLI", () => + Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + const home = yield* fs.makeTempDirectoryScoped(); + const original = yield* commandIn({ home }); + const installed = yield* original.install; + const link = installed.installedPath!; + const target = yield* fs.readLink(link); + const fork = yield* commandIn({ + home, + baseDir: path.join(home, ".t3-unlock-preview"), + appVersion: "0.1.6-unlock.1-preview.20261101.1", + }); + yield* fork.install.pipe(Effect.ignore); + expect(yield* fs.readLink(link)).toBe(target); + yield* fork.uninstall; + expect(yield* fs.readLink(link)).toBe(target); + }).pipe(Effect.scoped, Effect.provide(NodeServices.layer)), +); diff --git a/apps/desktop/src/app/DesktopCliCommand.ts b/apps/desktop/src/app/DesktopCliCommand.ts index 294f8a8b984e7..ed5378f10410e 100644 --- a/apps/desktop/src/app/DesktopCliCommand.ts +++ b/apps/desktop/src/app/DesktopCliCommand.ts @@ -1,3 +1,7 @@ +import { isUnlockDigitalPreviewVersion } from "@t3tools/shared/forkIdentity"; +// @effect-diagnostics-next-line nodeBuiltinImport:off -- FileSystem.access has no execute check. +import * as NodeFSP from "node:fs/promises"; + import type { DesktopCliCommandState } from "@t3tools/contracts"; import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; @@ -28,14 +32,8 @@ const pathEntries = (value: string | undefined, separator: string) => const sameWindowsPath = (left: string, right: string) => left.replace(/[\\/]+$/, "").toLowerCase() === right.replace(/[\\/]+$/, "").toLowerCase(); -/** - * Reads, or with `T3_SET` set writes, the user's PATH in the registry, keeping - * `%VAR%` entries unexpanded. Writes keep REG_EXPAND_SZ (Windows' default for - * PATH; `SetEnvironmentVariable` would store REG_SZ and break every `%VAR%` - * entry), then broadcast WM_SETTINGCHANGE so Explorer and the terminals it - * opens see the change. A failed read exits nonzero rather than reading as - * empty, so a write never replaces the user's PATH wholesale. - */ +// Preserve REG_EXPAND_SZ and %VAR% expansion; notify Explorer with WM_SETTINGCHANGE. +// Failed reads must exit nonzero to prevent replacing PATH wholesale. const WINDOWS_USER_PATH_SCRIPT = ` $ErrorActionPreference = 'Stop' if ($env:T3_SET -eq '1') { @@ -64,7 +62,7 @@ export class DesktopCliCommand extends Context.Service< } >()("@t3tools/desktop/app/DesktopCliCommand") {} -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const environment = yield* DesktopEnvironment.DesktopEnvironment; const fs = yield* FileSystem.FileSystem; @@ -86,6 +84,10 @@ export const make = Effect.gen(function* () { const isOurLink = Effect.fn("DesktopCliCommand.isOurLink")( function* (link: string) { yield* fs.readLink(link); + if (isUnlockDigitalPreviewVersion(environment.appVersion ?? "")) { + const [target, ownTarget] = yield* Effect.all([fs.realPath(link), fs.realPath(launcher)]); + if (target !== ownTarget) return false; + } // The launcher is a few KB; never read a large binary another `t3` links to. const info = yield* fs.stat(link); if (info.type !== "File" || Number(info.size) > 16_384) return false; @@ -95,6 +97,19 @@ export const make = Effect.gen(function* () { Effect.orElseSucceed(() => false), ); + // PATH can reach the regular launcher directly; removal still requires isOurLink. + const runsOurLauncher = Effect.fn("DesktopCliCommand.runsOurLauncher")( + function* (candidate: string) { + if (yield* isOurLink(candidate)) return true; + const [resolved, ours] = yield* Effect.all([fs.realPath(candidate), fs.realPath(launcher)]); + if (resolved !== ours) return false; + const info = yield* fs.stat(candidate); + if (info.type !== "File" || Number(info.size) > 16_384) return false; + return (yield* fs.readFileString(candidate)).includes(DesktopCliShim.MARKER); + }, + Effect.orElseSucceed(() => false), + ); + const powershell = (env: Record) => Effect.scoped( Effect.gen(function* () { @@ -124,10 +139,19 @@ export const make = Effect.gen(function* () { Effect.mapError(() => fail("Could not update your PATH.")), ); + const isExecutableFile = Effect.fn("DesktopCliCommand.isExecutableFile")( + function* (target: string) { + if ((yield* fs.stat(target)).type !== "File") return false; + yield* Effect.tryPromise(() => NodeFSP.access(target, NodeFSP.constants.X_OK)); + return true; + }, + Effect.orElseSucceed(() => false), + ); + const firstOnPath = Effect.gen(function* () { for (const directory of pathEntries(process.env.PATH, ":")) { const candidate = path.join(directory, "t3"); - if (yield* exists(candidate)) return Option.some(candidate); + if (yield* isExecutableFile(candidate)) return Option.some(candidate); } return Option.none(); }); @@ -135,7 +159,7 @@ export const make = Effect.gen(function* () { const foreignFirstOnPath = Effect.gen(function* () { if (windows) return Option.none(); const first = yield* firstOnPath; - if (Option.isNone(first) || (yield* isOurLink(first.value))) return Option.none(); + if (Option.isNone(first) || (yield* runsOurLauncher(first.value))) return Option.none(); return first; }); @@ -156,18 +180,31 @@ export const make = Effect.gen(function* () { const state: DesktopCliCommand["Service"]["state"] = Effect.gen(function* () { if (!environment.isPackaged) { - return { supported: false, installedPath: null, onPath: false } as const; + return { supported: false, installedPath: null, onPath: false, launcherPath: null } as const; } + const launcherPath = (yield* exists(launcher)) ? launcher : null; const installed = yield* installedAt; const shadowedBy = yield* foreignFirstOnPath; const shadow = Option.isSome(shadowedBy) ? { shadowedBy: shadowedBy.value } : {}; - if (Option.isNone(installed)) { - return { supported: true, installedPath: null, onPath: false, ...shadow }; - } const first = yield* firstOnPath; - const onPath = windows || (Option.isSome(first) && (yield* isOurLink(first.value))); - return { supported: true, installedPath: installed.value, onPath, ...shadow }; - }).pipe(Effect.orElseSucceed(() => ({ supported: false, installedPath: null, onPath: false }))); + const onPath = windows + ? Option.isSome(installed) + : Option.isSome(first) && (yield* runsOurLauncher(first.value)); + return { + supported: true, + installedPath: Option.getOrNull(installed), + onPath, + launcherPath, + ...shadow, + }; + }).pipe( + Effect.orElseSucceed(() => ({ + supported: false, + installedPath: null, + onPath: false, + launcherPath: null, + })), + ); const ensureLauncher = DesktopCliShim.install.pipe( Effect.provideService(DesktopEnvironment.DesktopEnvironment, environment), diff --git a/apps/desktop/src/app/DesktopCliShim.test.ts b/apps/desktop/src/app/DesktopCliShim.test.ts index e043b4d16d8de..50fcb08d9c64a 100644 --- a/apps/desktop/src/app/DesktopCliShim.test.ts +++ b/apps/desktop/src/app/DesktopCliShim.test.ts @@ -81,7 +81,6 @@ describe("renderCliShim", () => { executable: NodePath.join(root, "app"), entry: "/bin.mjs", }); - // sudo clears the environment, so the launcher supplies its own. expect(run(shim, []).stdout).toContain(`home=${root}/home`); expect(run(shim, [], { T3CODE_HOME: "/elsewhere" }).stdout).toContain("home=/elsewhere"); const relative = NodeChildProcess.spawnSync("./bin/t3", [], { cwd: root, encoding: "utf8" }); diff --git a/apps/desktop/src/app/DesktopCliShim.ts b/apps/desktop/src/app/DesktopCliShim.ts index a9d9f04c4e829..3d4b94abff462 100644 --- a/apps/desktop/src/app/DesktopCliShim.ts +++ b/apps/desktop/src/app/DesktopCliShim.ts @@ -6,8 +6,7 @@ import * as Option from "effect/Option"; import * as DesktopEnvironment from "./DesktopEnvironment.ts"; import { makeComponentLogger } from "./DesktopObservability.ts"; -// An AppImage mounts somewhere new each run, so its launcher mounts the -// AppImage itself instead of pointing into it. +// AppImage mounts change each run; the launcher must mount the image itself. const { logInfo, logWarning } = makeComponentLogger("desktop-cli-shim"); export const MARKER = "Written by T3 Code: runs the desktop app's bundled t3 CLI."; @@ -26,12 +25,7 @@ export type CliShimTarget = | { readonly kind: "direct"; readonly executable: string; readonly entry: string } | { readonly kind: "windows"; readonly executable: string; readonly entry: string }; -/** - * Electron runs the server as plain Node with `ELECTRON_RUN_AS_NODE`, which - * reads the entry from inside the asar archive. The launcher's own path and the - * app's T3 home are written in, so the command the server shows is absolute and - * `sudo`, which clears the environment, still runs against this install's home. - */ +/** Embed this install's home and executable path so `sudo`, which clears the environment, uses the same install. */ export const renderCliShim = (input: { readonly target: CliShimTarget; readonly shimPath: string; @@ -48,9 +42,7 @@ export const renderCliShim = (input: { `rem ${MARKER}`, // Delayed expansion would rewrite `!name!` in paths and arguments. "setlocal EnableExtensions DisableDelayedExpansion", - // Only a non-ASCII path needs the console switched to UTF-8 to read it; a - // Ctrl-C that ends the batch skips the restore, so the switch is left out - // for the common all-ASCII install. + // Ctrl-C skips codepage restoration, so switch to UTF-8 only for non-ASCII install paths. ...(utf8 ? [ `for /f "tokens=2 delims=:." %%c in ('chcp') do set "t3_codepage=%%c"`, @@ -97,8 +89,7 @@ export const renderCliShim = (input: { ...header, // Extract-and-run would make the runtime start the app instead of mounting it. "unset APPIMAGE_EXTRACT_AND_RUN", - // The AppImage runtime prints its mount point, then stays mounted until - // killed. Background jobs ignore Ctrl-C, so the traps unmount it on any exit. + // The runtime stays mounted until killed; traps unmount it because background jobs ignore Ctrl-C. "work=$(mktemp -d) || exit 1", '"$app" --appimage-mount >"$work/mount" 2>/dev/null &', "mounter=$!", diff --git a/apps/desktop/src/app/DesktopConfig.ts b/apps/desktop/src/app/DesktopConfig.ts index 4842f272d7488..6605b4551a16b 100644 --- a/apps/desktop/src/app/DesktopConfig.ts +++ b/apps/desktop/src/app/DesktopConfig.ts @@ -56,6 +56,7 @@ export const DesktopConfig = Config.all({ otlpProtocol: Config.schema(OtlpProtocol, "T3CODE_OTLP_PROTOCOL").pipe( Config.withDefault("http/json"), ), + desktopLauncherPath: trimmedString("T3CODE_DESKTOP_LAUNCHER_PATH"), appImagePath: trimmedString("APPIMAGE"), disableAutoUpdate: optionalBoolean("T3CODE_DISABLE_AUTO_UPDATE"), mockUpdates: optionalBoolean("T3CODE_DESKTOP_MOCK_UPDATES"), diff --git a/apps/desktop/src/app/DesktopConnectionCatalogStore.test.ts b/apps/desktop/src/app/DesktopConnectionCatalogStore.test.ts index 0b446f8ada300..8b4fc23a99335 100644 --- a/apps/desktop/src/app/DesktopConnectionCatalogStore.test.ts +++ b/apps/desktop/src/app/DesktopConnectionCatalogStore.test.ts @@ -100,7 +100,7 @@ const withStore = ( }).pipe(Effect.provide(NodeServices.layer), Effect.scoped); describe("DesktopConnectionCatalogStore", () => { - it.effect("persists, reads, and clears an encrypted connection catalog", () => + it.effect("persists and reads an encrypted connection catalog", () => withStore( Effect.gen(function* () { const store = yield* DesktopConnectionCatalogStore.DesktopConnectionCatalogStore; @@ -108,9 +108,6 @@ describe("DesktopConnectionCatalogStore", () => { assert.isTrue(yield* store.set(catalog)); assert.deepStrictEqual(yield* store.get, Option.some(catalog)); - - yield* store.clear; - assert.deepStrictEqual(yield* store.get, Option.none()); }), ), ); diff --git a/apps/desktop/src/app/DesktopConnectionCatalogStore.ts b/apps/desktop/src/app/DesktopConnectionCatalogStore.ts index a9020c36d1c89..ceb3f293550bf 100644 --- a/apps/desktop/src/app/DesktopConnectionCatalogStore.ts +++ b/apps/desktop/src/app/DesktopConnectionCatalogStore.ts @@ -163,7 +163,6 @@ export class DesktopConnectionCatalogStore extends Context.Service< boolean, DesktopConnectionCatalogStoreWriteError | DesktopConnectionCatalogStoreProtectionError >; - readonly clear: Effect.Effect; } >()("@t3tools/desktop/app/DesktopConnectionCatalogStore") {} @@ -503,15 +502,6 @@ export const make = Effect.gen(function* () { yield* writeCatalog(catalog); return true; }), - clear: fileSystem.remove(catalogPath, { force: true }).pipe( - Effect.catch((error) => - Effect.logWarning("Could not clear the desktop connection catalog.", { - catalogPath, - error, - }), - ), - Effect.withSpan("desktop.connectionCatalogStore.clear"), - ), }); }); diff --git a/apps/desktop/src/app/DesktopEarlyElectronStartup.ts b/apps/desktop/src/app/DesktopEarlyElectronStartup.ts index 0015e642672c0..00a355bf49617 100644 --- a/apps/desktop/src/app/DesktopEarlyElectronStartup.ts +++ b/apps/desktop/src/app/DesktopEarlyElectronStartup.ts @@ -86,8 +86,7 @@ const WAYLAND_COLOR_MANAGER_FEATURE = "WaylandWpColorManagerV1"; const featureListNames = (value: string | null): ReadonlyArray => (value ?? "").split(",").flatMap((entry) => entry.trim().match(/^\*?([^<:]+)/)?.[1] ?? []); -// A stale HYPRLAND_INSTANCE_SIGNATURE is often inherited into other desktops, so only -// trust the session's desktop names. +// HYPRLAND_INSTANCE_SIGNATURE can be stale; trust only the session's desktop names. const isHyprlandSession = (env: NodeJS.ProcessEnv): boolean => (trimNonEmpty(env.XDG_CURRENT_DESKTOP) ?? trimNonEmpty(env.XDG_SESSION_DESKTOP) ?? "") .split(":") @@ -103,12 +102,8 @@ const HyprctlVersionJson = fromLenientJson( ); const decodeHyprctlVersionJson = Schema.decodeSync(HyprctlVersionJson); -// Hyprland 0.48.0 added wp-color-manager-v1 (hyprwm/Hyprland#9444) advertising -// FEATURE_SET_PRIMARIES while rejecting set_primaries outside debug mode, which Chromium -// treats as a fatal protocol error. 0.51.0 accepts them (hyprwm/Hyprland#11499). -// Only stock builds of these releases count. Matching the commit as well as the tag -// keeps later development builds that still report an old VERSION and tag (Nix -// synthesizes `v${VERSION}`) on the default. +// Hyprland 0.48.0 rejects advertised set_primaries (hyprwm/Hyprland#9444); 0.51.0 accepts it (hyprwm/Hyprland#11499). +// Check commits because dev and Nix builds can retain release versions and tags. const AFFECTED_HYPRLAND_RELEASE_COMMITS: ReadonlyMap = new Map([ ["0.48.0", "5ee35f914f921e5696030698e74fb5566a804768"], ["0.48.1", "29e2e59fdbab8ed2cc23a20e3c6043d5decb5cdc"], diff --git a/apps/desktop/src/app/DesktopEnvironment.test.ts b/apps/desktop/src/app/DesktopEnvironment.test.ts index 21095b5f823c0..1f54ea9b13925 100644 --- a/apps/desktop/src/app/DesktopEnvironment.test.ts +++ b/apps/desktop/src/app/DesktopEnvironment.test.ts @@ -38,6 +38,28 @@ const makeEnvironment = ( ) => DesktopEnvironment.DesktopEnvironment.pipe(Effect.provide(layerEnvironment(overrides, env))); describe("DesktopEnvironment", () => { + it.effect("isolates direct preview launch and preserves explicit and source profiles", () => + Effect.gen(function* () { + const preview = { isPackaged: true, appVersion: "0.1.6-unlock.1-preview.20261101.1" }; + const isolated = yield* makeEnvironment(preview); + assert.equal(isolated.baseDir, "/Users/alice/.t3-unlock-preview"); + assert.equal( + isolated.appDataDirectory, + "/Users/alice/Library/Application Support/T3 Code Unlock Digital Preview", + ); + assert.equal(isolated.displayName, "T3 Code Unlock Digital Preview"); + const explicit = yield* makeEnvironment(preview, { + T3CODE_HOME: "/tmp/explicit-server", + T3CODE_DESKTOP_APP_DATA_DIR: "/tmp/explicit-desktop", + }); + assert.equal(explicit.baseDir, "/tmp/explicit-server"); + assert.equal(explicit.appDataDirectory, "/tmp/explicit-desktop"); + const source = yield* makeEnvironment({ ...preview, isPackaged: false }); + assert.equal(source.baseDir, "/Users/alice/.t3"); + assert.equal(source.appDataDirectory, "/Users/alice/Library/Application Support"); + }), + ); + it.effect("uses the standard macOS app data directory by default", () => Effect.gen(function* () { const environment = yield* makeEnvironment(); diff --git a/apps/desktop/src/app/DesktopEnvironment.ts b/apps/desktop/src/app/DesktopEnvironment.ts index e5b794141f228..df16124a25f20 100644 --- a/apps/desktop/src/app/DesktopEnvironment.ts +++ b/apps/desktop/src/app/DesktopEnvironment.ts @@ -1,3 +1,9 @@ +import { + isUnlockDigitalPreviewVersion, + UNLOCK_PREVIEW_PRODUCT_NAME, + UNLOCK_PREVIEW_APP_ID, + UNLOCK_PREVIEW_HOME, +} from "@t3tools/shared/forkIdentity"; import type { DesktopAppBranding, DesktopAppStageLabel, @@ -77,6 +83,7 @@ export class DesktopEnvironment extends Context.Service< readonly linuxDesktopEntryName: string; readonly linuxWmClass: string; readonly linuxApplicationsDir: string; + readonly desktopLauncherPath: Option.Option; readonly appImagePath: Option.Option; readonly defaultDesktopSettings: DesktopAppSettings.DesktopSettings; readonly runtimeInfo: DesktopRuntimeInfo; @@ -148,7 +155,9 @@ const make = Effect.fn("desktop.environment.make")(function* ( const homeDirectory = input.homeDirectory; const devServerUrl = config.devServerUrl; const isDevelopment = Option.isSome(devServerUrl); - const appDataDirectory = Option.match(config.desktopAppDataDirectory, { + const forkPreview = + input.isPackaged && !isDevelopment && isUnlockDigitalPreviewVersion(input.appVersion); + const defaultAppDataDirectory = Option.match(config.desktopAppDataDirectory, { onSome: (directory) => path.resolve(directory), onNone: () => input.platform === "win32" @@ -159,7 +168,12 @@ const make = Effect.fn("desktop.environment.make")(function* ( ? path.join(homeDirectory, "Library", "Application Support") : Option.getOrElse(config.xdgConfigHome, () => path.join(homeDirectory, ".config")), }); + const appDataDirectory = + forkPreview && Option.isNone(config.desktopAppDataDirectory) + ? path.join(defaultAppDataDirectory, UNLOCK_PREVIEW_PRODUCT_NAME) + : defaultAppDataDirectory; const baseDir = resolveDesktopBaseDir({ + defaultDirectoryName: forkPreview ? UNLOCK_PREVIEW_HOME : ".t3", homeDirectory, joinPath: path.join, t3Home: config.t3Home, @@ -170,10 +184,17 @@ const make = Effect.fn("desktop.environment.make")(function* ( input.isPackaged && input.platform === "win32" ? path.join(input.resourcesPath, "server.asar") : appRoot; - const branding = resolveDesktopAppBranding({ + const standardBranding = resolveDesktopAppBranding({ isDevelopment, appVersion: input.appVersion, }); + const branding = forkPreview + ? { + ...standardBranding, + baseName: UNLOCK_PREVIEW_PRODUCT_NAME, + displayName: UNLOCK_PREVIEW_PRODUCT_NAME, + } + : standardBranding; const displayName = branding.displayName; const stateDir = resolveDesktopStateDir({ baseDir, @@ -231,11 +252,16 @@ const make = Effect.fn("desktop.environment.make")(function* ( branding, displayName, appUserModelId: Option.getOrElse(config.appUserModelIdOverride, () => - isDevelopment ? "com.t3tools.t3code.dev" : "com.t3tools.t3code", + isDevelopment + ? "com.t3tools.t3code.dev" + : forkPreview + ? UNLOCK_PREVIEW_APP_ID + : "com.t3tools.t3code", ), linuxDesktopEntryName: resolveLinuxDesktopEntryName(isDevelopment), linuxWmClass: isDevelopment ? "t3code-dev" : "t3code", linuxApplicationsDir, + desktopLauncherPath: config.desktopLauncherPath, appImagePath: config.appImagePath, defaultDesktopSettings: DesktopAppSettings.resolveDefaultDesktopSettings(input.appVersion), runtimeInfo: resolveDesktopRuntimeInfo({ diff --git a/apps/desktop/src/app/DesktopLegacyLocalStorage.test.ts b/apps/desktop/src/app/DesktopLegacyLocalStorage.test.ts new file mode 100644 index 0000000000000..c34f4b0c94ac9 --- /dev/null +++ b/apps/desktop/src/app/DesktopLegacyLocalStorage.test.ts @@ -0,0 +1,31 @@ +import * as NodeServices from "@effect/platform-node/NodeServices"; +import { expect, it } from "@effect/vitest"; +import * as Effect from "effect/Effect"; +import * as FileSystem from "effect/FileSystem"; +import * as Layer from "effect/Layer"; +import * as Option from "effect/Option"; +import * as DesktopEnvironment from "./DesktopEnvironment.ts"; +import * as DesktopLegacyLocalStorage from "./DesktopLegacyLocalStorage.ts"; + +it.effect("skips legacy profile inspection for an isolated fork preview", () => + Effect.gen(function* () { + const legacy = yield* DesktopLegacyLocalStorage.DesktopLegacyLocalStorage; + yield* legacy.load("/disposable/fork/profile"); + expect(Option.isNone(yield* legacy.take)).toBe(true); + yield* legacy.complete; + }).pipe( + Effect.provide( + DesktopLegacyLocalStorage.layer.pipe( + Layer.provide(NodeServices.layer), + Layer.provide(Layer.succeed(FileSystem.FileSystem, FileSystem.makeNoop({}))), + Layer.provide( + Layer.succeed(DesktopEnvironment.DesktopEnvironment, { + isPackaged: true, + isDevelopment: false, + appVersion: "0.1.6-unlock.1-preview.20261101.1", + } as DesktopEnvironment.DesktopEnvironment["Service"]), + ), + ), + ), + ), +); diff --git a/apps/desktop/src/app/DesktopLegacyLocalStorage.ts b/apps/desktop/src/app/DesktopLegacyLocalStorage.ts index 122aa3393f9cd..88797c6d0b5e7 100644 --- a/apps/desktop/src/app/DesktopLegacyLocalStorage.ts +++ b/apps/desktop/src/app/DesktopLegacyLocalStorage.ts @@ -1,3 +1,4 @@ +import { isUnlockDigitalPreviewVersion } from "@t3tools/shared/forkIdentity"; import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; import * as FileSystem from "effect/FileSystem"; @@ -10,10 +11,7 @@ import * as ElectronProtocol from "../electron/ElectronProtocol.ts"; import { readChromiumLocalStorage } from "./chromiumLocalStorage.ts"; import * as DesktopEnvironment from "./DesktopEnvironment.ts"; -/** - * The V1 profile is only read, never opened by Chromium, so this works while V1 - * is still running. - */ +/** Reads the V1 profile without opening it in Chromium, even while V1 runs. */ export class DesktopLegacyLocalStorage extends Context.Service< DesktopLegacyLocalStorage, { @@ -75,7 +73,11 @@ const make = Effect.gen(function* () { }); const load = Effect.fn("desktop.legacyLocalStorage.load")(function* (userDataPath: string) { - if (environment.isDevelopment) return; + if ( + environment.isDevelopment || + (environment.isPackaged && isUnlockDigitalPreviewVersion(environment.appVersion)) + ) + return; const marker = path.join(userDataPath, MARKER_FILE_NAME); if (yield* fs.exists(marker).pipe(Effect.orElseSucceed(() => true))) return; yield* Ref.set(markerPath, Option.some(marker)); diff --git a/apps/desktop/src/app/DesktopLifecycle.ts b/apps/desktop/src/app/DesktopLifecycle.ts index 7512d2bc1741d..93347949e00fa 100644 --- a/apps/desktop/src/app/DesktopLifecycle.ts +++ b/apps/desktop/src/app/DesktopLifecycle.ts @@ -208,7 +208,7 @@ function quitFromSignal( ); } -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = DesktopLifecycle.of({ relaunch: Effect.fn("desktop.lifecycle.relaunch")(function* (reason) { const electronApp = yield* ElectronApp.ElectronApp; diff --git a/apps/desktop/src/app/DesktopLinuxUrlHandler.test.ts b/apps/desktop/src/app/DesktopLinuxUrlHandler.test.ts index 854f43c5623c1..6605223e6addb 100644 --- a/apps/desktop/src/app/DesktopLinuxUrlHandler.test.ts +++ b/apps/desktop/src/app/DesktopLinuxUrlHandler.test.ts @@ -1,7 +1,11 @@ import * as NodeServices from "@effect/platform-node/NodeServices"; import { assert, describe, it } from "@effect/vitest"; +import * as HostProcess from "@t3tools/shared/HostProcess"; +import * as Cause from "effect/Cause"; import * as Deferred from "effect/Deferred"; import * as Effect from "effect/Effect"; +import * as Exit from "effect/Exit"; +import * as Fiber from "effect/Fiber"; import * as FileSystem from "effect/FileSystem"; import * as Layer from "effect/Layer"; import * as Option from "effect/Option"; @@ -9,6 +13,8 @@ import * as Path from "effect/Path"; import * as PlatformError from "effect/PlatformError"; import * as Sink from "effect/Sink"; import * as Stream from "effect/Stream"; +import * as TestClock from "effect/testing/TestClock"; +import * as ChildProcess from "effect/process/ChildProcess"; import * as ChildProcessSpawner from "effect/process/ChildProcessSpawner"; import * as DesktopEnvironment from "./DesktopEnvironment.ts"; @@ -31,6 +37,7 @@ const makeEnvironment = (path: Path.Path, overrides: Record = { linuxDesktopEntryName: "com.t3tools.T3Code.desktop", linuxWmClass: "t3code", linuxApplicationsDir: "/home/alice/.local/share/applications", + desktopLauncherPath: Option.none(), appImagePath: Option.some("/home/alice/Applications/T3-Code.AppImage"), path, ...overrides, @@ -55,6 +62,7 @@ const layerHandler = ( recorded: RecordedRegistration, input: { readonly environment?: Record; + readonly processSpawner?: ChildProcessSpawner.ChildProcessSpawner["Service"]; readonly updateDesktopDatabaseExitCode?: number; readonly updateDesktopDatabaseStalled?: boolean; readonly updateDesktopDatabaseStarted?: Deferred.Deferred; @@ -105,6 +113,7 @@ const layerHandler = ( Layer.succeed( ChildProcessSpawner.ChildProcessSpawner, ChildProcessSpawner.make((command) => { + if (input.processSpawner) return input.processSpawner.spawn(command); const childProcess = command as unknown as { readonly command: string; readonly args: ReadonlyArray; @@ -228,6 +237,18 @@ describe("DesktopLinuxUrlHandler", () => { }); }); + it.effect("launches a distribution package through its configured launcher", () => { + const recorded = emptyRecording(); + + return Effect.gen(function* () { + yield* runRegister(recorded, { + environment: { desktopLauncherPath: Option.some("/opt/T3 Code/t3code") }, + }); + + assert.include(recorded.files[0]?.content, 'Exec="/opt/T3 Code/t3code" %U'); + }); + }); + it.effect("does not rewrite the pre-ready entry while the portal can be reading it", () => { const recorded = emptyRecording(); @@ -345,6 +366,69 @@ describe("DesktopLinuxUrlHandler", () => { assert.deepEqual(writeFailed.commands, []); }); }); + + it.effect.skipIf(HostProcess.Platform.defaultValue() !== "linux")( + "continues registration after a timed-out cache helper ignores SIGTERM", + () => + Effect.gen(function* () { + const realSpawner = yield* ChildProcessSpawner.ChildProcessSpawner; + const nodeExecutable = yield* HostProcess.ExecutablePath; + const recorded = emptyRecording(); + const spawned = yield* Deferred.make(); + const ready = yield* Deferred.make(); + const processSpawner = ChildProcessSpawner.make((command) => + Effect.gen(function* () { + if (!ChildProcess.isStandardCommand(command)) { + return yield* Effect.die("expected a single registration command"); + } + recorded.commands.push({ command: command.command, args: command.args }); + if (command.command !== "update-desktop-database") return mockProcess(0); + const child = yield* realSpawner.spawn( + ChildProcess.make( + nodeExecutable, + [ + "-e", + // The watchdog makes the unfixed case exit with a distinguishable code. + "process.on('SIGTERM', () => setTimeout(() => process.exit(99), 5000));" + + "process.stdout.write('ready\\n'); setInterval(() => {}, 2147483647);", + ], + { ...command.options, stdout: "pipe" }, + ), + ); + yield* Deferred.succeed(spawned, child); + yield* Stream.runHead(child.stdout); + yield* Deferred.succeed(ready, undefined); + return child; + }), + ); + const registration = yield* runRegister(recorded, { processSpawner }).pipe( + Effect.forkScoped, + ); + const child = yield* Deferred.await(spawned); + yield* Effect.addFinalizer(() => + child.isRunning.pipe( + Effect.flatMap((running) => + running ? child.kill({ killSignal: "SIGKILL" }) : Effect.void, + ), + Effect.ignore, + ), + ); + yield* Deferred.await(ready); + yield* TestClock.adjust("5 seconds"); + yield* Fiber.join(registration); + + const exit = yield* Effect.exit(child.exitCode); + if (Exit.isFailure(exit)) { + assert.include(Cause.pretty(exit.cause), "SIGKILL"); + } else { + assert.fail(`cache helper exited with ${exit.value} instead of being force-killed`); + } + assert.deepEqual( + recorded.commands.map(({ command }) => command), + ["update-desktop-database", "xdg-mime"], + ); + }).pipe(Effect.scoped, Effect.provide(NodeServices.layer)), + ); }); interface ThemeIconRun { @@ -457,9 +541,7 @@ const themeIconFixture = (source: Uint8Array) => const hicolorDir = path.join(root, "icons", "hicolor"); const appsDir = path.join(hicolorDir, "256x256", "apps"); const cachePath = path.join(hicolorDir, "icon-theme.cache"); - // A fixed time in the past, in whole seconds as fs.utimes expects. const pastSeconds = 1_600_000_000; - // An existing cache that predates any installed icon. const seedCache = Effect.gen(function* () { yield* fileSystem.makeDirectory(appsDir, { recursive: true }); yield* fileSystem.writeFile(cachePath, new Uint8Array([0])); @@ -484,10 +566,15 @@ it.layer(NodeServices.layer)("DesktopLinuxUrlHandler theme icons", (it) => { const run: ThemeIconRun = { root: fixture.root, commands: [] }; yield* registerWithRealFileSystem(run); - assert.deepEqual([...(yield* fileSystem.readDirectory(fixture.appsDir))].sort(), [ - "com.t3tools.T3Code.png", - "com.t3tools.t3code.png", - ]); + // macOS may alias these case variants; both spellings must resolve to the icon. + assert.deepEqual( + [ + ...new Set( + (yield* fileSystem.readDirectory(fixture.appsDir)).map((name) => name.toLowerCase()), + ), + ], + ["com.t3tools.t3code.png"], + ); for (const name of ["com.t3tools.t3code", "com.t3tools.T3Code"]) { const target = path.join(fixture.appsDir, `${name}.png`); assert.deepEqual([...(yield* fileSystem.readFile(target))], [...icon]); @@ -512,8 +599,11 @@ it.layer(NodeServices.layer)("DesktopLinuxUrlHandler theme icons", (it) => { yield* fixture.seedCache; const lower = path.join(fixture.appsDir, "com.t3tools.t3code.png"); const upper = path.join(fixture.appsDir, "com.t3tools.T3Code.png"); - yield* fileSystem.writeFile(lower, new Uint8Array([3, 2, 1])); yield* fileSystem.writeFile(upper, new Uint8Array([1, 2, 3])); + yield* fileSystem.writeFile(lower, new Uint8Array([3, 2, 1])); + const aliases = + Option.getOrThrow((yield* fileSystem.stat(lower)).ino) === + Option.getOrThrow((yield* fileSystem.stat(upper)).ino); for (const target of [lower, upper]) { yield* fileSystem.utimes(target, fixture.pastSeconds, fixture.pastSeconds); } @@ -528,7 +618,9 @@ it.layer(NodeServices.layer)("DesktopLinuxUrlHandler theme icons", (it) => { assert.deepEqual([...(yield* fileSystem.readFile(lower))], [1, 2, 3]); const upperInfo = yield* fileSystem.stat(upper); - assert.equal(Option.getOrThrow(upperInfo.mtime).getTime(), fixture.pastSeconds * 1000); + if (aliases) + assert.isAbove(Option.getOrThrow(upperInfo.mtime).getTime(), fixture.pastSeconds * 1000); + else assert.equal(Option.getOrThrow(upperInfo.mtime).getTime(), fixture.pastSeconds * 1000); assert.deepEqual( run.commands.filter(({ command }) => command === "gtk-update-icon-cache"), [{ command: "gtk-update-icon-cache", args: ["-f", "-t", fixture.hicolorDir] }], @@ -547,7 +639,6 @@ it.layer(NodeServices.layer)("DesktopLinuxUrlHandler theme icons", (it) => { commands: [], onIconCacheRefresh: fixture.rewriteCache, }; - // A cache stamped later than the new icons, as after a clock correction. const future = fixture.pastSeconds + 10 * 365 * 24 * 60 * 60; yield* fileSystem.utimes(fixture.cachePath, future, future); diff --git a/apps/desktop/src/app/DesktopLinuxUrlHandler.ts b/apps/desktop/src/app/DesktopLinuxUrlHandler.ts index e03418964e33b..130477392cda2 100644 --- a/apps/desktop/src/app/DesktopLinuxUrlHandler.ts +++ b/apps/desktop/src/app/DesktopLinuxUrlHandler.ts @@ -12,12 +12,7 @@ import * as DesktopAssets from "./DesktopAssets.ts"; import * as DesktopEnvironment from "./DesktopEnvironment.ts"; import { makeComponentLogger } from "./DesktopObservability.ts"; -// Linux ships as an AppImage, so the .desktop entry users end up with is -// created by whatever integration tool they use (AppImageLauncher names it -// appimagekit_-….desktop) and its filename is not under our control. -// Electron's app.setAsDefaultProtocolClient resolves the desktop id from -// setDesktopName, which cannot match those files — so the browser keeps -// prompting "Choose an application" for every OAuth callback. +// AppImage integrators choose the .desktop filename, so setDesktopName cannot identify it for protocol registration. const { logInfo, logWarning } = makeComponentLogger("desktop-linux-url-handler"); export class DesktopLinuxUrlHandlerRegistrationError extends Schema.TaggedError()( @@ -62,9 +57,7 @@ const escapeDesktopEntryString = (value: string): string => .replaceAll("\r", "\\r") .replaceAll("\t", "\\t"); -// Exec values are unescaped twice by implementations: first the general -// string-value rules, then the Exec quoting rules — so writing composes the -// layers in reverse. +// Exec values undergo general unescaping then Exec unquoting; escape in reverse order. export function escapeDesktopEntryExecArgument(value: string): string { const quoted = value .replaceAll("\\", () => "\\\\") @@ -103,9 +96,7 @@ export function renderUrlHandlerDesktopEntry(input: { ].join("\n"); } -// Some docks and bars look the Wayland app id up in the icon theme when no -// visible desktop entry matches the window, for example an AppImage run without -// integration. Theme lookups are case-sensitive, so install both spellings. +// Docks may look up the Wayland app id without a desktop entry; icon theme lookups are case-sensitive. const LINUX_THEME_ICON_SIZE = "256x256"; function linuxThemeIconNames(desktopEntryName: string): readonly string[] { @@ -123,14 +114,18 @@ export class DesktopLinuxUrlHandler extends Context.Service< } >()("@t3tools/desktop/app/DesktopLinuxUrlHandler") {} -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const environment = yield* DesktopEnvironment.DesktopEnvironment; const fileSystem = yield* FileSystem.FileSystem; const spawner = yield* ChildProcessSpawner.ChildProcessSpawner; const assets = yield* DesktopAssets.DesktopAssets; - const scheme = ElectronProtocol.getDesktopScheme(environment.isDevelopment); + const scheme = ElectronProtocol.getDesktopScheme( + environment.isDevelopment, + environment.appVersion, + environment.isPackaged, + ); const desktopEntryPath = environment.path.join( environment.linuxApplicationsDir, environment.linuxDesktopEntryName, @@ -141,17 +136,21 @@ export const make = Effect.gen(function* () { const themeIconDir = environment.path.join(hicolorDir, LINUX_THEME_ICON_SIZE, "apps"); const writeDesktopEntry = Effect.gen(function* () { + // Distribution packages that run on a shared Electron set + // T3CODE_DESKTOP_LAUNCHER_PATH, because process.execPath is that Electron. // Inside the mounted AppImage, process.execPath points at a transient // /tmp/.mount_* path — the handler must launch the AppImage itself. - const execTarget = Option.getOrElse(environment.appImagePath, () => process.execPath); + const execTarget = environment.desktopLauncherPath.pipe( + Option.orElse(() => environment.appImagePath), + Option.getOrElse(() => process.execPath), + ); const content = renderUrlHandlerDesktopEntry({ displayName: environment.displayName, execTarget, scheme, ...(environment.isPackaged ? { iconPath } : {}), }); - // Pre-ready setup normally wrote this already. Avoid truncating a valid - // entry while the portal may be reading it during startup. + // Avoid truncating the pre-ready entry while the portal may be reading it. const existing = yield* fileSystem .readFileString(desktopEntryPath) .pipe(Effect.orElseSucceed(() => null)); @@ -179,6 +178,7 @@ export const make = Effect.gen(function* () { stdin: "ignore", stdout: "ignore", stderr: "ignore", + forceKillAfter: "1 second", }, ); const handle = yield* spawner.spawn(command); @@ -235,10 +235,8 @@ export const make = Effect.gen(function* () { yield* fileSystem.writeFile(target, icon); changed = true; } - // Only keep an existing cache current. Creating one would leave GTK reading - // a cache that other tools installing user icons do not update. An icon - // newer than the cache also retries a refresh that failed on an earlier - // launch. + // Creating a cache would leave GTK reading stale icons from other installers. + // A newer icon retries a refresh that failed on an earlier launch. const cachePath = environment.path.join(hicolorDir, "icon-theme.cache"); const cachedAt = yield* modifiedAt(cachePath).pipe(Effect.option); if (Option.isNone(cachedAt)) return; @@ -313,10 +311,7 @@ export const make = Effect.gen(function* () { yield* installThemeIcons; yield* updateDesktopDatabase.pipe( - // Some MIME implementations, including GIO, use mimeinfo.cache to verify - // that a desktop entry is associated with a scheme. Cache refresh is - // independently best-effort so a missing update-desktop-database executable - // does not prevent xdg-mime from recording the requested default. + // GIO verifies scheme associations through mimeinfo.cache. A missing cache updater must not block xdg-mime. Effect.catch((error) => logWarning("desktop MIME cache refresh failed", { applicationsDir: environment.linuxApplicationsDir, diff --git a/apps/desktop/src/app/DesktopObservability.test.ts b/apps/desktop/src/app/DesktopObservability.test.ts index f865ed312063a..ab8ea0b8e9d6e 100644 --- a/apps/desktop/src/app/DesktopObservability.test.ts +++ b/apps/desktop/src/app/DesktopObservability.test.ts @@ -1,4 +1,5 @@ import * as NodeHttpClient from "@effect/platform-node/NodeHttpClient"; +import desktopPackageJson from "../../package.json" with { type: "json" }; import * as NodeServices from "@effect/platform-node/NodeServices"; import { assert, describe, it } from "@effect/vitest"; import * as ConfigProvider from "effect/ConfigProvider"; @@ -312,4 +313,65 @@ describe("DesktopObservability", () => { ), ); }); + + it.effect("reports the app's own version for an unpackaged desktop run", () => { + const requests: Array = []; + return Effect.gen(function* () { + const fileSystem = yield* FileSystem.FileSystem; + const baseDir = yield* fileSystem.makeTempDirectoryScoped({ + prefix: "t3-desktop-observability-test-", + }); + const layerEnvironment = layerEnvironmentFor(baseDir); + yield* writeObservabilitySettings(layerEnvironment, { + otlpLogsUrl: "https://settings.example.com/v1/logs", + }); + + yield* Effect.scoped( + Effect.logInfo("desktop resource under test").pipe( + Effect.provide(DesktopObservability.layer.pipe(Layer.provideMerge(layerEnvironment))), + ), + ); + + const body = requests.map((request) => request.body).join("\n"); + assert.include( + body, + `"key":"service.version","value":{"stringValue":"${desktopPackageJson.version}"}`, + ); + }).pipe( + Effect.scoped, + Effect.provide(Layer.mergeAll(NodeServices.layer, layerCollector(requests), layerEmptyEnv)), + ); + }); + + it.effect("describes the Node runtime and the desktop mode under semantic or t3code keys", () => { + const requests: Array = []; + return Effect.gen(function* () { + const fileSystem = yield* FileSystem.FileSystem; + const baseDir = yield* fileSystem.makeTempDirectoryScoped({ + prefix: "t3-desktop-observability-test-", + }); + const layerEnvironment = layerEnvironmentFor(baseDir); + yield* writeObservabilitySettings(layerEnvironment, { + otlpLogsUrl: "https://settings.example.com/v1/logs", + }); + + yield* Effect.scoped( + Effect.logInfo("desktop resource under test").pipe( + Effect.provide(DesktopObservability.layer.pipe(Layer.provideMerge(layerEnvironment))), + ), + ); + + const body = requests.map((request) => request.body).join("\n"); + assert.include(body, '"key":"process.runtime.name","value":{"stringValue":"nodejs"}'); + assert.include( + body, + `"key":"process.runtime.version","value":{"stringValue":"${process.versions.node}"}`, + ); + assert.include(body, '"key":"t3code.desktop.mode","value":{"stringValue":"development"}'); + assert.notInclude(body, "service.mode"); + }).pipe( + Effect.scoped, + Effect.provide(Layer.mergeAll(NodeServices.layer, layerCollector(requests), layerEmptyEnv)), + ); + }); }); diff --git a/apps/desktop/src/app/DesktopObservability.ts b/apps/desktop/src/app/DesktopObservability.ts index 906ca1f8e4a27..3cd3936a59bfc 100644 --- a/apps/desktop/src/app/DesktopObservability.ts +++ b/apps/desktop/src/app/DesktopObservability.ts @@ -2,11 +2,14 @@ import { PRIMARY_LOCAL_ENVIRONMENT_ID } from "@t3tools/contracts"; import { makeLocalFileTracer, makeTraceSink, + nodeProcessRuntimeAttributes, + processServiceInstanceId, type SignalExport, } from "@t3tools/shared/observability"; import * as HostProcess from "@t3tools/shared/HostProcess"; import * as SharedObservability from "@t3tools/shared/observability"; import * as OtelEnvironment from "@t3tools/shared/otelEnvironment"; +import { releaseChannelOf, releaseResourceAttributes } from "@t3tools/shared/releaseResource"; import { parsePersistedServerObservabilitySettings, type PersistedServerObservabilitySettings, @@ -29,6 +32,8 @@ import * as SynchronizedRef from "effect/SynchronizedRef"; import * as Tracer from "effect/Tracer"; import { OtlpExporter, OtlpLogger, OtlpTracer } from "effect/observability"; +import desktopPackageJson from "../../package.json" with { type: "json" }; + import * as DesktopEnvironment from "./DesktopEnvironment.ts"; const DESKTOP_LOG_FILE_MAX_BYTES = 10 * 1024 * 1024; @@ -366,19 +371,19 @@ const resolveOtlpEndpoints = Effect.gen(function* () { otel, "traces", { url: Option.getOrUndefined(environment.otlpTracesUrl), export: signalExport }, - persisted.otlpTracesUrl, + { bootstrapUrl: undefined, settingsUrl: persisted.otlpTracesUrl }, ), metrics: OtelEnvironment.resolveSignalEndpoint( otel, "metrics", { url: Option.getOrUndefined(environment.otlpMetricsUrl), export: signalExport }, - persisted.otlpMetricsUrl, + { bootstrapUrl: undefined, settingsUrl: persisted.otlpMetricsUrl }, ), logs: OtelEnvironment.resolveSignalEndpoint( otel, "logs", { url: Option.getOrUndefined(environment.otlpLogsUrl), export: signalExport }, - persisted.otlpLogsUrl, + { bootstrapUrl: undefined, settingsUrl: persisted.otlpLogsUrl }, ), warnings: otel.warnings, resourceAttributes: otel.resourceAttributes, @@ -426,8 +431,7 @@ const backendLogFilePathForInstance = ( environment: DesktopEnvironment.DesktopEnvironment["Service"], id: string, ): string => { - // Primary keeps the historical "server-child.log" path so ops scripts - // and packaged-build log inspection still find it where it always lived. + // Keep the primary log path stable for ops scripts and packaged-build inspection. if (id === PRIMARY_BACKEND_LOG_INSTANCE_ID) { return environment.path.join(environment.logDir, "server-child.log"); } @@ -435,8 +439,7 @@ const backendLogFilePathForInstance = ( return environment.path.join(environment.logDir, `server-child-${sanitized}.log`); }; -// Cacheable by resolved file path so two ids that sanitize to the same filename -// share a single RotatingLogFileWriter (no race on currentSize tracking). +// IDs sharing a sanitized filename must share a writer to avoid currentSize races. const makeBackendOutputSinkForInstance = ( environment: DesktopEnvironment.DesktopEnvironment["Service"], id: string, @@ -456,90 +459,91 @@ const makeBackendOutputLogShape = ( ): Effect.Effect => Option.match(sink, { onNone: () => Effect.succeed(DesktopBackendOutputLogNoop), - onSome: (logFile) => - Effect.gen(function* () { - const sessionRef = yield* Ref.make(Option.none()); - const writeFailure = Effect.fn("desktop.observability.backendOutput.writeFailure")( - function* (session: BackendOutputSession, details: string) { - yield* writeBackendChildLogRecord(logFile, { - message: "backend child process failure output start", - level: "ERROR", - annotations: { - component: "desktop-backend-child", - runId: session.runId, - instanceId: id, - phase: "START", - details: session.startDetails, - }, - }); - for (const output of session.chunks) { - yield* writeBackendChildLogRecord(logFile, { - message: "backend child process output", - level: output.streamName === "stderr" ? "ERROR" : "INFO", - annotations: { - component: "desktop-backend-child", - runId: session.runId, - instanceId: id, - stream: output.streamName, - text: textDecoder.decode(output.chunk.subarray(output.offset)), - }, - }); - } - yield* writeBackendChildLogRecord(logFile, { - message: "backend child process failure output end", - level: "ERROR", - annotations: { - component: "desktop-backend-child", - runId: session.runId, - instanceId: id, - phase: "END", - details: sanitizeLogValue(details), - }, - }); + // The enclosing operation owns the span for this inline handler. + onSome: Effect.fnUntraced(function* (logFile) { + const sessionRef = yield* Ref.make(Option.none()); + const writeFailure = Effect.fn("desktop.observability.backendOutput.writeFailure")(function* ( + session: BackendOutputSession, + details: string, + ) { + yield* writeBackendChildLogRecord(logFile, { + message: "backend child process failure output start", + level: "ERROR", + annotations: { + component: "desktop-backend-child", + runId: session.runId, + instanceId: id, + phase: "START", + details: session.startDetails, }, - ); - return { - beginSession: Effect.fn("desktop.observability.backendOutput.beginSession")(function* ({ - details, - }) { - const runId = yield* currentDesktopRunId; - yield* Ref.set( - sessionRef, - Option.some({ - runId, - startDetails: sanitizeLogValue(details), - chunks: [], - byteLength: 0, - }), - ); - }), - writeOutputChunk: Effect.fnUntraced(function* (streamName, chunk) { - if (environment.isDevelopment) { - yield* writeDevelopmentConsoleOutput(streamName, chunk); - } - yield* Ref.update( - sessionRef, - Option.map((session) => appendBoundedOutputChunk(session, streamName, chunk)), - ); - }), - persistFailureSnapshot: Effect.fn( - "desktop.observability.backendOutput.persistFailureSnapshot", - )(function* ({ details }) { - const session = yield* Ref.get(sessionRef); - if (Option.isSome(session)) { - yield* writeFailure(session.value, details); - } - }), - persistFailure: Effect.fn("desktop.observability.backendOutput.persistFailure")( - function* ({ details }) { - const session = yield* Ref.modify(sessionRef, (current) => [current, Option.none()]); - if (Option.isNone(session)) return; - yield* writeFailure(session.value, details); + }); + for (const output of session.chunks) { + yield* writeBackendChildLogRecord(logFile, { + message: "backend child process output", + level: output.streamName === "stderr" ? "ERROR" : "INFO", + annotations: { + component: "desktop-backend-child", + runId: session.runId, + instanceId: id, + stream: output.streamName, + text: textDecoder.decode(output.chunk.subarray(output.offset)), }, - ), - discardSession: Ref.set(sessionRef, Option.none()), - } satisfies DesktopBackendOutputLogShape; - }), + }); + } + yield* writeBackendChildLogRecord(logFile, { + message: "backend child process failure output end", + level: "ERROR", + annotations: { + component: "desktop-backend-child", + runId: session.runId, + instanceId: id, + phase: "END", + details: sanitizeLogValue(details), + }, + }); + }); + return { + beginSession: Effect.fn("desktop.observability.backendOutput.beginSession")(function* ({ + details, + }) { + const runId = yield* currentDesktopRunId; + yield* Ref.set( + sessionRef, + Option.some({ + runId, + startDetails: sanitizeLogValue(details), + chunks: [], + byteLength: 0, + }), + ); + }), + writeOutputChunk: Effect.fnUntraced(function* (streamName, chunk) { + if (environment.isDevelopment) { + yield* writeDevelopmentConsoleOutput(streamName, chunk); + } + yield* Ref.update( + sessionRef, + Option.map((session) => appendBoundedOutputChunk(session, streamName, chunk)), + ); + }), + persistFailureSnapshot: Effect.fn( + "desktop.observability.backendOutput.persistFailureSnapshot", + )(function* ({ details }) { + const session = yield* Ref.get(sessionRef); + if (Option.isSome(session)) { + yield* writeFailure(session.value, details); + } + }), + persistFailure: Effect.fn("desktop.observability.backendOutput.persistFailure")(function* ({ + details, + }) { + const session = yield* Ref.modify(sessionRef, (current) => [current, Option.none()]); + if (Option.isNone(session)) return; + yield* writeFailure(session.value, details); + }), + discardSession: Ref.set(sessionRef, Option.none()), + } satisfies DesktopBackendOutputLogShape; + }), }); const layerBackendOutputLogFactory = Layer.effect( @@ -586,7 +590,9 @@ const layerBackendOutputLogFactory = Layer.effect( }); return DesktopBackendOutputLogFactory.of({ - forInstance: (id) => makeForId(id), + forInstance: Effect.fn("DesktopBackendOutputLogFactory.forInstance")(function (id) { + return makeForId(id); + }), }); }), ); @@ -595,27 +601,28 @@ const layerTelemetry = Layer.unwrap( Effect.gen(function* () { const environment = yield* DesktopEnvironment.DesktopEnvironment; const endpoints = yield* resolveOtlpEndpoints; + // Unpackaged runs launch a script, so Electron reports its own version. + const serviceVersion = environment.isPackaged + ? environment.appVersion + : desktopPackageJson.version; const resource = { serviceName: "t3code-desktop", - serviceVersion: environment.appVersion, + serviceVersion, attributes: { "service.namespace": "t3code", "service.runtime": "desktop", - "service.mode": environment.isDevelopment ? "development" : "packaged", + "t3code.desktop.mode": environment.isDevelopment ? "development" : "packaged", + "service.instance.id": processServiceInstanceId(endpoints.resourceAttributes), + ...releaseResourceAttributes( + environment.isDevelopment ? "dev" : releaseChannelOf(serviceVersion), + endpoints.resourceAttributes, + ), "host.name": endpoints.resourceAttributes["host.name"] || (yield* HostProcess.Hostname), + ...nodeProcessRuntimeAttributes(), }, }; - // `Logger.layer` writes the whole logger set rather than adding to it, so - // every logger the main process wants has to be named in this one call. - // Splitting the OTLP logger back out into a layer of its own silently - // drops either it or the console output. - // Swapping `Logger.tracerLogger` out for the OTLP logger matches the - // server: both reach a collector, but the tracer logger covers only - // messages logged inside a recorded span and files them under traces, - // while the OTLP logger carries every message as a log record stamped - // with its trace and span ids. Keeping both would export every in-span - // message twice. + // Logger.layer replaces the logger set. tracerLogger would duplicate OTLP in-span messages. const layerLogger = Logger.layer( endpoints.logs === undefined ? [Logger.consolePretty(), Logger.tracerLogger] diff --git a/apps/desktop/src/app/DesktopPreReadyFileSystem.ts b/apps/desktop/src/app/DesktopPreReadyFileSystem.ts index 5af13f94413f5..6a7473e2f1b1a 100644 --- a/apps/desktop/src/app/DesktopPreReadyFileSystem.ts +++ b/apps/desktop/src/app/DesktopPreReadyFileSystem.ts @@ -32,9 +32,7 @@ const syncFs = (method: string, path: string, run: () => A) => }), }); -/** - * @public Service construction is part of the canonical Effect module API. - */ +/** @public */ export const make = FileSystem.makeNoop({ exists: (path) => syncFs("exists", path, () => { diff --git a/apps/desktop/src/app/DesktopPreReadyPlatform.test.ts b/apps/desktop/src/app/DesktopPreReadyPlatform.test.ts index 143a6e5fd87c7..f2b176ee3761f 100644 --- a/apps/desktop/src/app/DesktopPreReadyPlatform.test.ts +++ b/apps/desktop/src/app/DesktopPreReadyPlatform.test.ts @@ -166,6 +166,28 @@ describe("DesktopPreReadyPlatform", () => { ).pipe(Effect.ensuring(Effect.sync(() => vi.unstubAllEnvs()))); }); + it.effect("points the early portal entry at a configured distribution launcher", () => { + vi.stubEnv("VITE_DEV_SERVER_URL", ""); + vi.stubEnv("XDG_DATA_HOME", "/xdg"); + vi.stubEnv("APPIMAGE", "/Applications/current.AppImage"); + vi.stubEnv("T3CODE_DESKTOP_LAUNCHER_PATH", " /opt/T3 Code/t3code "); + getSwitchValueMock.mockReturnValue(""); + + return Effect.scoped( + Effect.gen(function* () { + yield* Layer.build( + DesktopPreReadyPlatform.layer.pipe( + Layer.provide(Layer.succeed(HostProcess.Platform, "linux")), + ), + ); + const entry = writeFileSyncMock.mock.calls.find( + ([path]) => path === "/xdg/applications/com.t3tools.T3Code.desktop", + )?.[1]; + assert.include(entry, 'Exec="/opt/T3 Code/t3code" %U'); + }), + ).pipe(Effect.ensuring(Effect.sync(() => vi.unstubAllEnvs()))); + }); + it.effect( "acquires a synchronous pre-ready layer before an asynchronous Clerk-shaped layer", () => diff --git a/apps/desktop/src/app/DesktopPreReadyPlatform.ts b/apps/desktop/src/app/DesktopPreReadyPlatform.ts index 58670439a5255..8bef7366e378a 100644 --- a/apps/desktop/src/app/DesktopPreReadyPlatform.ts +++ b/apps/desktop/src/app/DesktopPreReadyPlatform.ts @@ -49,7 +49,7 @@ export class DesktopPreReadyElectronOptions extends Context.Service< } >()("@t3tools/desktop/app/DesktopPreReadyPlatform/DesktopPreReadyElectronOptions") {} -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const platform = yield* HostProcess.Platform; const homeDirectory = yield* HostProcess.HomeDirectory; @@ -109,15 +109,17 @@ export const make = Effect.gen(function* () { isDevelopment: linux.isDevelopment, appVersion: Electron.app.getVersion(), }).displayName, - execTarget: process.env.APPIMAGE?.trim() || process.execPath, + execTarget: + process.env.T3CODE_DESKTOP_LAUNCHER_PATH?.trim() || + process.env.APPIMAGE?.trim() || + process.execPath, scheme: ElectronProtocol.getDesktopScheme(linux.isDevelopment), ...(iconPath === undefined ? {} : { iconPath }), }), "utf8", ); } catch {} - // Chromium caches its portal registration during startup. Set the identity - // before any asynchronous work can initialize it with Electron's default. + // Chromium caches portal identity; set it before any asynchronous initialization. Electron.app.setDesktopName(linux.linuxDesktopEntryName); Electron.app.commandLine.appendSwitch("class", linux.linuxWmClass); if (linux.passwordStore !== null && linuxPasswordStoreCommandLine === null) { @@ -146,8 +148,7 @@ export const make = Effect.gen(function* () { }); }).pipe(Effect.withSpan("desktop.electron.configureBeforeReady")); -// Keep Electron's strict pre-ready setup isolated so later runtime layers cannot -// observe app readiness before scheme privileges and command-line switches exist. +// Complete scheme privileges and switches before later layers can observe app readiness. export const layer = Layer.mergeAll( ElectronProtocol.layerSchemePrivileges, Layer.effect(DesktopPreReadyElectronOptions, make), diff --git a/apps/desktop/src/app/DesktopStartupRecovery.test.ts b/apps/desktop/src/app/DesktopStartupRecovery.test.ts new file mode 100644 index 0000000000000..d8a0ef1a999cc --- /dev/null +++ b/apps/desktop/src/app/DesktopStartupRecovery.test.ts @@ -0,0 +1,70 @@ +import type { DesktopUpdateState } from "@t3tools/contracts"; +import { describe, expect, it } from "vite-plus/test"; + +import { createInitialDesktopUpdateState } from "../updates/updateMachine.ts"; +import { resolveStartupRecoveryOffer } from "./DesktopStartupRecovery.ts"; + +const updateState = (patch: Partial): DesktopUpdateState => ({ + ...createInitialDesktopUpdateState( + "0.1.3", + { hostArch: "arm64", appArch: "arm64", runningUnderArm64Translation: false }, + "latest", + ), + enabled: true, + ...patch, +}); + +describe("resolveStartupRecoveryOffer", () => { + it("offers a newer version before going back", () => { + expect( + resolveStartupRecoveryOffer( + updateState({ status: "available", availableVersion: "0.1.4" }), + "0.1.2", + ), + ).toEqual({ _tag: "Update", version: "0.1.4" }); + }); + + it("offers a retained download after a later check fails", () => { + expect( + resolveStartupRecoveryOffer( + updateState({ status: "error", errorContext: "check", downloadedVersion: "0.1.4" }), + null, + ), + ).toEqual({ _tag: "Update", version: "0.1.4" }); + }); + + it("waits for the update check before offering to go back", () => { + expect(resolveStartupRecoveryOffer(updateState({ status: "checking" }), "0.1.2")).toEqual({ + _tag: "Checking", + }); + }); + + it("offers the last version that started when no update exists", () => { + expect(resolveStartupRecoveryOffer(updateState({ status: "up-to-date" }), "0.1.2")).toEqual({ + _tag: "Reinstall", + version: "0.1.2", + }); + }); + + it("does not offer an update that already failed to apply here", () => { + expect( + resolveStartupRecoveryOffer( + updateState({ + status: "downloaded", + downloadedVersion: "0.1.4", + notAppliedVersion: "0.1.4", + }), + "0.1.2", + ), + ).toEqual({ _tag: "Reinstall", version: "0.1.2" }); + }); + + it("falls back to the releases page when this version never started", () => { + expect(resolveStartupRecoveryOffer(updateState({ status: "disabled" }), "0.1.3")).toEqual({ + _tag: "Releases", + }); + expect(resolveStartupRecoveryOffer(updateState({ status: "up-to-date" }), null)).toEqual({ + _tag: "Releases", + }); + }); +}); diff --git a/apps/desktop/src/app/DesktopStartupRecovery.ts b/apps/desktop/src/app/DesktopStartupRecovery.ts new file mode 100644 index 0000000000000..4d2dbcfb14409 --- /dev/null +++ b/apps/desktop/src/app/DesktopStartupRecovery.ts @@ -0,0 +1,338 @@ +import type { DesktopUpdateState } from "@t3tools/contracts"; +import * as Effect from "effect/Effect"; +import * as FileSystem from "effect/FileSystem"; +import * as Option from "effect/Option"; +import * as Ref from "effect/Ref"; +import type * as Scope from "effect/Scope"; +import * as Stream from "effect/Stream"; +import * as SubscriptionRef from "effect/SubscriptionRef"; +import type * as Electron from "electron"; + +import * as ElectronApp from "../electron/ElectronApp.ts"; +import * as ElectronShell from "../electron/ElectronShell.ts"; +import * as ElectronTheme from "../electron/ElectronTheme.ts"; +import * as ElectronWindow from "../electron/ElectronWindow.ts"; +import * as DesktopUpdates from "../updates/DesktopUpdates.ts"; +import type { BackendStartupFailure } from "../backend/DesktopBackendManager.ts"; +import * as DesktopEnvironment from "./DesktopEnvironment.ts"; +import * as DesktopObservability from "./DesktopObservability.ts"; +import * as DesktopState from "./DesktopState.ts"; + +const RELEASES_URL = "https://github.com/pingdotgg/t3code/releases"; +const LAST_STARTED_VERSION_FILE = "desktop-last-started-version"; +// Buttons are plain links to this host; will-navigate cancels them and runs the action. +const ACTION_ORIGIN = "https://startup-recovery.invalid"; + +const { logInfo, logWarning } = DesktopObservability.makeComponentLogger( + "desktop-startup-recovery", +); + +export type StartupRecoveryOffer = + | { readonly _tag: "Checking" } + | { readonly _tag: "Update"; readonly version: string } + | { readonly _tag: "Downloading"; readonly version: string; readonly percent: number | null } + | { readonly _tag: "Reinstall"; readonly version: string } + | { readonly _tag: "Releases" }; + +const STARTUP_RECOVERY_ACTIONS = ["update", "reinstall", "releases", "copy", "quit"] as const; +type StartupRecoveryAction = (typeof STARTUP_RECOVERY_ACTIONS)[number]; + +/** Prefer a newer build, then the last build that started on this machine, then the releases page. */ +export function resolveStartupRecoveryOffer( + update: DesktopUpdateState, + lastStartedVersion: string | null, +): StartupRecoveryOffer { + if (update.status === "downloading" && update.availableVersion !== null) { + return { + _tag: "Downloading", + version: update.availableVersion, + percent: update.downloadPercent, + }; + } + const updateVersion = + update.downloadedVersion ?? (update.status === "available" ? update.availableVersion : null); + // A version that already failed to apply here would loop through install and relaunch. + if (updateVersion !== null && updateVersion !== update.notAppliedVersion) { + return { _tag: "Update", version: updateVersion }; + } + if (update.enabled && (update.status === "idle" || update.status === "checking")) { + return { _tag: "Checking" }; + } + if (lastStartedVersion !== null && lastStartedVersion !== update.currentVersion) { + return { _tag: "Reinstall", version: lastStartedVersion }; + } + return { _tag: "Releases" }; +} + +const escapeHtml = (value: string) => + value.replace( + /[&<>"']/g, + (char) => + ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[char] ?? char, + ); + +const actionLink = (action: StartupRecoveryAction, label: string, primary = false) => + `${escapeHtml(label)}`; + +function describeOffer(offer: StartupRecoveryOffer): { text: string; action: string } { + switch (offer._tag) { + case "Checking": + return { text: "Checking for a newer version…", action: "" }; + case "Update": + return { + text: `Version ${offer.version} is available. It can contain a fix.`, + action: actionLink("update", `Update to ${offer.version}`, true), + }; + case "Downloading": + return { + text: `Downloading ${offer.version}${offer.percent === null ? "" : ` (${Math.floor(offer.percent / 10) * 10}%)`}. T3 Code restarts when the download is done.`, + action: "", + }; + case "Reinstall": + return { + text: `Version ${offer.version} started correctly on this computer. Download it and install it to go back.`, + action: actionLink("reinstall", `Download ${offer.version}`, true), + }; + case "Releases": + return { + text: "Get a different version from the releases page.", + action: actionLink("releases", "Open releases", true), + }; + } +} + +function buildStartupRecoveryHtml(input: { + readonly appVersion: string; + readonly failure: BackendStartupFailure; + readonly offer: StartupRecoveryOffer; + readonly logDir: string; +}): string { + const offer = describeOffer(input.offer); + const output = input.failure.output.trim(); + return `T3 Code could not start +

T3 Code could not start

+

${escapeHtml(input.failure.reason)}

+

${escapeHtml(offer.text)}

+
${offer.action}${actionLink("copy", "Copy details")}${actionLink("quit", "Quit")}
+
${escapeHtml(output.length > 0 ? output : "The server wrote no output.")}
+

Version ${escapeHtml(input.appVersion)}. T3 Code tries again in the background. Logs: ${escapeHtml(input.logDir)}

+`; +} + +/** Shows a self-contained error window while the primary backend fails to start, so a broken release still opens. */ +export const listen: Effect.Effect< + void, + never, + | DesktopState.DesktopState + | DesktopUpdates.DesktopUpdates + | DesktopEnvironment.DesktopEnvironment + | ElectronApp.ElectronApp + | ElectronShell.ElectronShell + | ElectronTheme.ElectronTheme + | ElectronWindow.ElectronWindow + | FileSystem.FileSystem + | Scope.Scope +> = Effect.gen(function* () { + const { primaryBackendStartup, quitting } = yield* DesktopState.DesktopState; + const updates = yield* DesktopUpdates.DesktopUpdates; + const environment = yield* DesktopEnvironment.DesktopEnvironment; + const electronApp = yield* ElectronApp.ElectronApp; + const electronShell = yield* ElectronShell.ElectronShell; + const electronTheme = yield* ElectronTheme.ElectronTheme; + const electronWindow = yield* ElectronWindow.ElectronWindow; + const fileSystem = yield* FileSystem.FileSystem; + const runFork = Effect.runForkWith(yield* Effect.context()); + + const lastStartedVersionPath = environment.path.join( + environment.stateDir, + LAST_STARTED_VERSION_FILE, + ); + const lastStartedVersion = yield* fileSystem.readFileString(lastStartedVersionPath).pipe( + Effect.map((text) => text.trim() || null), + Effect.orElseSucceed(() => null), + ); + + const windowRef = yield* Ref.make(Option.none()); + // The failure that opened the window; later restarts do not reload its details. + const failureRef = yield* Ref.make(Option.none()); + const renderedHtmlRef = yield* Ref.make(""); + const checkedRef = yield* Ref.make(false); + const { latest, changes: updateChanges } = yield* updates.subscribe; + const updateStateRef = yield* Ref.make(latest); + + const offer = Ref.get(updateStateRef).pipe( + Effect.map((state) => resolveStartupRecoveryOffer(state, lastStartedVersion)), + ); + + const render = Effect.gen(function* () { + const window = yield* Ref.get(windowRef); + const failure = yield* Ref.get(failureRef); + if (Option.isNone(window) || Option.isNone(failure) || window.value.isDestroyed()) return; + const html = buildStartupRecoveryHtml({ + appVersion: environment.appVersion, + failure: failure.value, + offer: yield* offer, + logDir: environment.logDir, + }); + if ((yield* Ref.getAndSet(renderedHtmlRef, html)) === html) return; + void window.value.loadURL(`data:text/html;charset=utf-8,${encodeURIComponent(html)}`); + }); + + const runAction = Effect.fn("desktop.startupRecovery.runAction")(function* ( + action: StartupRecoveryAction, + ) { + yield* logInfo("startup recovery action", { action }); + const current = yield* offer; + switch (action) { + case "update": { + if (current._tag !== "Update") return; + const state = yield* updates.getState; + if (state.downloadedVersion === null) { + const download = yield* updates.download; + if (!download.completed) return; + } + // Waits for a running background check; plain install would refuse. + yield* updates.installPrepared(current.version); + return; + } + case "reinstall": + if (current._tag === "Reinstall") { + yield* electronShell.openExternal(`${RELEASES_URL}/tag/v${current.version}`); + } + return; + case "releases": + yield* electronShell.openExternal(RELEASES_URL); + return; + case "copy": { + const failure = yield* Ref.get(failureRef); + if (Option.isNone(failure)) return; + yield* electronShell.copyText( + `T3 Code ${environment.appVersion} (${environment.platform} ${environment.processArch}) could not start.\n${failure.value.reason}\n\n${failure.value.output}`, + ); + return; + } + case "quit": + yield* electronApp.quit; + return; + } + }); + + const show = Effect.fn("desktop.startupRecovery.show")( + function* () { + if (yield* Ref.get(quitting)) return; + // A backend that crashes after the app opened is reported by the app itself. + if (Option.isSome(yield* electronWindow.main)) return; + const existing = yield* Ref.get(windowRef); + if (Option.isSome(existing) && !existing.value.isDestroyed()) { + yield* electronWindow.reveal(existing.value); + return; + } + const shouldUseDarkColors = yield* electronTheme.shouldUseDarkColors; + const window = yield* electronWindow.create( + { + width: 640, + height: 480, + minWidth: 420, + minHeight: 320, + show: false, + title: "T3 Code could not start", + autoHideMenuBar: true, + backgroundColor: shouldUseDarkColors ? "#000000" : "#ffffff", + webPreferences: { + contextIsolation: true, + nodeIntegration: false, + sandbox: true, + javascript: false, + }, + }, + { auxiliary: true }, + ); + window.webContents.setWindowOpenHandler(() => ({ action: "deny" })); + window.webContents.on("will-navigate", (event, url) => { + event.preventDefault(); + const action = STARTUP_RECOVERY_ACTIONS.find((name) => url === `${ACTION_ORIGIN}/${name}`); + if (action !== undefined) runFork(runAction(action)); + }); + window.once("ready-to-show", () => { + if (!window.isDestroyed()) window.show(); + }); + window.once("closed", () => { + runFork( + Ref.set(windowRef, Option.none()).pipe(Effect.andThen(Ref.set(renderedHtmlRef, ""))), + ); + }); + yield* Ref.set(windowRef, Option.some(window)); + yield* render; + yield* logInfo("startup recovery window shown"); + }, + Effect.catch((error) => + logWarning("could not show startup recovery", { errorTag: error._tag }), + ), + ); + + const close = Effect.gen(function* () { + const window = yield* Ref.getAndSet(windowRef, Option.none()); + if (Option.isSome(window) && !window.value.isDestroyed()) window.value.close(); + }); + + const rememberStartedVersion = Effect.gen(function* () { + if (lastStartedVersion === environment.appVersion) return; + yield* fileSystem.writeFileString(lastStartedVersionPath, environment.appVersion); + }).pipe( + Effect.catch((error) => + logWarning("could not record the started version", { errorTag: error._tag }), + ), + ); + + yield* updateChanges.pipe( + Stream.runForEach((state) => Ref.set(updateStateRef, state).pipe(Effect.andThen(render))), + Effect.forkScoped, + ); + + yield* SubscriptionRef.changes(primaryBackendStartup).pipe( + Stream.runForEach( + Effect.fn("desktop.startupRecovery.onStartupChange")(function* (startup) { + if (startup._tag === "Ready") { + yield* Ref.set(failureRef, Option.none()); + yield* close; + yield* rememberStartedVersion; + return; + } + if (startup._tag !== "Failing") return; + if (Option.isSome(yield* Ref.get(failureRef))) return; + yield* Ref.set(failureRef, Option.some({ reason: startup.reason, output: startup.output })); + // The backend manager already logs each failure's reason. + yield* logWarning("primary backend failing to start"); + yield* show(); + if (!(yield* Ref.getAndSet(checkedRef, true))) { + yield* updates.check("startup-recovery").pipe(Effect.forkScoped); + } + }), + ), + Effect.catchCause((cause) => + Effect.logWarning("startup recovery stopped", cause).pipe( + Effect.annotateLogs({ component: "desktop-startup-recovery" }), + ), + ), + Effect.forkScoped, + ); + + // macOS keeps running with no windows; the Dock icon must bring the error back. + yield* electronApp.on("activate", () => { + runFork( + Ref.get(failureRef).pipe( + Effect.flatMap((failure) => (Option.isSome(failure) ? show() : Effect.void)), + ), + ); + }); +}); diff --git a/apps/desktop/src/app/DesktopState.ts b/apps/desktop/src/app/DesktopState.ts index cd2abe9106544..3452fd13c0807 100644 --- a/apps/desktop/src/app/DesktopState.ts +++ b/apps/desktop/src/app/DesktopState.ts @@ -2,18 +2,29 @@ import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import * as Ref from "effect/Ref"; +import * as SubscriptionRef from "effect/SubscriptionRef"; + +import type { BackendStartupFailure } from "../backend/DesktopBackendManager.ts"; + +/** Startup health of the primary local backend, read by the startup recovery window. */ +export type PrimaryBackendStartup = + | { readonly _tag: "Starting" } + | { readonly _tag: "Ready" } + | ({ readonly _tag: "Failing" } & BackendStartupFailure); export class DesktopState extends Context.Service< DesktopState, { readonly backendReady: Ref.Ref; readonly quitting: Ref.Ref; + readonly primaryBackendStartup: SubscriptionRef.SubscriptionRef; } >()("@t3tools/desktop/app/DesktopState") {} const make = Effect.all({ backendReady: Ref.make(false), quitting: Ref.make(false), + primaryBackendStartup: SubscriptionRef.make({ _tag: "Starting" }), }); export const layer = Layer.effect(DesktopState, make); diff --git a/apps/desktop/src/app/DesktopStatePaths.ts b/apps/desktop/src/app/DesktopStatePaths.ts index 006dd97092d42..dcdf55b9bf088 100644 --- a/apps/desktop/src/app/DesktopStatePaths.ts +++ b/apps/desktop/src/app/DesktopStatePaths.ts @@ -11,12 +11,13 @@ function normalizeConfiguredBaseDir(t3Home: Option.Option): Option.Optio } export function resolveDesktopBaseDir(input: { + readonly defaultDirectoryName?: string; readonly homeDirectory: string; readonly joinPath: JoinPath; readonly t3Home: Option.Option; }): string { return Option.getOrElse(normalizeConfiguredBaseDir(input.t3Home), () => - input.joinPath(input.homeDirectory, ".t3"), + input.joinPath(input.homeDirectory, input.defaultDirectoryName ?? ".t3"), ); } diff --git a/apps/desktop/src/app/DesktopWebLinks.test.ts b/apps/desktop/src/app/DesktopWebLinks.test.ts index 9e87cfb7a9c02..9b5bc89148dea 100644 --- a/apps/desktop/src/app/DesktopWebLinks.test.ts +++ b/apps/desktop/src/app/DesktopWebLinks.test.ts @@ -3,7 +3,6 @@ import { assert, describe, it } from "@effect/vitest"; import * as NodeEvents from "node:events"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; -import * as Option from "effect/Option"; import * as ElectronWindow from "../electron/ElectronWindow.ts"; import { WEB_LINK_OPEN_CHANNEL } from "../ipc/channels.ts"; @@ -26,7 +25,7 @@ const makeWindow = () => { Layer.succeed( ElectronWindow.ElectronWindow, ElectronWindow.ElectronWindow.of({ - currentMainOrFirst: Effect.succeed(Option.some(window)), + currentMainOrFirst: Effect.succeedSome(window), reveal: (target: Electron.BrowserWindow) => Effect.sync(() => void revealed.push(target)), } as unknown as ElectronWindow.ElectronWindow["Service"]), ), diff --git a/apps/desktop/src/app/DesktopWebLinks.ts b/apps/desktop/src/app/DesktopWebLinks.ts index f448f184b893f..ce63a710f7f7e 100644 --- a/apps/desktop/src/app/DesktopWebLinks.ts +++ b/apps/desktop/src/app/DesktopWebLinks.ts @@ -69,16 +69,15 @@ const make = Effect.gen(function* () { }); return DesktopWebLinks.of({ - receive: (url) => - Effect.suspend(() => { + receive: Effect.fn("DesktopWebLinks.receive")(function (url) { + return Effect.suspend(() => { pending.push(url); return flush; - }).pipe(Effect.withSpan("DesktopWebLinks.receive")), - setRendererReady: (ready) => - (ready ? startListening : Effect.sync(stopListening)).pipe( - Effect.andThen(flush), - Effect.withSpan("DesktopWebLinks.setRendererReady"), - ), + }); + }), + setRendererReady: Effect.fn("DesktopWebLinks.setRendererReady")(function (ready) { + return ready ? startListening : Effect.sync(stopListening); + }, Effect.andThen(flush)), }); }); diff --git a/apps/desktop/src/app/chromiumLocalStorage.ts b/apps/desktop/src/app/chromiumLocalStorage.ts index 98de2e91eb063..51beceb9e463f 100644 --- a/apps/desktop/src/app/chromiumLocalStorage.ts +++ b/apps/desktop/src/app/chromiumLocalStorage.ts @@ -4,12 +4,7 @@ import * as Path from "effect/Path"; import * as PlatformError from "effect/PlatformError"; import * as Schema from "effect/Schema"; -/** - * It reads the database files directly and never takes LevelDB's lock, so it - * works while another app version has the profile open. Live files come from - * the MANIFEST that CURRENT names, and the newest sequence number wins, which - * is how LevelDB itself resolves overwrites and deletions. - */ +/** Read without LevelDB's lock so another app can keep the profile open. */ const LOG_BLOCK_SIZE = 32 * 1024; const LOG_HEADER_SIZE = 7; @@ -145,11 +140,7 @@ function decompressSnappy(input: Uint8Array): Uint8Array { return output; } -/** - * Like LevelDB's own reader, a corrupt record or zero padding skips the rest of - * its block, since a reused log keeps appending after a torn write, and a - * record cut off by the end of the file ends the log. - */ +/** Corruption skips the remaining block; a truncated final record ends the log, matching LevelDB recovery. */ function readLogRecords(bytes: Uint8Array): Uint8Array[] { const records: Uint8Array[] = []; let pending: Uint8Array[] | null = null; @@ -422,9 +413,7 @@ export const readChromiumLocalStorage = Effect.fn("desktop.chromiumLocalStorage. }).pipe(wrap); } - // A flush while another process has the database open can move entries - // from a log we read into a table our MANIFEST copy predates. Fail so the - // caller retries rather than import a snapshot missing those entries. + // Concurrent flushes can move entries beyond this MANIFEST snapshot; detect changes so the caller retries. const currentAfter = textDecoderUtf8.decode(yield* readFile("CURRENT").pipe(wrap)).trim(); const manifestAfter = yield* fs.stat(path.join(directory, current)).pipe(wrap); if (currentAfter !== current || Number(manifestAfter.size) !== manifest.length) { diff --git a/apps/desktop/src/backend/DesktopBackendConfiguration.test.ts b/apps/desktop/src/backend/DesktopBackendConfiguration.test.ts index 8d70ab4c4791f..7464d8fbe9e2f 100644 --- a/apps/desktop/src/backend/DesktopBackendConfiguration.test.ts +++ b/apps/desktop/src/backend/DesktopBackendConfiguration.test.ts @@ -678,7 +678,7 @@ describe("DesktopBackendConfiguration", () => { ), ); - it.effect("resolveWsl carries the kill switch into the distro", () => + it.effect("resolveWsl carries the kill switch and resource attributes into the distro", () => Effect.gen(function* () { const fileSystem = yield* FileSystem.FileSystem; const baseDir = yield* fileSystem.makeTempDirectoryScoped({ @@ -688,10 +688,12 @@ describe("DesktopBackendConfiguration", () => { const previousWslEnv = process.env.WSLENV; const previousDisabled = process.env.OTEL_SDK_DISABLED; const previousTelemetry = process.env.T3CODE_TELEMETRY_ENABLED; + const previousResourceAttributes = process.env.OTEL_RESOURCE_ATTRIBUTES; try { delete process.env.WSLENV; process.env.OTEL_SDK_DISABLED = "true"; process.env.T3CODE_TELEMETRY_ENABLED = "false"; + process.env.OTEL_RESOURCE_ATTRIBUTES = "deployment.environment.name=staging"; yield* Effect.gen(function* () { const configuration = yield* DesktopBackendConfiguration.DesktopBackendConfiguration; @@ -701,6 +703,8 @@ describe("DesktopBackendConfiguration", () => { assert.include((config.env.WSLENV ?? "").split(":"), "OTEL_SDK_DISABLED"); assert.equal(config.env.T3CODE_TELEMETRY_ENABLED, "false"); assert.include((config.env.WSLENV ?? "").split(":"), "T3CODE_TELEMETRY_ENABLED"); + assert.equal(config.env.OTEL_RESOURCE_ATTRIBUTES, "deployment.environment.name=staging"); + assert.include((config.env.WSLENV ?? "").split(":"), "OTEL_RESOURCE_ATTRIBUTES"); }).pipe( Effect.provide( layerBackendConfiguration().pipe( @@ -722,6 +726,7 @@ describe("DesktopBackendConfiguration", () => { restoreEnv("WSLENV", previousWslEnv); restoreEnv("OTEL_SDK_DISABLED", previousDisabled); restoreEnv("T3CODE_TELEMETRY_ENABLED", previousTelemetry); + restoreEnv("OTEL_RESOURCE_ATTRIBUTES", previousResourceAttributes); } }).pipe(Effect.scoped, Effect.provide(NodeServices.layer)), ); diff --git a/apps/desktop/src/backend/DesktopBackendConfiguration.ts b/apps/desktop/src/backend/DesktopBackendConfiguration.ts index dadbe8acc743b..492903139547b 100644 --- a/apps/desktop/src/backend/DesktopBackendConfiguration.ts +++ b/apps/desktop/src/backend/DesktopBackendConfiguration.ts @@ -74,27 +74,24 @@ const DESKTOP_BACKEND_ENV_NAMES = [ "T3CODE_NO_BROWSER", "T3CODE_HOST", "T3CODE_DESKTOP_WS_URL", - "T3CODE_DESKTOP_LAN_ACCESS", "T3CODE_DESKTOP_LAN_HOST", "T3CODE_DESKTOP_HTTPS_ENDPOINTS", "T3CODE_TAILSCALE_SERVE", "T3CODE_TAILSCALE_SERVE_PORT", ] as const; -// Env vars that the WSL backend needs but Windows process.env won't forward -// across the wsl.exe boundary without WSLENV. +// Windows forwards these variables into WSL only through WSLENV. const WSL_FORWARDED_ENV_NAMES = [ "OPENAI_API_KEY", "ANTHROPIC_API_KEY", "T3CODE_TELEMETRY_ENABLED", + "T3CODE_GITHUB_APP_CLIENT_ID", // Otherwise the WSL server keeps exporting to endpoints from the bootstrap. "T3CODE_OTEL_SDK_DISABLED", "OTEL_SDK_DISABLED", "T3CODE_OTLP_HEADERS", "T3CODE_OTLP_PROTOCOL", - // Forwarded without a WSLENV flag, so the values arrive untranslated. The - // server prefers an OTEL endpoint over the bootstrap envelope, so the T3 URLs - // travel as variables to keep winning inside the distro as they do on Windows. + // Untranslated T3 URLs must override bootstrap endpoints inside WSL, as they do on Windows. "T3CODE_OTLP_TRACES_URL", "T3CODE_OTLP_METRICS_URL", "T3CODE_OTLP_LOGS_URL", @@ -113,6 +110,7 @@ const WSL_FORWARDED_ENV_NAMES = [ "OTEL_TRACES_EXPORTER", "OTEL_METRICS_EXPORTER", "OTEL_LOGS_EXPORTER", + "OTEL_RESOURCE_ATTRIBUTES", ] as const; const WSL_SERVER_SYSTEM_PATH = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"; @@ -145,10 +143,7 @@ const mergeWslEnv = ( const additions = forwardedEnvNames.filter((name) => !seenNames.has(name)); - // Preserve the user's WSLENV exactly as Windows handed it to us — empty - // "::" segments and duplicate entries are harmless no-ops to WSL and not - // ours to normalize — and only append the secrets we need to forward - // across the wsl.exe boundary. + // Preserve empty segments and duplicates in the user's WSLENV; only append required variables. const parts = [existing, ...additions].filter((part) => part.length > 0); return parts.length > 0 ? parts.join(":") : undefined; }; @@ -253,10 +248,7 @@ type WslPreflightRuntime = } | { readonly kind: "node-script"; - // Absolute path to the node binary the preflight validated after the - // shared remote resolver repaired PATH. The launch must use this exact - // path so it doesn't fall through to a different/old node than the one - // node-pty was probed with. + // Launch the exact Node path probed with node-pty, even if later PATH lookup would resolve another version. readonly nodePath: string; readonly linuxEntryPath: string; }; @@ -397,8 +389,7 @@ const runWslPreflight = Effect.fn("desktop.backendConfiguration.wslPreflight")(f if (input.runtimeArchive !== null) { const runtime = yield* wslEnv.prepareRuntime(runningDistro, input.runtimeArchive); if (runtime.ok) { - // The staged runtime supplies its own Node and node-pty. Provider PATH - // discovery must not require either dependency for runtime readiness. + // Staged runtimes bundle Node and node-pty; provider PATH discovery must not require them. const stagedProbe = yield* wslEnv.probeRuntime(runningDistro, runtime.linuxAppRoot); if (stagedProbe.ok) { yield* wslServerTree.cleanupLegacy; @@ -438,10 +429,7 @@ const runWslPreflight = Effect.fn("desktop.backendConfiguration.wslPreflight")(f nodePtyOptions, ); if (!nodePtyResult.ok) { - // Substituting the staged verdict for a transient mounted failure would - // turn a retryable failure into a fatal one, ending the WSL attempt (and, - // in wsl-only mode, persisting Windows) before the slow /mnt path had a - // chance to answer and clear the bad cache. + // Only substitute a staged failure for a fatal mounted failure; transient /mnt failures must remain retryable. return stagedFailure && nodePtyResult.fatal ? failedStaged(stagedFailure) : failedNodePty(nodePtyResult); @@ -464,16 +452,12 @@ const runWslPreflight = Effect.fn("desktop.backendConfiguration.wslPreflight")(f } as const; }); -// In WSL2 mirrored mode the distro's eth0 IP equals the host's, which is the -// signature we use to detect that mode and switch the renderer URL to loopback. +// In WSL2 mirrored mode, eth0 matches a host IP; use loopback for the renderer. const isLocalHostIpv4 = (ip: string): boolean => { const interfaces = NodeOS.networkInterfaces(); for (const list of Object.values(interfaces)) { if (!list) continue; for (const entry of list) { - // os.networkInterfaces() reports IPv4 `family` as the string "IPv4" on - // the Node build Electron ships (41 / Node 22, verified), but some Node - // builds report the numeric 4. const family = String(entry.family); if ((family === "IPv4" || family === "4") && entry.address === ip) return true; } @@ -520,7 +504,6 @@ const resolvePrimaryStartConfig = Effect.fn("desktop.backendConfiguration.resolv host: backendExposure.bindHost, desktopBootstrapToken: input.bootstrapToken, desktopBootstrapSecret: input.bootstrapSecret, - // Failed Windows probes leave server hydration enabled for another attempt. shellEnvironmentPrepared: input.shellEnvironmentPrepared, tailscaleServeEnabled: backendExposure.tailscaleServeEnabled, tailscaleServePort: backendExposure.tailscaleServePort, @@ -537,10 +520,7 @@ const resolvePrimaryStartConfig = Effect.fn("desktop.backendConfiguration.resolv return { executablePath: process.execPath, - // Packaged builds only, so a dev instance never shares the cache with the - // prod app it is often run from. `--require` rather than NODE_COMPILE_CACHE, - // so the setting does not leak into the provider and terminal processes - // the backend starts. + // Packaged builds have a separate cache; --require prevents cache settings leaking to provider subprocesses. args: [ ...(environment.isPackaged ? ["--require", environment.compileCachePath] : []), environment.backendEntryPath, @@ -581,25 +561,18 @@ const resolveWslStartConfig = Effect.fn("desktop.backendConfiguration.resolveWsl const wslEnvironment = yield* DesktopWslEnvironment.DesktopWslEnvironment; const fileSystem = yield* FileSystem.FileSystem; - // wslhost forwarding is unreliable on some Windows hosts: the desktop's - // readiness probe and the renderer's saved-env-style fetch both saw "Failed - // to fetch" when the backend only bound to 127.0.0.1 inside WSL. Binding to - // 0.0.0.0 plus advertising the WSL IP as the renderer-visible URL avoids that - // dependency. + // wslhost loopback forwarding is unreliable on some Windows hosts; advertise the WSL IP instead. const wslBindHost = "0.0.0.0"; const bootstrap = { mode: "desktop" as const, noBrowser: true, port: input.port, - // Omit t3Home so the Linux backend uses its own home dir instead of - // the Windows-side baseDir (which would be a /mnt/c path and share - // the SQLite file with the primary). + // Omit t3Home to keep the Linux backend from sharing the primary's Windows SQLite file. host: wslBindHost, desktopBootstrapToken: input.bootstrapToken, desktopBootstrapSecret: input.bootstrapSecret, - // PortSchema rejects 0, so when tailscale serve is disabled we still need a - // valid number in this slot. + // PortSchema rejects 0 even when Tailscale Serve is disabled. tailscaleServeEnabled: false, tailscaleServePort: 443, ...buildObservabilityFragment(input.observabilitySettings), @@ -640,9 +613,7 @@ const resolveWslStartConfig = Effect.fn("desktop.backendConfiguration.resolveWsl allowBuild: !environment.isPackaged, }); - // Every operation after preflight uses the same concrete distro. In - // default-tracking mode this closes the race where the system default - // changes between probing and spawning the backend. + // Pin the preflight distro so a default change cannot race backend startup. const runningDistro = preflight._tag === "Ready" ? preflight.runningDistro : null; const distroForConfig = runningDistro ?? input.distro; @@ -685,8 +656,7 @@ const resolveWslStartConfig = Effect.fn("desktop.backendConfiguration.resolveWsl ...forwardedEnv, ...(wslEnv !== undefined ? { WSLENV: wslEnv } : {}), }, - // env is already a complete process.env minus T3CODE_HOME; pass it - // verbatim instead of letting the spawner re-merge process.env on top. + // env already excludes T3CODE_HOME; merging process.env would restore it. extendEnv: false, bootstrap, bootstrapDelivery: "stdin" as const, @@ -695,8 +665,7 @@ const resolveWslStartConfig = Effect.fn("desktop.backendConfiguration.resolveWsl ...(runningDistro !== null ? { runningDistro } : {}), }; - // Forward the dev-server URL as an explicit CLI flag so the WSL backend's - // config resolution lands in dev/ instead of userdata/. + // Explicit --dev-url keeps WSL state in dev/ rather than userdata/. const devUrlArgs = Option.match(environment.devServerUrl, { onNone: () => [] as ReadonlyArray, onSome: (url) => ["--dev-url", url.href], @@ -716,10 +685,7 @@ const resolveWslStartConfig = Effect.fn("desktop.backendConfiguration.resolveWsl } satisfies DesktopBackendManager.DesktopBackendStartConfig; } - // The WSL server spawns commands its providers reference by name — `npm`/`npx` - // for provider updates, and the installed CLIs themselves (e.g. `codex`). Those - // live on the user's login-shell PATH, which `wsl.exe --exec` does NOT put on - // the process PATH, so `npm install -g ...` fails with NotFound. + // wsl.exe --exec omits the login-shell PATH needed to find provider CLIs and npm. const runtime = preflight.runtime; const launchPath = runtime.kind === "executable" @@ -747,7 +713,7 @@ const resolveWslStartConfig = Effect.fn("desktop.backendConfiguration.resolveWsl } satisfies DesktopBackendManager.DesktopBackendStartConfig; }); -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const environment = yield* DesktopEnvironment.DesktopEnvironment; const shellEnvironment = yield* DesktopShellEnvironment.DesktopShellEnvironment; @@ -757,12 +723,7 @@ export const make = Effect.gen(function* () { const wslServerTree = yield* DesktopWslServerTree.DesktopWslServerTree; const settings = yield* DesktopAppSettings.DesktopAppSettings; const crypto = yield* Crypto.Crypto; - // SynchronizedRef (not a plain Ref) so the read-generate-write is atomic. - // crypto.randomBytes is a yield point, and resolvePrimary + resolveWsl can - // resolve concurrently; with a plain Ref both could observe None, generate - // distinct secrets, and one would overwrite the other — leaving the two - // backends deriving mismatched tokens and breaking the shared-token invariant - // the renderer relies on. + // Random generation yields; serialize it so concurrent backends cannot capture distinct bootstrap secrets. const secretRef = yield* SynchronizedRef.make(Option.none()); const getOrCreateBootstrapSecret = SynchronizedRef.modifyEffect(secretRef, (current) => Option.match(current, { @@ -833,18 +794,11 @@ export const make = Effect.gen(function* () { ); }); - // Dispatch happens at resolve time so toggling wsl-only between restarts - // is picked up on the next start cycle (the pool's primary instance is - // created once at layer init, but configResolve fires on each restart). + // Resolve on each restart so toggling wsl-only takes effect without recreating the pool. const describePrimary = Effect.gen(function* () { const persistedSettings = yield* settings.get; const wslRequested = persistedSettings.wslOnly && persistedSettings.wslBackendEnabled; - // Only honor wsl-only when WSL is actually usable. If the user - // persisted wsl-only but WSL has since become unavailable (wsl.exe - // removed, no distro), fall back to the Windows primary instead of - // looping forever on preflight failures: the Connections backend - // control is hidden while WSL is unavailable, so a stuck WSL primary - // would otherwise leave no in-app way back to Windows. + // When WSL is unavailable its controls are hidden; fall back to Windows to keep recovery possible. const useWsl = wslRequested && (yield* wslEnvironment.isAvailable); return { useWsl, wslRequested, distro: persistedSettings.wslDistro }; }); diff --git a/apps/desktop/src/backend/DesktopBackendManager.test.ts b/apps/desktop/src/backend/DesktopBackendManager.test.ts index 7b15346a754e2..54fb312ec308f 100644 --- a/apps/desktop/src/backend/DesktopBackendManager.test.ts +++ b/apps/desktop/src/backend/DesktopBackendManager.test.ts @@ -123,6 +123,9 @@ interface MakeInstanceInput { readonly onReady?: Effect.Effect; readonly onShutdown?: Effect.Effect; readonly onStateDirOwned?: Effect.Effect; + readonly onStartupFailure?: ( + failure: DesktopBackendManager.BackendStartupFailure, + ) => Effect.Effect; readonly onPreflightFailed?: ( failure: DesktopBackendManager.PreflightFailure, ) => Effect.Effect; @@ -182,6 +185,7 @@ function makeTestInstance(input: MakeInstanceInput) { ...(input.onShutdown ? { onShutdown: () => input.onShutdown! } : {}), ...(input.onStateDirOwned ? { onStateDirOwned: () => input.onStateDirOwned! } : {}), ...(input.onPreflightFailed ? { onPreflightFailed: input.onPreflightFailed } : {}), + ...(input.onStartupFailure ? { onStartupFailure: input.onStartupFailure } : {}), }); return instance.pipe(Effect.provide(layerServices)); @@ -575,4 +579,56 @@ describe("DesktopBackendManager", () => { }).pipe(Effect.provide(TestClock.layer())), ), ); + + it.effect("reports a crash loop with the server output on the third restart", () => + Effect.scoped( + Effect.gen(function* () { + const message = "Error: Cannot find module 'zod/v4' in /Users/René"; + let exitCount = 0; + const firstExit = yield* Deferred.make(); + const reports = yield* Queue.unbounded<{ + readonly exitCount: number; + readonly failure: DesktopBackendManager.BackendStartupFailure; + }>(); + const instance = yield* makeTestInstance({ + spawnerLayer: Layer.succeed( + ChildProcessSpawner.ChildProcessSpawner, + ChildProcessSpawner.make(() => + Effect.succeed( + makeProcess({ + // "é" split across chunks must not decode as U+FFFD, and the 4,000-char cut + // lands inside the emoji's surrogate pair. + stderr: Stream.make( + new TextEncoder().encode( + `😀${"x".repeat(3_999 - message.length)}${message.slice(0, -1)}`, + ), + new Uint8Array([0xc3]), + new Uint8Array([0xa9]), + ), + exitCode: Effect.succeed(ChildProcessSpawner.ExitCode(1)), + }), + ), + ), + ), + httpClientLayer: layerHttpClient(() => Effect.never), + backendOutputLog: { + persistFailure: () => { + exitCount += 1; + return Deferred.succeed(firstExit, undefined).pipe(Effect.asVoid); + }, + }, + onStartupFailure: (failure) => + Queue.offer(reports, { exitCount, failure }).pipe(Effect.asVoid), + }); + yield* instance.start; + yield* Deferred.await(firstExit); + yield* TestClock.adjust(Duration.minutes(1)); + const { exitCount: exitsWhenReported, failure } = yield* Queue.take(reports); + assert.equal(exitsWhenReported, 3); + assert.equal(failure.reason, "The server could not start (code=1)."); + assert.isTrue(failure.output.endsWith(message)); + assert.isTrue(failure.output.isWellFormed()); + }).pipe(Effect.provide(TestClock.layer())), + ), + ); }); diff --git a/apps/desktop/src/backend/DesktopBackendManager.ts b/apps/desktop/src/backend/DesktopBackendManager.ts index b4057f4d0194b..cbc0516509d0b 100644 --- a/apps/desktop/src/backend/DesktopBackendManager.ts +++ b/apps/desktop/src/backend/DesktopBackendManager.ts @@ -37,11 +37,13 @@ const MAX_PREFLIGHT_FAILURE_ATTEMPTS = 5; const DEFAULT_BACKEND_READINESS_TIMEOUT = Duration.minutes(1); const DEFAULT_BACKEND_READINESS_INTERVAL = Duration.millis(100); const DEFAULT_BACKEND_READINESS_REQUEST_TIMEOUT = Duration.seconds(1); -// Same as the service launcher. A killed backend leaves its agents running, -// and a busy one needs a few seconds to stop every provider session. +// Match the service launcher's grace period so backends can stop provider sessions. const DEFAULT_BACKEND_TERMINATE_GRACE = Duration.seconds(5); const DEFAULT_BACKEND_OUTPUT_DRAIN_TIMEOUT = Duration.seconds(5); const BACKEND_READINESS_PATH = "/.well-known/t3/environment"; +// Three restarts without readiness is about 2 s of backoff: past a blip, early enough to help. +const STARTUP_FAILURE_RESTART_ATTEMPTS = 3; +const STARTUP_FAILURE_OUTPUT_CHARS = 4_000; const { logWarning: logBackendProcessWarning } = DesktopObservability.makeComponentLogger("desktop-backend-process"); @@ -63,9 +65,7 @@ export type DesktopBackendBootstrapDelivery = "fd3" | "stdin"; export interface DesktopBackendStartConfig extends BackendProcessContext { readonly args: ReadonlyArray; readonly env: Record; - // When true the spawner merges the desktop process.env on top of `env`; - // when false `env` is passed verbatim. WSL mode opts out so a leaking - // T3CODE_HOME can't pin the WSL backend to /mnt/c/...\.t3. + /** False passes env verbatim, preventing the Windows T3CODE_HOME from leaking into WSL. */ readonly extendEnv: boolean; readonly bootstrap: DesktopBackendBootstrapValue; readonly bootstrapDelivery: DesktopBackendBootstrapDelivery; @@ -220,6 +220,12 @@ export const PRIMARY_INSTANCE_ID: BackendInstanceId = BackendInstanceId( PRIMARY_LOCAL_ENVIRONMENT_ID, ); +export interface BackendStartupFailure { + readonly reason: string; + /** Tail of the last run's stdout and stderr. */ + readonly output: string; +} + export interface DesktopBackendInstance { readonly id: BackendInstanceId; readonly label: Effect.Effect; @@ -234,15 +240,13 @@ export interface BackendInstanceSpec { readonly id: BackendInstanceId; readonly label: Effect.Effect; readonly configResolve: Effect.Effect; - // Receives the *resolved* httpBaseUrl of the run that just became - // ready. The window service uses this to decide what URL to load - // (the WSL backend reports its distro IP, the Windows backend reports - // 127.0.0.1). Splitting this off from configResolve avoids races - // between "fired onReady" and "currentConfig already advanced". + /** Receives the ready run's resolved URL; reading current config could race a subsequent restart. */ readonly onReady?: (httpBaseUrl: URL) => Effect.Effect; readonly onShutdown?: () => Effect.Effect; readonly onPreflightFailed?: (failure: PreflightFailure) => Effect.Effect; readonly onStateDirOwned?: () => Effect.Effect; + /** Fires on each repeated crash or readiness timeout until the backend becomes ready. */ + readonly onStartupFailure?: (failure: BackendStartupFailure) => Effect.Effect; } interface ActiveBackendRun { @@ -431,16 +435,12 @@ export const runBackendProcess = Effect.fn("runBackendProcess")(function* ( cwd: options.cwd, env: options.env, extendEnv: options.extendEnv, - // In Electron main, process.execPath points to the Electron binary. - // Run the child in Node mode so this backend process does not become a GUI app instance. stdin: options.bootstrapDelivery === "stdin" ? bootstrapStream : "ignore", stdout: options.captureOutput ? "pipe" : "inherit", stderr: options.captureOutput ? "pipe" : "inherit", killSignal: "SIGTERM", forceKillAfter: DEFAULT_BACKEND_TERMINATE_GRACE, - // wsl.exe drops additional file descriptors when forwarding to the Linux - // side, so the WSL spawn path delivers the bootstrap envelope via stdin - // (`--bootstrap-fd 0`) instead. + // wsl.exe drops extra file descriptors; deliver its bootstrap via stdin. ...(options.bootstrapDelivery === "fd3" ? { additionalFds } : {}), }); @@ -542,12 +542,7 @@ export const runBackendProcess = Effect.fn("runBackendProcess")(function* ( ).pipe(Effect.forkScoped), ); } - // Probe readiness in a loop while the backend process is still alive instead - // of giving up after the first budget. A slow cold boot (the WSL bundle - // loading across /mnt/c, or a first launch right after an update) can exceed - // the initial readiness budget while the backend is about to come up moments - // later; a one-shot probe left the app stuck on "Connecting to WSL…" forever - // even though the backend kept running and became healthy. + // Cold WSL boots across /mnt/c can exceed one probe budget; retry while the backend is alive. const probeReadiness = Effect.fn("desktop.backendProcess.probeReadiness")(() => waitForHttpReady({ executablePath: options.executablePath, @@ -635,6 +630,14 @@ export const makeBackendInstance = Effect.fn("makeBackendInstance")(function* ( const httpClient = yield* HttpClient.HttpClient; const state = yield* Ref.make(initialState); const mutex = yield* Semaphore.make(1); + const outputTail = yield* Ref.make(""); + // One streaming decoder per stream keeps UTF-8 characters split across chunks intact. + const makeOutputDecoders = () => ({ stdout: new TextDecoder(), stderr: new TextDecoder() }); + let outputDecoders = makeOutputDecoders(); + const reportStartupFailure = (reason: string) => + Ref.get(outputTail).pipe( + Effect.flatMap((output) => spec.onStartupFailure?.({ reason, output }) ?? Effect.void), + ); const { logWarning: logInstanceWarning, logError: logInstanceError } = DesktopObservability.makeComponentLogger(`desktop-backend-instance:${spec.id}`); @@ -891,6 +894,8 @@ export const makeBackendInstance = Effect.fn("makeBackendInstance")(function* ( ...run, pid: Option.some(pid), })); + yield* Ref.set(outputTail, ""); + outputDecoders = makeOutputDecoders(); yield* backendOutputLog.beginSession({ details: `pid=${pid} port=${config.value.bootstrap.port} cwd=${config.value.cwd}`, }); @@ -939,9 +944,16 @@ export const makeBackendInstance = Effect.fn("makeBackendInstance")(function* ( yield* backendOutputLog.persistFailureSnapshot({ details: error.message, }); + yield* reportStartupFailure("The server started but did not become ready in time."); }, ), - onOutput: (streamName, chunk) => backendOutputLog.writeOutputChunk(streamName, chunk), + onOutput: (streamName, chunk) => + Ref.update(outputTail, (tail) => + // A cut through a surrogate pair would make encodeURIComponent throw when rendering. + (tail + outputDecoders[streamName].decode(chunk, { stream: true })) + .slice(-STARTUP_FAILURE_OUTPUT_CHARS) + .toWellFormed(), + ).pipe(Effect.andThen(backendOutputLog.writeOutputChunk(streamName, chunk))), }).pipe( Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, spawner), Effect.provideService(HttpClient.HttpClient, httpClient), @@ -967,26 +979,29 @@ export const makeBackendInstance = Effect.fn("makeBackendInstance")(function* ( ) { const scheduled = yield* Ref.modify(state, (latest) => { if (!latest.desiredRunning || Option.isSome(latest.restartFiber)) { - return [Option.none(), latest] as const; + return [Option.none<{ delay: Duration.Duration; attempt: number }>(), latest] as const; } - const delay = calculateRestartDelay(latest.restartAttempt); + const attempt = latest.restartAttempt + 1; return [ - Option.some(delay), - { - ...latest, - restartAttempt: latest.restartAttempt + 1, - }, + Option.some({ delay: calculateRestartDelay(latest.restartAttempt), attempt }), + { ...latest, restartAttempt: attempt }, ] as const; }); yield* Option.match(scheduled, { onNone: () => Effect.void, - onSome: Effect.fn("desktop.backendInstance.scheduleRestartFiber")(function* (delay) { + onSome: Effect.fn("desktop.backendInstance.scheduleRestartFiber")(function* ({ + delay, + attempt, + }) { yield* logInstanceError("backend exited unexpectedly; restart scheduled", { reason, delayMs: Duration.toMillis(delay), }); + if (attempt >= STARTUP_FAILURE_RESTART_ATTEMPTS) { + yield* reportStartupFailure(`The server could not start (${reason}).`); + } const restartFiber = yield* Effect.forkIn( Effect.sleep(delay).pipe( Effect.andThen( @@ -1059,58 +1074,58 @@ export const makeBackendInstance = Effect.fn("makeBackendInstance")(function* ( }); yield* Option.match(active, { onNone: () => Effect.void, - onSome: (run) => - Effect.gen(function* () { - const closed = yield* closeRun(run, parentScope, options); - if (!closed) { - return; - } - const cleanup = yield* mutex.withPermits(1)( - Ref.modify( - state, - ( - latest, - ): readonly [ - { - readonly needsCleanup: boolean; - readonly shouldStart: boolean; - }, - BackendManagerState, - ] => { - const current = Option.getOrUndefined(latest.active); - if (current?.id !== run.id) { - return [ - { - needsCleanup: false, - shouldStart: - latest.desiredRunning && - Option.isNone(latest.active) && - Option.isNone(latest.restartFiber), - }, - latest, - ]; - } + // The enclosing operation owns the span for this inline handler. + onSome: Effect.fnUntraced(function* (run) { + const closed = yield* closeRun(run, parentScope, options); + if (!closed) { + return; + } + const cleanup = yield* mutex.withPermits(1)( + Ref.modify( + state, + ( + latest, + ): readonly [ + { + readonly needsCleanup: boolean; + readonly shouldStart: boolean; + }, + BackendManagerState, + ] => { + const current = Option.getOrUndefined(latest.active); + if (current?.id !== run.id) { return [ { - needsCleanup: true, - shouldStart: latest.desiredRunning, - }, - { - ...latest, - active: Option.none(), + needsCleanup: false, + shouldStart: + latest.desiredRunning && + Option.isNone(latest.active) && + Option.isNone(latest.restartFiber), }, + latest, ]; - }, - ), - ); - if (cleanup.needsCleanup) { - yield* desktopTelemetryPublisher.removeControlSource(spec.id); - yield* backendOutputLog.discardSession; - } - if (cleanup.shouldStart) { - yield* start; - } - }), + } + return [ + { + needsCleanup: true, + shouldStart: latest.desiredRunning, + }, + { + ...latest, + active: Option.none(), + }, + ]; + }, + ), + ); + if (cleanup.needsCleanup) { + yield* desktopTelemetryPublisher.removeControlSource(spec.id); + yield* backendOutputLog.discardSession; + } + if (cleanup.shouldStart) { + yield* start; + } + }), }); }); diff --git a/apps/desktop/src/backend/DesktopBackendPool.test.ts b/apps/desktop/src/backend/DesktopBackendPool.test.ts index a8576a2b9e99e..2b2dd841ab53f 100644 --- a/apps/desktop/src/backend/DesktopBackendPool.test.ts +++ b/apps/desktop/src/backend/DesktopBackendPool.test.ts @@ -9,6 +9,7 @@ import { HttpClient } from "effect/http"; import { ChildProcessSpawner } from "effect/process"; import * as DesktopObservability from "../app/DesktopObservability.ts"; +import * as DesktopState from "../app/DesktopState.ts"; import * as DesktopAppSettings from "../settings/DesktopAppSettings.ts"; import * as DesktopTelemetryPublisher from "../telemetry/DesktopTelemetryPublisher.ts"; import * as DesktopBrowserHost from "../preview/DesktopBrowserHost.ts"; @@ -62,6 +63,7 @@ function layerPool(labelRef: Ref.Ref): Layer.Layer { const instance = yield* pool.register({ id, label: Effect.succeed("WSL (Ubuntu)"), - // A transient preflight failure leaves a restart fiber scheduled - // without needing a real child process. configResolve: Effect.succeed({ executablePath: "/electron", args: [], diff --git a/apps/desktop/src/backend/DesktopBackendPool.ts b/apps/desktop/src/backend/DesktopBackendPool.ts index 135df79c63ada..77a4aa998d7bc 100644 --- a/apps/desktop/src/backend/DesktopBackendPool.ts +++ b/apps/desktop/src/backend/DesktopBackendPool.ts @@ -6,6 +6,7 @@ import * as Layer from "effect/Layer"; import * as Option from "effect/Option"; import * as Schema from "effect/Schema"; import * as Scope from "effect/Scope"; +import * as SubscriptionRef from "effect/SubscriptionRef"; import * as SynchronizedRef from "effect/SynchronizedRef"; import * as FileSystem from "effect/FileSystem"; @@ -15,6 +16,7 @@ import { ChildProcessSpawner } from "effect/process"; import * as DesktopBackendConfiguration from "./DesktopBackendConfiguration.ts"; import * as DesktopBackendManager from "./DesktopBackendManager.ts"; import * as DesktopObservability from "../app/DesktopObservability.ts"; +import * as DesktopState from "../app/DesktopState.ts"; import * as DesktopAppSettings from "../settings/DesktopAppSettings.ts"; import * as DesktopTelemetryPublisher from "../telemetry/DesktopTelemetryPublisher.ts"; import * as DesktopBrowserHost from "../preview/DesktopBrowserHost.ts"; @@ -106,16 +108,12 @@ export const layer = Layer.effect( const electronDialog = yield* ElectronDialog.ElectronDialog; const electronApp = yield* ElectronApp.ElectronApp; const appSettings = yield* DesktopAppSettings.DesktopAppSettings; - // Without this, instance scopes are orphaned: they only close via explicit unregister() calls, - // so on app shutdown the WSL backend child process gets hard-killed by the OS instead of - // receiving the graceful SIGTERM + grace period the instance's stop finalizer would otherwise - // run. + const { primaryBackendStartup } = yield* DesktopState.DesktopState; + // Parent instance scopes to the pool so shutdown runs stop finalizers before the OS kills backends. const layerScope = yield* Scope.Scope; const factoryContext = yield* Effect.context(); - // Fatal configuration failures persist the Windows fallback. Bounded - // transport failures use an in-memory fallback for this launch so the app - // opens without overwriting the user's WSL preference. + // Persist fatal Windows fallbacks; transient transport failures must preserve the user's WSL preference. const handlePrimaryPreflightFailure = Effect.fn("desktop.backendPool.primaryPreflightFailed")( function* (failure: DesktopBackendManager.PreflightFailure) { const { reason, fatal } = failure; @@ -137,11 +135,10 @@ export const layer = Layer.effect( }); yield* electronDialog.showErrorBox( "WSL backend couldn't start", - `${reason}\n\nFalling back to the Windows backend so T3 Code can open. Re-enable the WSL backend from Settings > Connections once the WSL distro is fixed.`, + `${reason}\n\nFalling back to the Windows backend so T3 Code can open. Re-enable the WSL backend from Settings > Sharing & access once the WSL distro is fixed.`, ); - // Clearing wslBackendEnabled alone would leave a stale wslOnly:true that silently re-traps - // the user in wsl-only mode the next time they enable WSL. If the persisted write fails, - // keep this process recoverable by applying the fallback to in-memory settings. + // Clear wslOnly too so enabling WSL cannot restore a failed mode. + // Keep the in-memory fallback if persistence fails. yield* appSettings.applyWslWindowsFallback.pipe( Effect.catch((error) => logBackendPoolWarning( @@ -158,22 +155,22 @@ export const layer = Layer.effect( const primary = yield* DesktopBackendManager.makeBackendInstance({ id: DesktopBackendManager.PRIMARY_INSTANCE_ID, - // Keep this lazy. The pool layer is initialized before startup loads - // persisted desktop settings, so resolving the primary label here would - // permanently capture DEFAULT_DESKTOP_SETTINGS and mislabel WSL-only - // primaries as Windows. + // Resolve lazily: startup loads persisted settings after pool initialization. label: configuration.resolvePrimaryLabel, configResolve: configuration.resolvePrimary, - // Window creation errors propagating out of handleBackendReady must not block the readiness - // callback (that would prevent restartAttempt from being reset), so we absorb them here. + // Absorb window errors so readiness can reset restartAttempt. onReady: (httpBaseUrl) => desktopWindow.handleBackendReady(httpBaseUrl).pipe( + // Only once the main window exists, so the recovery window never closes into nothing. + Effect.andThen(SubscriptionRef.set(primaryBackendStartup, { _tag: "Ready" })), Effect.catch((error) => logBackendPoolWarning("failed to open main window after backend readiness", { error: error.message, }), ), ), + onStartupFailure: (failure) => + SubscriptionRef.set(primaryBackendStartup, { _tag: "Failing", ...failure }), onShutdown: () => desktopWindow.handleBackendNotReady, onPreflightFailed: handlePrimaryPreflightFailure, onStateDirOwned: () => @@ -219,10 +216,7 @@ export const layer = Layer.effect( ] as const); } return Effect.gen(function* () { - // Provide the child scope after the captured factory context. That - // context also holds the pool layer's Scope, so providing it last - // would let it shadow the child scope and leave the instance's - // stop finalizer and restart fibers running after unregister. + // Provide the child Scope last so the captured pool Scope cannot shadow it and orphan stop/restart finalizers. const instanceScope = yield* Scope.fork(layerScope, "sequential"); const instance = yield* DesktopBackendManager.makeBackendInstance(spec).pipe( Scope.provide(instanceScope), @@ -304,13 +298,14 @@ export const layer = Layer.effect( }); return DesktopBackendPool.of({ - get: (id) => - SynchronizedRef.get(instancesRef).pipe( + get: Effect.fn("DesktopBackendPool.get")(function (id) { + return SynchronizedRef.get(instancesRef).pipe( Effect.map((instances) => { const entry = instances.get(id); return entry?._tag === "Active" ? Option.some(entry.instance) : Option.none(); }), - ), + ); + }), list: SynchronizedRef.get(instancesRef).pipe( Effect.map((instances) => Array.from(instances.values()).flatMap((entry) => @@ -339,11 +334,17 @@ export const layerTest = ( ); const primary = instances[0]!; return DesktopBackendPool.of({ - get: (id) => Effect.succeed(Option.fromNullishOr(byId.get(id))), + get: Effect.fn("DesktopBackendPool.get")(function (id) { + return Effect.succeed(Option.fromNullishOr(byId.get(id))); + }), list: Effect.succeed(Array.from(byId.values())), primary: Effect.succeed(primary), - register: () => Effect.die("DesktopBackendPool.layerTest does not support register"), - unregister: () => Effect.die("DesktopBackendPool.layerTest does not support unregister"), + register: Effect.fn("DesktopBackendPool.register")(function () { + return Effect.die("DesktopBackendPool.layerTest does not support register"); + }), + unregister: Effect.fn("DesktopBackendPool.unregister")(function () { + return Effect.die("DesktopBackendPool.layerTest does not support unregister"); + }), }); }), ); diff --git a/apps/desktop/src/backend/DesktopLocalEnvironmentAuth.ts b/apps/desktop/src/backend/DesktopLocalEnvironmentAuth.ts index 4d95dd075cf3e..6481bfd64c897 100644 --- a/apps/desktop/src/backend/DesktopLocalEnvironmentAuth.ts +++ b/apps/desktop/src/backend/DesktopLocalEnvironmentAuth.ts @@ -63,7 +63,7 @@ export class DesktopLocalEnvironmentAuth extends Context.Service< } >()("@t3tools/desktop/backend/DesktopLocalEnvironmentAuth") {} -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const pool = yield* DesktopBackendPool.DesktopBackendPool; const httpClient = yield* HttpClient.HttpClient; @@ -85,9 +85,7 @@ export const make = Effect.gen(function* () { return yield* new DesktopLocalEnvironmentAuthBackendNotConfiguredError(); } const config = configOption.value; - // A backend launched with the desktop secret accepts the current - // window's token, not the one frozen into its launch config; this - // exchange can run long after launch (e.g. after a suspend). + // Secret-authenticated backends accept the current window token; the launch token may be stale. const secret = config.bootstrap.desktopBootstrapSecret; const credential = secret === undefined diff --git a/apps/desktop/src/backend/DesktopServerExposure.test.ts b/apps/desktop/src/backend/DesktopServerExposure.test.ts index f53cde3e451d7..67ac6a51e65c7 100644 --- a/apps/desktop/src/backend/DesktopServerExposure.test.ts +++ b/apps/desktop/src/backend/DesktopServerExposure.test.ts @@ -238,6 +238,34 @@ describe("DesktopServerExposure", () => { ), ); + it.effect("advertises the current LAN address after the network changes", () => { + const networkInterfaces: Record< + string, + readonly DesktopNetworkInterfaces.DesktopNetworkInterfaceInfo[] | undefined + > = { ...lanNetworkInterfaces }; + + return withHarness( + networkInterfaces, + Effect.gen(function* () { + const serverExposure = yield* DesktopServerExposure.DesktopServerExposure; + yield* serverExposure.configureFromSettings({ port: 4173 }); + yield* serverExposure.setMode("network-accessible"); + + networkInterfaces.en0 = [{ address: "10.0.0.5", family: "IPv4", internal: false }]; + + const state = yield* serverExposure.getState; + assert.equal(state.advertisedHost, "10.0.0.5"); + assert.equal(state.endpointUrl, "http://10.0.0.5:4173"); + const endpoints = yield* serverExposure.getAdvertisedEndpoints; + assert.deepEqual( + endpoints.map((endpoint) => endpoint.httpBaseUrl), + ["http://127.0.0.1:4173/", "http://10.0.0.5:4173/"], + ); + assert.equal((yield* serverExposure.backendConfig).bindHost, "0.0.0.0"); + }), + ); + }); + it.effect("persists tailscale serve preferences atomically and reports no-op updates", () => withHarness( emptyNetworkInterfaces, diff --git a/apps/desktop/src/backend/DesktopServerExposure.ts b/apps/desktop/src/backend/DesktopServerExposure.ts index f9a69692a2504..288d969d6626c 100644 --- a/apps/desktop/src/backend/DesktopServerExposure.ts +++ b/apps/desktop/src/backend/DesktopServerExposure.ts @@ -71,15 +71,7 @@ const isUsableLanIpv4Address = (address: string): boolean => !address.startsWith("169.254.") && !isTailscaleIpv4Address(address); -/** - * Bridges, tunnels and VM adapters whose private address other devices on the - * LAN usually cannot reach: macOS's Thunderbolt Bridge (`bridge0`, which can - * keep a manual address while nothing is plugged in) and Internet Sharing - * bridges, VPN tunnels, and container or VM networks. Their addresses are only - * advertised when no other interface has one. Host bridges such as `br0`, - * Proxmox's `vmbr0` and Hyper-V's `vEthernet` external switches often carry - * the LAN address, so they are not listed. - */ +// Private bridges and VM adapters are fallbacks; host bridges can carry the real LAN address. const HOST_ONLY_INTERFACE = /^(bridge\d|utun|ipsec|ppp|tun|tap|wg|docker|br-|veth|virbr|vmnet|vboxnet|VirtualBox|VMware)/; @@ -417,6 +409,30 @@ function resolveRuntimeState(input: { }; } +// A network-accessible backend binds every interface, so a new Wi-Fi network +// or DHCP lease changes only the address worth advertising, not the binding. +const withCurrentAdvertisedHost = ( + state: RuntimeState, + networkInterfaces: DesktopNetworkInterfaces.NetworkInterfaces, + advertisedHostOverride: Option.Option, +): RuntimeState => { + if (state.mode !== "network-accessible") { + return state; + } + const override = Option.getOrUndefined(advertisedHostOverride); + const exposure = resolveDesktopServerExposure({ + mode: state.mode, + port: state.port, + networkInterfaces, + ...(override ? { advertisedHostOverride: override } : {}), + }); + return { + ...state, + endpointUrl: Option.fromNullishOr(exposure.endpointUrl), + advertisedHost: Option.fromNullishOr(exposure.advertisedHost), + }; +}; + const tailscaleIpv4AddressKey = ( networkInterfaces: DesktopNetworkInterfaces.NetworkInterfaces, ): string => @@ -441,7 +457,7 @@ const requiresBackendRelaunch = (previous: RuntimeState, next: RuntimeState): bo previous.bindHost !== next.bindHost || previous.localHttpUrl !== next.localHttpUrl; -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const config = yield* DesktopConfig.DesktopConfig; const networkInterfaces = yield* DesktopNetworkInterfaces.DesktopNetworkInterfaces; @@ -449,9 +465,7 @@ export const make = Effect.gen(function* () { const httpClient = yield* HttpClient.HttpClient; const desktopSettings = yield* DesktopAppSettings.DesktopAppSettings; const stateRef = yield* Ref.make(initialRuntimeState()); - // Each change reads the runtime state, persists settings, then writes the - // state back. Run them one at a time so a change never writes over another - // with values it read before that change persisted. + // Serialize read-persist-write changes so stale runtime state cannot overwrite another update. const changePermit = yield* Semaphore.make(1); // Key status by interface addresses so network changes bypass stale DNS and @@ -468,7 +482,17 @@ export const make = Effect.gen(function* () { const readNetworkInterfaces = networkInterfaces.read; - const getState = Ref.get(stateRef).pipe(Effect.map(toContractState)); + const readCurrentState = (currentNetworkInterfaces: DesktopNetworkInterfaces.NetworkInterfaces) => + Ref.get(stateRef).pipe( + Effect.map((state) => + withCurrentAdvertisedHost(state, currentNetworkInterfaces, config.desktopLanHostOverride), + ), + ); + + const getState = readNetworkInterfaces.pipe( + Effect.flatMap(readCurrentState), + Effect.map(toContractState), + ); const backendConfig = Ref.get(stateRef).pipe(Effect.map(toBackendConfig)); const configureFromSettings = Effect.fn("desktop.serverExposure.configureFromSettings")( @@ -565,17 +589,15 @@ export const make = Effect.gen(function* () { ); const getAdvertisedEndpoints = Effect.gen(function* () { - const state = yield* Ref.get(stateRef); const currentNetworkInterfaces = yield* readNetworkInterfaces; + const state = yield* readCurrentState(currentNetworkInterfaces); const coreEndpoints = resolveDesktopCoreAdvertisedEndpoints({ port: state.port, exposure: toResolvedExposure(state), customHttpsEndpointUrls: config.desktopHttpsEndpointUrls, }); - // Don't spawn the Tailscale CLI when the user hasn't opted into any - // network exposure. The spawn itself triggers a macOS "Other apps" - // TCC prompt on Mac App Store Tailscale builds. + // Spawning Mac App Store Tailscale can prompt for TCC access even when exposure is disabled. if (state.mode !== "network-accessible" && !state.tailscaleServeEnabled) { return coreEndpoints; } diff --git a/apps/desktop/src/backend/tailscaleEndpointProvider.ts b/apps/desktop/src/backend/tailscaleEndpointProvider.ts index 044625a32b445..4b75afccdb5bc 100644 --- a/apps/desktop/src/backend/tailscaleEndpointProvider.ts +++ b/apps/desktop/src/backend/tailscaleEndpointProvider.ts @@ -33,8 +33,7 @@ function resolveTailscaleIpAdvertisedEndpoints(input: { for (const [interfaceName, interfaceAddresses] of Object.entries(input.networkInterfaces)) { if (!interfaceAddresses) continue; - // CGNAT space is shared with other VPNs. Native adapter identity also - // works when the CLI is missing or its cached status predates a connection. + // CGNAT is shared with other VPNs; adapter identity works without current CLI status. const isTailscaleInterface = /^tailscale(?:\d+|ipv[46])?$/iu.test(interfaceName) || interfaceAddresses.some( diff --git a/apps/desktop/src/boot.ts b/apps/desktop/src/boot.ts index a8abdad9bbc60..f2524f246c664 100644 --- a/apps/desktop/src/boot.ts +++ b/apps/desktop/src/boot.ts @@ -1,4 +1,2 @@ -// Enables the compile cache before the main bundle loads, so the cache also -// covers main.cjs itself. require("./compileCache.cjs"); require("./main.cjs"); diff --git a/apps/desktop/src/compileCache.ts b/apps/desktop/src/compileCache.ts index da0fd66f5e582..abf8918df2af0 100644 --- a/apps/desktop/src/compileCache.ts +++ b/apps/desktop/src/compileCache.ts @@ -3,10 +3,8 @@ import * as NodeModule from "node:module"; import * as NodeOS from "node:os"; import * as NodePath from "node:path"; -// Linux uses the user's cache dir because /tmp is shared between users; the macOS and Windows -// temp dirs are already per user. Skipped under AppImage: it mounts the app at a new -// /tmp/.mount_* path each launch, and Node keys entries by path, so every launch would miss -// and leave another copy behind. +// Linux /tmp is shared; macOS and Windows temp dirs are per user. +// AppImage mounts change paths each launch, so Node's path-keyed cache would miss and accumulate copies. try { if (!process.env.APPIMAGE) { const cacheRoot = diff --git a/apps/desktop/src/electron/ElectronApp.test.ts b/apps/desktop/src/electron/ElectronApp.test.ts new file mode 100644 index 0000000000000..30b7f2d7387e3 --- /dev/null +++ b/apps/desktop/src/electron/ElectronApp.test.ts @@ -0,0 +1,89 @@ +import { assert, describe, it } from "@effect/vitest"; +import * as HostProcess from "@t3tools/shared/HostProcess"; +import * as Effect from "effect/Effect"; +import { beforeEach, vi } from "vite-plus/test"; + +const { getSystemLocaleMock, getUserDefaultMock } = vi.hoisted(() => ({ + getSystemLocaleMock: vi.fn(() => "en-GB"), + getUserDefaultMock: vi.fn((_key: string) => false), +})); + +vi.mock("electron", () => ({ + app: { + getSystemLocale: getSystemLocaleMock, + }, + systemPreferences: { + getUserDefault: getUserDefaultMock, + }, +})); + +import * as ElectronApp from "./ElectronApp.ts"; + +describe("ElectronApp", () => { + beforeEach(() => { + getSystemLocaleMock.mockReset(); + getUserDefaultMock.mockReset(); + }); + + it("keeps the macOS region override and hour cycle in the locale tag", () => { + assert.strictEqual(ElectronApp.toSystemLocaleTag("en_GB"), "en-GB"); + assert.strictEqual(ElectronApp.toSystemLocaleTag("en-US@rg=nlzzzz", "h12"), "en-NL-u-hc-h12"); + assert.strictEqual(ElectronApp.toSystemLocaleTag("en_US@rg=nlzzzz"), "en-NL"); + assert.strictEqual(ElectronApp.toSystemLocaleTag("en-GB", "h23"), "en-GB-u-hc-h23"); + }); + + it("drops ICU keywords Intl cannot read instead of losing the whole locale", () => { + assert.strictEqual(ElectronApp.toSystemLocaleTag("de_DE@calendar=buddhist"), "de-DE"); + }); + + it.effect("follows LC_TIME on Linux when it differs from the language", () => + Effect.gen(function* () { + const electronApp = yield* ElectronApp.ElectronApp; + const systemLocale = yield* electronApp.systemLocale.pipe( + Effect.provideService(HostProcess.Platform, "linux"), + Effect.provideService(HostProcess.Environment, { + LANG: "en_US.UTF-8", + LC_TIME: "de_DE.UTF-8", + }), + ); + + assert.strictEqual(systemLocale, "de-DE"); + }).pipe(Effect.provide(ElectronApp.layer)), + ); + + it.effect("falls back to Chromium's locale on Linux when the time locale is C", () => + Effect.gen(function* () { + getSystemLocaleMock.mockImplementationOnce(() => "fr-FR"); + const electronApp = yield* ElectronApp.ElectronApp; + const systemLocale = yield* electronApp.systemLocale.pipe( + Effect.provideService(HostProcess.Platform, "linux"), + Effect.provideService(HostProcess.Environment, { LANG: "C.UTF-8" }), + ); + + assert.strictEqual(systemLocale, "fr-FR"); + }).pipe(Effect.provide(ElectronApp.layer)), + ); +}); + +it.effect("reads both macOS hour preferences without overriding explicit formats", () => + Effect.gen(function* () { + for (const [preference, expected] of [ + ["AppleICUForce12HourTime", "en-NL-u-hc-h12"], + ["AppleICUForce24HourTime", "en-NL-u-hc-h23"], + ["", "en-NL"], + ]) { + getSystemLocaleMock.mockReturnValue("en_US@rg=nlzzzz"); + getUserDefaultMock.mockImplementation((key) => key === preference); + const locale = yield* ElectronApp.make.systemLocale.pipe( + Effect.provideService(HostProcess.Platform, "darwin"), + ); + assert.strictEqual(locale, expected); + for (const hour12 of [true, false]) { + assert.strictEqual( + new Intl.DateTimeFormat(locale, { hour: "numeric", hour12 }).resolvedOptions().hour12, + hour12, + ); + } + } + }), +); diff --git a/apps/desktop/src/electron/ElectronApp.ts b/apps/desktop/src/electron/ElectronApp.ts index 0aae1148a4828..d677baa56dce3 100644 --- a/apps/desktop/src/electron/ElectronApp.ts +++ b/apps/desktop/src/electron/ElectronApp.ts @@ -1,3 +1,4 @@ +import * as HostProcess from "@t3tools/shared/HostProcess"; import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; @@ -43,12 +44,7 @@ export class ElectronApp extends Context.Service< { readonly metadata: Effect.Effect; readonly name: Effect.Effect; - /** - * The OS locale, read from the operating system rather than from Chromium's - * resolved application locale — the packaged app ships only the `en-US` - * locale pak, so `app.getLocale()` and the renderer's `Intl` default are - * pinned to `en-US` however the machine is configured. - */ + /** Packaged builds ship only en-US; app.getLocale() and Intl defaults do not reflect the OS locale. */ readonly systemLocale: Effect.Effect; readonly whenReady: Effect.Effect; readonly requestSingleInstanceLock: Effect.Effect; @@ -98,7 +94,22 @@ const addScopedAppListener = >( }), ).pipe(Effect.asVoid); -/** @public Service construction is part of the canonical Effect module API. */ +export function toSystemLocaleTag(identifier: string, hourCycle?: "h12" | "h23"): string { + const [base = "", keywords = ""] = identifier.split("@"); + const languageTag = base.replace(/_/g, "-"); + // Intl ignores rg extensions, so the macOS region override must replace the region subtag. + const region = /(?:^|;)rg=([a-z]{2}|\d{3})zzzz(?:;|$)/i.exec(keywords)?.[1]?.toUpperCase(); + try { + return new Intl.Locale(languageTag, { + ...(region ? { region } : {}), + ...(hourCycle ? { hourCycle } : {}), + }).toString(); + } catch { + return languageTag; + } +} + +/** @public */ export const make = ElectronApp.of({ metadata: Effect.gen(function* () { const appVersion = yield* Effect.try({ @@ -127,10 +138,23 @@ export const make = ElectronApp.of({ }; }), name: Effect.sync(() => Electron.app.name), - // macOS derives this from NSLocale, which uses POSIX-style identifiers - // (`en_GB`). `Intl` rejects those outright rather than normalizing them, so - // the tag is normalized here rather than in the renderer that consumes it. - systemLocale: Effect.sync(() => Electron.app.getSystemLocale().replace(/_/g, "-")), + systemLocale: Effect.gen(function* () { + const platform = yield* HostProcess.Platform; + let identifier = Electron.app.getSystemLocale(); + let hourCycle: "h12" | "h23" | undefined; + if (platform === "linux") { + const env = yield* HostProcess.Environment; + const timeLocale = (env.LC_ALL || env.LC_TIME || env.LANG)?.split(".")[0]; + if (timeLocale && timeLocale !== "C" && timeLocale !== "POSIX") identifier = timeLocale; + } else if (platform === "darwin") { + if (Electron.systemPreferences.getUserDefault("AppleICUForce24HourTime", "boolean")) { + hourCycle = "h23"; + } else if (Electron.systemPreferences.getUserDefault("AppleICUForce12HourTime", "boolean")) { + hourCycle = "h12"; + } + } + return toSystemLocaleTag(identifier, hourCycle); + }), whenReady: Effect.gen(function* () { const isPackaged = Electron.app.isPackaged; yield* Effect.tryPromise({ @@ -142,59 +166,73 @@ export const make = ElectronApp.of({ quit: Effect.sync(() => { Electron.app.quit(); }), - exit: (code) => - Effect.sync(() => { + exit: Effect.fn("ElectronApp.exit")(function (code) { + return Effect.sync(() => { Electron.app.exit(code); - }), - relaunch: (options) => - Effect.sync(() => { + }); + }), + relaunch: Effect.fn("ElectronApp.relaunch")(function (options) { + return Effect.sync(() => { Electron.app.relaunch(options); - }), - setPath: (name, path) => - Effect.sync(() => { + }); + }), + setPath: Effect.fn("ElectronApp.setPath")(function (name, path) { + return Effect.sync(() => { Electron.app.setPath(name, path); - }), - setName: (name) => - Effect.sync(() => { + }); + }), + setName: Effect.fn("ElectronApp.setName")(function (name) { + return Effect.sync(() => { Electron.app.setName(name); - }), - setAboutPanelOptions: (options) => - Effect.sync(() => { + }); + }), + setAboutPanelOptions: Effect.fn("ElectronApp.setAboutPanelOptions")(function (options) { + return Effect.sync(() => { Electron.app.setAboutPanelOptions(options); - }), - setAppUserModelId: (id) => - Effect.sync(() => { + }); + }), + setAppUserModelId: Effect.fn("ElectronApp.setAppUserModelId")(function (id) { + return Effect.sync(() => { Electron.app.setAppUserModelId(id); - }), + }); + }), getAppMetrics: Effect.sync(() => Electron.app.getAppMetrics()), - setAsDefaultProtocolClient: (protocol, path, args) => - Effect.sync(() => { - if (path === undefined) { - return Electron.app.setAsDefaultProtocolClient(protocol); - } - return Electron.app.setAsDefaultProtocolClient(protocol, path, [...(args ?? [])]); - }), - setDesktopName: (desktopName) => - Effect.sync(() => { + setAsDefaultProtocolClient: Effect.fn("ElectronApp.setAsDefaultProtocolClient")( + function (protocol, path, args) { + return Effect.sync(() => { + if (path === undefined) { + return Electron.app.setAsDefaultProtocolClient(protocol); + } + return Electron.app.setAsDefaultProtocolClient(protocol, path, [...(args ?? [])]); + }); + }, + ), + setDesktopName: Effect.fn("ElectronApp.setDesktopName")(function (desktopName) { + return Effect.sync(() => { const linuxApp = Electron.app as Electron.App & { setDesktopName?: (desktopName: string) => void; }; linuxApp.setDesktopName?.(desktopName); - }), - setDockIcon: (iconPath) => - Effect.sync(() => { + }); + }), + setDockIcon: Effect.fn("ElectronApp.setDockIcon")(function (iconPath) { + return Effect.sync(() => { Electron.app.dock?.setIcon(iconPath); - }), - appendCommandLineSwitch: (switchName, value) => - Effect.sync(() => { - if (value === undefined) { - Electron.app.commandLine.appendSwitch(switchName); - return; - } - Electron.app.commandLine.appendSwitch(switchName, value); - }), - onBeforeQuitForUpdate: (listener) => - Effect.acquireRelease( + }); + }), + appendCommandLineSwitch: Effect.fn("ElectronApp.appendCommandLineSwitch")( + function (switchName, value) { + return Effect.sync(() => { + if (value === undefined) { + Electron.app.commandLine.appendSwitch(switchName); + return; + } + Electron.app.commandLine.appendSwitch(switchName, value); + }); + }, + ), + onBeforeQuitForUpdate: Effect.fn("ElectronApp.onBeforeQuitForUpdate")(function (listener) { + return Effect.acquireRelease( Effect.sync(() => { Electron.autoUpdater.on("before-quit-for-update", listener); }), @@ -202,11 +240,13 @@ export const make = ElectronApp.of({ Effect.sync(() => { Electron.autoUpdater.removeListener("before-quit-for-update", listener); }), - ).pipe(Effect.asVoid), - removeCommandLineSwitch: (switchName) => - Effect.sync(() => { + ).pipe(Effect.asVoid); + }), + removeCommandLineSwitch: Effect.fn("ElectronApp.removeCommandLineSwitch")(function (switchName) { + return Effect.sync(() => { Electron.app.commandLine.removeSwitch(switchName); - }), + }); + }), on: addScopedAppListener, }); diff --git a/apps/desktop/src/electron/ElectronDialog.ts b/apps/desktop/src/electron/ElectronDialog.ts index b48953f117d38..4f9ab12eddc39 100644 --- a/apps/desktop/src/electron/ElectronDialog.ts +++ b/apps/desktop/src/electron/ElectronDialog.ts @@ -104,7 +104,7 @@ export class ElectronDialog extends Context.Service< } >()("@t3tools/desktop/electron/ElectronDialog") {} -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = ElectronDialog.of({ pickFolder: Effect.fn("desktop.electron.dialog.pickFolder")(function* (input) { const ownerWindowId = Option.match(input.owner, { @@ -166,8 +166,8 @@ export const make = ElectronDialog.of({ }); return result.canceled ? [] : result.filePaths; }), - showMessageBox: (options, owner) => - Effect.tryPromise({ + showMessageBox: Effect.fn("ElectronDialog.showMessageBox")(function (options, owner) { + return Effect.tryPromise({ try: () => owner === undefined ? Electron.dialog.showMessageBox(options) @@ -181,9 +181,10 @@ export const make = ElectronDialog.of({ buttonCount: options.buttons?.length ?? 0, cause, }), - }), - showErrorBox: (title, content) => - Effect.try({ + }); + }), + showErrorBox: Effect.fn("ElectronDialog.showErrorBox")(function (title, content) { + return Effect.try({ try: () => Electron.dialog.showErrorBox(title, content), catch: (cause) => new ElectronDialogShowErrorBoxError({ @@ -191,7 +192,8 @@ export const make = ElectronDialog.of({ contentLength: content.length, cause, }), - }).pipe(Effect.orDie), + }).pipe(Effect.orDie); + }), }); export const layer = Layer.succeed(ElectronDialog, make); diff --git a/apps/desktop/src/electron/ElectronMenu.ts b/apps/desktop/src/electron/ElectronMenu.ts index 352a5bc97a21a..d4338b45e280b 100644 --- a/apps/desktop/src/electron/ElectronMenu.ts +++ b/apps/desktop/src/electron/ElectronMenu.ts @@ -68,8 +68,7 @@ function normalizeContextMenuItems(source: readonly ContextMenuItem[]): ContextM continue; } - // Header items are decorative section labels for the web fallback only — - // Electron's native menu has no equivalent affordance, so we skip them. + // Native menus cannot display the web fallback's decorative headers. if (sourceItem.header === true) { continue; } @@ -97,9 +96,7 @@ function normalizeContextMenuItems(source: readonly ContextMenuItem[]): ContextM return normalizedItems; } -// Renderer positions arrive in CSS pixels; popup() expects window points, so -// page zoom must be factored in or menus drift proportionally to their -// distance from the window origin. +// popup() takes window points; renderer CSS coordinates must account for page zoom. const normalizePosition = ( position: Option.Option, zoomFactor: number, @@ -112,7 +109,7 @@ const normalizePosition = ( Option.map(({ x, y }) => ({ x: Math.floor(x * zoomFactor), y: Math.floor(y * zoomFactor) })), ); -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const platform = yield* HostProcess.Platform; let destructiveMenuIconCache: Option.Option | undefined; @@ -190,8 +187,8 @@ export const make = Effect.gen(function* () { }; return ElectronMenu.of({ - setApplicationMenu: (template) => - Effect.try({ + setApplicationMenu: Effect.fn("ElectronMenu.setApplicationMenu")(function (template) { + return Effect.try({ try: () => { Electron.Menu.setApplicationMenu(Electron.Menu.buildFromTemplate([...template])); }, @@ -203,9 +200,10 @@ export const make = Effect.gen(function* () { itemCount: template.length, cause, }), - }).pipe(Effect.orDie), - popupTemplate: (input) => - input.template.length === 0 + }).pipe(Effect.orDie); + }), + popupTemplate: Effect.fn("ElectronMenu.popupTemplate")(function (input) { + return input.template.length === 0 ? Effect.void : Effect.try({ try: () => @@ -221,9 +219,10 @@ export const make = Effect.gen(function* () { itemCount: input.template.length, cause, }), - }).pipe(Effect.orDie), - showContextMenu: (input) => - Effect.callback>((resume) => { + }).pipe(Effect.orDie); + }), + showContextMenu: Effect.fn("ElectronMenu.showContextMenu")(function (input) { + return Effect.callback>((resume) => { const normalizedItems = normalizeContextMenuItems(input.items); if (normalizedItems.length === 0) { resume(Effect.succeedNone); @@ -275,7 +274,8 @@ export const make = Effect.gen(function* () { ), ); } - }), + }); + }), }); }); diff --git a/apps/desktop/src/electron/ElectronPowerMonitor.ts b/apps/desktop/src/electron/ElectronPowerMonitor.ts index 4fb42dfdc9f47..5a702b61a8111 100644 --- a/apps/desktop/src/electron/ElectronPowerMonitor.ts +++ b/apps/desktop/src/electron/ElectronPowerMonitor.ts @@ -75,12 +75,15 @@ const onSpeedLimitChange: ElectronPowerMonitor["Service"]["onSpeedLimitChange"] ).pipe(Effect.asVoid); }; -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = ElectronPowerMonitor.of({ isOnBatteryPower: Effect.sync(() => Electron.powerMonitor.isOnBatteryPower()), getSystemIdleTime: Effect.sync(() => Electron.powerMonitor.getSystemIdleTime()), - getSystemIdleState: (idleThresholdSeconds) => - Effect.sync(() => Electron.powerMonitor.getSystemIdleState(idleThresholdSeconds)), + getSystemIdleState: Effect.fn("ElectronPowerMonitor.getSystemIdleState")( + function (idleThresholdSeconds) { + return Effect.sync(() => Electron.powerMonitor.getSystemIdleState(idleThresholdSeconds)); + }, + ), getCurrentThermalState: Effect.sync(() => Electron.powerMonitor.getCurrentThermalState()), onSimpleEvent, onThermalStateChange, diff --git a/apps/desktop/src/electron/ElectronProtocol.test.ts b/apps/desktop/src/electron/ElectronProtocol.test.ts index 45d1771f26f07..aec3a2d5b45c0 100644 --- a/apps/desktop/src/electron/ElectronProtocol.test.ts +++ b/apps/desktop/src/electron/ElectronProtocol.test.ts @@ -130,6 +130,39 @@ describe("ElectronProtocol", () => { }).pipe(Effect.provide(layerProtocol)), ); + it.effect("keeps proxied paths on the configured server", () => + Effect.gen(function* () { + let handler: ((request: Request) => Promise) | undefined; + handleMock.mockImplementation((_scheme, nextHandler) => { + handler = nextHandler; + }); + netFetchMock.mockImplementation(async () => new Response("ok")); + + yield* Effect.scoped( + Effect.gen(function* () { + const protocol = yield* ElectronProtocol.ElectronProtocol; + yield* protocol.registerDesktopProtocol({ + scheme: "t3code-dev", + targetOrigin: new URL("http://127.0.0.1:5733/"), + clerkFrontendApiHostname: undefined, + }); + yield* Effect.promise(() => + handler!(new Request("t3code-dev://app//example.com/src/main.tsx?t=1")), + ); + yield* Effect.promise(() => handler!(new Request("t3code-dev://app/\\example.com/"))); + }), + ); + + assert.deepEqual( + netFetchMock.mock.calls.map((call) => call[0]), + [ + "http://127.0.0.1:5733//example.com/src/main.tsx?t=1", + "http://127.0.0.1:5733//example.com/", + ], + ); + }).pipe(Effect.provide(layerProtocol)), + ); + it.effect("rejects custom protocol requests for another host", () => Effect.gen(function* () { let handler: ((request: Request) => Promise) | undefined; diff --git a/apps/desktop/src/electron/ElectronProtocol.ts b/apps/desktop/src/electron/ElectronProtocol.ts index d6f476205f4c5..8c435b4adadb6 100644 --- a/apps/desktop/src/electron/ElectronProtocol.ts +++ b/apps/desktop/src/electron/ElectronProtocol.ts @@ -1,3 +1,4 @@ +import { desktopSchemeForVersion, UNLOCK_PREVIEW_SCHEME } from "@t3tools/shared/forkIdentity"; import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; import * as FileSystem from "effect/FileSystem"; @@ -16,16 +17,22 @@ export const DESKTOP_HOST = "app"; const DESKTOP_PRODUCTION_SCHEME = "t3code"; const DESKTOP_DEVELOPMENT_SCHEME = "t3code-dev"; -export function getDesktopScheme(isDevelopment: boolean): string { - return isDevelopment ? DESKTOP_DEVELOPMENT_SCHEME : DESKTOP_PRODUCTION_SCHEME; +export function getDesktopScheme( + isDevelopment: boolean, + appVersion = "", + isPackaged = true, +): string { + return isDevelopment + ? DESKTOP_DEVELOPMENT_SCHEME + : desktopSchemeForVersion(isPackaged ? appVersion : ""); } -function getDesktopOrigin(isDevelopment: boolean): string { - return `${getDesktopScheme(isDevelopment)}://${DESKTOP_HOST}`; +function getDesktopOrigin(isDevelopment: boolean, appVersion: string, isPackaged: boolean): string { + return `${getDesktopScheme(isDevelopment, appVersion, isPackaged)}://${DESKTOP_HOST}`; } -export function getDesktopUrl(isDevelopment: boolean): string { - return `${getDesktopOrigin(isDevelopment)}/`; +export function getDesktopUrl(isDevelopment: boolean, appVersion = "", isPackaged = true): string { + return `${getDesktopOrigin(isDevelopment, appVersion, isPackaged)}/`; } export class ElectronProtocolRegistrationError extends Schema.TaggedError()( @@ -78,11 +85,8 @@ function makeDesktopContentSecurityPolicy(input: DesktopProtocolRegistrationInpu "https://challenges.cloudflare.com", ]; - // The renderer connects directly to user-configured environments in addition to - // the build-configured Clerk, relay, and OTLP endpoints. Those environment - // origins are not known when this response policy is created, so restrict - // connections by the network schemes the client supports instead of by host. - // GLTFLoader fetches embedded textures through blob URLs after parsing the model. + // User-configured environment origins are unknown here, so allow supported network schemes. + // GLTFLoader fetches embedded textures through blob URLs. const connectSources = ["'self'", "blob:", "http:", "https:", "ws:", "wss:"]; return [ @@ -110,24 +114,21 @@ function withContentSecurityPolicy(response: Response, policy: string): Response }); } -/** - * Must run synchronously during process bootstrap, before Electron emits `ready`. - */ +// Must run synchronously before Electron emits ready. function registerDesktopSchemePrivilegesSync(): void { Electron.protocol.registerSchemesAsPrivileged([ - { - scheme: DESKTOP_PRODUCTION_SCHEME, + ...[DESKTOP_PRODUCTION_SCHEME, UNLOCK_PREVIEW_SCHEME].map((scheme) => ({ + scheme, privileges: { standard: true, secure: true, supportFetchAPI: true, corsEnabled: true, stream: true, - // Custom schemes skip Chromium's V8 code cache unless they opt in. - // Dev stays off: Vite serves changing code at stable URLs. + // Custom schemes must opt into V8 caching; dev URLs serve changing code. codeCache: true, }, - }, + })), { scheme: DESKTOP_DEVELOPMENT_SCHEME, privileges: { @@ -173,7 +174,10 @@ const proxyRequest = Effect.fn("desktop.protocol.proxyRequest")(function* ( return new Response(null, { status: 404 }); } - const targetUrl = new URL(`${requestUrl.pathname}${requestUrl.search}`, targetOrigin); + // Assign the path so leading slashes cannot replace the configured host. + const targetUrl = new URL(targetOrigin); + targetUrl.pathname = requestUrl.pathname; + targetUrl.search = requestUrl.search; const headers = new Headers(request.headers); const headersToRemove: string[] = []; for (const name of headers.keys()) { @@ -246,7 +250,7 @@ const serveDesktopAsset = Effect.fn("desktop.protocol.serveAsset")(function* ( }); }); -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const registered = yield* Ref.make(false); const context = yield* Effect.context(); diff --git a/apps/desktop/src/electron/ElectronSafeStorage.ts b/apps/desktop/src/electron/ElectronSafeStorage.ts index cd01613d92fd0..9725fd41e1318 100644 --- a/apps/desktop/src/electron/ElectronSafeStorage.ts +++ b/apps/desktop/src/electron/ElectronSafeStorage.ts @@ -65,7 +65,7 @@ export class ElectronSafeStorage extends Context.Service< } >()("@t3tools/desktop/electron/ElectronSafeStorage") {} -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const platform = yield* HostProcess.Platform; @@ -74,16 +74,18 @@ export const make = Effect.gen(function* () { try: () => Electron.safeStorage.isEncryptionAvailable(), catch: (cause) => new ElectronSafeStorageAvailabilityError({ cause }), }), - encryptString: (value) => - Effect.try({ + encryptString: Effect.fn("ElectronSafeStorage.encryptString")(function (value) { + return Effect.try({ try: () => Electron.safeStorage.encryptString(value), catch: (cause) => new ElectronSafeStorageEncryptError({ cause }), - }), - decryptString: (value) => - Effect.try({ + }); + }), + decryptString: Effect.fn("ElectronSafeStorage.decryptString")(function (value) { + return Effect.try({ try: () => Electron.safeStorage.decryptString(Buffer.from(value)), catch: (cause) => new ElectronSafeStorageDecryptError({ cause }), - }), + }); + }), selectedStorageBackend: Effect.sync(() => { if (platform !== "linux") { return Option.none(); diff --git a/apps/desktop/src/electron/ElectronShell.ts b/apps/desktop/src/electron/ElectronShell.ts index 0216d7b2c7dd1..e32dba36a6dfa 100644 --- a/apps/desktop/src/electron/ElectronShell.ts +++ b/apps/desktop/src/electron/ElectronShell.ts @@ -11,9 +11,7 @@ import * as Option from "effect/Option"; import * as Electron from "electron"; -// Remote open-in-editor deep links (`vscode://vscode-remote/ssh-remote+…`, -// `zed://ssh//`, `jetbrains://gateway/ssh/environment?h=…`) must -// reach the OS handler; every other non-web scheme stays blocked. +// Remote editor deep links must reach the OS handler. const SAFE_WEB_PROTOCOLS = new Set(["http:", "https:"]); const REMOTE_EDITOR_PROTOCOLS = new Set( REMOTE_CAPABLE_EDITOR_IDS.flatMap((id) => { @@ -63,10 +61,10 @@ export class ElectronShell extends Context.Service< } >()("@t3tools/desktop/electron/ElectronShell") {} -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = ElectronShell.of({ - openExternal: (rawUrl) => - Option.match(parseSafeExternalUrl(rawUrl), { + openExternal: Effect.fn("ElectronShell.openExternal")(function (rawUrl) { + return Option.match(parseSafeExternalUrl(rawUrl), { onNone: () => Effect.succeed(false), onSome: (externalUrl) => Effect.promise(() => @@ -75,16 +73,19 @@ export const make = ElectronShell.of({ () => false, ), ), - }), - openSystemSettings: (pane) => - Effect.promise(() => + }); + }), + openSystemSettings: Effect.fn("ElectronShell.openSystemSettings")(function (pane) { + return Effect.promise(() => Electron.shell.openExternal(MAC_PERMISSION_SETTINGS_URLS[pane]).then( () => true, () => false, ), - ), - copyText: (text) => - Effect.promise(() => Electron.clipboard.writeText(text).catch(() => undefined)), + ); + }), + copyText: Effect.fn("ElectronShell.copyText")(function (text) { + return Effect.promise(() => Electron.clipboard.writeText(text).catch(() => undefined)); + }), }); export const layer = Layer.succeed(ElectronShell, make); diff --git a/apps/desktop/src/electron/ElectronTheme.test.ts b/apps/desktop/src/electron/ElectronTheme.test.ts new file mode 100644 index 0000000000000..4239bfe4c5bca --- /dev/null +++ b/apps/desktop/src/electron/ElectronTheme.test.ts @@ -0,0 +1,81 @@ +import { assert, describe, it } from "@effect/vitest"; +import * as Effect from "effect/Effect"; +import { vi } from "vite-plus/test"; + +import type { LinuxColorScheme } from "./LinuxColorScheme.ts"; + +const { nativeTheme } = vi.hoisted(() => ({ + nativeTheme: { themeSource: "system" as "system" | "light" | "dark" }, +})); + +vi.mock("electron", () => ({ nativeTheme })); + +import * as ElectronTheme from "./ElectronTheme.ts"; + +function setup() { + nativeTheme.themeSource = "system"; + const portal: { report: (scheme: LinuxColorScheme) => void; stopped: boolean } = { + report: () => undefined, + stopped: false, + }; + const watch = (onChange: (scheme: LinuxColorScheme) => void) => { + portal.report = onChange; + return { + stop: () => { + portal.stopped = true; + }, + }; + }; + return { portal, watch }; +} + +describe("ElectronTheme", () => { + it.effect("resolves the system appearance from the desktop color scheme as it changes", () => + Effect.gen(function* () { + const { portal, watch } = setup(); + const theme = yield* ElectronTheme.makeWith(watch); + yield* theme.setSource("system"); + + portal.report("dark"); + assert.equal(nativeTheme.themeSource, "dark"); + portal.report("light"); + assert.equal(nativeTheme.themeSource, "light"); + portal.report(null); + assert.equal(nativeTheme.themeSource, "system"); + }).pipe(Effect.scoped), + ); + + it.effect("keeps an explicit appearance over the desktop color scheme", () => + Effect.gen(function* () { + const { portal, watch } = setup(); + const theme = yield* ElectronTheme.makeWith(watch); + portal.report("dark"); + + yield* theme.setSource("light"); + portal.report("dark"); + assert.equal(nativeTheme.themeSource, "light"); + + yield* theme.setSource("system"); + assert.equal(nativeTheme.themeSource, "dark"); + }).pipe(Effect.scoped), + ); + + it.effect("stops following the desktop when the layer is released", () => + Effect.gen(function* () { + const { portal, watch } = setup(); + yield* ElectronTheme.makeWith(watch).pipe(Effect.scoped); + assert.isTrue(portal.stopped); + }), + ); + + it.effect("leaves the system appearance to Electron when the portal is unavailable", () => + Effect.gen(function* () { + setup(); + const theme = yield* ElectronTheme.makeWith(() => { + throw new Error("no session bus"); + }); + yield* theme.setSource("system"); + assert.equal(nativeTheme.themeSource, "system"); + }).pipe(Effect.scoped), + ); +}); diff --git a/apps/desktop/src/electron/ElectronTheme.ts b/apps/desktop/src/electron/ElectronTheme.ts index 42cac98d0f538..d31939ba761ab 100644 --- a/apps/desktop/src/electron/ElectronTheme.ts +++ b/apps/desktop/src/electron/ElectronTheme.ts @@ -1,4 +1,5 @@ import { DesktopThemeSchema, type DesktopTheme } from "@t3tools/contracts"; +import * as HostProcess from "@t3tools/shared/HostProcess"; import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; @@ -7,6 +8,8 @@ import * as Scope from "effect/Scope"; import * as Electron from "electron"; +import { watchLinuxColorScheme, type LinuxColorScheme } from "./LinuxColorScheme.ts"; + export class ElectronThemeSetSourceError extends Schema.TaggedError()( "ElectronThemeSetSourceError", { @@ -28,28 +31,68 @@ export class ElectronTheme extends Context.Service< } >()("@t3tools/desktop/electron/ElectronTheme") {} -/** @public Service construction is part of the canonical Effect module API. */ -export const make = ElectronTheme.of({ - shouldUseDarkColors: Effect.sync(() => Electron.nativeTheme.shouldUseDarkColors), - setSource: (theme) => - Effect.try({ - try: () => { - Electron.nativeTheme.themeSource = theme; - }, - catch: (cause) => new ElectronThemeSetSourceError({ source: theme, cause }), - }), - onUpdated: (listener) => - Effect.acquireRelease( - Effect.suspend(() => { - Electron.nativeTheme.on("updated", listener); - return Effect.void; +type WatchSystemColorScheme = (onChange: (scheme: LinuxColorScheme) => void) => { + readonly stop: () => void; +}; + +export const makeWith = Effect.fn("ElectronTheme.make")(function* ( + watchSystemColorScheme: WatchSystemColorScheme | undefined, +) { + let source: DesktopTheme = Electron.nativeTheme.themeSource; + let systemScheme: LinuxColorScheme = null; + // On Linux, Electron reads the desktop color scheme once and then ignores the settings + // portal (electron/electron#48736), so "system" is resolved from the portal directly. + const apply = () => { + Electron.nativeTheme.themeSource = source === "system" ? (systemScheme ?? source) : source; + }; + + if (watchSystemColorScheme) { + yield* Effect.acquireRelease( + Effect.sync(() => { + try { + return watchSystemColorScheme((scheme) => { + systemScheme = scheme; + apply(); + }); + } catch { + return undefined; + } }), - () => + (watcher) => Effect.sync(() => watcher?.stop()), + ); + } + + return ElectronTheme.of({ + shouldUseDarkColors: Effect.sync(() => Electron.nativeTheme.shouldUseDarkColors), + setSource: Effect.fn("ElectronTheme.setSource")(function (theme) { + return Effect.try({ + try: () => { + source = theme; + apply(); + }, + catch: (cause) => new ElectronThemeSetSourceError({ source: theme, cause }), + }); + }), + onUpdated: Effect.fn("ElectronTheme.onUpdated")(function (listener) { + return Effect.acquireRelease( Effect.suspend(() => { - Electron.nativeTheme.removeListener("updated", listener); + Electron.nativeTheme.on("updated", listener); return Effect.void; }), - ), + () => + Effect.suspend(() => { + Electron.nativeTheme.removeListener("updated", listener); + return Effect.void; + }), + ); + }), + }); +}); + +/** @public */ +export const make = Effect.gen(function* () { + const platform = yield* HostProcess.Platform; + return yield* makeWith(platform === "linux" ? watchLinuxColorScheme : undefined); }); -export const layer = Layer.succeed(ElectronTheme, make); +export const layer = Layer.effect(ElectronTheme, make); diff --git a/apps/desktop/src/electron/ElectronUpdater.ts b/apps/desktop/src/electron/ElectronUpdater.ts index e42ebc1003ab4..c71b42040db29 100644 --- a/apps/desktop/src/electron/ElectronUpdater.ts +++ b/apps/desktop/src/electron/ElectronUpdater.ts @@ -80,49 +80,59 @@ export class ElectronUpdater extends Context.Service< } >()("@t3tools/desktop/electron/ElectronUpdater") {} -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = ElectronUpdater.of({ - setFeedURL: (options) => - Effect.suspend(() => { + setFeedURL: Effect.fn("ElectronUpdater.setFeedURL")(function (options) { + return Effect.suspend(() => { autoUpdater.setFeedURL(options); return Effect.void; - }), - setAutoDownload: (value) => - Effect.suspend(() => { + }); + }), + setAutoDownload: Effect.fn("ElectronUpdater.setAutoDownload")(function (value) { + return Effect.suspend(() => { autoUpdater.autoDownload = value; return Effect.void; - }), - setAutoInstallOnAppQuit: (value) => - Effect.suspend(() => { + }); + }), + setAutoInstallOnAppQuit: Effect.fn("ElectronUpdater.setAutoInstallOnAppQuit")(function (value) { + return Effect.suspend(() => { autoUpdater.autoInstallOnAppQuit = value; return Effect.void; - }), - setChannel: (channel) => - Effect.suspend(() => { + }); + }), + setChannel: Effect.fn("ElectronUpdater.setChannel")(function (channel) { + return Effect.suspend(() => { autoUpdater.channel = channel; return Effect.void; - }), - setAllowPrerelease: (value) => - Effect.suspend(() => { + }); + }), + setAllowPrerelease: Effect.fn("ElectronUpdater.setAllowPrerelease")(function (value) { + return Effect.suspend(() => { autoUpdater.allowPrerelease = value; return Effect.void; - }), + }); + }), allowDowngrade: Effect.sync(() => autoUpdater.allowDowngrade), - setAllowDowngrade: (value) => - Effect.suspend(() => { + setAllowDowngrade: Effect.fn("ElectronUpdater.setAllowDowngrade")(function (value) { + return Effect.suspend(() => { autoUpdater.allowDowngrade = value; return Effect.void; - }), - setFullChangelog: (value) => - Effect.suspend(() => { + }); + }), + setFullChangelog: Effect.fn("ElectronUpdater.setFullChangelog")(function (value) { + return Effect.suspend(() => { autoUpdater.fullChangelog = value; return Effect.void; - }), - setDisableDifferentialDownload: (value) => - Effect.suspend(() => { - autoUpdater.disableDifferentialDownload = value; - return Effect.void; - }), + }); + }), + setDisableDifferentialDownload: Effect.fn("ElectronUpdater.setDisableDifferentialDownload")( + function (value) { + return Effect.suspend(() => { + autoUpdater.disableDifferentialDownload = value; + return Effect.void; + }); + }, + ), checkForUpdates: Effect.suspend(() => { const channel = autoUpdater.channel; return Effect.tryPromise({ @@ -137,8 +147,11 @@ export const make = ElectronUpdater.of({ catch: (cause) => new ElectronUpdaterDownloadUpdateError({ channel, cause }), }).pipe(Effect.asVoid); }), - quitAndInstall: ({ isSilent, isForceRunAfter }) => - Effect.suspend(() => { + quitAndInstall: Effect.fn("ElectronUpdater.quitAndInstall")(function ({ + isSilent, + isForceRunAfter, + }) { + return Effect.suspend(() => { const channel = autoUpdater.channel; return Effect.try({ try: () => autoUpdater.quitAndInstall(isSilent, isForceRunAfter), @@ -150,8 +163,9 @@ export const make = ElectronUpdater.of({ cause, }), }); - }), - on: (eventName, listener) => { + }); + }), + on: Effect.fn("ElectronUpdater.on")(function (eventName, listener) { const eventTarget = autoUpdater as unknown as { on: (eventName: string, listener: (...args: Array) => void) => void; removeListener: (eventName: string, listener: (...args: Array) => void) => void; @@ -166,7 +180,7 @@ export const make = ElectronUpdater.of({ eventTarget.removeListener(eventName, untypedListener); }), ).pipe(Effect.asVoid); - }, + }), }); export const layer = Layer.succeed(ElectronUpdater, make); diff --git a/apps/desktop/src/electron/ElectronWindow.test.ts b/apps/desktop/src/electron/ElectronWindow.test.ts index 4f17ca7e33010..478d490129014 100644 --- a/apps/desktop/src/electron/ElectronWindow.test.ts +++ b/apps/desktop/src/electron/ElectronWindow.test.ts @@ -162,4 +162,20 @@ describe("ElectronWindow", () => { assert.equal(vi.mocked(laterWindow.destroy).mock.calls.length, 1); }).pipe(Effect.provide(layerTest)), ); + + it.effect("never falls back to an auxiliary window as the main window", () => + Effect.gen(function* () { + const electronWindow = yield* ElectronWindow.ElectronWindow; + const auxiliary = yield* electronWindow.create({}, { auxiliary: true }); + const ordinary = { isDestroyed: () => false } as unknown as Electron.BrowserWindow; + Object.assign(auxiliary, { isDestroyed: () => false }); + + getAllWindowsMock.mockReturnValue([auxiliary]); + assert.isTrue((yield* electronWindow.currentMainOrFirst)._tag === "None"); + + getAllWindowsMock.mockReturnValue([auxiliary, ordinary]); + const current = yield* electronWindow.currentMainOrFirst; + assert.isTrue(current._tag === "Some" && current.value === ordinary); + }).pipe(Effect.provide(layerTest)), + ); }); diff --git a/apps/desktop/src/electron/ElectronWindow.ts b/apps/desktop/src/electron/ElectronWindow.ts index 993e930678ed7..985f9c00775a0 100644 --- a/apps/desktop/src/electron/ElectronWindow.ts +++ b/apps/desktop/src/electron/ElectronWindow.ts @@ -109,8 +109,10 @@ export class ElectronWindowOperationError extends Schema.TaggedError Effect.Effect; readonly main: Effect.Effect>; readonly currentMainOrFirst: Effect.Effect>; @@ -127,11 +129,10 @@ export class ElectronWindow extends Context.Service< } >()("@t3tools/desktop/electron/ElectronWindow") {} -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const platform = yield* HostProcess.Platform; - // The focus worker loads a native accessibility module. Start it on the first - // capture reveal so users who never capture pay nothing at launch. + // Lazy-load native accessibility on capture reveal to avoid startup cost for other users. let windowsForegroundFocus: ReturnType | undefined; const ensureWindowsForegroundFocus = () => { windowsForegroundFocus ??= startWindowsForegroundFocusThread( @@ -142,6 +143,7 @@ export const make = Effect.gen(function* () { const captureRevealWindows = new Set(); yield* Effect.addFinalizer(() => Effect.sync(() => windowsForegroundFocus?.close())); const mainWindowRef = yield* Ref.make>(Option.none()); + const auxiliaryWindows = new WeakSet(); const listWindows = Effect.try({ try: () => Electron.BrowserWindow.getAllWindows(), @@ -182,7 +184,9 @@ export const make = Effect.gen(function* () { return main; } - const first = Option.fromNullishOr((yield* listWindows)[0] ?? null); + const first = Option.fromNullishOr( + (yield* listWindows).find((window) => !auxiliaryWindows.has(window)) ?? null, + ); if (Option.isNone(first) || (yield* isWindowDestroyed(first.value))) { return Option.none(); } @@ -208,7 +212,7 @@ export const make = Effect.gen(function* () { }); return ElectronWindow.of({ - create: (options) => { + create: Effect.fn("ElectronWindow.create")(function (options, behavior) { const webPreferences = options.webPreferences; const diagnosticOptions = { title: options.title ?? null, @@ -233,16 +237,22 @@ export const make = Effect.gen(function* () { } satisfies typeof ElectronWindowCreateOptions.Type; return Effect.try({ - try: () => new Electron.BrowserWindow(options), + try: () => { + const window = new Electron.BrowserWindow(options); + if (behavior?.auxiliary === true) auxiliaryWindows.add(window); + return window; + }, catch: (cause) => new ElectronWindowCreateError({ options: diagnosticOptions, cause }), }); - }, + }), main: liveMain, currentMainOrFirst, focusedMainOrFirst, - setMain: (window) => Ref.set(mainWindowRef, Option.some(window)), - clearMain: (window) => - Ref.update(mainWindowRef, (current) => { + setMain: Effect.fn("ElectronWindow.setMain")(function (window) { + return Ref.set(mainWindowRef, Option.some(window)); + }), + clearMain: Effect.fn("ElectronWindow.clearMain")(function (window) { + return Ref.update(mainWindowRef, (current) => { if (Option.isNone(current)) { return current; } @@ -250,9 +260,10 @@ export const make = Effect.gen(function* () { return current; } return Option.none(); - }), - prepareReveal: (window) => - Effect.promise(async () => { + }); + }), + prepareReveal: Effect.fn("ElectronWindow.prepareReveal")(function (window) { + return Effect.promise(async () => { if (platform !== "win32" || window.isDestroyed()) { return false; } @@ -260,9 +271,10 @@ export const make = Effect.gen(function* () { return ensureWindowsForegroundFocus() .prepare(windowsForegroundFocusTarget(window)) .catch(() => false); - }), - reveal: (window) => - Effect.tryPromise({ + }); + }), + reveal: Effect.fn("ElectronWindow.reveal")(function (window) { + return Effect.tryPromise({ try: async () => { if (window.isDestroyed()) { return; @@ -323,7 +335,8 @@ export const make = Effect.gen(function* () { channel: null, cause, }), - }).pipe(Effect.orDie), + }).pipe(Effect.orDie); + }), sendAll: /* Window broadcasts run for streamed updates; avoid a span per broadcast. */ Effect.fnUntraced(function* (channel, ...args) { diff --git a/apps/desktop/src/electron/LinuxColorScheme.test.ts b/apps/desktop/src/electron/LinuxColorScheme.test.ts new file mode 100644 index 0000000000000..47225f0611b72 --- /dev/null +++ b/apps/desktop/src/electron/LinuxColorScheme.test.ts @@ -0,0 +1,100 @@ +// @effect-diagnostics nodeBuiltinImport:off -- Event-driven fake of the portal transport. +import * as NodeEvents from "node:events"; +import { DBusError, Message, MessageType, Variant, type MessageBus } from "dbus-next"; +import { expect, it, vi } from "vite-plus/test"; + +import { watchLinuxColorScheme, type LinuxColorScheme } from "./LinuxColorScheme.ts"; + +const PATH = "/org/freedesktop/portal/desktop"; +const SETTINGS = "org.freedesktop.portal.Settings"; + +class FakeBus extends NodeEvents.EventEmitter { + calls: Message[] = []; + disconnect = vi.fn(); + readonly settings: { readOne?: unknown; read?: unknown }; + constructor(settings: { readOne?: unknown; read?: unknown }) { + super(); + this.settings = settings; + } + + readonly readOneCalled = Promise.withResolvers(); + + async call(message: Message) { + this.calls.push(message); + if (message.member === "AddMatch") + return new Message({ type: MessageType.METHOD_RETURN, replySerial: "1" }); + if (message.member === "ReadOne") this.readOneCalled.resolve(); + const value = await (message.member === "ReadOne" ? this.settings.readOne : this.settings.read); + if (value === undefined) throw new DBusError("org.freedesktop.DBus.Error.UnknownMethod", ""); + return new Message({ + type: MessageType.METHOD_RETURN, + replySerial: "1", + signature: "v", + body: [value], + }); + } + + changed(namespace: string, key: string, value: number) { + this.emit( + "message", + new Message({ + type: MessageType.SIGNAL, + path: PATH, + interface: SETTINGS, + member: "SettingChanged", + body: [namespace, key, new Variant("u", value)], + }), + ); + } +} + +function watch(bus: FakeBus) { + const schemes: LinuxColorScheme[] = []; + const { ready, stop } = watchLinuxColorScheme( + (scheme) => schemes.push(scheme), + bus as unknown as MessageBus, + ); + return { schemes, ready, stop }; +} + +it("reads the current color scheme and follows portal changes", async () => { + const bus = new FakeBus({ readOne: new Variant("u", 1) }); + const { schemes, ready, stop } = watch(bus); + await ready; + + bus.changed("org.freedesktop.appearance", "color-scheme", 2); + bus.changed("org.freedesktop.appearance", "accent-color", 1); + bus.changed("org.gnome.desktop.interface", "color-scheme", 1); + bus.changed("org.freedesktop.appearance", "color-scheme", 1); + // GNOME's light mode reports "no preference". + bus.changed("org.freedesktop.appearance", "color-scheme", 0); + bus.changed("org.freedesktop.appearance", "color-scheme", 3); + expect(schemes).toEqual(["dark", "light", "dark", "light", null]); + + stop(); + bus.changed("org.freedesktop.appearance", "color-scheme", 1); + expect(schemes).toEqual(["dark", "light", "dark", "light", null]); + expect(bus.disconnect).toHaveBeenCalledOnce(); +}); + +it("falls back to the nested Read reply on portals without ReadOne", async () => { + const bus = new FakeBus({ read: new Variant("v", new Variant("u", 2)) }); + const { schemes, ready } = watch(bus); + await ready; + + expect(schemes).toEqual(["light"]); + expect(bus.calls.map((call) => call.member)).toEqual(["AddMatch", "ReadOne", "Read"]); +}); + +it("keeps a change that arrives while the initial read is pending", async () => { + const reply = Promise.withResolvers(); + const bus = new FakeBus({ readOne: reply.promise }); + const { schemes, ready } = watch(bus); + + await bus.readOneCalled.promise; + bus.changed("org.freedesktop.appearance", "color-scheme", 1); + reply.resolve(new Variant("u", 0)); + await ready; + + expect(schemes).toEqual(["dark"]); +}); diff --git a/apps/desktop/src/electron/LinuxColorScheme.ts b/apps/desktop/src/electron/LinuxColorScheme.ts new file mode 100644 index 0000000000000..8b88fd5655aa8 --- /dev/null +++ b/apps/desktop/src/electron/LinuxColorScheme.ts @@ -0,0 +1,91 @@ +import { Message, MessageType, Variant, sessionBus, type MessageBus } from "dbus-next"; + +const PORTAL = "org.freedesktop.portal.Desktop"; +const PATH = "/org/freedesktop/portal/desktop"; +const SETTINGS = "org.freedesktop.portal.Settings"; +const DBUS = "org.freedesktop.DBus"; +const NAMESPACE = "org.freedesktop.appearance"; +const KEY = "color-scheme"; + +export type LinuxColorScheme = "dark" | "light" | null; + +// The portal reports 1 for prefer-dark, 2 for prefer-light and 0 for no preference. GNOME's +// light mode is 0, and the spec asks apps to use their default then, so only 1 is dark. +// The deprecated Read method nests the value in a second variant. +function decodeColorScheme(value: unknown): LinuxColorScheme { + let scheme = value; + while (scheme instanceof Variant) scheme = scheme.value; + return scheme === 1 ? "dark" : scheme === 0 || scheme === 2 ? "light" : null; +} + +const settingsCall = (member: "ReadOne" | "Read") => + new Message({ + destination: PORTAL, + path: PATH, + interface: SETTINGS, + member, + signature: "ss", + body: [NAMESPACE, KEY], + }); + +/** + * Follows the desktop color scheme through the XDG settings portal. Without a session bus or + * portal it reports nothing, so Chromium's own resolution stays in charge. + */ +export function watchLinuxColorScheme( + onChange: (scheme: LinuxColorScheme) => void, + bus: MessageBus = sessionBus(), +) { + let closed = false; + let changed = false; + const report = (value: unknown) => { + if (!closed) onChange(decodeColorScheme(value)); + }; + const onMessage = (message: Message) => { + if ( + message.type !== MessageType.SIGNAL || + message.path !== PATH || + message.interface !== SETTINGS || + message.member !== "SettingChanged" + ) + return; + const [namespace, key, value] = message.body; + if (namespace !== NAMESPACE || key !== KEY) return; + changed = true; + report(value); + }; + const ignore = () => undefined; + + bus.on("error", ignore); + bus.on("message", onMessage); + const ready = (async () => { + await bus.call( + new Message({ + destination: DBUS, + path: "/org/freedesktop/DBus", + interface: DBUS, + member: "AddMatch", + signature: "s", + body: [ + `type='signal',interface='${SETTINGS}',member='SettingChanged',path='${PATH}',arg0='${NAMESPACE}',arg1='${KEY}'`, + ], + }), + ); + // ReadOne needs Settings portal version 2; older portals only offer Read. + const reply = await bus + .call(settingsCall("ReadOne")) + .catch(() => bus.call(settingsCall("Read"))); + // The portal answers reads through its backend asynchronously, so a change signal can + // overtake this reply; the reply then carries the older value. + if (reply && !changed) report(reply.body[0]); + })().catch(ignore); + + return { + ready, + stop: () => { + closed = true; + bus.removeListener("message", onMessage); + bus.disconnect(); + }, + }; +} diff --git a/apps/desktop/src/ipc/DesktopIpcHandlers.ts b/apps/desktop/src/ipc/DesktopIpcHandlers.ts index 2d67aa56e6ccd..35333ac3d33a4 100644 --- a/apps/desktop/src/ipc/DesktopIpcHandlers.ts +++ b/apps/desktop/src/ipc/DesktopIpcHandlers.ts @@ -4,11 +4,7 @@ import { receiveProviderAuthCallback, cancelProviderAuthCallback } from "./metho import * as DesktopIpc from "./DesktopIpc.ts"; import { installNotificationBadge } from "./methods/notificationBadge.ts"; import { getClientSettings, setClientSettings } from "./methods/clientSettings.ts"; -import { - clearConnectionCatalog, - getConnectionCatalog, - setConnectionCatalog, -} from "./methods/connectionCatalog.ts"; +import { getConnectionCatalog, setConnectionCatalog } from "./methods/connectionCatalog.ts"; import { getLocalEnvironmentEnabled, setLocalEnvironmentEnabled, @@ -26,7 +22,6 @@ import { ensureSshEnvironment, fetchSshEnvironmentDescriptor, fetchSshSessionState, - issueSshWebSocketTicket, resolveSshHost, resolveSshPasswordPrompt, } from "./methods/sshEnvironment.ts"; @@ -120,7 +115,6 @@ export const installDesktopIpcHandlers = Effect.fn("desktop.ipc.installHandlers" yield* ipc.handle(dismissSnapShotAnimation); yield* ipc.handle(acknowledgeSnapShot); yield* ipc.handle(setConnectionCatalog); - yield* ipc.handle(clearConnectionCatalog); yield* ipc.handle(discoverSshHosts); yield* ipc.handle(resolveSshHost); @@ -129,7 +123,6 @@ export const installDesktopIpcHandlers = Effect.fn("desktop.ipc.installHandlers" yield* ipc.handle(fetchSshEnvironmentDescriptor); yield* ipc.handle(bootstrapSshBearerSession); yield* ipc.handle(fetchSshSessionState); - yield* ipc.handle(issueSshWebSocketTicket); yield* ipc.handle(resolveSshPasswordPrompt); yield* ipc.handle(getServerExposureState); diff --git a/apps/desktop/src/ipc/channels.ts b/apps/desktop/src/ipc/channels.ts index 9b11a2283a273..538dd06b0b42a 100644 --- a/apps/desktop/src/ipc/channels.ts +++ b/apps/desktop/src/ipc/channels.ts @@ -14,6 +14,7 @@ export const SNAP_SHOT_EVENT_CHANNEL = "desktop:snap-shot-event"; export const WEB_LINK_OPEN_CHANNEL = "desktop:web-link-open"; export const WEB_LINK_READY_CHANNEL = "desktop:web-link-ready"; export const QUIT_SHORTCUT_CHANNEL = "desktop:quit-shortcut"; +export const TRACKPAD_SCROLL_BEGIN_CHANNEL = "desktop:trackpad-scroll-begin"; export const TRACKPAD_SCROLL_END_CHANNEL = "desktop:trackpad-scroll-end"; export const GET_WINDOW_FULLSCREEN_STATE_CHANNEL = "desktop:get-window-fullscreen-state"; export const WINDOW_FULLSCREEN_STATE_CHANNEL = "desktop:window-fullscreen-state"; @@ -55,7 +56,6 @@ export const DISMISS_SNAP_SHOT_ANIMATION_CHANNEL = "desktop:dismiss-snap-shot-an export const ACKNOWLEDGE_SNAP_SHOT_CHANNEL = "desktop:acknowledge-snap-shot"; export const GET_CONNECTION_CATALOG_CHANNEL = "desktop:get-connection-catalog"; export const SET_CONNECTION_CATALOG_CHANNEL = "desktop:set-connection-catalog"; -export const CLEAR_CONNECTION_CATALOG_CHANNEL = "desktop:clear-connection-catalog"; export const DISCOVER_SSH_HOSTS_CHANNEL = "desktop:discover-ssh-hosts"; export const RESOLVE_SSH_HOST_CHANNEL = "desktop:resolve-ssh-host"; export const ENSURE_SSH_ENVIRONMENT_CHANNEL = "desktop:ensure-ssh-environment"; @@ -63,7 +63,6 @@ export const DISCONNECT_SSH_ENVIRONMENT_CHANNEL = "desktop:disconnect-ssh-enviro export const FETCH_SSH_ENVIRONMENT_DESCRIPTOR_CHANNEL = "desktop:fetch-ssh-environment-descriptor"; export const BOOTSTRAP_SSH_BEARER_SESSION_CHANNEL = "desktop:bootstrap-ssh-bearer-session"; export const FETCH_SSH_SESSION_STATE_CHANNEL = "desktop:fetch-ssh-session-state"; -export const ISSUE_SSH_WEBSOCKET_TOKEN_CHANNEL = "desktop:issue-ssh-websocket-token"; export const SSH_PASSWORD_PROMPT_CHANNEL = "desktop:ssh-password-prompt"; export const RESOLVE_SSH_PASSWORD_PROMPT_CHANNEL = "desktop:resolve-ssh-password-prompt"; export const GET_SERVER_EXPOSURE_STATE_CHANNEL = "desktop:get-server-exposure-state"; @@ -110,7 +109,6 @@ export const PREVIEW_PICTURE_IN_PICTURE_FRAME_CHANNEL = "desktop:preview-pip-fra export const PREVIEW_RECORDING_START_CHANNEL = "desktop:preview-recording-start"; export const PREVIEW_RECORDING_STOP_CHANNEL = "desktop:preview-recording-stop"; export const PREVIEW_RECORDING_SAVE_CHANNEL = "desktop:preview-recording-save"; -export const PREVIEW_RECORDING_FRAME_CHANNEL = "desktop:preview-recording-frame"; export const PREVIEW_STATE_CHANGE_CHANNEL = "desktop:preview-state-change"; export const PREVIEW_POINTER_EVENT_CHANNEL = "desktop:preview-pointer-event"; export const PREVIEW_OPEN_LINK_CHANNEL = "desktop:preview-open-link"; diff --git a/apps/desktop/src/ipc/methods/connectionCatalog.ts b/apps/desktop/src/ipc/methods/connectionCatalog.ts index 4e51496a6379a..0f913d0f300a3 100644 --- a/apps/desktop/src/ipc/methods/connectionCatalog.ts +++ b/apps/desktop/src/ipc/methods/connectionCatalog.ts @@ -25,13 +25,3 @@ export const setConnectionCatalog = DesktopIpc.makeIpcMethod({ return yield* store.set(catalog); }), }); - -export const clearConnectionCatalog = DesktopIpc.makeIpcMethod({ - channel: IpcChannels.CLEAR_CONNECTION_CATALOG_CHANNEL, - payload: Schema.Void, - result: Schema.Void, - handler: Effect.fn("desktop.ipc.connectionCatalog.clear")(function* () { - const store = yield* DesktopConnectionCatalogStore.DesktopConnectionCatalogStore; - yield* store.clear; - }), -}); diff --git a/apps/desktop/src/ipc/methods/legacyLocalStorage.ts b/apps/desktop/src/ipc/methods/legacyLocalStorage.ts index 13f657e7812f8..a0c2fb27a5eac 100644 --- a/apps/desktop/src/ipc/methods/legacyLocalStorage.ts +++ b/apps/desktop/src/ipc/methods/legacyLocalStorage.ts @@ -22,8 +22,7 @@ export const completeLegacyLocalStorage = makeIpcMethod({ result: Schema.Void, handler: Effect.fn("desktop.ipc.legacyLocalStorage.complete")(function* (_, event) { const legacy = yield* DesktopLegacyLocalStorage.DesktopLegacyLocalStorage; - // Chromium writes localStorage to disk lazily; persist the merge before - // the marker stops later launches from retrying it. + // Flush Chromium's lazy writes before the marker prevents migration retries. if (event) Electron.webContents.fromId(event.sender.id)?.session.flushStorageData(); yield* legacy.complete; }), diff --git a/apps/desktop/src/ipc/methods/preview.ts b/apps/desktop/src/ipc/methods/preview.ts index 50dd9587454d8..6f4d77e0a2947 100644 --- a/apps/desktop/src/ipc/methods/preview.ts +++ b/apps/desktop/src/ipc/methods/preview.ts @@ -47,9 +47,6 @@ export const installPreviewEventForwarding = Effect.fn( yield* manager.subscribeStateChanges((tabId, state) => electronWindow.sendAll(IpcChannels.PREVIEW_STATE_CHANGE_CHANNEL, tabId, state), ); - yield* manager.subscribeRecordingFrames((frame) => - electronWindow.sendAll(IpcChannels.PREVIEW_RECORDING_FRAME_CHANNEL, frame), - ); yield* manager.subscribeRecordingInputs((event) => electronWindow.sendAll(IpcChannels.PREVIEW_RECORDING_INPUT_CHANNEL, event), ); @@ -274,10 +271,7 @@ const resolveClearPartitions = Effect.fn("desktop.ipc.preview.resolveClearPartit ) { if (profileId === undefined) return undefined; const { scope, persistent, namespace } = resolvePartitionScope(environmentId, profileId); - // Loading the session is what puts the partition in the map the clear walks. - // Deriving the partition string alone leaves nothing to match, so clearing a - // profile with no tab open this run — after a restart, or when deleting a - // profile — would report success and delete nothing. + // getBrowserSession registers the partition; deriving its name alone leaves unopened profiles uncleared. yield* manager.getBrowserSession(scope, persistent, namespace); return [yield* manager.getBrowserPartition(scope, persistent, namespace)]; }); @@ -289,9 +283,7 @@ const getPreviewConfig = DesktopIpc.makeIpcMethod({ handler: Effect.fn("desktop.ipc.preview.getConfig")(function* ({ environmentId, profileId }) { const manager = yield* PreviewManager.PreviewManager; const { scope, persistent, namespace } = resolvePartitionScope(environmentId, profileId); - // Creating the session first is what installs the UA rewrite and permission - // handlers; a guest that attached to an untouched partition would run with - // Electron's default UA and Chromium's default permission behaviour. + // Session creation installs UA and permission handlers before a guest can attach. yield* manager.getBrowserSession(scope, persistent, namespace); return { partition: yield* manager.getBrowserPartition(scope, persistent, namespace), @@ -320,8 +312,6 @@ export const importBrowserCookies = DesktopIpc.makeIpcMethod({ ...importInput }) { const browserImport = yield* BrowserImport.BrowserImport; - // Derived in main from the same helper the webview config uses, so cookies - // land in exactly the partition the profile's tabs attach to. const { scope, persistent, namespace } = resolvePartitionScope( environmentId, importInput.targetProfileId, diff --git a/apps/desktop/src/ipc/methods/sshEnvironment.ts b/apps/desktop/src/ipc/methods/sshEnvironment.ts index e9535300104db..15e04f71282b1 100644 --- a/apps/desktop/src/ipc/methods/sshEnvironment.ts +++ b/apps/desktop/src/ipc/methods/sshEnvironment.ts @@ -1,7 +1,6 @@ import { bootstrapRemoteBearerSession, fetchRemoteSessionState, - issueRemoteWebSocketTicket, RemoteEnvironmentAuthUndeclaredStatusError, type RemoteEnvironmentAuthError, } from "@t3tools/client-runtime/authorization"; @@ -24,7 +23,6 @@ import { EnvironmentScopeRequiredError, AuthAccessTokenResult, AuthSessionState, - AuthWebSocketTicketResult, } from "@t3tools/contracts"; import { SshHttpBridgeError } from "@t3tools/ssh/errors"; import { resolveLoopbackSshHttpBaseUrl } from "@t3tools/ssh/tunnel"; @@ -40,8 +38,7 @@ import * as DesktopSshPasswordPrompts from "../../ssh/DesktopSshPasswordPrompts. type DesktopSshEnvironmentRequestOperation = | "fetch-environment-descriptor" | "bootstrap-bearer-session" - | "fetch-session-state" - | "issue-websocket-ticket"; + | "fetch-session-state"; type DesktopSshEnvironmentRequestCause = RemoteEnvironmentAuthError | SshHttpBridgeError; @@ -83,6 +80,7 @@ export class DesktopSshEnvironmentRequestError extends Data.TaggedError( readonly cause: DesktopSshEnvironmentRequestCause; readonly sshHttpStatus: number | null; }> { + // The web client matches "[ssh_http:500]" to explain version-skewed SSH pairing. override get message() { const prefix = this.sshHttpStatus === null ? "" : `[ssh_http:${this.sshHttpStatus}] `; return `${prefix}SSH remote API request failed during ${this.operation}.`; @@ -202,23 +200,6 @@ export const fetchSshSessionState = DesktopIpc.makeIpcMethod({ }), }); -export const issueSshWebSocketTicket = DesktopIpc.makeIpcMethod({ - channel: IpcChannels.ISSUE_SSH_WEBSOCKET_TOKEN_CHANNEL, - payload: DesktopSshBearerRequestInputSchema, - result: AuthWebSocketTicketResult, - handler: Effect.fn("desktop.ipc.sshEnvironment.issueWebSocketTicket")(function* ({ - httpBaseUrl, - bearerToken, - }) { - return yield* withLoopbackSshApi("issue-websocket-ticket", (resolvedHttpBaseUrl) => - issueRemoteWebSocketTicket({ - httpBaseUrl: resolvedHttpBaseUrl, - bearerToken, - }), - )(httpBaseUrl); - }), -}); - export const resolveSshPasswordPrompt = DesktopIpc.makeIpcMethod({ channel: IpcChannels.RESOLVE_SSH_PASSWORD_PROMPT_CHANNEL, payload: DesktopSshPasswordPromptResolutionInputSchema, diff --git a/apps/desktop/src/ipc/methods/updates.ts b/apps/desktop/src/ipc/methods/updates.ts index b2212609030d1..ca85ee8b0c417 100644 --- a/apps/desktop/src/ipc/methods/updates.ts +++ b/apps/desktop/src/ipc/methods/updates.ts @@ -23,11 +23,14 @@ export const getUpdateState = DesktopIpc.makeIpcMethod({ export const setUpdateChannel = DesktopIpc.makeIpcMethod({ channel: IpcChannels.UPDATE_SET_CHANNEL_CHANNEL, - payload: DesktopUpdateChannelSchema, + payload: Schema.Struct({ + channel: DesktopUpdateChannelSchema, + minimumVersion: Schema.optional(Schema.String), + }), result: DesktopUpdateStateSchema, - handler: Effect.fn("desktop.ipc.updates.setChannel")(function* (channel) { + handler: Effect.fn("desktop.ipc.updates.setChannel")(function* ({ channel, minimumVersion }) { const updates = yield* DesktopUpdates.DesktopUpdates; - return yield* updates.setChannel(channel); + return yield* updates.setChannel(channel, { minimumVersion }); }), }); @@ -43,11 +46,14 @@ export const downloadUpdate = DesktopIpc.makeIpcMethod({ export const installUpdate = DesktopIpc.makeIpcMethod({ channel: IpcChannels.UPDATE_INSTALL_CHANNEL, - payload: Schema.Void, + /** A version installs only that downloaded build, never one that replaced it. */ + payload: Schema.UndefinedOr(Schema.String), result: DesktopUpdateActionResultSchema, - handler: Effect.fn("desktop.ipc.updates.install")(function* () { + handler: Effect.fn("desktop.ipc.updates.install")(function* (expectedVersion) { const updates = yield* DesktopUpdates.DesktopUpdates; - return yield* updates.install; + if (expectedVersion === undefined) return yield* updates.install; + const { accepted, completed, state } = yield* updates.installPrepared(expectedVersion); + return { accepted, completed, state }; }), }); diff --git a/apps/desktop/src/ipc/methods/window.test.ts b/apps/desktop/src/ipc/methods/window.test.ts index b5fe707f4caee..ed821165b40f7 100644 --- a/apps/desktop/src/ipc/methods/window.test.ts +++ b/apps/desktop/src/ipc/methods/window.test.ts @@ -20,9 +20,13 @@ vi.mock("electron", () => ({ import * as DesktopBackendConfiguration from "../../backend/DesktopBackendConfiguration.ts"; import * as DesktopBackendManager from "../../backend/DesktopBackendManager.ts"; import * as DesktopBackendPool from "../../backend/DesktopBackendPool.ts"; +import * as DesktopAppSettings from "../../settings/DesktopAppSettings.ts"; +import * as ElectronDialog from "../../electron/ElectronDialog.ts"; +import * as ElectronWindow from "../../electron/ElectronWindow.ts"; import { getLocalEnvironmentBootstraps, getRelayTelemetryEnabled, + pickProjectFavicon, probeRemoteEditors, } from "./window.ts"; @@ -192,6 +196,78 @@ describe("getRelayTelemetryEnabled", () => { ); }); +describe("pickProjectFavicon", () => { + const pickerLayer = ( + pickFiles: () => Effect.Effect>, + settings?: DesktopAppSettings.DesktopSettings, + ) => + Layer.mergeAll( + Layer.mock(ElectronDialog.ElectronDialog)({ pickFiles }), + Layer.mock(ElectronWindow.ElectronWindow)({ + focusedMainOrFirst: Effect.succeedNone, + }), + DesktopAppSettings.layerTest(settings), + ); + + it.effect("opens a single-image picker from the project directory", () => + Effect.gen(function* () { + const pickFiles = vi.fn(() => Effect.succeed(["/pictures/icon.png"])); + const result = yield* pickProjectFavicon + .handler("/project") + .pipe(Effect.provide(pickerLayer(pickFiles))); + + assert.strictEqual(result, "/pictures/icon.png"); + assert.deepEqual(pickFiles.mock.calls, [ + [ + { + owner: Option.none(), + defaultPath: Option.some("/project"), + multiple: false, + filters: [ + { + name: "Images", + extensions: [ + "avif", + "bmp", + "gif", + "ico", + "heic", + "heif", + "jpeg", + "jpg", + "png", + "svg", + "tif", + "tiff", + "webp", + "icns", + ], + }, + ], + }, + ], + ]); + }), + ); + + it.effect("does not open a picker while the local environment is off", () => + Effect.gen(function* () { + const pickFiles = vi.fn(() => Effect.succeed(["/pictures/icon.png"])); + const result = yield* pickProjectFavicon.handler("/project").pipe( + Effect.provide( + pickerLayer(pickFiles, { + ...DesktopAppSettings.DEFAULT_DESKTOP_SETTINGS, + localEnvironmentEnabled: false, + }), + ), + ); + + assert.strictEqual(result, null); + assert.strictEqual(pickFiles.mock.calls.length, 0); + }), + ); +}); + it.effect.skipIf(HostProcess.Platform.defaultValue() === "win32")( "finds remote editors installed without PATH launchers", () => diff --git a/apps/desktop/src/ipc/methods/window.ts b/apps/desktop/src/ipc/methods/window.ts index 9066cf6f1a67c..f0d661b58bc9a 100644 --- a/apps/desktop/src/ipc/methods/window.ts +++ b/apps/desktop/src/ipc/methods/window.ts @@ -138,9 +138,7 @@ export const getLocalEnvironmentBootstraps = DesktopIpc.makeSyncIpcMethod({ runningDistro, httpBaseUrl: httpBaseUrl.href, wsBaseUrl: toWebSocketBaseUrl(httpBaseUrl), - // A backend launched with the desktop secret accepts whichever token the secret derives - // for the current window, so hand out that one rather than the token frozen into its - // launch config. + // Use the current window's derived token; the launch config's token may be stale. ...(bootstrap.desktopBootstrapSecret ? { bootstrapToken: yield* configuration.currentBootstrapToken } : bootstrap.desktopBootstrapToken @@ -194,9 +192,7 @@ export const pickFolder = DesktopIpc.makeIpcMethod({ targetId !== undefined && targetId !== PRIMARY_LOCAL_ENVIRONMENT_ID && targetId.startsWith(DesktopWslBackend.WSL_INSTANCE_ID_PREFIX); - // Fall back to the persisted wslDistro when the id is the - // "wsl:default" sentinel; the orchestrator uses the same fallback - // for the actual backend. + // Match the orchestrator's persisted distro fallback for wsl:default. const wslDistro = useWsl ? (wslDistroFromTarget ?? settings.wslDistro) : null; const defaultPath = useWsl ? Option.fromNullishOr( diff --git a/apps/desktop/src/ipc/methods/wsl.ts b/apps/desktop/src/ipc/methods/wsl.ts index 3c10f04512b4c..dac7550871460 100644 --- a/apps/desktop/src/ipc/methods/wsl.ts +++ b/apps/desktop/src/ipc/methods/wsl.ts @@ -22,8 +22,7 @@ const readWslState: Effect.Effect< const wslBackend = yield* DesktopWslBackend.DesktopWslBackend; const settings = yield* appSettings.get; const available = settings.localEnvironmentEnabled && (yield* wslEnvironment.isAvailable); - // Only enumerate distros when WSL is actually available — listDistros on a - // non-WSL host would spawn wsl.exe and hit the timeout for nothing. + // Listing distros on non-WSL hosts spawns wsl.exe only to time out. const distros = available ? yield* wslEnvironment.listDistros : []; const preflightError = yield* wslBackend.lastPreflightError; return { @@ -67,8 +66,7 @@ export const setWslBackendEnabled = makeIpcMethod({ yield* lifecycle.relaunch(`wslBackendEnabled=${enabled}`); return state; } - // Reconcile is idempotent and never fails; no need for a swap-style - // rollback when the WSL side has trouble coming up. + // Reconcile never fails, so no rollback is needed. yield* wslBackend.reconcile; return yield* readWslState; }), @@ -84,8 +82,7 @@ export const setWslDistro = makeIpcMethod({ const lifecycle = yield* DesktopLifecycle.DesktopLifecycle; const change = yield* appSettings.setWslDistro(distro); const settings = yield* appSettings.get; - // In active wsl-only mode the pool's primary IS the WSL backend, and its - // distro is captured when that backend starts, so relaunch to replace it. + // WSL-only primary backends capture their distro at startup; relaunch to change it. if (settings.wslBackendEnabled && settings.wslOnly && change.changed) { const state = yield* readWslState; yield* lifecycle.relaunch(`wslDistro=${distro ?? "default"}`); @@ -101,10 +98,7 @@ export const setWslOnly = makeIpcMethod({ payload: Schema.Boolean, result: DesktopWslStateSchema, handler: Effect.fn("desktop.ipc.wsl.setOnly")(function* (enabled) { - // wsl-only decides which backend the pool spins up as "primary", and that - // decision is captured once at layer init. A disabled WSL backend always - // leaves Windows primary active, so mode changes can be staged without a - // relaunch and applied by the subsequent enable call. + // The pool captures its primary at initialization; disabled WSL can stage mode changes until enable. const appSettings = yield* DesktopAppSettings.DesktopAppSettings; const lifecycle = yield* DesktopLifecycle.DesktopLifecycle; const change = yield* appSettings.setWslOnly(enabled); diff --git a/apps/desktop/src/linuxSecretStorage.test.ts b/apps/desktop/src/linuxSecretStorage.test.ts index aaf0c11bcce92..ce7bc4004cf4c 100644 --- a/apps/desktop/src/linuxSecretStorage.test.ts +++ b/apps/desktop/src/linuxSecretStorage.test.ts @@ -26,14 +26,12 @@ describe("linuxSecretStorage", () => { it("forces gnome-libsecret for desktops Electron recognizes but leaves on basic text", () => { expect(autoSwitch({ XDG_CURRENT_DESKTOP: "LXQt" })).toBe("gnome-libsecret"); - // Chromium stops at the first recognized value, so a later name cannot rescue the session. expect(autoSwitch({ XDG_CURRENT_DESKTOP: "LXQt:GNOME" })).toBe("gnome-libsecret"); expect(autoSwitch({ XDG_CURRENT_DESKTOP: "LXQt:KDE" })).toBe("gnome-libsecret"); expect(autoSwitch({ XDG_CURRENT_DESKTOP: "LXQt:plasma" })).toBe("gnome-libsecret"); }); it("does not treat lowercase desktop names as ones Electron recognizes", () => { - // Chromium matches these case-sensitively, so lowercase spellings reach basic text. expect(autoSwitch({ XDG_CURRENT_DESKTOP: "gnome" })).toBe("gnome-libsecret"); expect(autoSwitch({ XDG_CURRENT_DESKTOP: "xfce" })).toBe("gnome-libsecret"); expect(autoSwitch({ XDG_CURRENT_DESKTOP: "kde", KDE_SESSION_VERSION: "6" })).toBe( diff --git a/apps/desktop/src/linuxSecretStorage.ts b/apps/desktop/src/linuxSecretStorage.ts index 81f891985b9d0..b6d41b43a6640 100644 --- a/apps/desktop/src/linuxSecretStorage.ts +++ b/apps/desktop/src/linuxSecretStorage.ts @@ -8,8 +8,7 @@ export type LinuxPasswordStoreSwitch = Exclude layerDesktopApplicationRuntime.pipe(Layer.provideMerge(Layer.succeedContext(clerkContext))), diff --git a/apps/desktop/src/permissions/MacPermissionHelper.ts b/apps/desktop/src/permissions/MacPermissionHelper.ts index 4a8e38961f20a..0b50e147785f7 100644 --- a/apps/desktop/src/permissions/MacPermissionHelper.ts +++ b/apps/desktop/src/permissions/MacPermissionHelper.ts @@ -88,8 +88,7 @@ export class MacPermissionHelper { const bundle = macAppBundlePath(Electron.app.getPath("exe")); if (!bundle) return; if (owner?.isDestroyed()) return; - // Finder's bundle-icon lookup can return the generic app icon for mounted artifacts. - // Use the same PNG that packaging uses to generate the app's macOS icon. + // Finder can return generic icons for mounted artifacts; use the packaging PNG. const appIcon = iconPaths .map((iconPath) => Electron.nativeImage.createFromPath(iconPath)) .find((image) => !image.isEmpty()); diff --git a/apps/desktop/src/permissions/MacSettingsWindow.test.ts b/apps/desktop/src/permissions/MacSettingsWindow.test.ts index d07b4f5f9a76d..ce0d3509d68bd 100644 --- a/apps/desktop/src/permissions/MacSettingsWindow.test.ts +++ b/apps/desktop/src/permissions/MacSettingsWindow.test.ts @@ -1,4 +1,5 @@ import * as NodeEvents from "node:events"; +import * as NodeVM from "node:vm"; import { beforeEach, expect, it, vi } from "vite-plus/test"; import { watchMacSettingsWindow } from "./MacSettingsWindow.ts"; @@ -42,3 +43,29 @@ it("distinguishes unavailable tracking from a valid absent window", () => { expect(unavailable).toHaveBeenCalledTimes(2); stop(); }); +it("polls while its parent lives and stops after reparenting to launchd", () => { + watchMacSettingsWindow(vi.fn(), vi.fn())(); + const script = mocks.spawn.mock.lastCall?.[1][3]; + const imports = new Set(); + const writeData = vi.fn(); + const poll = vi.fn(() => ({ count: 0 })); + const sleep = vi.fn(() => { + if (sleep.mock.calls.length > 2) throw new Error("tracker kept polling after parent exit"); + }); + const bridge = Object.assign((line: string) => ({ dataUsingEncoding: () => line }), { + getppid: () => { + if (!imports.has("unistd")) throw new Error("unistd bridge unavailable"); + return sleep.mock.calls.length < 2 ? 42 : 1; + }, + NSRunningApplication: { runningApplicationsWithBundleIdentifier: poll }, + NSFileHandle: { fileHandleWithStandardOutput: { writeData } }, + NSThread: { sleepForTimeInterval: sleep }, + NSUTF8StringEncoding: 4, + }); + NodeVM.runInNewContext(script + "\nrun();", { + ObjC: { import: (name: string) => imports.add(name) }, + $: bridge, + }); + expect(poll).toHaveBeenCalledTimes(2); + expect(writeData.mock.calls).toEqual([["null\n"]]); +}); diff --git a/apps/desktop/src/permissions/MacSettingsWindow.ts b/apps/desktop/src/permissions/MacSettingsWindow.ts index f529d82b59413..5967d15de97a4 100644 --- a/apps/desktop/src/permissions/MacSettingsWindow.ts +++ b/apps/desktop/src/permissions/MacSettingsWindow.ts @@ -15,15 +15,15 @@ const SettingsWindow = Schema.NullOr( export type SettingsWindow = typeof SettingsWindow.Type; const decodeSettingsWindow = Schema.decodeUnknownSync(Schema.fromJsonString(SettingsWindow)); -// Window bounds and owner PIDs are available before Screen Recording is granted. -// Use the bundle identifier rather than the localized app/window title. A single -// process avoids launching osascript repeatedly while the user moves Settings. +// Window bounds/PIDs need no Screen Recording grant. Match the bundle id to avoid localized titles. +// Keep one osascript process while Settings moves. const SETTINGS_WINDOW_SCRIPT = ` ObjC.import("CoreGraphics"); ObjC.import("AppKit"); +ObjC.import("unistd"); function run() { let previous = ""; - while (true) { + while ($.getppid() !== 1) { const apps = $.NSRunningApplication.runningApplicationsWithBundleIdentifier("com.apple.systempreferences"); let result = null; if (apps.count > 0) { diff --git a/apps/desktop/src/preload.ts b/apps/desktop/src/preload.ts index bffa02d9ca435..950ed972c6453 100644 --- a/apps/desktop/src/preload.ts +++ b/apps/desktop/src/preload.ts @@ -3,7 +3,6 @@ import type { DesktopPreviewOpenLinkEvent, DesktopPreviewPointerEvent, DesktopPreviewRecordingInputEvent, - DesktopPreviewRecordingFrame, DesktopPreviewTabState, DesktopSnapShotEvent, } from "@t3tools/contracts"; @@ -46,8 +45,7 @@ try { const clientPlatform = process.platform; if (clientPlatform === "darwin") { - // Native window buttons do not scale with Chromium zoom. Keep their reserved - // space in native points, including when a zoomed page is reloaded. + // Native buttons ignore Chromium zoom; reserve native points even after reload. const syncWindowControlInset = () => { document.documentElement.style.setProperty( "--desktop-window-controls-inset", @@ -93,6 +91,11 @@ contextBridge.exposeInMainWorld("desktopBridge", { ipcRenderer.on(IpcChannels.SET_NOTIFICATION_BADGE_CHANNEL, handler); return () => ipcRenderer.removeListener(IpcChannels.SET_NOTIFICATION_BADGE_CHANNEL, handler); }, + onTrackpadScrollBegin: (listener) => { + const handler = () => listener(); + ipcRenderer.on(IpcChannels.TRACKPAD_SCROLL_BEGIN_CHANNEL, handler); + return () => ipcRenderer.removeListener(IpcChannels.TRACKPAD_SCROLL_BEGIN_CHANNEL, handler); + }, onTrackpadScrollEnd: (listener) => { const handler = () => listener(); ipcRenderer.on(IpcChannels.TRACKPAD_SCROLL_END_CHANNEL, handler); @@ -140,7 +143,6 @@ contextBridge.exposeInMainWorld("desktopBridge", { getConnectionCatalog: () => ipcRenderer.invoke(IpcChannels.GET_CONNECTION_CATALOG_CHANNEL), setConnectionCatalog: (catalog) => ipcRenderer.invoke(IpcChannels.SET_CONNECTION_CATALOG_CHANNEL, catalog), - clearConnectionCatalog: () => ipcRenderer.invoke(IpcChannels.CLEAR_CONNECTION_CATALOG_CHANNEL), discoverSshHosts: () => ipcRenderer.invoke(IpcChannels.DISCOVER_SSH_HOSTS_CHANNEL), resolveSshHost: (alias) => ipcRenderer.invoke(IpcChannels.RESOLVE_SSH_HOST_CHANNEL, alias), ensureSshEnvironment: async (target, options) => @@ -161,8 +163,6 @@ contextBridge.exposeInMainWorld("desktopBridge", { }), fetchSshSessionState: (httpBaseUrl, bearerToken) => ipcRenderer.invoke(IpcChannels.FETCH_SSH_SESSION_STATE_CHANNEL, { httpBaseUrl, bearerToken }), - issueSshWebSocketTicket: (httpBaseUrl, bearerToken) => - ipcRenderer.invoke(IpcChannels.ISSUE_SSH_WEBSOCKET_TOKEN_CHANNEL, { httpBaseUrl, bearerToken }), onSshPasswordPrompt: (listener) => { const wrappedListener = (_event: Electron.IpcRendererEvent, request: unknown) => { if (typeof request !== "object" || request === null) return; @@ -266,11 +266,12 @@ contextBridge.exposeInMainWorld("desktopBridge", { }; }, getUpdateState: () => ipcRenderer.invoke(IpcChannels.UPDATE_GET_STATE_CHANNEL), - setUpdateChannel: (channel) => - ipcRenderer.invoke(IpcChannels.UPDATE_SET_CHANNEL_CHANNEL, channel), + setUpdateChannel: (channel, minimumVersion) => + ipcRenderer.invoke(IpcChannels.UPDATE_SET_CHANNEL_CHANNEL, { channel, minimumVersion }), checkForUpdate: () => ipcRenderer.invoke(IpcChannels.UPDATE_CHECK_CHANNEL), downloadUpdate: () => ipcRenderer.invoke(IpcChannels.UPDATE_DOWNLOAD_CHANNEL), - installUpdate: () => ipcRenderer.invoke(IpcChannels.UPDATE_INSTALL_CHANNEL), + installUpdate: (expectedVersion) => + ipcRenderer.invoke(IpcChannels.UPDATE_INSTALL_CHANNEL, expectedVersion), cliCommand: { getState: () => ipcRenderer.invoke(IpcChannels.CLI_COMMAND_GET_STATE_CHANNEL), install: () => ipcRenderer.invoke(IpcChannels.CLI_COMMAND_INSTALL_CHANNEL), @@ -399,15 +400,6 @@ contextBridge.exposeInMainWorld("desktopBridge", { mimeType, data, }), - onFrame: (listener) => { - const wrappedListener = (_event: Electron.IpcRendererEvent, frame: unknown) => { - if (typeof frame !== "object" || frame === null) return; - listener(frame as DesktopPreviewRecordingFrame); - }; - ipcRenderer.on(IpcChannels.PREVIEW_RECORDING_FRAME_CHANNEL, wrappedListener); - return () => - ipcRenderer.removeListener(IpcChannels.PREVIEW_RECORDING_FRAME_CHANNEL, wrappedListener); - }, }, onStateChange: (listener) => { const wrappedListener = ( diff --git a/apps/desktop/src/preview/AnnotationIds.test.ts b/apps/desktop/src/preview/AnnotationIds.test.ts index 1104c422f3eea..f1f4be518455c 100644 --- a/apps/desktop/src/preview/AnnotationIds.test.ts +++ b/apps/desktop/src/preview/AnnotationIds.test.ts @@ -4,8 +4,6 @@ import { createAnnotationIdSource } from "./AnnotationIds.ts"; describe("createAnnotationIdSource", () => { it("gives annotations picked on separate page loads distinct ids", () => { - // The picker preload runs afresh on every page load, while the composer - // keeps earlier annotations keyed by id. const firstLoad = createAnnotationIdSource(); firstLoad("element"); const firstAnnotation = firstLoad("annotation"); diff --git a/apps/desktop/src/preview/AnnotationIds.ts b/apps/desktop/src/preview/AnnotationIds.ts index 2262febdd1c15..082d6540a64d8 100644 --- a/apps/desktop/src/preview/AnnotationIds.ts +++ b/apps/desktop/src/preview/AnnotationIds.ts @@ -1,11 +1,4 @@ -/** - * Id source for picker annotations and their targets, one per page load. - * - * The composer keeps annotations keyed by id across preview reloads, and this - * preload restarts on every page load, so a bare counter reissues ids that a - * draft already holds. `getRandomValues` rather than `randomUUID`, because - * plain-http previews (LAN, tailnet) are not secure contexts. - */ +/** Per-load nonces avoid draft ID collisions; getRandomValues works on plain HTTP. */ export function createAnnotationIdSource(): (prefix: string) => string { const pageLoad = Array.from(crypto.getRandomValues(new Uint32Array(2)), (part) => part.toString(36), diff --git a/apps/desktop/src/preview/BrowserImport/BrowserImport.test.ts b/apps/desktop/src/preview/BrowserImport/BrowserImport.test.ts index 4815da11cba1a..c691ac15174d6 100644 --- a/apps/desktop/src/preview/BrowserImport/BrowserImport.test.ts +++ b/apps/desktop/src/preview/BrowserImport/BrowserImport.test.ts @@ -46,8 +46,6 @@ const withImporter = Effect.fnUntraced(function* () { const root = helium.userDataDirectory(context); if (root === undefined) throw new Error("Helium has no macOS user-data directory"); yield* fileSystem.makeDirectory(`${root}/Default`, { recursive: true }); - // The cookie database is what marks a source as installed, so a fixture - // without one is reported as absent before any other check runs. yield* fileSystem.writeFileString(`${root}/Default/Cookies`, "db"); const importer = yield* BrowserImport.BrowserImport.pipe( @@ -96,8 +94,6 @@ describe("BrowserImport.importCookies", () => { Effect.gen(function* () { const fileSystem = yield* FileSystem.FileSystem; const { importer, root } = yield* withImporter(); - // The lock Chromium leaves while it is running, dangling target and - // all. This must stop the import before it ever asks the keychain. yield* fileSystem.symlink("host-that-does-not-exist-1234", `${root}/SingletonLock`); const error = yield* importer diff --git a/apps/desktop/src/preview/BrowserImport/BrowserImport.ts b/apps/desktop/src/preview/BrowserImport/BrowserImport.ts index e7f97eca26c02..c567b27411c0c 100644 --- a/apps/desktop/src/preview/BrowserImport/BrowserImport.ts +++ b/apps/desktop/src/preview/BrowserImport/BrowserImport.ts @@ -41,8 +41,7 @@ export class BrowserImportFailedError extends Schema.TaggedError 0) { yield* Effect.tryPromise(() => session.cookies.flushStore()).pipe( Effect.tapError((error) => @@ -152,7 +147,7 @@ export const writeCookies = Effect.fn("BrowserImport.writeCookies")(function* ( return { imported, skipped, skippedDomains: [...skippedDomains].slice(0, 20) }; }); -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* BrowserImportMake() { const browserSession = yield* BrowserSession.BrowserSession; const platform = yield* HostProcess.Platform; @@ -200,19 +195,14 @@ export const make = Effect.gen(function* BrowserImportMake() { } if (platform === "darwin" && definition.engine === "chromium") { - // macOS attributes the Keychain prompt and the resulting ACL grant to the - // executable that asks, so record which one that was — in a packaged build - // it is the signed app, in dev whatever binary hosts the main process. + // macOS attributes Keychain prompts and ACL grants to the executable, which differs in dev and packaged builds. yield* Effect.logInfo("Reading browser cookie key from the keychain", { sourceId: definition.id, executablePath, }); } - // The profile directory arrives over IPC, so it is only honoured when the - // source itself reported it. Forwarding it unchecked would let `..` - // segments walk out of the browser's user-data directory and read any - // cookie database reachable on disk. + // IPC profile paths must match the source's listing to prevent traversal outside browser user-data. const sourceProfiles = yield* listSourceProfiles(definition, pathContext).pipe( Effect.provide(platformServices), ); @@ -226,8 +216,7 @@ export const make = Effect.gen(function* BrowserImportMake() { }); } - // The profile was listed against a database moments ago; resolve it again - // rather than assume a path, since a Chromium jar may sit under `Network/`. + // Re-resolve listed paths because Chromium jars may be under Network/. const databasePath = yield* resolveCookieDatabase( definition, pathContext, @@ -296,8 +285,7 @@ export const make = Effect.gen(function* BrowserImportMake() { ), ); - // Written one at a time rather than in parallel: Chromium's cookie store - // serialises writes anyway, and a rejected cookie should only cost itself. + // Chromium serializes writes; a rejected cookie should not prevent the others. return yield* writeCookies(session, result); }); diff --git a/apps/desktop/src/preview/BrowserImport/ChromiumCookies.test.ts b/apps/desktop/src/preview/BrowserImport/ChromiumCookies.test.ts index 91be0a43d1be8..e5aa05f268e43 100644 --- a/apps/desktop/src/preview/BrowserImport/ChromiumCookies.test.ts +++ b/apps/desktop/src/preview/BrowserImport/ChromiumCookies.test.ts @@ -38,9 +38,6 @@ const encryptWindowsV10 = (value: string | Buffer, key: Buffer): Uint8Array => { describe("cookieScope", () => { it("keeps a host-only cookie host-only", () => { - // Chromium stores a host-only cookie without a leading dot. Passing any - // `domain` to Electron makes it a domain cookie and re-adds the dot, which - // would expose the cookie to every subdomain it was never scoped to. expect(cookieScope("example.test", "/", true)).toEqual({ url: "https://example.test/", domain: undefined, @@ -288,8 +285,7 @@ describe("readChromiumCookieDatabase", () => { const filename = `${directory}/Cookies`; const cbcV10 = Buffer.from("0123456789abcdef"); const cbcV11 = Buffer.from("fedcba9876543210"); - // The key some Linux clients actually encrypted with (crbug.com/1195256): - // OSCrypt's derivation over an empty passphrase. + // Some Linux clients encrypted with an empty passphrase (crbug.com/1195256). const cbcEmpty = NodeCrypto.pbkdf2Sync("", "saltysalt", 1, 16, "sha1"); yield* Effect.gen(function* () { @@ -352,9 +348,6 @@ describe("readChromiumCookieDatabase", () => { ('legacy.example', 'legacy', '', ${Buffer.from("legacy cleartext")}, '/', 0, 0, 0, 0)`; }).pipe(Effect.provide(NodeSqliteClient.layer({ filename }))); - // Chromium's OSCrypt returns unprefixed data as-is on both platforms - // (os_crypt_mac.mm and os_crypt_linux.cc: "old data saved as clear - // text"), so neither counts it as undecryptable. const mac = yield* readChromiumCookieDatabase(filename, { cbcV10: key }, "darwin"); const linux = yield* readChromiumCookieDatabase(filename, { cbcV10: key }, "linux"); diff --git a/apps/desktop/src/preview/BrowserImport/ChromiumCookies.ts b/apps/desktop/src/preview/BrowserImport/ChromiumCookies.ts index d5f7592b26068..63fef9fb3c808 100644 --- a/apps/desktop/src/preview/BrowserImport/ChromiumCookies.ts +++ b/apps/desktop/src/preview/BrowserImport/ChromiumCookies.ts @@ -73,12 +73,7 @@ const decodeSchemaVersion = Schema.decodeUnknownEffect( Schema.Tuple([Schema.Struct({ value: SchemaVersion })]), ); -/** - * Unspecified is imported as Electron's own `unspecified` rather than pinned to - * Lax, so the target browser applies its default just as the source did; - * anything unrecognised lands there too, since guessing "none" would widen a - * cookie's scope on import. - */ +/** Preserve unspecified SameSite; guessing no_restriction would widen cookie scope. */ const sameSiteFromColumn = (value: number): ImportedCookie["sameSite"] => { if (value === 0) return "no_restriction"; if (value === 1) return "lax"; @@ -86,21 +81,14 @@ const sameSiteFromColumn = (value: number): ImportedCookie["sameSite"] => { return "unspecified"; }; -/** - * The microsecond value overflows JavaScript's safe integer range and - * `node:sqlite` refuses to narrow it, so the division happens in SQL and this - * only ever sees seconds. - */ +/** Convert microseconds in SQL: node:sqlite refuses integers beyond JavaScript's safe range. */ const WEBKIT_EPOCH_OFFSET_SECONDS = 11_644_473_600; const toUnixSeconds = (webkitSeconds: number): number | undefined => { if (webkitSeconds <= 0) return undefined; return webkitSeconds - WEBKIT_EPOCH_OFFSET_SECONDS; }; -/** - * Chromium >= 127 prefixes the plaintext with SHA-256 of the host key, binding - * a cookie to its domain. - */ +// Chromium 127+ prefixes plaintext with the host-key SHA-256 to bind its domain. const stripDomainBinding = ( plaintext: Buffer, domain: string, @@ -161,17 +149,14 @@ export function decryptChromiumValue( const prefix = buffer.subarray(0, 3).toString("latin1"); const payload = buffer.subarray(3); - // Windows' legacy v10 format is AES-256-GCM. App-bound records use v20 and - // intentionally have no key here, so they fall through as undecryptable. + // Windows v10 uses AES-256-GCM; app-bound v20 records have no key here. if (platform === "win32") { return prefix === "v10" && keys.gcmV10 ? decryptGcm(payload, keys.gcmV10, domain, schemaVersion) : null; } - // Chromium retries a failed record with a key derived from an empty - // passphrase, because some Linux clients wrote data that way - // (crbug.com/1195256). + // Retry the empty-passphrase key used by some Linux clients (crbug.com/1195256). if (prefix === "v10") { if (!keys.cbcV10) return null; return ( diff --git a/apps/desktop/src/preview/BrowserImport/ChromiumKeys.test.ts b/apps/desktop/src/preview/BrowserImport/ChromiumKeys.test.ts index 6fc5b7ae9faa1..69f21285e1965 100644 --- a/apps/desktop/src/preview/BrowserImport/ChromiumKeys.test.ts +++ b/apps/desktop/src/preview/BrowserImport/ChromiumKeys.test.ts @@ -17,6 +17,7 @@ import { unwrapWindowsDpapiKey, } from "./ChromiumKeys.ts"; import { LinuxBrowserSecretPath } from "./LinuxBrowserSecret.ts"; +import { BROWSER_IMPORT_SOURCES } from "./Sources.ts"; const { getPassword } = vi.hoisted(() => ({ getPassword: vi.fn<() => string | null>() })); @@ -146,12 +147,24 @@ describe("Linux Chromium secrets", () => { ), ); - it.effect("preserves trailing whitespace in the stored secret", () => - Effect.gen(function* () { - const secret = yield* readLinuxSecret("chrome"); - expect(secret).toBe("linux-secret \t\n"); - }).pipe(Effect.provide(layerHelper({ stdout: "linux-secret \t\n" }))), - ); + it.effect("derives Vivaldi's Linux key while preserving whitespace in the stored secret", () => { + let captured: CapturedCommand | undefined; + return Effect.gen(function* () { + const source = BROWSER_IMPORT_SOURCES.find((source) => source.id === "vivaldi")!; + const keys = yield* resolveChromiumKeys({ + platform: "linux", + keychainService: source.keychainService, + keychainAccount: source.keychainAccount, + linuxSecretApplication: source.linuxSecretApplication, + }); + expect(captured?.args).toEqual(["chrome"]); + expect(keys.cbcV11?.toString("hex")).toBe("95aa769d6a5beca14d5d90ae655db112"); + }).pipe( + Effect.provide( + layerHelper({ stdout: "linux-secret \t\n", capture: (value) => (captured = value) }), + ), + ); + }); it.effect("drains stdout and stderr concurrently", () => Effect.gen(function* () { diff --git a/apps/desktop/src/preview/BrowserImport/ChromiumKeys.ts b/apps/desktop/src/preview/BrowserImport/ChromiumKeys.ts index 0d91ebe5a3746..bc9edcfe52a80 100644 --- a/apps/desktop/src/preview/BrowserImport/ChromiumKeys.ts +++ b/apps/desktop/src/preview/BrowserImport/ChromiumKeys.ts @@ -14,7 +14,6 @@ import { LinuxBrowserSecretPath } from "./LinuxBrowserSecret.ts"; const KEY_SALT = "saltysalt"; const KEY_LENGTH = 16; -/** macOS stretches the keychain secret; Linux uses a single iteration. */ const MAC_KEY_ITERATIONS = 1003; const LINUX_KEY_ITERATIONS = 1; /** Chromium's documented fallback passphrase when no Linux keyring is present. */ @@ -42,11 +41,7 @@ export interface ChromiumKeyMaterial { readonly cbcV10?: Buffer; readonly cbcV11?: Buffer; readonly cbcV11Error?: ChromiumKeyError; - /** - * AES-128-CBC from an empty passphrase. Some Linux clients wrote records - * with it (crbug.com/1195256), so Chromium — and this import — retry with it - * after a record's own key fails. - */ + /** Linux clients can encrypt with an empty passphrase; retry it on failure (crbug.com/1195256). */ readonly cbcEmpty?: Buffer; readonly gcmV10?: Buffer; } @@ -54,21 +49,12 @@ export interface ChromiumKeyMaterial { const derive = (passphrase: string, iterations: number) => NodeCrypto.pbkdf2Sync(passphrase, KEY_SALT, iterations, KEY_LENGTH, "sha1"); -/** - * Via the CLI the prompt says "security" and "Always Allow" grants trust to a - * tool every process on the machine can invoke; in-process it names this app - * and the grant belongs to it. - * - * Deliberately untimed: macOS answers this with a modal, and a timeout racing - * the user means the prompt can be approved while nothing is left listening, - * which reads as "approving did nothing". - */ +// In-process Keychain access attributes grants to this app. Keep modal prompts untimed to preserve their listener. const readKeychainSecret = Effect.fn("ChromiumKeys.readKeychainSecret")(function* ( service: string, account: string, ) { - // Only macOS cookie imports need this binding; loading it at startup can - // prevent the desktop from opening on platforms that never use it. + // Loading the macOS binding at startup can prevent other platforms from opening. const Keyring = yield* Effect.tryPromise({ try: () => import("@napi-rs/keyring"), catch: (cause) => new ChromiumKeyError({ reason: "keychainUnavailable", cause }), @@ -90,10 +76,7 @@ const readKeychainSecret = Effect.fn("ChromiumKeys.readKeychainSecret")(function return secret; }); -/** - * Its exit codes distinguish a missing key, denied access, and an unavailable - * keyring without parsing localized error messages. - */ +/** Exit codes distinguish missing keys, denied access, and unavailable keyrings without localized message parsing. */ export const readLinuxSecret = Effect.fn("ChromiumKeys.readLinuxSecret")(function* ( application: string, ) { @@ -267,13 +250,10 @@ export const resolveChromiumKeys = Effect.fn("ChromiumKeys.resolveChromiumKeys") } if (request.platform === "linux") { - // The fallback passphrase always applies to `v10` records; a keyring - // secret, when one is reachable, additionally unlocks `v11`. + // v10 always uses the fallback passphrase; a keyring secret additionally unlocks v11. const keyringSecret = request.linuxSecretApplication ? yield* readLinuxSecret(request.linuxSecretApplication).pipe( - // v10 remains importable when Secret Service is absent or does not - // contain a key. An explicit denial/lock/cancel remains a consent - // failure rather than being silently downgraded. + // Missing Secret Service or keys must not block v10; explicit denial, lock, or cancellation remains a consent failure. Effect.catchIf( (error) => error.reason !== "needsKeychainApproval", (error) => Effect.succeed(error), diff --git a/apps/desktop/src/preview/BrowserImport/CookieDatabase.ts b/apps/desktop/src/preview/BrowserImport/CookieDatabase.ts index 2eb6cdbb5a17b..6c708e6023df2 100644 --- a/apps/desktop/src/preview/BrowserImport/CookieDatabase.ts +++ b/apps/desktop/src/preview/BrowserImport/CookieDatabase.ts @@ -9,11 +9,7 @@ export interface ImportedCookie { readonly url: string; readonly name: string; readonly value: string; - /** - * A host-only cookie leaves this undefined: Electron treats any `domain` it is given as marking a - * domain cookie and re-adds the dot, which would widen the cookie to every subdomain of the host - * it was scoped to, and rejects `__Host-` cookies, which require it to be absent. - */ + /** Leave host-only cookies undefined; Electron widens any supplied domain and rejects __Host- cookies with one. */ readonly domain: string | undefined; readonly path: string; readonly secure: boolean; @@ -47,10 +43,7 @@ export const cookieScope = ( export const bareHost = (host: string): string => (host.startsWith(".") ? host.slice(1) : host); -/** - * Both engines keep the file open with WAL while the browser runs, so reading in place can observe - * a torn write. Copying also guarantees we never open the browser's own file for writing. - */ +/** Copy before reading to avoid live WAL writes and never open the source browser database for writing. */ export const snapshotCookieDatabase = Effect.fn("CookieDatabase.snapshotCookieDatabase")(function* ( cookiePath: string, tempPrefix = "t3code-cookie-import-", diff --git a/apps/desktop/src/preview/BrowserImport/FirefoxCookies.test.ts b/apps/desktop/src/preview/BrowserImport/FirefoxCookies.test.ts index d764b5bd6d007..be41318fa01e6 100644 --- a/apps/desktop/src/preview/BrowserImport/FirefoxCookies.test.ts +++ b/apps/desktop/src/preview/BrowserImport/FirefoxCookies.test.ts @@ -37,8 +37,6 @@ const writeFirefoxCookieDatabase = Effect.fnUntraced(function* ( rawSameSite?: number; originAttributes?: string; }>, - // Firefox stamps `PRAGMA user_version`; schema 16+ stores `expiry` in - // milliseconds, earlier ones in seconds. schemaVersion = 15, ) { const fileSystem = yield* FileSystem.FileSystem; @@ -46,7 +44,6 @@ const writeFirefoxCookieDatabase = Effect.fnUntraced(function* ( const file = `${directory}/cookies.sqlite`; const database = new NodeSqlite.DatabaseSync(file); database.exec(`pragma user_version = ${schemaVersion}`); - // Only schemas 10–14 have `rawSameSite`; the schema-15 migration dropped it. const hasRawSameSite = schemaVersion >= 10 && schemaVersion <= 14; database.exec( `create table moz_cookies ( @@ -87,8 +84,6 @@ describe("readFirefoxCookies", () => { it.effect("converts millisecond expiries from schema 16 and newer", () => run( Effect.gen(function* () { - // Firefox 129 (schema 16) migrated `expiry` to milliseconds; older - // profiles still hold seconds. Both must land as seconds for Electron. const row = { host: "example.test", name: "c", @@ -169,9 +164,6 @@ describe("readFirefoxCookies", () => { it.effect("keeps an unset SameSite unspecified instead of widening it to none", () => run( Effect.gen(function* () { - // nsICookie::SAMESITE_UNSET is 256, a cookie that carried no SameSite - // attribute. It is not SAMESITE_NONE (0), which is an explicit opt-in - // to cross-site use; importing it as "none" would widen its scope. const row = { host: "example.test", name: "c", @@ -198,8 +190,6 @@ describe("readFirefoxCookies", () => { it.effect("imports rows whose SameSite was never written", () => run( Effect.gen(function* () { - // Schema 9 added `sameSite` without a default, so rows from before the - // upgrade hold NULL. One such row must not fail the whole import. const row = { host: "example.test", name: "c", @@ -229,10 +219,6 @@ describe("readFirefoxCookies", () => { it.effect("applies the schema-15 rawSameSite rule to older databases", () => run( Effect.gen(function* () { - // Schemas 10–14 defaulted `sameSite` to Lax and kept the declared value - // in `rawSameSite`. Firefox's own migration to 15 turns "Lax by - // default, None declared" into Unset; an unmigrated database has to be - // read the same way or an undeclared cookie becomes an explicit Lax. const row = { host: "example.test", name: "c", @@ -276,9 +262,6 @@ describe("readFirefoxCookies", () => { sameSite: 1, }, { - // Same host, name and path as above: Firefox keeps these apart by - // container, Electron cannot, so importing both would hand the - // profile whichever one happened to be written last. host: "mail.test", name: "session", value: "work-container", @@ -340,8 +323,6 @@ describe("readFirefoxCookies", () => { describe("parseFirefoxProfiles", () => { it.effect("reads named profiles and ignores Install sections", () => Effect.gen(function* () { - // `Install*` sections name a default profile but do not describe one, so - // counting them would invent a profile whose directory does not exist. const parsed = yield* parsePosixFirefoxProfiles( [ "[Install4F96D1932A9F858E]", diff --git a/apps/desktop/src/preview/BrowserImport/FirefoxCookies.ts b/apps/desktop/src/preview/BrowserImport/FirefoxCookies.ts index 16ad488f5cc2f..a5fddb14d22df 100644 --- a/apps/desktop/src/preview/BrowserImport/FirefoxCookies.ts +++ b/apps/desktop/src/preview/BrowserImport/FirefoxCookies.ts @@ -17,23 +17,12 @@ export class FirefoxCookieReadError extends Schema.TaggedError= FIREFOX_RAW_SAMESITE_FIRST_SCHEMA && schemaVersion <= FIREFOX_RAW_SAMESITE_LAST_SCHEMA; - // Firefox isolates cookies per container and per private window via - // `originAttributes` (`^userContextId=2`, `^privateBrowsingId=1`); - // Electron has no equivalent, so importing them all would collapse - // several identities onto one host/name/path and hand the profile an - // arbitrary container's session. + // Electron cannot represent Firefox containers/private windows; importing them would collapse distinct sessions. const raw = hasRawSameSite ? yield* sql` select host, name, value, path, expiry, isSecure, isHttpOnly, sameSite, rawSameSite diff --git a/apps/desktop/src/preview/BrowserImport/SafariCookies.test.ts b/apps/desktop/src/preview/BrowserImport/SafariCookies.test.ts index 5420b9fc8bd50..7e92334c957de 100644 --- a/apps/desktop/src/preview/BrowserImport/SafariCookies.test.ts +++ b/apps/desktop/src/preview/BrowserImport/SafariCookies.test.ts @@ -158,8 +158,6 @@ describe("parseBinaryCookies", () => { }); it("rejects a page that runs past the end of the file", () => { - // `Buffer.subarray` clamps rather than throwing, so an overlong first page - // swallows the second one's bytes and advances the cursor past the end. const first = encodeBinaryCookies([ { domain: "a.test", name: "one", path: "/", value: "1", flags: 0, expiry: 1 }, ]); @@ -215,9 +213,6 @@ describe("parseBinaryCookies", () => { describe("readSafariCookies", () => { it.effect("reports a TCC denial as a permission the user can grant", () => Effect.gen(function* () { - // What Full Disk Access actually looks like: the file is there, the read - // is refused with EPERM. Effect tags that `Unknown`, not - // `PermissionDenied`, so the reader has to look at the errno. const denied = PlatformError.systemError({ _tag: "Unknown", module: "FileSystem", diff --git a/apps/desktop/src/preview/BrowserImport/SafariCookies.ts b/apps/desktop/src/preview/BrowserImport/SafariCookies.ts index 15f8de8d3a36e..118f9af1f776a 100644 --- a/apps/desktop/src/preview/BrowserImport/SafariCookies.ts +++ b/apps/desktop/src/preview/BrowserImport/SafariCookies.ts @@ -8,7 +8,6 @@ import { cookieScope, type ImportedCookie } from "./CookieDatabase.ts"; /** Safari's timestamps count seconds from 2001-01-01, not the UNIX epoch. */ const APPLE_EPOCH_OFFSET_SECONDS = 978_307_200; -/** `u32 0x00000100`, `u32le cookieCount`, then one `u32le` offset per cookie. */ const COOKIE_PAGE_HEADER_SIZE = 12; const COOKIE_RECORD_HEADER_SIZE = 56; @@ -46,10 +45,7 @@ export function parseBinaryCookies(buffer: Buffer): ReadonlyArray buffer.length) { throw new SafariCookieReadError({ reason: "readFailed" }); } @@ -74,9 +70,7 @@ export function parseBinaryCookies(buffer: Buffer): ReadonlyArray page.length) { throw new SafariCookieReadError({ reason: "readFailed" }); } - // Every record accepted so far, so a later offset cannot point back into - // one of them: the page header, the offset table, and earlier records are - // all bytes that would otherwise parse as a fabricated cookie. + // Reject offsets into the header, table, or earlier records to avoid fabricated cookies. const accepted: Array = []; for (let index = 0; index < cookieCount; index += 1) { const cookieStart = page.readUInt32LE(8 + index * 4); @@ -120,9 +114,6 @@ export function parseBinaryCookies(buffer: Buffer): ReadonlyArray 0 ? Math.floor(expiry) + APPLE_EPOCH_OFFSET_SECONDS : undefined; cookies.push({ - // Safari marks domain cookies with a leading dot like the other - // engines, so the shared scope rule applies: host-only cookies keep - // `domain` undefined, or Electron widens them to every subdomain. ...cookieScope(domain, path || "/", secure), name, value, @@ -130,17 +121,13 @@ export function parseBinaryCookies(buffer: Buffer): ReadonlyArray { - // TCC denies with EPERM, which Effect tags `Unknown` rather than - // `PermissionDenied` — so the errno is what identifies it. EACCES (and the - // `PermissionDenied` tag it maps to) is an ordinary POSIX permission or - // ACL failure that granting Full Disk Access cannot fix, so it stays a plain - // read failure rather than sending the user to a grant that won't help. + // TCC returns EPERM (Effect Unknown); EACCES is a POSIX denial that Full Disk Access cannot fix. const code = (error.reason as { cause?: { code?: unknown } }).cause?.code; return code === "EPERM"; }; -/** - * `stat` succeeds on the jar inside Safari's container even without Full Disk - * Access — that is what lets the listing find it — so presence alone cannot - * tell granted from denied. - * */ +/** stat succeeds without Full Disk Access, so presence alone does not prove readable cookies. */ export const safariAccessDenied = Effect.fnUntraced(function* (cookiePath: string) { const fileSystem = yield* FileSystem.FileSystem; return yield* fileSystem.open(cookiePath, { flag: "r" }).pipe( diff --git a/apps/desktop/src/preview/BrowserImport/SafariPermission.ts b/apps/desktop/src/preview/BrowserImport/SafariPermission.ts index 1bad2ec2b3572..8e1d2c3d62d4d 100644 --- a/apps/desktop/src/preview/BrowserImport/SafariPermission.ts +++ b/apps/desktop/src/preview/BrowserImport/SafariPermission.ts @@ -17,8 +17,7 @@ export const safariPermissionCheck = Effect.gen(function* () { if (!safari || context.platform !== "darwin") return false; const defaultJar = yield* resolveCookieDatabase(safari, context, "."); if (defaultJar !== undefined) return yield* safariAccessGranted(defaultJar); - // A Safari installation can have cookies only in a named profile. Rediscover - // those stores after a grant, since TCC may have hidden their metadata before. + // Rediscover named profiles after a grant; TCC may have hidden their metadata. const profiles = yield* listSourceProfiles(safari, context); for (const profile of profiles) { const jar = yield* resolveCookieDatabase(safari, context, profile.directory); diff --git a/apps/desktop/src/preview/BrowserImport/Sources.test.ts b/apps/desktop/src/preview/BrowserImport/Sources.test.ts index cc92563c5847c..898d94221b8d4 100644 --- a/apps/desktop/src/preview/BrowserImport/Sources.test.ts +++ b/apps/desktop/src/preview/BrowserImport/Sources.test.ts @@ -119,9 +119,6 @@ describe("isSourceRunning", () => { const context = yield* withSourceHome(); assert.isFalse(yield* isSourceRunning(helium, context)); - // Chromium points the lock at `-`, a target that never - // exists on disk. A check that follows the link reports a running - // browser as closed, letting an import read a live, mid-write database. yield* fileSystem.symlink( "host-that-does-not-exist-1234", `${userDataDirectory(context)}/SingletonLock`, @@ -209,9 +206,6 @@ describe("isSourceInstalled", () => { const context = yield* withSourceHome(); const root = userDataDirectory(context); - // Installers for native messaging hosts create an empty user-data - // directory for every Chromium fork they know about, so treating the - // directory as evidence lists browsers the user does not have. yield* fileSystem.makeDirectory(`${root}/NativeMessagingHosts`, { recursive: true }); assert.isFalse(yield* isSourceInstalled(helium, context)); @@ -307,8 +301,6 @@ describe("cookieDatabaseCandidatePaths", () => { const fileSystem = yield* FileSystem.FileSystem; const context = yield* withSourceHome(); const root = userDataDirectory(context); - // Chromium 96+ keeps sessions in Network/; a root Cookies left behind - // by the move is stale and must not be the one imported. yield* fileSystem.makeDirectory(`${root}/Default/Network`, { recursive: true }); yield* fileSystem.writeFileString(`${root}/Default/Network/Cookies`, "live"); yield* fileSystem.writeFileString(`${root}/Default/Cookies`, "stale"); @@ -326,6 +318,237 @@ describe("cookieDatabaseCandidatePaths", () => { const firefox = BROWSER_IMPORT_SOURCES.find((source) => source.id === "firefox")!; +const zen = BROWSER_IMPORT_SOURCES.find((source) => source.id === "zen")!; + +describe("Zen", () => { + it.effect("resolves Zen's native user-data roots on every supported platform", () => + run( + Effect.gen(function* () { + const darwinContext = yield* sourcePathContext.pipe( + Effect.provideService(HostProcess.Environment, { HOME: "/Users/zen-user" }), + Effect.provideService(HostProcess.Platform, "darwin"), + ); + const windowsContext = yield* sourcePathContext.pipe( + Effect.provideService(HostProcess.Environment, { + HOME: "C:\\Users\\zen-user", + APPDATA: "C:\\Users\\zen-user\\AppData\\Roaming", + }), + Effect.provideService(HostProcess.Platform, "win32"), + ); + const linuxContext = yield* sourcePathContext.pipe( + Effect.provideService(HostProcess.Environment, { HOME: "/home/zen-user" }), + Effect.provideService(HostProcess.Platform, "linux"), + ); + + assert.equal(zen.name, "Zen"); + assert.equal(zen.engine, "firefox"); + assert.deepEqual([...zen.platforms], ["darwin", "win32", "linux"]); + assert.equal( + zen.userDataDirectory(darwinContext), + darwinContext.path.join("/Users/zen-user", "Library", "Application Support", "zen"), + ); + assert.equal( + zen.userDataDirectory(windowsContext), + windowsContext.path.join("C:\\Users\\zen-user\\AppData\\Roaming", "zen"), + ); + assert.equal( + zen.userDataDirectory(linuxContext), + linuxContext.path.join("/home/zen-user", ".config", "zen"), + ); + assert.deepEqual(zen.alternateLinuxRoots?.(linuxContext), [ + linuxContext.path.join("/home/zen-user", ".zen"), + linuxContext.path.join("/home/zen-user", ".var", "app", "app.zen_browser.zen", "zen"), + ]); + }), + ), + ); + + it.effect("discovers Zen profiles through its Firefox-compatible metadata", () => + run( + Effect.gen(function* () { + const fileSystem = yield* FileSystem.FileSystem; + const home = yield* fileSystem.makeTempDirectoryScoped({ prefix: "t3code-zen-" }); + const context = yield* sourcePathContext.pipe( + Effect.provideService(HostProcess.Environment, { HOME: home }), + Effect.provideService(HostProcess.Platform, "darwin"), + ); + const root = zen.userDataDirectory(context)!; + yield* fileSystem.makeDirectory(root, { recursive: true }); + const profile = context.path.join(root, "Profiles", "zen.default"); + yield* fileSystem.makeDirectory(profile, { recursive: true }); + yield* writeFirefoxCookieDatabase(context.path.join(profile, "cookies.sqlite"), 2, 1); + yield* fileSystem.makeDirectory(context.path.join(root, "Profiles", "empty.default"), { + recursive: true, + }); + yield* fileSystem.writeFileString( + context.path.join(root, "profiles.ini"), + [ + "[Profile0]", + "Name=Zen", + "IsRelative=1", + "Path=Profiles/zen.default", + "ZenAvatarPath=chrome://browser/content/zen-avatars/avatar-55.svg", + "Default=1", + "", + "[Profile1]", + "Name=Empty", + "IsRelative=1", + "Path=Profiles/empty.default", + "", + ].join("\n"), + ); + + assert.deepEqual(yield* listSourceProfiles(zen, context), [ + { + directory: context.path.join("Profiles", "zen.default"), + name: "Zen", + cookieCount: 2, + }, + ]); + assert.isTrue(yield* isSourceInstalled(zen, context)); + assert.isFalse(yield* isSourceRunning(zen, context)); + assert.equal( + yield* resolveCookieDatabase(zen, context, context.path.join("Profiles", "zen.default")), + context.path.join(profile, "cookies.sqlite"), + ); + }), + ), + ); + + it.effect("discovers Zen profiles in both current and legacy Linux roots", () => + run( + Effect.gen(function* () { + const fileSystem = yield* FileSystem.FileSystem; + const home = yield* fileSystem.makeTempDirectoryScoped({ prefix: "t3code-zen-linux-" }); + const context = yield* sourcePathContext.pipe( + Effect.provideService(HostProcess.Environment, { HOME: home }), + Effect.provideService(HostProcess.Platform, "linux"), + ); + const currentRoot = context.path.join(home, ".config", "zen"); + const legacyRoot = context.path.join(home, ".zen"); + const currentProfile = context.path.join(currentRoot, "current.default"); + const legacyProfile = context.path.join(legacyRoot, "legacy.default"); + + for (const [root, profile, name] of [ + [currentRoot, currentProfile, "Current"], + [legacyRoot, legacyProfile, "Legacy"], + ] as const) { + yield* fileSystem.makeDirectory(profile, { recursive: true }); + yield* writeFirefoxCookieDatabase(context.path.join(profile, "cookies.sqlite"), 1, 0); + yield* fileSystem.writeFileString( + context.path.join(root, "profiles.ini"), + [ + "[Profile0]", + `Name=${name}`, + "IsRelative=1", + `Path=${context.path.basename(profile)}`, + ].join("\n"), + ); + } + + assert.deepEqual(yield* listSourceProfiles(zen, context), [ + { directory: "current.default", name: "Current", cookieCount: 1 }, + { directory: legacyProfile, name: "Legacy", cookieCount: 1 }, + ]); + assert.isTrue(yield* isSourceInstalled(zen, context)); + assert.equal( + yield* resolveCookieDatabase(zen, context, legacyProfile), + context.path.join(legacyProfile, "cookies.sqlite"), + ); + + yield* fileSystem.writeFileString( + context.path.join(currentRoot, "profiles.ini"), + `[Profile0]\nName=Shared\nIsRelative=0\nPath=${legacyProfile}\n`, + ); + assert.deepEqual(yield* listSourceProfiles(zen, context), [ + { directory: legacyProfile, name: "Shared", cookieCount: 1 }, + ]); + + yield* fileSystem.remove(currentRoot, { recursive: true }); + assert.isTrue(yield* isSourceInstalled(zen, context)); + assert.deepEqual(yield* listSourceProfiles(zen, context), [ + { directory: legacyProfile, name: "Legacy", cookieCount: 1 }, + ]); + }), + ), + ); + + it.effect("discovers a Flatpak-only Zen installation and resolves its cookies", () => + run( + Effect.gen(function* () { + const fileSystem = yield* FileSystem.FileSystem; + const home = yield* fileSystem.makeTempDirectoryScoped({ prefix: "t3code-zen-flatpak-" }); + const context = yield* sourcePathContext.pipe( + Effect.provideService(HostProcess.Environment, { HOME: home }), + Effect.provideService(HostProcess.Platform, "linux"), + ); + const root = context.path.join(home, ".var", "app", "app.zen_browser.zen", "zen"); + const profile = context.path.join(root, "flatpak.default"); + yield* fileSystem.makeDirectory(profile, { recursive: true }); + yield* writeFirefoxCookieDatabase(context.path.join(profile, "cookies.sqlite"), 2, 1); + yield* fileSystem.writeFileString( + context.path.join(root, "profiles.ini"), + "[Profile0]\nName=Flatpak\nIsRelative=1\nPath=flatpak.default\n", + ); + + assert.deepEqual(yield* listSourceProfiles(zen, context), [ + { directory: profile, name: "Flatpak", cookieCount: 2 }, + ]); + assert.isTrue(yield* isSourceInstalled(zen, context)); + assert.equal( + yield* resolveCookieDatabase(zen, context, profile), + context.path.join(profile, "cookies.sqlite"), + ); + }), + ), + ); + + it.effect("does not mistake Firefox Snap installs for Zen profiles", () => + run( + Effect.gen(function* () { + const fileSystem = yield* FileSystem.FileSystem; + const home = yield* fileSystem.makeTempDirectoryScoped({ prefix: "t3code-zen-snap-" }); + const context = yield* sourcePathContext.pipe( + Effect.provideService(HostProcess.Environment, { HOME: home }), + Effect.provideService(HostProcess.Platform, "linux"), + ); + const zenRoot = context.path.join(home, ".config", "zen"); + const snapRoot = context.path.join( + home, + "snap", + "firefox", + "common", + ".mozilla", + "firefox", + ); + const zenProfile = context.path.join(zenRoot, "zen.default"); + const snapProfile = context.path.join(snapRoot, "snap.default"); + for (const root of [zenRoot, snapRoot]) { + const profile = root === zenRoot ? zenProfile : snapProfile; + yield* fileSystem.makeDirectory(profile, { recursive: true }); + yield* writeFirefoxCookieDatabase(context.path.join(profile, "cookies.sqlite"), 1, 0); + yield* fileSystem.writeFileString( + context.path.join(root, "profiles.ini"), + [ + "[Profile0]", + "Name=Personal", + "IsRelative=1", + `Path=${profile === zenProfile ? "zen.default" : "snap.default"}`, + ].join("\n"), + ); + } + + const profiles = yield* listSourceProfiles(zen, context); + assert.deepEqual( + profiles.map((profile) => profile.directory), + ["zen.default"], + ); + assert.isTrue(yield* isSourceInstalled(zen, context)); + }), + ), + ); +}); + describe("Firefox Snap profiles", () => { it.effect.skipIf(!symlinksSupported)( "finds Snap profiles with or without profiles.ini and checks their locks", @@ -565,14 +788,9 @@ describe("isSourceRunning for Firefox", () => { yield* fileSystem.writeFileString(`${root}/lock`, ""); assert.isFalse(yield* isSourceRunning(firefox, context)); - // `.parentlock` is deliberately left on disk after a clean exit as a - // last-used marker, so an unlocked one is not evidence of a running - // browser — treating it as one blocked every import after first use. yield* fileSystem.writeFileString(`${profile}/.parentlock`, ""); assert.isFalse(yield* isSourceRunning(firefox, context)); - // The `lock` symlink is what Firefox removes on exit; a live pid in - // its target means the profile is held. yield* fileSystem.symlink(`127.0.0.1:+${process.pid}`, `${profile}/lock`); assert.isTrue(yield* isSourceRunning(firefox, context)); }), @@ -582,11 +800,7 @@ describe("isSourceRunning for Firefox", () => { it.effect("reads a Firefox lock symlink's pid to tell live from crashed", () => Effect.gen(function* () { const alive = (pid: number) => Effect.succeed(pid === 4242); - // The resolver may hand Firefox any of the machine's addresses, not - // just 127.0.0.1 — 127.0.1.1 on Debian-style hosts, a LAN address - // elsewhere — so every local address counts as ours. const local = new Set(["127.0.0.1", "127.0.1.1", "192.168.1.20"]); - // Both the plain and the fcntl-marked (`+`) forms carry the pid. assert.isTrue(yield* firefoxSymlinkLockIsHeld("127.0.0.1:4242", local, alive)); assert.isTrue(yield* firefoxSymlinkLockIsHeld("127.0.1.1:+4242", local, alive)); assert.isTrue(yield* firefoxSymlinkLockIsHeld("192.168.1.20:+4242", local, alive)); @@ -603,8 +817,7 @@ describe("isSourceRunning for Firefox", () => { const fileSystem = yield* FileSystem.FileSystem; const home = yield* fileSystem.makeTempDirectoryScoped({ prefix: "t3code-firefox-" }); const context = yield* sourcePathContext.pipe( - // Firefox's win32 root hangs off %APPDATA%; without it the root is - // undefined and the fixture would escape the sandbox into the repo. + // Without APPDATA, the Windows Firefox fixture would escape into the repo. Effect.provideService(HostProcess.Environment, { HOME: home, APPDATA: `${home}/AppData/Roaming`, @@ -616,8 +829,6 @@ describe("isSourceRunning for Firefox", () => { yield* fileSystem.makeDirectory(profile, { recursive: true }); yield* fileSystem.writeFileString(`${profile}/cookies.sqlite`, "db"); - // On Windows, Firefox creates parent.lock as a regular file that - // persists after the process exits. yield* fileSystem.writeFileString(`${profile}/parent.lock`, ""); assert.isFalse(yield* isSourceRunning(firefox, context)); }), diff --git a/apps/desktop/src/preview/BrowserImport/Sources.ts b/apps/desktop/src/preview/BrowserImport/Sources.ts index 3e1cae508a69e..3f94269bfe273 100644 --- a/apps/desktop/src/preview/BrowserImport/Sources.ts +++ b/apps/desktop/src/preview/BrowserImport/Sources.ts @@ -26,6 +26,7 @@ export interface BrowserImportSourceDefinition { readonly engine: BrowserImportEngine; readonly platforms: ReadonlyArray; readonly userDataDirectory: (context: BrowserImportPathContext) => string | undefined; + readonly alternateLinuxRoots?: (context: BrowserImportPathContext) => ReadonlyArray; readonly keychainService?: string; readonly keychainAccount?: string; readonly linuxSecretApplication?: string; @@ -73,9 +74,7 @@ const chromiumSource = (input: { }); export const BROWSER_IMPORT_SOURCES: ReadonlyArray = [ - // No Chromium fork is importable on Windows: since Chrome 127 their cookies - // are encrypted to the browser's own identity (App-Bound Encryption), so no - // other process can read them. + // Chrome 127+ App-Bound Encryption prevents other processes from reading Windows Chromium cookies. chromiumSource({ id: "chrome", name: "Chrome", @@ -110,7 +109,8 @@ export const BROWSER_IMPORT_SOURCES: ReadonlyArray [ + context.path.join(context.home, "snap", "firefox", "common", ".mozilla", "firefox"), + ], + }, + { + id: "zen", + name: "Zen", + engine: "firefox", + platforms: ["darwin", "win32", "linux"], + userDataDirectory: (context) => { + if (context.platform === "darwin") return macApplicationSupport(context, "zen"); + if (context.platform === "win32") { + return context.appData ? context.path.join(context.appData, "zen") : undefined; + } + return context.path.join(context.home, ".config", "zen"); + }, + alternateLinuxRoots: (context) => [ + context.path.join(context.home, ".zen"), + context.path.join(context.home, ".var", "app", "app.zen_browser.zen", "zen"), + ], }, ]; @@ -190,8 +210,7 @@ const cookieDatabaseCandidatePaths = ( if (definition.engine === "safari") { return [context.path.join(profilePath, "Cookies.binarycookies")]; } - // Chromium: pre-96 uses `Cookies`, 96+ use `Network/Cookies`. An upgrade - // leaves the legacy file behind, so prefer the current one and fall back. + // Prefer Chromium 96+'s Network/Cookies; upgrades leave the pre-96 Cookies file behind. return [ context.path.join(profilePath, "Network", "Cookies"), context.path.join(profilePath, "Cookies"), @@ -209,11 +228,7 @@ export const resolveCookieDatabase = Effect.fnUntraced(function* ( return undefined; }); -/** - * Firefox records its profiles in `profiles.ini`. `Install*` sections point at - * a default profile but do not describe one, so only `[ProfileN]` blocks - * count. - */ +/** Install* sections select defaults, not profiles; only ProfileN blocks describe profiles. */ export function parseFirefoxProfiles( ini: string, path: Path.Path, @@ -242,8 +257,7 @@ export function parseFirefoxProfiles( if (!escapesRoot) directory = path.normalize(candidate); } } else if (path.isAbsolute(candidate)) { - // Firefox supports profiles on arbitrary custom roots when - // IsRelative=0. Do not constrain them to the standard Firefox root. + // IsRelative=0 permits custom roots outside Firefox's standard directory. directory = path.normalize(candidate); } @@ -308,10 +322,7 @@ const isSafeProfileDirectory = (directory: string): boolean => const CookieCountRow = Schema.Struct({ count: Schema.Number }); const decodeCookieCount = Schema.decodeUnknownEffect(Schema.Array(CookieCountRow)); -/** - * Firefox containers use identities Electron cannot represent, so its count - * uses the same default-container predicate as the reader. - */ +// Count only default-container cookies because Electron cannot represent Firefox containers. const countProfileCookies = Effect.fnUntraced(function* ( definition: BrowserImportSourceDefinition, context: BrowserImportPathContext, @@ -420,12 +431,7 @@ const listSourceProfilesInDirectory = Effect.fnUntraced(function* ( Effect.map((ini) => parseFirefoxProfiles(ini, context.path, root)), Effect.orElseSucceed(() => [] as ReadonlyArray), ); - // `profiles.ini` also lists profiles the installer created but the user - // never launched, which hold no cookie database and nothing to import. When - // none of the declared profiles has one, fall through to the scan rather - // than returning empty: `profiles.ini` can list stale or never-launched - // profiles while the cookies live in one it does not mention, and an empty - // answer here hides the browser entirely. + // Declared profiles may be stale or never launched; scan for unlisted stores if none has a cookie database. if (declared.length > 0) { const found = yield* Effect.forEach(declared, (profile) => Effect.forEach( @@ -460,11 +466,7 @@ const listSourceProfilesInDirectory = Effect.fnUntraced(function* ( const declared = yield* fileSystem.readFileString(context.path.join(root, "Local State")).pipe( Effect.flatMap(decodeLocalState), Effect.map((state) => Object.entries(state.profile?.info_cache ?? {})), - // The keys are directory names from the browser's own metadata file, which - // anything running as the user can write. Anything but a single plain - // segment is dropped: `..` or a path separator would otherwise be handed - // to `cookieDatabasePath` and read a database outside the user-data - // directory. + // Browser metadata is user-writable; reject traversal segments before resolving cookie database paths. Effect.map((entries) => entries.filter(([directory]) => isSafeProfileDirectory(directory))), Effect.map((entries) => entries.map(([directory, info]) => ({ directory, name: info.name?.trim() || directory })), @@ -490,11 +492,7 @@ const listSourceProfilesInDirectory = Effect.fnUntraced(function* ( ); }); -/** - * Include Firefox's Snap home alongside its native home. Snap profiles use - * absolute directories so cookie reads and lock checks keep pointing at the - * installation they came from, even when both installs use the same name. - */ +/** Keep alternate-root profile paths absolute so cookie reads and locks use the correct installation. */ export const listSourceProfiles = Effect.fn("BrowserImportSources.listSourceProfiles")(function* ( definition: BrowserImportSourceDefinition, context: BrowserImportPathContext, @@ -505,10 +503,7 @@ export const listSourceProfiles = Effect.fn("BrowserImportSources.listSourceProf const root = definition.userDataDirectory(context); if (root === undefined) return []; - const roots = [ - root, - context.path.join(context.home, "snap", "firefox", "common", ".mozilla", "firefox"), - ]; + const roots = [root, ...(definition.alternateLinuxRoots?.(context) ?? [])]; const profiles = new Map(); for (const directory of roots) { const found = yield* listSourceProfilesInDirectory( @@ -544,9 +539,7 @@ export const chromiumProcessIsAlive = ( signalProcess(pid, 0); return true; } catch (cause) { - // Only ESRCH positively proves the process is gone. Permission errors - // and unknown failures stay conservative so an active browser is never - // mistaken for a stale lock. + // Only ESRCH proves a stale lock; permission and unknown failures may still hide an active browser. return !( typeof cause === "object" && cause !== null && @@ -570,8 +563,7 @@ export const chromiumSingletonLockIsHeld = Effect.fnUntraced(function* ( if (!/^\d+$/.test(pidText)) return true; const pid = Number(pidText); if (!Number.isSafeInteger(pid) || pid <= 0) return true; - // A PID is meaningful only on this host. A foreign hostname can come from a - // shared home directory, and cannot safely be declared stale from here. + // Foreign-host PIDs may come from a shared home; never declare them stale here. if (host !== currentHost) return true; return yield* isProcessAlive(pid); }); @@ -580,15 +572,9 @@ export const chromiumSingletonLockIsHeld = Effect.fnUntraced(function* ( const isWindowsLockHeldError = (error: PlatformError.PlatformError): boolean => error.reason._tag === "Busy"; -/** - * Whether a Windows `parent.lock` is actually held by a running process. It - * is opened with no sharing, so it persists on disk after the process exits - * and `stat` always succeeds; only trying to open it for write reveals an - * active holder, which surfaces as `Busy`. - */ +/** Windows leaves parent.lock after exit; only opening it for write reveals a live holder as Busy. */ const windowsLockIsHeld = Effect.fnUntraced(function* (lockPath: string) { - // Permission failures are distinct: they do not prove a browser owns the - // lock, so they must not hide the source as running. + // Permission failures do not prove a running browser owns the lock. const fileSystem = yield* FileSystem.FileSystem; return yield* fileSystem.open(lockPath, { flag: "r+" }).pipe( Effect.as(false), @@ -600,11 +586,7 @@ const windowsLockIsHeld = Effect.fnUntraced(function* (lockPath: string) { type WindowsLockProbe = (path: string) => Effect.Effect; -/** - * Chromium does not create its POSIX `SingletonLock` symlink on Windows. The - * live cookie database is opened without sharing instead, so probing each - * profile's current jar is the reliable running signal there. - */ +/** Windows Chromium locks cookie databases without sharing instead of creating POSIX SingletonLock symlinks. */ export const windowsChromiumCookiesAreHeld = Effect.fnUntraced(function* ( definition: BrowserImportSourceDefinition, context: BrowserImportPathContext, @@ -628,9 +610,7 @@ export const firefoxSymlinkLockIsHeld = Effect.fnUntraced(function* ( ) { const separator = target.lastIndexOf(":"); if (separator < 0) return true; - // The owner half is whatever Firefox's resolver returned for the machine's - // hostname — 127.0.0.1 when the lookup fails, but often 127.0.1.1 or a LAN - // address — so a pid is only meaningful when that address is one of ours. + // Firefox resolves the hostname to loopback or LAN addresses; only local owners' PIDs are meaningful. const owner = target.slice(0, separator); if (!localAddresses.has(owner)) return true; // A `+` marks an fcntl-holding owner; the pid follows either way. @@ -641,18 +621,10 @@ export const firefoxSymlinkLockIsHeld = Effect.fnUntraced(function* ( return yield* isProcessAlive(pid); }); -/** - * `/usr/bin/python3` is named absolutely first so a Dock-launched app with - * launchd's bare `PATH` still finds it without depending on the login-shell - * PATH merge; Linux distributions carry python3 on the default path. - */ +/** Dock launches have a bare PATH; try the absolute interpreter before relying on shell discovery. */ const FCNTL_PROBE_INTERPRETERS = ["/usr/bin/python3", "python3"] as const; -/** - * Anything else means the script never ran — most importantly Apple's - * `/usr/bin/python3` shim, which on a Mac without the Command Line Tools exits - * non-zero after printing an install prompt, without ever reaching our code. - */ +/** Apple's python3 shim can fail with an install prompt before the probe script runs. */ const FCNTL_PROBE_SCRIPT = "import fcntl,os,sys\n" + "fd=os.open(sys.argv[1],os.O_WRONLY)\n" + @@ -664,12 +636,9 @@ const FCNTL_PROBE_SCRIPT = " print('free')"; /** - * Anything else — no interpreter on any candidate path, or one that refused to - * run the script (Apple's shim without the developer tools) — is the probe - * being unavailable, not evidence about the lock. That case falls back to "not - * held" rather than "held": reporting every profile as locked forever would - * block Firefox import outright on such machines, and the SQLite snapshot - * already copes with a live database's WAL, as it does for every other engine. + * A missing or refusing interpreter (Apple's shim without developer tools) means + * the probe is unavailable, so report "not held": "held" would block Firefox import + * forever, and the SQLite snapshot already copes with a live WAL. */ const posixLockIsHeld = Effect.fnUntraced(function* ( path: string, @@ -699,12 +668,7 @@ const posixLockIsHeld = Effect.fnUntraced(function* ( return false; }); -/** - * But `.parentlock` (macOS/Linux) and `parent.lock` (Windows) are regular files - * held with fcntl or a Windows handle and are *deliberately left on disk* after - * exit, as a last-used marker; treating them as proof of a running browser - * blocks every import after Firefox has been used once. - */ +/** Firefox leaves regular lock files after exit; test the lock, not file existence. */ const firefoxProfileIsHeld = Effect.fnUntraced(function* ( directory: string, context: BrowserImportPathContext, @@ -739,8 +703,7 @@ export const isSourceRunning = Effect.fn("BrowserImportSources.isSourceRunning") const fileSystem = yield* FileSystem.FileSystem; const root = definition.userDataDirectory(context); if (root === undefined) return false; - // Safari keeps no lock and writes its jar atomically, so a running instance - // is not a hazard there. + // Safari writes its jar atomically and needs no lock, even while running. if (definition.engine === "safari") return false; if (definition.engine !== "firefox") { if (context.platform === "win32") { @@ -766,18 +729,7 @@ export const isSourceRunning = Effect.fn("BrowserImportSources.isSourceRunning") return found.some(Boolean); }); -/** - * Keyed off the cookie database rather than the user-data directory, because - * that directory is not evidence the browser exists: installers for native - * messaging hosts create an empty one for every Chromium fork they know about, - * so a machine with only Chrome reports Edge, Brave, Vivaldi, Opera and Arc as - * present. - * - * Existence is checked without opening the file, which matters for Safari: TCC - * permits `stat` on the jar inside its container but refuses a read, so this - * still sees it and the user gets the Full Disk Access prompt rather than - * having Safari disappear. - */ +/** Require a cookie database; installers create empty directories. Safari stat needs no Full Disk Access. */ export const isSourceInstalled = Effect.fn("BrowserImportSources.isSourceInstalled")(function* ( definition: BrowserImportSourceDefinition, context: BrowserImportPathContext, diff --git a/apps/desktop/src/preview/BrowserSession.test.ts b/apps/desktop/src/preview/BrowserSession.test.ts index 45d2aeafdbfac..df41a9821bf96 100644 --- a/apps/desktop/src/preview/BrowserSession.test.ts +++ b/apps/desktop/src/preview/BrowserSession.test.ts @@ -85,8 +85,6 @@ describe("BrowserSession", () => { Effect.gen(function* () { const browserSessions = yield* BrowserSession.BrowserSession; - // TextEncoder folds a lone surrogate to U+FFFD, so without escaping these - // two supported ids would hash to one partition and share every cookie. const loneSurrogate = yield* browserSessions.getPartition("p\ud800"); const replacementChar = yield* browserSessions.getPartition("p\ufffd"); assert.notStrictEqual(loneSurrogate, replacementChar); @@ -116,13 +114,8 @@ describe("BrowserSession", () => { }).pipe(Effect.provide(layer)), ); - // A rewritten session UA — any variant, even ones that keep the Electron - // token — makes Cloudflare Turnstile loop with error 600010 (#5002), so the - // guest must end up with Electron's native User-Agent. it.effect("keeps the guest's effective User-Agent equal to Electron's native one", () => Effect.gen(function* () { - // Electron's real UA shape: app token, then Chrome, then Electron, then - // Safari — the token order and casing matter to any strip regex. const nativeUserAgent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) T3Code(Alpha)/0.0.33 Chrome/146.0.7680.216 Electron/41.5.0 Safari/537.36"; fromPartition.mockReset(); @@ -152,7 +145,7 @@ describe("BrowserSession", () => { }).pipe(Effect.provide(layer)), ); - it.effect("grants clipboard-sanitized-write through both the request and check handlers", () => + it.effect("grants preview permissions through both the request and check handlers", () => Effect.gen(function* () { const browserSessions = yield* BrowserSession.BrowserSession; const partition = yield* browserSessions.getPartition("scope-a"); @@ -176,10 +169,10 @@ describe("BrowserSession", () => { }; for (const permission of [ - "clipboard-read", "clipboard-sanitized-write", "geolocation", "fullscreen", + "loopback-network", ]) { assert.isTrue(requestAllows(permission), `request handler should allow ${permission}`); assert.isTrue( @@ -191,7 +184,13 @@ describe("BrowserSession", () => { // `clipboard-write` is not a real Electron permission — the async write API // uses `clipboard-sanitized-write` — so the stale name must not be granted, // and unrelated permissions stay denied. - for (const permission of ["clipboard-write", "notifications", "midi"]) { + for (const permission of [ + "clipboard-write", + "notifications", + "midi", + "local-network", + "local-network-access", + ]) { assert.isFalse(requestAllows(permission), `request handler should deny ${permission}`); assert.isFalse( checkHandler(null, permission) as boolean, @@ -233,6 +232,55 @@ describe("BrowserSession", () => { }).pipe(Effect.provide(layer)), ); + it.effect("asks once per origin before a page reads the clipboard", () => + Effect.gen(function* () { + const browserSessions = yield* BrowserSession.BrowserSession; + const partition = yield* browserSessions.getPartition("scope-a"); + yield* browserSessions.getSession("scope-a"); + const browserSession = sessions.get(partition); + assert.isDefined(browserSession); + const requestHandler = browserSession.setPermissionRequestHandler.mock.calls[0]?.[0]; + const checkHandler = browserSession.setPermissionCheckHandler.mock.calls[0]?.[0]; + assert.isFunction(requestHandler); + assert.isFunction(checkHandler); + + const readClipboard = (requestingUrl: string) => + Effect.callback((resume) => { + requestHandler( + null, + "clipboard-read", + (granted: boolean) => resume(Effect.succeed(granted)), + { requestingUrl, isMainFrame: true }, + ); + }); + const checkClipboard = (origin: string): boolean => + checkHandler(null, "clipboard-read", origin, {}) as boolean; + + showMessageBox.mockReset(); + showMessageBox.mockReturnValueOnce(0).mockReturnValueOnce(1); + + assert.isFalse(checkClipboard("https://allowed.test")); + assert.isTrue(yield* readClipboard("https://allowed.test/page")); + assert.strictEqual(showMessageBox.mock.calls.length, 1); + assert.strictEqual( + showMessageBox.mock.calls[0]?.[0].message, + "https://allowed.test wants to see text and images copied to the clipboard", + ); + assert.deepStrictEqual(showMessageBox.mock.calls[0]?.[0].buttons, ["Allow", "Block"]); + // Enter must not accept a prompt the page raised while the user was typing. + assert.strictEqual(showMessageBox.mock.calls[0]?.[0].defaultId, 1); + + assert.isTrue(yield* readClipboard("https://allowed.test/other")); + assert.isTrue(checkClipboard("https://allowed.test")); + + assert.isFalse(yield* readClipboard("https://blocked.test/")); + assert.isFalse(yield* readClipboard("https://blocked.test/again")); + assert.isFalse(checkClipboard("https://blocked.test")); + assert.isTrue(checkClipboard("https://allowed.test")); + assert.strictEqual(showMessageBox.mock.calls.length, 2); + }).pipe(Effect.provide(layer)), + ); + it.effect("clears a partition whose session has not been opened yet", () => Effect.gen(function* () { const browserSessions = yield* BrowserSession.BrowserSession; @@ -243,11 +291,16 @@ describe("BrowserSession", () => { assert.isUndefined(sessions.get(partition)); yield* browserSessions.getSession("scope-untouched"); + const other = yield* browserSessions.getSession("scope-other"); yield* browserSessions.clearCookies([partition]); const created = sessions.get(partition); assert.isDefined(created); assert.strictEqual(created.clearStorageData.mock.calls.length, 1); + assert.deepStrictEqual(created.clearStorageData.mock.calls[0]?.[0], { + storages: ["cookies", "localstorage", "indexdb", "serviceworkers", "cachestorage"], + }); + assert.strictEqual(vi.mocked(other.clearStorageData).mock.calls.length, 0); }).pipe(Effect.provide(layer)), ); }); diff --git a/apps/desktop/src/preview/BrowserSession.ts b/apps/desktop/src/preview/BrowserSession.ts index 3847ec3323316..f8f23aca6afa7 100644 --- a/apps/desktop/src/preview/BrowserSession.ts +++ b/apps/desktop/src/preview/BrowserSession.ts @@ -12,37 +12,22 @@ import * as SynchronizedRef from "effect/SynchronizedRef"; import * as ElectronDialog from "../electron/ElectronDialog.ts"; const PREVIEW_PARTITION_PREFIX = "persist:t3code-preview-"; -/** - * Incognito partitions deliberately omit the `persist:` prefix, which is what - * makes Chromium keep them in memory and discard them with the process. They - * still carry the product prefix so `isPartition` can admit them — the - * `will-attach-webview` gate rejects anything it does not recognise. - */ +/** Ephemeral partitions omit persist: but retain a product prefix so the webview gate recognizes them. */ const PREVIEW_EPHEMERAL_PARTITION_PREFIX = "t3code-preview-ephemeral-"; const PROFILE_PARTITION_MARKER = "profile-"; export type BrowserSessionPartitionNamespace = "profile"; -// `clipboard-sanitized-write` is the Electron permission behind -// `navigator.clipboard.writeText()` — note it is NOT `clipboard-write`, which -// is not a valid Electron permission name. Async clipboard writes are gated by -// the permission *check* handler (not only the request handler), so both -// handlers must allow it; otherwise built-in "Copy" buttons — e.g. the Next.js -// / Vercel error overlay — fail with `Failed to execute 'writeText' on -// 'Clipboard': Write permission denied`. +// Electron's clipboard API uses clipboard-sanitized-write and checks both permission handlers. const ALLOWED_PREVIEW_PERMISSIONS: ReadonlySet = new Set([ - "clipboard-read", "clipboard-sanitized-write", "geolocation", - // `DesktopWindow` disables HTML fullscreen window resizing for the app window - // and every preview guest, so a page that goes fullscreen fills its own - // webview instead of taking over the whole T3 window. + // DesktopWindow confines HTML fullscreen to the guest's webview. "fullscreen", - // Deliberately NOT local-fonts: preview sessions run untrusted web content, - // and silently granting it would hand every page the user's installed-font - // fingerprint (and font file bytes via FontData.blob()). - // Deliberately NOT notifications: a page could post OS notifications branded - // as T3 Code. T3's own come from the app window on the default session. + // Loopback requests already succeed in Electron 44; permission-aware sign-in widgets query first. + "loopback-network", + // Deny local-fonts to untrusted previews: it exposes installed-font fingerprints and file bytes. + // Deny notifications: pages could impersonate T3 Code; app notifications use the default session. ]); const NEVER_EXTERNAL_PROTOCOLS: ReadonlySet = new Set([ @@ -71,6 +56,19 @@ const externalProtocolPromptUrl = (rawUrl: string | undefined): string | null => const MAX_PROMPT_URL_LENGTH = 300; +const truncateForPrompt = (text: string): string => + text.length > MAX_PROMPT_URL_LENGTH ? `${text.slice(0, MAX_PROMPT_URL_LENGTH)}…` : text; + +const permissionOrigin = (rawUrl: string | undefined): string | null => { + if (!rawUrl) return null; + try { + const { origin } = new URL(rawUrl); + return origin === "null" ? null : origin; + } catch { + return null; + } +}; + export class BrowserSessionPartitionDerivationError extends Schema.TaggedError()( "BrowserSessionPartitionDerivationError", { @@ -166,12 +164,7 @@ const selectSessions = ( ([partition]) => partitions === undefined || partitions.includes(partition), ); -/** - * `TextEncoder` replaces a lone UTF-16 surrogate with U+FFFD, so `"p\ud800"` - * and `"p\ufffd"` would hash to the same partition and share cookies. Those - * are distinct, supported ids, so lone surrogates are escaped to `\uXXXX` - * first — and a literal backslash is doubled so the escape cannot be forged. - */ +/** Escape lone surrogates before UTF-8 hashing, which otherwise merges them with U+FFFD; escape backslashes too. */ const encodeScopeForDigest = (scope: string): Uint8Array => new TextEncoder().encode( scope @@ -182,10 +175,7 @@ const encodeScopeForDigest = (scope: string): Uint8Array => ), ); -/** - * A `` guest has no window of its own, so look it up through the page - * that embeds it. - */ +// Webview guests have no window; use their embedding page. const previewHostWindow = (guest: WebContents | null): BrowserWindow | undefined => { if (guest === null || guest.isDestroyed()) return undefined; const host = guest.hostWebContents ?? guest; @@ -193,57 +183,76 @@ const previewHostWindow = (guest: WebContents | null): BrowserWindow | undefined return BrowserWindow.fromWebContents(host) ?? undefined; }; -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* BrowserSessionMake() { const crypto = yield* Crypto.Crypto; const electronDialog = yield* ElectronDialog.ElectronDialog; const runFork = Effect.runForkWith(yield* Effect.context()); // One prompt at a time, so a page cannot stack dialogs by looping a deep link. - let externalPromptOpen = false; - /** - * Electron grants an external-protocol navigation through the `openExternal` - * permission and then launches the OS handler itself. Ask first: previews run - * untrusted pages, and a silent grant would let any of them launch apps. - */ - const confirmOpenExternal = ( + let permissionPromptOpen = false; + /** Settles with `undefined` when the user gave no answer: another prompt was open or the dialog failed. */ + const promptPermission = ( requester: WebContents | null, - rawUrl: string | undefined, - callback: (granted: boolean) => void, + prompt: { + readonly buttons: readonly [allow: string, deny: string]; + readonly message: string; + readonly detail?: string; + }, + callback: (answer: boolean | undefined) => void, ): void => { - const url = externalProtocolPromptUrl(rawUrl); - if (url === null || externalPromptOpen) { - callback(false); + if (permissionPromptOpen) { + callback(undefined); return; } - externalPromptOpen = true; - const settle = (granted: boolean) => + permissionPromptOpen = true; + const settle = (answer: boolean | undefined) => Effect.sync(() => { - externalPromptOpen = false; - callback(granted); + permissionPromptOpen = false; + callback(answer); }); - const shownUrl = - url.length > MAX_PROMPT_URL_LENGTH ? `${url.slice(0, MAX_PROMPT_URL_LENGTH)}…` : url; runFork( electronDialog .showMessageBox( { type: "question", - buttons: ["Open", "Cancel"], - defaultId: 0, + buttons: [...prompt.buttons], + // Default to deny so an Enter typed into the page cannot accept a prompt it raised. + defaultId: 1, cancelId: 1, - message: `Open this ${new URL(url).protocol.slice(0, -1)} link?`, - detail: `A page in the browser wants to open another application:\n\n${shownUrl}`, + message: prompt.message, + ...(prompt.detail === undefined ? {} : { detail: prompt.detail }), }, previewHostWindow(requester), ) .pipe( - Effect.map(({ response }) => response === 0), - Effect.orElseSucceed(() => false), + Effect.map(({ response }): boolean | undefined => response === 0), + Effect.orElseSucceed(() => undefined), Effect.flatMap(settle), - Effect.onInterrupt(() => settle(false)), + Effect.onInterrupt(() => settle(undefined)), ), ); }; + /** Electron launches external protocols after granting openExternal; untrusted pages require confirmation. */ + const confirmOpenExternal = ( + requester: WebContents | null, + rawUrl: string | undefined, + callback: (granted: boolean) => void, + ): void => { + const url = externalProtocolPromptUrl(rawUrl); + if (url === null) { + callback(false); + return; + } + promptPermission( + requester, + { + buttons: ["Open", "Cancel"], + message: `Open this ${new URL(url).protocol.slice(0, -1)} link?`, + detail: `A page in the browser wants to open another application:\n\n${truncateForPrompt(url)}`, + }, + (answer) => callback(answer === true), + ); + }; const sessionsRef = yield* SynchronizedRef.make>(new Map()); const getPartition = Effect.fn("BrowserSession.getPartition")(function* ( @@ -276,11 +285,36 @@ export const make = Effect.gen(function* BrowserSessionMake() { return Effect.try({ try: () => { const browserSession = session.fromPartition(partition); - // The guest keeps Electron's native User-Agent. Rewriting it in any - // form — even variants that keep the Electron token — makes Cloudflare - // Turnstile fail its integrity check with error 600010 and recreate - // the challenge every few seconds, so logins behind it never complete - // (#5002). + // Like Chrome, clipboard reads ask once per origin; both answers last for the session. + const clipboardReadDecisions = new Map(); + const confirmClipboardRead = ( + requester: WebContents, + rawUrl: string | undefined, + callback: (granted: boolean) => void, + ): void => { + const origin = permissionOrigin(rawUrl); + if (origin === null) { + callback(false); + return; + } + const remembered = clipboardReadDecisions.get(origin); + if (remembered !== undefined) { + callback(remembered); + return; + } + promptPermission( + requester, + { + buttons: ["Allow", "Block"], + message: `${truncateForPrompt(origin)} wants to see text and images copied to the clipboard`, + }, + (answer) => { + if (answer !== undefined) clipboardReadDecisions.set(origin, answer); + callback(answer === true); + }, + ); + }; + // Rewriting Electron's native User-Agent makes Turnstile fail integrity checks with error 600010. browserSession.setPermissionRequestHandler( (webContents, permission, callback, details) => { if (permission === "openExternal") { @@ -291,11 +325,21 @@ export const make = Effect.gen(function* BrowserSessionMake() { ); return; } + if (permission === "clipboard-read") { + confirmClipboardRead( + webContents, + "requestingUrl" in details ? details.requestingUrl : undefined, + callback, + ); + return; + } callback(ALLOWED_PREVIEW_PERMISSIONS.has(permission)); }, ); - browserSession.setPermissionCheckHandler((_webContents, permission) => - ALLOWED_PREVIEW_PERMISSIONS.has(permission), + browserSession.setPermissionCheckHandler((_webContents, permission, requestingOrigin) => + permission === "clipboard-read" + ? clipboardReadDecisions.get(permissionOrigin(requestingOrigin) ?? "") === true + : ALLOWED_PREVIEW_PERMISSIONS.has(permission), ); const next = new Map(sessions); next.set(partition, browserSession); @@ -325,7 +369,7 @@ export const make = Effect.gen(function* BrowserSessionMake() { Effect.tryPromise({ try: () => browserSession.clearStorageData({ - storages: ["cookies", "localstorage", "indexdb", "serviceworkers"], + storages: ["cookies", "localstorage", "indexdb", "serviceworkers", "cachestorage"], }), catch: (cause) => new BrowserSessionStorageClearError({ diff --git a/apps/desktop/src/preview/CdpRelay.test.ts b/apps/desktop/src/preview/CdpRelay.test.ts index 2d17a28744545..a2589edf8f7b2 100644 --- a/apps/desktop/src/preview/CdpRelay.test.ts +++ b/apps/desktop/src/preview/CdpRelay.test.ts @@ -14,6 +14,9 @@ const makeTarget = ( setDownloadDirectory, }); +const makeRelay = (target: CdpRelayTarget, write: (raw: string) => void) => + createCdpRelayConnection(target, write, () => {}); + // Each relay reply resolves after a few microtasks; one macrotask lets them all land. // oxlint-disable-next-line t3code/no-real-time-wait-in-tests -- a zero-delay macrotask boundary, not a wait for time const settle = () => new Promise((resolve) => setImmediate(resolve)); @@ -21,9 +24,7 @@ const settle = () => new Promise((resolve) => setImmediate(resolve)); describe("CDP relay", () => { it("announces only the tab's page, under its real target id", async () => { const written: Array> = []; - const relay = createCdpRelayConnection(makeTarget(vi.fn()), (raw) => - written.push(JSON.parse(raw)), - ); + const relay = makeRelay(makeTarget(vi.fn()), (raw) => written.push(JSON.parse(raw))); relay.receive(JSON.stringify({ id: 1, method: "Target.setAutoAttach", params: {} })); relay.receive(JSON.stringify({ id: 2, method: "Target.createTarget", params: {} })); await settle(); @@ -51,9 +52,7 @@ describe("CDP relay", () => { new Promise((resolve) => pending.push(() => resolve({ method }))), ); const written: Array> = []; - const relay = createCdpRelayConnection(makeTarget(send), (raw) => - written.push(JSON.parse(raw)), - ); + const relay = makeRelay(makeTarget(send), (raw) => written.push(JSON.parse(raw))); relay.receive( JSON.stringify({ id: 5, method: "Page.captureScreenshot", sessionId: "t3-preview-page" }), ); @@ -65,8 +64,8 @@ describe("CDP relay", () => { ]); pending[0]!(); await settle(); - expect(send).toHaveBeenNthCalledWith(1, "Page.captureScreenshot", {}, undefined); - expect(send).toHaveBeenNthCalledWith(2, "DOM.enable", {}, "iframe-session"); + expect(send).toHaveBeenNthCalledWith(1, "Page.captureScreenshot", {}, undefined, undefined); + expect(send).toHaveBeenNthCalledWith(2, "DOM.enable", {}, "iframe-session", undefined); expect(written.at(-1)).toEqual({ id: 5, result: { method: "Page.captureScreenshot" }, @@ -76,7 +75,7 @@ describe("CDP relay", () => { it("resumes paused child frames, so cross-site iframes run", async () => { const send = vi.fn(async () => ({})); - const relay = createCdpRelayConnection(makeTarget(send), () => {}); + const relay = makeRelay(makeTarget(send), () => {}); relay.receive( JSON.stringify({ id: 1, @@ -92,19 +91,37 @@ describe("CDP relay", () => { }), ); await settle(); - expect(send.mock.calls).toEqual([["Runtime.runIfWaitingForDebugger", {}, "iframe-session"]]); + expect(send.mock.calls).toEqual([ + ["Runtime.runIfWaitingForDebugger", {}, "iframe-session", undefined], + ]); }); - it("routes tab events to the page session once the page is announced", async () => { + // Playwright enables focus emulation on every page it connects to, and Chromium then + // counts the guest as captured: a preview the panel hides keeps its timers unthrottled. + it("acknowledges Playwright's focus emulation without forcing it onto the guest", async () => { + const send = vi.fn(async () => ({})); const written: Array> = []; - const relay = createCdpRelayConnection(makeTarget(vi.fn()), (raw) => - written.push(JSON.parse(raw)), + const relay = makeRelay(makeTarget(send), (raw) => written.push(JSON.parse(raw))); + relay.receive( + JSON.stringify({ + id: 1, + method: "Emulation.setFocusEmulationEnabled", + params: { enabled: true }, + sessionId: "t3-preview-page", + }), ); + await settle(); + expect(written).toEqual([{ id: 1, result: {}, sessionId: "t3-preview-page" }]); + expect(send).not.toHaveBeenCalled(); + }); + + it("routes tab events to the page session once the page is announced", async () => { + const written: Array> = []; + const relay = makeRelay(makeTarget(vi.fn()), (raw) => written.push(JSON.parse(raw))); relay.event("Page.loadEventFired", {}, undefined); expect(written).toEqual([]); relay.receive(JSON.stringify({ id: 1, method: "Target.setAutoAttach", params: {} })); await settle(); - // Electron passes an empty session id for the page's own events. relay.event("Page.loadEventFired", { timestamp: 1 }, ""); relay.event("Runtime.consoleAPICalled", {}, "iframe-session"); expect(written.slice(-2)).toEqual([ @@ -118,9 +135,7 @@ describe("CDP relay extra sessions", () => { it("gives a second page session the page's commands and events", async () => { const send = vi.fn(async () => ({})); const written: Array> = []; - const relay = createCdpRelayConnection(makeTarget(send), (raw) => - written.push(JSON.parse(raw)), - ); + const relay = makeRelay(makeTarget(send), (raw) => written.push(JSON.parse(raw))); relay.receive(JSON.stringify({ id: 1, method: "Target.setAutoAttach", params: {} })); relay.receive(JSON.stringify({ id: 2, method: "Target.attachToBrowserTarget" })); await settle(); @@ -148,7 +163,7 @@ describe("CDP relay extra sessions", () => { expect(written.find((m) => m["id"] === 4)).toHaveProperty("error"); relay.receive(JSON.stringify({ id: 5, method: "Page.startScreencast", sessionId: extra })); await settle(); - expect(send).toHaveBeenLastCalledWith("Page.startScreencast", {}, undefined); + expect(send).toHaveBeenLastCalledWith("Page.startScreencast", {}, undefined, extra); written.length = 0; relay.event("Page.screencastFrame", { data: "x" }, undefined); expect(written.map((m) => m["sessionId"])).toEqual(["t3-preview-page", extra]); @@ -160,7 +175,7 @@ describe("CDP relay downloads", () => { const send = vi.fn(async () => ({})); const directories: Array = []; const written: Array> = []; - const relay = createCdpRelayConnection( + const relay = makeRelay( makeTarget(send, (directory) => directories.push(directory)), (raw) => written.push(JSON.parse(raw)), ); @@ -191,3 +206,58 @@ describe("CDP relay downloads", () => { ]); }); }); + +describe("CDP relay payload budget", () => { + // 2,048 references to one 40 KiB string: about 80 MiB once serialized, little memory here. + const oversized = Array(2048).fill("x".repeat(40 * 1024)); + + it("fails only an oversized reply and still returns a large screenshot", async () => { + const screenshot = "A".repeat(16 * 1024 * 1024); + const send = vi.fn(async (method: string) => + method === "DOM.getDocument" ? { nodes: oversized } : { data: screenshot }, + ); + const written: Array> = []; + const relay = makeRelay(makeTarget(send), (raw) => written.push(JSON.parse(raw))); + relay.receive( + JSON.stringify({ id: 1, method: "DOM.getDocument", sessionId: "t3-preview-page" }), + ); + relay.receive( + JSON.stringify({ id: 2, method: "Page.captureScreenshot", sessionId: "t3-preview-page" }), + ); + await settle(); + + const replies = written.map(({ id, error, result }) => ({ + id, + error, + size: (result as { data?: string } | undefined)?.data?.length, + })); + expect(replies).toEqual([ + { id: 1, error: { code: -32000, message: "CDP payload too large" }, size: undefined }, + { id: 2, error: undefined, size: screenshot.length }, + ]); + }); + + it.each([ + { args: oversized }, + { args: "\u0001".repeat(12 * 1024 * 1024) }, + { args: Array(2_700_000).fill(-0.0000010000000000000002) }, + ])("closes instead of dropping an oversized event (%#)", async ({ args }) => { + const written: Array> = []; + const close = vi.fn(); + const relay = createCdpRelayConnection( + makeTarget(vi.fn()), + (raw) => written.push(JSON.parse(raw)), + close, + ); + relay.receive(JSON.stringify({ id: 1, method: "Target.setAutoAttach", params: {} })); + await settle(); + written.length = 0; + + relay.event("Runtime.consoleAPICalled", { args }, ""); + relay.event("Page.loadEventFired", { timestamp: 1 }, ""); + + relay.receive(JSON.stringify({ id: 2, method: "Target.setAutoAttach" })); + expect(close).toHaveBeenCalledOnce(); + expect(written.map((message) => message["method"])).toEqual([]); + }); +}); diff --git a/apps/desktop/src/preview/CdpRelay.ts b/apps/desktop/src/preview/CdpRelay.ts index 581b692882b30..d52b0a3b2ab55 100644 --- a/apps/desktop/src/preview/CdpRelay.ts +++ b/apps/desktop/src/preview/CdpRelay.ts @@ -1,23 +1,20 @@ -/** - * Electron allows one debugger client per webContents, so the relay shares the - * attach the preview manager already holds. - */ +// Electron allows one debugger per webContents; share the manager's attachment. export interface CdpRelayTarget { readonly send: ( method: string, params: Record, sessionId: string | undefined, + /** The extra session that sent it, such as a viewer's; the main connection has none. */ + owner?: string, ) => Promise; + readonly sessionDetached?: (owner: string) => void; /** The page's own CDP target id; Playwright keys the main frame by it. */ readonly targetId: () => Promise; readonly url: () => string; readonly title: () => string; readonly userAgent: () => string; - /** - * The desktop app and the server it launched share a disk, so the server's - * Playwright reads the file where it asked for it. - */ + /** The desktop and its server share a disk; download paths need no translation. */ readonly setDownloadDirectory: (directory: string | null) => void; } @@ -39,6 +36,29 @@ const isCommand = (value: unknown): value is CdpCommand => typeof (value as { id?: unknown }).id === "number" && typeof (value as { method?: unknown }).method === "string"; +// CDP values are plain JSON data, so their serialized size can be bounded before +// JSON.stringify allocates it. A string counts at its length unless it holds a +// character JSON may escape, which can take six code units. +const MAX_CDP_PAYLOAD_SIZE = 64 * 1024 * 1024; +const MAY_ESCAPE = /[^\x20\x21\x23-\x5b\x5d-\ud7ff\ue000-\uffff]/; +const serializedSize = (text: string) => + (MAY_ESCAPE.test(text) ? text.length * 6 : text.length) + 3; + +const fitsPayloadBudget = (message: unknown) => { + let remaining = MAX_CDP_PAYLOAD_SIZE; + const visit = (value: unknown): boolean => { + remaining -= typeof value === "string" ? serializedSize(value) : 26; + if (remaining < 0) return false; + if (typeof value !== "object" || value === null) return true; + if (Array.isArray(value)) return value.every(visit); + return Object.entries(value).every(([key, item]) => { + remaining -= serializedSize(key); + return visit(item); + }); + }; + return visit(message); +}; + const BROWSER_CONTEXT_ID = "t3-preview"; const ANNOUNCE = Symbol("announce"); const PAGE_SESSION_ID = "t3-preview-page"; @@ -53,14 +73,32 @@ const ACKNOWLEDGED = new Set([ export function createCdpRelayConnection( target: CdpRelayTarget, write: (message: string) => void, + close: () => void, ): CdpRelayConnection { - const send = (message: Record) => write(JSON.stringify(message)); + let closed = false; + const send = (message: Record) => { + if (closed) return; + if (fitsPayloadBudget(message)) { + write(JSON.stringify(message)); + return; + } + // An error reply fails only that command. A dropped event would leave + // Playwright out of step with the page, so the relay closes instead. + if (typeof message["id"] === "number") { + write( + JSON.stringify({ + id: message["id"], + error: { code: -32000, message: "CDP payload too large" }, + ...(message["sessionId"] === undefined ? {} : { sessionId: message["sessionId"] }), + }), + ); + return; + } + closed = true; + close(); + }; let attached = false; - /** - * Sessions this relay invented. Extra page sessions (Playwright's - * `newCDPSession`) all reach the one real debugger session, so each gets the - * page's events; other ids are the page's own child sessions, such as iframes. - */ + /** Relay-created page sessions share one real debugger; child frame sessions retain their own ids. */ const sessions = new Map([[PAGE_SESSION_ID, "page"]]); let sessionSequence = 0; const newSession = (kind: "browser" | "page") => { @@ -121,8 +159,10 @@ export function createCdpRelayConnection( } case "Target.detachFromTarget": { const sessionId = command.params?.["sessionId"]; - if (typeof sessionId === "string" && sessionId !== PAGE_SESSION_ID) + if (typeof sessionId === "string" && sessionId !== PAGE_SESSION_ID) { sessions.delete(sessionId); + target.sessionDetached?.(sessionId); + } return {}; } case "Target.setAutoAttach": { @@ -143,18 +183,20 @@ export function createCdpRelayConnection( const pageCommand = (command: CdpCommand): Promise => { const child = sessions.get(command.sessionId!) === "page" ? undefined : command.sessionId; - // The page itself is already running, but its child frames are not: - // Playwright auto-attaches with waitForDebuggerOnStart, so Chromium pauses - // every new cross-site iframe and worker until this reaches it. Swallowing - // it left sign-in checks and captchas, which run in such frames, frozen. + const owner = + child === undefined && command.sessionId !== PAGE_SESSION_ID ? command.sessionId : undefined; + // Child frames/workers pause on auto-attach until resumed; only the main page can skip this command. if (command.method === "Runtime.runIfWaitingForDebugger" && child === undefined) { return Promise.resolve({}); } - return target.send(command.method, command.params ?? {}, child); + // Playwright asks for this on every page; the host emulates focus only while it is in use. + if (command.method === "Emulation.setFocusEmulationEnabled") return Promise.resolve({}); + return target.send(command.method, command.params ?? {}, child, owner); }; return { receive: (raw) => { + if (closed) return; let command: unknown; try { command = JSON.parse(raw); @@ -167,8 +209,7 @@ export function createCdpRelayConnection( ? browserCommand(command) : pageCommand(command); const route = command.sessionId === undefined ? {} : { sessionId: command.sessionId }; - // Replies leave as commands finish, as Chromium's do, so a slow command - // such as a screenshot never holds up the ones behind it. + // Reply as commands finish so slow commands cannot block later replies. void result.then( (value) => { const announce = diff --git a/apps/desktop/src/preview/DesktopBrowserHost.test.ts b/apps/desktop/src/preview/DesktopBrowserHost.test.ts index a4d1e3dbbacbc..6dace56990c20 100644 --- a/apps/desktop/src/preview/DesktopBrowserHost.test.ts +++ b/apps/desktop/src/preview/DesktopBrowserHost.test.ts @@ -1,11 +1,13 @@ // @effect-diagnostics nodeBuiltinImport:off - Stands in for an Electron debugger. -import { describe, expect, it } from "@effect/vitest"; +import { describe, expect, it, vi } from "@effect/vitest"; import { DesktopBrowserEvent } from "@t3tools/contracts"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import * as Fiber from "effect/Fiber"; +import * as Queue from "effect/Queue"; import * as Schema from "effect/Schema"; import * as Stream from "effect/Stream"; +import * as TestClock from "effect/testing/TestClock"; import * as NodeEvents from "node:events"; import * as DesktopBrowserHost from "./DesktopBrowserHost.ts"; @@ -17,35 +19,84 @@ const decodeCdpReply = Schema.decodeUnknownSync( Schema.fromJsonString(Schema.Struct({ id: Schema.Number })), ); const key = { threadId: "thread-1", tabId: "tab-1" }; +/** Sends a page command whose id the fake debugger records as it receives it. */ +const command = ( + host: DesktopBrowserHost.DesktopBrowserHost["Service"], + id: number, + method: string, +) => + host.handleCommandLine( + encodeJson({ + type: "cdp", + ...key, + message: encodeJson({ id, method, params: { id }, sessionId: "t3-preview-page" }), + }), + ); -const makeDebuggee = () => { +const makeDebuggee = ( + options: { + readonly deferFocus?: boolean; + readonly refuse?: (method: string, sessionId: string | undefined) => boolean; + } = {}, +) => { const emitter = new NodeEvents.EventEmitter(); const pending: Array<() => void> = []; + const focusChanges: Array<() => void> = []; + const sent: Array = []; + const sendWaiters: Array<() => void> = []; + const focusEmulation: Array = []; const debuggee = Object.assign(emitter, { - sendCommand: (method: string) => - new Promise((resolve) => { + sendCommand: ( + method: string, + params?: { id?: number; enabled?: boolean }, + sessionId?: string, + ) => + new Promise((resolve, reject) => { + if (options.refuse?.(method, sessionId)) { + reject(new Error("Refused")); + return; + } if (method === "Target.getTargetInfo") { resolve({ targetInfo: { targetId: "GUEST" } }); return; } + if (method === "Emulation.setFocusEmulationEnabled") { + focusEmulation.push(params?.enabled === true); + if (options.deferFocus) focusChanges.push(() => resolve({})); + else resolve({}); + return; + } + sent.push(params?.id); pending.push(() => resolve({ method })); + sendWaiters.shift()?.(); }), }); - const webContents = { + const webContents = Object.assign(new NodeEvents.EventEmitter(), { getURL: () => "http://localhost/", getTitle: () => "Page", getUserAgent: () => "Electron", - }; + }); return { tab: { webContents: webContents as unknown as Electron.WebContents, debugger: debuggee as unknown as Electron.Debugger, }, emit: (method: string, params: unknown) => emitter.emit("message", {}, method, params, ""), + navigate: () => webContents.emit("did-navigate"), + /** Ids of the commands the debugger received, in order. */ + sent, + focusEmulation, + nextSend: () => new Promise((resolve) => sendWaiters.push(resolve)), release: () => pending.splice(0).forEach((resolve) => resolve()), + releaseFirst: () => pending.shift()?.(), + settleFocus: () => focusChanges.splice(0).forEach((resolve) => resolve()), }; }; +/** Commands wait behind a focus emulation change; it settles within a macrotask. */ +// oxlint-disable-next-line t3code/no-real-time-wait-in-tests -- a zero-delay macrotask boundary, not a wait for time +const settle = Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); + const takeEvents = (host: DesktopBrowserHost.DesktopBrowserHost["Service"], count: number) => host.events.pipe( Stream.take(count), @@ -53,6 +104,37 @@ const takeEvents = (host: DesktopBrowserHost.DesktopBrowserHost["Service"], coun Effect.map((lines) => lines.map((line) => decodeEvent(new TextDecoder().decode(line)))), ); +/** + * Ids of the replies the host sends, in order. A screenshot's reply leaves after its turn + * has passed on, so by then the next waiting screenshot, if any, has been sent. Subscribe + * before sending commands: a new subscriber releases the tab's relay. + */ +const watchReplies = (host: DesktopBrowserHost.DesktopBrowserHost["Service"]) => + Effect.gen(function* () { + const replies = yield* Queue.unbounded(); + yield* host.events.pipe( + Stream.map((line) => decodeEvent(new TextDecoder().decode(line))), + Stream.runForEach((event) => + event.type === "cdp" ? Queue.offer(replies, decodeCdpReply(event.message).id) : Effect.void, + ), + Effect.forkScoped, + ); + yield* Effect.yieldNow; + return replies; + }); + +/** Whether the client should paint the guest, each time that changes. */ +const watchPainting = (host: DesktopBrowserHost.DesktopBrowserHost["Service"]) => + Effect.gen(function* () { + const painting: Array = []; + yield* host.painting.pipe( + Stream.runForEach(({ active }) => Effect.sync(() => painting.push(active))), + Effect.forkScoped, + ); + yield* Effect.yieldNow; + return painting; + }); + describe("DesktopBrowserHost", () => { it.effect("refreshes billing through the saved environment profile while no tab is open", () => Effect.gen(function* () { @@ -124,6 +206,7 @@ describe("DesktopBrowserHost", () => { yield* command(1, "Page.captureScreenshot"); yield* host.handleCommandLine(encodeJson({ type: "release", ...key })); yield* command(2, "DOM.enable"); + yield* settle; debuggee.release(); const [, reply] = yield* Fiber.join(reader); @@ -132,6 +215,746 @@ describe("DesktopBrowserHost", () => { }).pipe(Effect.scoped), ); + it.effect("sends a page one screenshot at a time", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const replies = yield* watchReplies(host); + + yield* command(host, 1, "Page.captureScreenshot"); + yield* command(host, 2, "Page.captureScreenshot"); + yield* command(host, 3, "DOM.enable"); + yield* settle; + expect(debuggee.sent).toEqual([1, 3]); + + debuggee.releaseFirst(); + expect(yield* Queue.take(replies)).toBe(1); + expect(debuggee.sent).toEqual([1, 3, 2]); + }).pipe(Effect.scoped), + ); + + it.effect("stops waiting on a screenshot the page navigated away from", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const replies = yield* watchReplies(host); + + yield* command(host, 1, "Page.captureScreenshot"); + yield* command(host, 2, "Page.captureScreenshot"); + yield* command(host, 3, "Page.captureScreenshot"); + yield* settle; + debuggee.navigate(); + expect(debuggee.sent).toEqual([1, 2]); + + // The superseded screenshot answering late must not start a third beside the second. + debuggee.releaseFirst(); + expect(yield* Queue.take(replies)).toBe(1); + expect(debuggee.sent).toEqual([1, 2]); + + debuggee.releaseFirst(); + expect(yield* Queue.take(replies)).toBe(2); + expect(debuggee.sent).toEqual([1, 2, 3]); + }).pipe(Effect.scoped), + ); + + it.effect("drops screenshots a released relay left waiting", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + + yield* command(host, 1, "Page.captureScreenshot"); + yield* command(host, 2, "Page.captureScreenshot"); + yield* settle; + yield* host.handleCommandLine(encodeJson({ type: "release", ...key })); + yield* command(host, 3, "Page.captureScreenshot"); + expect(debuggee.sent).toEqual([1]); + + const sent = debuggee.nextSend(); + debuggee.release(); + yield* Effect.promise(() => sent); + expect(debuggee.sent).toEqual([1, 3]); + }), + ); + + it.effect("emulates focus while the server drives a guest, then lets a hidden one throttle", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + + yield* command(host, 1, "DOM.enable"); + yield* settle; + expect(debuggee.focusEmulation).toEqual([true]); + expect(debuggee.sent).toEqual([1]); + debuggee.release(); + yield* settle; + + yield* TestClock.adjust("4 seconds"); + yield* command(host, 2, "Input.dispatchMouseEvent"); + yield* settle; + debuggee.release(); + yield* settle; + yield* TestClock.adjust("4 seconds"); + expect(debuggee.focusEmulation).toEqual([true]); + + yield* TestClock.adjust("10 seconds"); + expect(debuggee.focusEmulation).toEqual([true, false]); + + yield* command(host, 3, "Page.captureScreenshot"); + yield* settle; + expect(debuggee.focusEmulation).toEqual([true, false, true]); + expect(debuggee.sent).toEqual([1, 2, 3]); + }), + ); + + it.effect("keeps a guest focused while a command it is running is still pending", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const replies = yield* watchReplies(host); + + // An evaluation awaiting the page's next frame, which a throttled guest never paints. + yield* command(host, 1, "Runtime.evaluate"); + yield* settle; + expect(debuggee.sent).toEqual([1]); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true]); + + debuggee.release(); + expect(yield* Queue.take(replies)).toBe(1); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + }).pipe(Effect.scoped), + ); + + it.effect("lets a guest throttle once Chromium can no longer answer its pending command", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + + yield* command(host, 1, "Runtime.evaluate"); + yield* settle; + yield* host.handleCommandLine(encodeJson({ type: "release", ...key })); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + + // A command the old document never answers. + yield* command(host, 2, "Page.captureScreenshot"); + yield* settle; + expect(debuggee.sent).toEqual([1, 2]); + debuggee.navigate(); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false, true, false]); + }), + ); + + it.effect("keeps a guest focused for the screenshot a navigation lets start", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + + yield* command(host, 1, "Page.captureScreenshot"); + yield* command(host, 2, "Page.captureScreenshot"); + yield* settle; + debuggee.navigate(); + expect(debuggee.sent).toEqual([1, 2]); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true]); + }), + ); + + it.effect("never sends a screenshot a navigation superseded while focus was changing", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee({ deferFocus: true }); + host.attach(key, debuggee.tab); + + yield* command(host, 1, "Page.captureScreenshot"); + yield* command(host, 2, "Page.captureScreenshot"); + yield* settle; + debuggee.navigate(); + debuggee.settleFocus(); + yield* settle; + // Two captures in flight would undo the one-at-a-time guard. + expect(debuggee.sent).toEqual([2]); + }), + ); + + it.effect("keeps a guest focused when its turn starts after the agent's first command", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const turn = (active: boolean) => + host.handleCommandLine(encodeJson({ type: "turn", threadId: key.threadId, active })); + + yield* command(host, 1, "Input.dispatchKeyEvent"); + yield* settle; + yield* turn(true); + debuggee.release(); + yield* settle; + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true]); + + yield* turn(false); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + }), + ); + + it.effect("lets a guest throttle through a turn that only sent it housekeeping", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + yield* host.handleCommandLine( + encodeJson({ type: "turn", threadId: key.threadId, active: true }), + ); + + // Playwright re-enabling a domain after a reload is not the agent using the tab. + yield* command(host, 1, "Runtime.enable"); + yield* settle; + debuggee.release(); + yield* settle; + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + + yield* command(host, 2, "Runtime.evaluate"); + yield* settle; + debuggee.release(); + yield* settle; + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false, true]); + }), + ); + + it.effect("keeps a guest the agent used focused through its turn's pauses", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const turn = (active: boolean) => + host.handleCommandLine(encodeJson({ type: "turn", threadId: key.threadId, active })); + + yield* turn(true); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([]); + + yield* command(host, 1, "Input.dispatchKeyEvent"); + yield* settle; + debuggee.release(); + yield* settle; + // The model thinks between steps; a focus-sensitive menu must not blur meanwhile. + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true]); + + yield* turn(false); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + }), + ); + + it.effect( + "ends a command's hold with the turn that sent it, even if Chromium never answers", + () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + yield* host.handleCommandLine( + encodeJson({ type: "turn", threadId: key.threadId, active: true }), + ); + + // A screenshot of a hidden guest the server already gave up on. + yield* command(host, 1, "Page.captureScreenshot"); + yield* settle; + expect(debuggee.sent).toEqual([1]); + yield* host.handleCommandLine( + encodeJson({ type: "turn", threadId: key.threadId, active: false }), + ); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + }), + ); + + it.effect("ends the agent's own session's holds with its turn, but not a viewer's stream", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const replies = yield* watchReplies(host); + const raw = (message: Record) => + host.handleCommandLine(encodeJson({ type: "cdp", ...key, message: encodeJson(message) })); + const turn = (active: boolean) => + host.handleCommandLine(encodeJson({ type: "turn", threadId: key.threadId, active })); + + // The server's own CDP session, evaluating a promise that never settles. + yield* turn(true); + yield* raw({ id: 1, method: "Target.attachToTarget", params: { targetId: "GUEST" } }); + expect(yield* Queue.take(replies)).toBe(1); + yield* raw({ id: 2, method: "Runtime.evaluate", sessionId: "t3-preview-page-1" }); + yield* settle; + yield* turn(false); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + + // A viewer streaming the guest keeps it focused through a turn's end. + yield* turn(true); + yield* raw({ id: 3, method: "Target.attachToTarget", params: { targetId: "GUEST" } }); + expect(yield* Queue.take(replies)).toBe(3); + yield* raw({ id: 4, method: "Page.startScreencast", sessionId: "t3-preview-page-2" }); + yield* settle; + yield* turn(false); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false, true]); + }).pipe(Effect.scoped), + ); + + it.effect("paints for a screenshot queued behind one its viewer abandoned mid-capture", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const replies = yield* watchReplies(host); + const painting = yield* watchPainting(host); + const raw = (message: Record) => + host.handleCommandLine(encodeJson({ type: "cdp", ...key, message: encodeJson(message) })); + + yield* raw({ id: 1, method: "Target.attachToTarget", params: { targetId: "GUEST" } }); + expect(yield* Queue.take(replies)).toBe(1); + yield* raw({ id: 2, method: "Page.captureScreenshot", sessionId: "t3-preview-page-1" }); + yield* settle; + yield* raw({ + id: 3, + method: "Target.detachFromTarget", + params: { sessionId: "t3-preview-page-1" }, + }); + expect(yield* Queue.take(replies)).toBe(3); + expect(painting).toEqual([true, false]); + + // The agent's screenshot waits its turn; painting lets the abandoned one finish first. + yield* command(host, 4, "Page.captureScreenshot"); + yield* settle; + expect(painting).toEqual([true, false, true]); + debuggee.release(); + expect(yield* Queue.take(replies)).toBe(2); + yield* settle; + expect(debuggee.sent).toEqual([undefined, 4]); + debuggee.release(); + expect(yield* Queue.take(replies)).toBe(4); + yield* settle; + expect(painting).toEqual([true, false, true, false]); + }).pipe(Effect.scoped), + ); + + it.effect("stops painting for a queued screenshot once its session detaches", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const replies = yield* watchReplies(host); + const painting = yield* watchPainting(host); + const raw = (message: Record) => + host.handleCommandLine(encodeJson({ type: "cdp", ...key, message: encodeJson(message) })); + const turn = (active: boolean) => + host.handleCommandLine(encodeJson({ type: "turn", threadId: key.threadId, active })); + + // The agent's screenshot is abandoned at turn end; a viewer's waits behind it, then leaves. + yield* turn(true); + yield* command(host, 1, "Page.captureScreenshot"); + yield* settle; + yield* turn(false); + yield* raw({ id: 2, method: "Target.attachToTarget", params: { targetId: "GUEST" } }); + expect(yield* Queue.take(replies)).toBe(2); + yield* raw({ id: 3, method: "Page.captureScreenshot", sessionId: "t3-preview-page-1" }); + yield* settle; + expect(painting).toEqual([true, false, true]); + yield* raw({ + id: 4, + method: "Target.detachFromTarget", + params: { sessionId: "t3-preview-page-1" }, + }); + expect(yield* Queue.take(replies)).toBe(4); + expect(painting).toEqual([true, false, true, false]); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + }).pipe(Effect.scoped), + ); + + it.effect("never sends a screenshot whose session detached while focus was changing", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee({ deferFocus: true }); + host.attach(key, debuggee.tab); + const replies = yield* watchReplies(host); + const raw = (message: Record) => + host.handleCommandLine(encodeJson({ type: "cdp", ...key, message: encodeJson(message) })); + + yield* raw({ id: 1, method: "Target.attachToTarget", params: { targetId: "GUEST" } }); + expect(yield* Queue.take(replies)).toBe(1); + yield* raw({ id: 2, method: "Page.captureScreenshot", sessionId: "t3-preview-page-1" }); + yield* raw({ + id: 3, + method: "Target.detachFromTarget", + params: { sessionId: "t3-preview-page-1" }, + }); + expect(yield* Queue.take(replies)).toBe(3); + debuggee.settleFocus(); + yield* settle; + expect(debuggee.sent).toEqual([]); + }).pipe(Effect.scoped), + ); + + it.effect("stops painting for a screenshot still queued when the agent's turn ends", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const painting = yield* watchPainting(host); + const turn = (active: boolean) => + host.handleCommandLine(encodeJson({ type: "turn", threadId: key.threadId, active })); + + yield* turn(true); + yield* command(host, 1, "Page.captureScreenshot"); + yield* command(host, 2, "Page.captureScreenshot"); + yield* settle; + yield* turn(false); + yield* settle; + expect(painting).toEqual([true, false]); + + // The first answers late; the second still goes in turn, but holds nothing. + debuggee.releaseFirst(); + yield* settle; + expect(debuggee.sent).toEqual([1, 2]); + expect(painting).toEqual([true, false]); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + }).pipe(Effect.scoped), + ); + + it.effect("lets a guest throttle when Chromium refuses a viewer's screencast", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee({ refuse: (method) => method === "Page.startScreencast" }); + host.attach(key, debuggee.tab); + const replies = yield* watchReplies(host); + const painting = yield* watchPainting(host); + const raw = (message: Record) => + host.handleCommandLine(encodeJson({ type: "cdp", ...key, message: encodeJson(message) })); + + yield* raw({ id: 1, method: "Target.attachToTarget", params: { targetId: "GUEST" } }); + expect(yield* Queue.take(replies)).toBe(1); + yield* raw({ id: 2, method: "Page.startScreencast", sessionId: "t3-preview-page-1" }); + expect(yield* Queue.take(replies)).toBe(2); + yield* settle; + expect(painting).toEqual([true, false]); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + }).pipe(Effect.scoped), + ); + + it.effect("lets a guest throttle after a person's input through a viewer that then closed", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const replies = yield* watchReplies(host); + const raw = (message: Record) => + host.handleCommandLine(encodeJson({ type: "cdp", ...key, message: encodeJson(message) })); + + yield* host.handleCommandLine( + encodeJson({ type: "turn", threadId: key.threadId, active: true }), + ); + yield* raw({ id: 1, method: "Target.attachToTarget", params: { targetId: "GUEST" } }); + expect(yield* Queue.take(replies)).toBe(1); + yield* raw({ id: 2, method: "Page.startScreencast", sessionId: "t3-preview-page-1" }); + yield* raw({ id: 3, method: "Input.dispatchMouseEvent", sessionId: "t3-preview-page-1" }); + yield* settle; + debuggee.release(); + yield* raw({ + id: 4, + method: "Target.detachFromTarget", + params: { sessionId: "t3-preview-page-1" }, + }); + yield* settle; + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + }).pipe(Effect.scoped), + ); + + it.effect("keeps a page's screencast when a child session's screencast is refused", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee({ + refuse: (method, sessionId) => method === "Page.startScreencast" && sessionId !== undefined, + }); + host.attach(key, debuggee.tab); + const replies = yield* watchReplies(host); + const raw = (message: Record) => + host.handleCommandLine(encodeJson({ type: "cdp", ...key, message: encodeJson(message) })); + + yield* command(host, 1, "Page.startScreencast"); + yield* settle; + debuggee.release(); + expect(yield* Queue.take(replies)).toBe(1); + yield* raw({ id: 2, method: "Page.startScreencast", sessionId: "child-frame" }); + expect(yield* Queue.take(replies)).toBe(2); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true]); + }).pipe(Effect.scoped), + ); + + it.effect("ignores a screencast that arrives on a session after it detached", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const replies = yield* watchReplies(host); + const raw = (message: Record) => + host.handleCommandLine(encodeJson({ type: "cdp", ...key, message: encodeJson(message) })); + + yield* raw({ id: 1, method: "Target.attachToTarget", params: { targetId: "GUEST" } }); + expect(yield* Queue.take(replies)).toBe(1); + yield* raw({ + id: 2, + method: "Target.detachFromTarget", + params: { sessionId: "t3-preview-page-1" }, + }); + expect(yield* Queue.take(replies)).toBe(2); + yield* raw({ id: 3, method: "Page.startScreencast", sessionId: "t3-preview-page-1" }); + yield* settle; + debuggee.release(); + yield* settle; + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + }).pipe(Effect.scoped), + ); + + it.effect("lets a guest throttle once the session waiting on its command detaches", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const replies = yield* watchReplies(host); + const raw = (message: Record) => + host.handleCommandLine(encodeJson({ type: "cdp", ...key, message: encodeJson(message) })); + + // A viewer's own CDP session, closed while its still of a hidden guest is pending. + yield* raw({ id: 1, method: "Target.attachToTarget", params: { targetId: "GUEST" } }); + expect(yield* Queue.take(replies)).toBe(1); + yield* raw({ id: 2, method: "Page.captureScreenshot", sessionId: "t3-preview-page-1" }); + yield* settle; + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true]); + + yield* raw({ + id: 3, + method: "Target.detachFromTarget", + params: { sessionId: "t3-preview-page-1" }, + }); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + }).pipe(Effect.scoped), + ); + + it.effect("never sends a screenshot queued by a session that has since detached", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const replies = yield* watchReplies(host); + const raw = (message: Record) => + host.handleCommandLine(encodeJson({ type: "cdp", ...key, message: encodeJson(message) })); + + yield* raw({ id: 1, method: "Target.attachToTarget", params: { targetId: "GUEST" } }); + expect(yield* Queue.take(replies)).toBe(1); + yield* command(host, 2, "Page.captureScreenshot"); + yield* raw({ id: 3, method: "Page.captureScreenshot", sessionId: "t3-preview-page-1" }); + yield* raw({ + id: 4, + method: "Target.detachFromTarget", + params: { sessionId: "t3-preview-page-1" }, + }); + yield* settle; + debuggee.release(); + expect(yield* Queue.take(replies)).toBe(4); + // The dropped screenshot's error reply leaves as the first frees its turn. + expect([yield* Queue.take(replies), yield* Queue.take(replies)]).toEqual([3, 2]); + yield* settle; + expect(debuggee.sent).toEqual([2]); + + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + }).pipe(Effect.scoped), + ); + + it.effect("keeps a streamed guest focused until its screencast ends", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + + yield* command(host, 1, "Page.startScreencast"); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true]); + + yield* command(host, 2, "Page.stopScreencast"); + yield* settle; + debuggee.release(); + yield* settle; + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + + // A viewer whose connection went away without stopping its screencast. + yield* command(host, 3, "Page.startScreencast"); + yield* settle; + debuggee.release(); + yield* settle; + yield* TestClock.adjust("1 minute"); + yield* host.handleCommandLine(encodeJson({ type: "release", ...key })); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false, true, false]); + }), + ); + + it.effect("keeps a guest focused while any of its screencasts runs", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const replies = yield* watchReplies(host); + const raw = (message: Record) => + host.handleCommandLine(encodeJson({ type: "cdp", ...key, message: encodeJson(message) })); + + // Two viewers, or a viewer and a recording, each on its own session. + yield* raw({ id: 1, method: "Target.attachToTarget", params: { targetId: "GUEST" } }); + yield* raw({ id: 2, method: "Target.attachToTarget", params: { targetId: "GUEST" } }); + expect([yield* Queue.take(replies), yield* Queue.take(replies)]).toEqual([1, 2]); + yield* raw({ id: 3, method: "Page.startScreencast", sessionId: "t3-preview-page-1" }); + yield* raw({ id: 4, method: "Page.startScreencast", sessionId: "t3-preview-page-2" }); + yield* raw({ id: 5, method: "Page.stopScreencast", sessionId: "t3-preview-page-1" }); + yield* settle; + debuggee.release(); + yield* settle; + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true]); + + yield* raw({ + id: 6, + method: "Target.detachFromTarget", + params: { sessionId: "t3-preview-page-2" }, + }); + yield* TestClock.adjust("1 minute"); + expect(debuggee.focusEmulation).toEqual([true, false]); + }).pipe(Effect.scoped), + ); + + it.effect("paints a hidden guest only while the screenshot it is taking is pending", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const painting = yield* watchPainting(host); + + yield* command(host, 1, "DOM.enable"); + yield* settle; + expect(painting).toEqual([]); + + yield* command(host, 2, "Page.captureScreenshot"); + yield* command(host, 3, "Page.captureScreenshot"); + yield* settle; + expect(painting).toEqual([true]); + + // The first answers once the guest paints; the queued one then takes its turn. + debuggee.release(); + yield* settle; + expect(debuggee.sent).toEqual([1, 2, 3]); + debuggee.release(); + yield* settle; + expect(painting).toEqual([true, false]); + }).pipe(Effect.scoped), + ); + + it.effect("stops painting for a screenshot Chromium never answers", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const painting = yield* watchPainting(host); + const turn = (active: boolean) => + host.handleCommandLine(encodeJson({ type: "turn", threadId: key.threadId, active })); + + // The server gave up on it, and the agent's turn ends. + yield* turn(true); + yield* command(host, 1, "Page.captureScreenshot"); + yield* settle; + yield* turn(false); + yield* settle; + expect(painting).toEqual([true, false]); + + // The page loads a new document, which also frees the screenshot turn. + debuggee.navigate(); + yield* command(host, 2, "Page.captureScreenshot"); + yield* settle; + debuggee.navigate(); + yield* settle; + expect(painting).toEqual([true, false, true, false]); + + // The server releases the relay. + yield* command(host, 3, "Page.captureScreenshot"); + yield* settle; + yield* host.handleCommandLine(encodeJson({ type: "release", ...key })); + yield* settle; + expect(painting).toEqual([true, false, true, false, true, false]); + + // The guest detaches; a replacement starts with no screenshot pending. + const replacement = makeDebuggee(); + host.attach(key, replacement.tab); + yield* command(host, 4, "Page.captureScreenshot"); + yield* settle; + host.detach(key); + yield* settle; + expect(painting).toEqual([true, false, true, false, true, false, true, false]); + }).pipe(Effect.scoped), + ); + + it.effect("paints a streamed guest until its last screencast ends", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const debuggee = makeDebuggee(); + host.attach(key, debuggee.tab); + const replies = yield* watchReplies(host); + const painting = yield* watchPainting(host); + const raw = (message: Record) => + host.handleCommandLine(encodeJson({ type: "cdp", ...key, message: encodeJson(message) })); + + yield* raw({ id: 1, method: "Target.attachToTarget", params: { targetId: "GUEST" } }); + yield* raw({ id: 2, method: "Target.attachToTarget", params: { targetId: "GUEST" } }); + expect([yield* Queue.take(replies), yield* Queue.take(replies)]).toEqual([1, 2]); + yield* raw({ id: 3, method: "Page.startScreencast", sessionId: "t3-preview-page-1" }); + yield* raw({ id: 4, method: "Page.startScreencast", sessionId: "t3-preview-page-2" }); + yield* raw({ id: 5, method: "Page.stopScreencast", sessionId: "t3-preview-page-1" }); + yield* settle; + debuggee.release(); + yield* settle; + expect(painting).toEqual([true]); + + yield* raw({ + id: 6, + method: "Target.detachFromTarget", + params: { sessionId: "t3-preview-page-2" }, + }); + yield* settle; + expect(painting).toEqual([true, false]); + }).pipe(Effect.scoped), + ); + it.effect("saves a server tab's download under its CDP guid where the server asked", () => Effect.gen(function* () { const host = yield* DesktopBrowserHost.make; @@ -188,4 +1011,75 @@ describe("DesktopBrowserHost", () => { expect(host.humanStartedDownload(debuggee.tab.webContents)).toBe(false); }), ); + + it.effect("detaches only the tab whose CDP event is too large to relay", () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.make; + const tabs = [makeDebuggee({ deferFocus: true }), makeDebuggee()]; + const send = vi.spyOn(tabs[0]!.tab.debugger, "sendCommand"); + const keys = [key, { threadId: "thread-2", tabId: "tab-2" }]; + const events = yield* Queue.unbounded(); + yield* host.events.pipe( + Stream.runForEach((line) => + Queue.offer(events, decodeEvent(new TextDecoder().decode(line))), + ), + Effect.forkScoped, + ); + for (const [index, tabKey] of keys.entries()) { + host.attach(tabKey, tabs[index]!.tab); + expect(yield* Queue.take(events)).toEqual({ type: "attached", ...tabKey }); + yield* host.handleCommandLine( + encodeJson({ + type: "cdp", + ...tabKey, + message: encodeJson({ id: 1, method: "Target.setAutoAttach" }), + }), + ); + // The command's reply and the page announcement. + yield* Queue.takeN(events, 2); + } + + yield* host.handleCommandLine( + encodeJson({ + type: "cdp", + ...key, + message: encodeJson({ + id: 2, + method: "Target.setAutoAttach", + params: { autoAttach: true, waitForDebuggerOnStart: true, flatten: true }, + sessionId: "t3-preview-page", + }), + }), + ); + yield* command(host, 3, "Page.startScreencast"); + tabs[0]!.emit("Runtime.consoleAPICalled", { + args: Array(2048).fill("x".repeat(40 * 1024)), + }); + tabs[1]!.emit("Page.loadEventFired", { timestamp: 1 }); + const [detached, next] = yield* Queue.takeN(events, 2); + + expect(detached?.type).toBe("detached"); + if (detached?.type !== "detached") throw new Error("Expected a detached browser event"); + const { type, threadId, tabId } = detached; + expect({ type, threadId, tabId }).toEqual({ type: "detached", ...key }); + expect(send).toHaveBeenCalledWith("Target.setAutoAttach", { + autoAttach: false, + waitForDebuggerOnStart: false, + flatten: true, + }); + tabs[0]!.settleFocus(); + yield* settle; + expect(send).not.toHaveBeenCalledWith("Target.setAutoAttach", { + autoAttach: true, + waitForDebuggerOnStart: true, + flatten: true, + }); + expect(send).toHaveBeenCalledWith("Page.stopScreencast"); + expect(tabs[0]!.focusEmulation).toEqual([true, false]); + expect(next).toMatchObject({ type: "cdp", ...keys[1] }); + expect(JSON.parse((next as { message: string }).message)).toMatchObject({ + method: "Page.loadEventFired", + }); + }).pipe(Effect.scoped), + ); }); diff --git a/apps/desktop/src/preview/DesktopBrowserHost.ts b/apps/desktop/src/preview/DesktopBrowserHost.ts index f69d29ffba596..9d79a962e8625 100644 --- a/apps/desktop/src/preview/DesktopBrowserHost.ts +++ b/apps/desktop/src/preview/DesktopBrowserHost.ts @@ -1,8 +1,5 @@ // @effect-diagnostics nodeBuiltinImport:off - Names download files on the shared disk. -/** - * The preview manager owns the tab's single debugger session and hands it here; - * the relay shares it. - */ +/** The manager owns the single debugger attachment; the relay shares it. */ import { DesktopBrowserCommand, DesktopBrowserEvent, @@ -30,7 +27,10 @@ const isBillingReadError = Schema.is(ClaudeConsoleBillingReadError); const lineEncoder = new TextEncoder(); const AGENT_INPUT_COMMAND = /"method":"(?:Input\.|Page\.navigate"|Runtime\.(?:evaluate|callFunctionOn)")/; +/** The same commands as above, by method, for the relay's sends. */ +const AGENT_INPUT_METHOD = /^(?:Input\.|Page\.navigate$|Runtime\.(?:evaluate|callFunctionOn)$)/; const AGENT_DOWNLOAD_WINDOW_MS = 5_000; +const FOCUS_IDLE = "5 seconds"; export interface DesktopBrowserTabKey { readonly threadId: string; @@ -48,15 +48,41 @@ interface AttachedTab { readonly key: DesktopBrowserTabKey; readonly debuggee: DesktopBrowserTabDebugger; relay: CdpRelayConnection | null; + screenshotTurn: object | null; + /** Each holds focus and painting while `held` and whoever queued it still waits on it. */ + readonly waitingScreenshots: Array<{ + readonly start: () => void; + readonly live: () => boolean; + held: boolean; + }>; downloadDirectory: string | null; pendingDownloadGuid: string | null; agentInputAt: number; + focusEmulated: boolean; + focusChange: Promise | null; + focusUses: number; + /** Each pending command, by the extra session waiting on it; the main connection's have none. */ + readonly focusPending: Map< + object, + { readonly owner: string | undefined; readonly paints: boolean } + >; + /** Whether the client keeps the guest painting, as published on `painting`. */ + painting: boolean; + /** + * Driven by the agent since its thread's last turn ended or the guest last throttled. A + * turn's start can reach us after its first command, so this holds focus once it does. + */ + agentUsed: boolean; + focusReleasing: boolean; + /** The sessions streaming the guest; one stopping leaves the others' screencasts running. */ + readonly screencasts: Set; readonly onMessage: ( event: Electron.Event, method: string, params: unknown, sessionId: string, ) => void; + readonly onNewDocument: () => void; } export class DesktopBrowserHost extends Context.Service< @@ -74,6 +100,11 @@ export class DesktopBrowserHost extends Context.Service< readonly x: number; readonly y: number; }>; + /** Whether a guest needs its frames painted while the panel hides it. */ + readonly painting: Stream.Stream<{ + readonly key: DesktopBrowserTabKey; + readonly active: boolean; + }>; } >()("@t3tools/desktop/preview/DesktopBrowserHost") {} @@ -86,19 +117,251 @@ export const make = Effect.gen(function* () { readonly x: number; readonly y: number; }>(16); + const painting = yield* PubSub.unbounded<{ + readonly key: DesktopBrowserTabKey; + readonly active: boolean; + }>(); const runFork = Effect.runForkWith(yield* Effect.context()); const tabs = new Map(); + /** Threads whose agent turn runs, by the server's account. */ + const agentTurns = new Set(); const emit = (event: DesktopBrowserEventType) => runFork(PubSub.publish(outbox, event)); + const nextScreenshot = (tab: AttachedTab) => { + tab.screenshotTurn = null; + tab.waitingScreenshots.shift()?.start(); + releaseFocusWhenIdle(tab); + syncPainting(tab); + }; + + /** + * Chromium below 157 crashes the whole app when a guest's renderer exits with a + * screenshot copy in flight (crbug.com/567321049). Overlapping screenshots make that + * far likelier, and one the server gave up on stays pending in Chromium, so each guest + * gets one at a time. One whose relay or session has since gone is dropped unsent. + */ + const takeScreenshot = ( + tab: AttachedTab, + relay: CdpRelayConnection, + ownerLive: () => boolean, + /** Sends only while `current` holds; holds focus and painting only while `held`. */ + capture: (current: () => boolean, held: boolean) => Promise, + ) => + new Promise((resolve, reject) => { + const live = () => tab.relay === relay && ownerLive(); + const waiting = { + start: () => { + if (!live()) { + reject(new Error("The preview connection that asked for this screenshot closed.")); + nextScreenshot(tab); + return; + } + const turn = {}; + tab.screenshotTurn = turn; + capture(() => tab.screenshotTurn === turn && live(), waiting.held) + .finally(() => { + if (tab.screenshotTurn === turn) nextScreenshot(tab); + }) + .then(resolve, reject); + }, + live, + held: true, + }; + if (tab.screenshotTurn === null) waiting.start(); + else { + // The one ahead may be abandoned mid-capture; it needs frames to finish and free its turn. + tab.waitingScreenshots.push(waiting); + setFocusEmulation(tab, true); + syncPainting(tab); + } + }); + + /** + * Chromium counts a focus-emulated guest as captured, so a guest the panel hides would + * never throttle. Without it, a hidden guest paints no frames and focus() fires no focus + * events, so the guest is emulated focused while the server drives it or streams it. + */ + const setFocusEmulation = (tab: AttachedTab, enabled: boolean) => { + if (tab.focusEmulated === enabled) return; + tab.focusEmulated = enabled; + // A guest that refuses it, or a debugger already gone, behaves as unfocused. + const change: Promise = tab.debuggee.debugger + .sendCommand("Emulation.setFocusEmulationEnabled", { enabled }) + .then( + () => undefined, + () => undefined, + ) + .finally(() => { + if (tab.focusChange === change) tab.focusChange = null; + }); + tab.focusChange = change; + }; + + const waitingHolds = (tab: AttachedTab) => + tab.waitingScreenshots.some((waiting) => waiting.held && waiting.live()); + + const releaseFocusWhenIdle = (tab: AttachedTab) => { + if (tab.focusReleasing) return; + tab.focusReleasing = true; + runFork( + Effect.gen(function* () { + let uses: number; + do { + uses = tab.focusUses; + yield* Effect.sleep(FOCUS_IDLE); + } while (uses !== tab.focusUses); + tab.focusReleasing = false; + // The last pending command to settle starts another idle wait. + if (tab.focusPending.size > 0 || tab.screencasts.size > 0 || waitingHolds(tab)) { + return; + } + // The agent pauses to think between steps; its tab stays focused until the turn ends. + if (tab.agentUsed && agentTurns.has(tab.key.threadId)) return; + tab.agentUsed = false; + if (tabs.get(keyOf(tab.key)) === tab) setFocusEmulation(tab, false); + }), + ); + }; + + /** + * Electron composites no offscreen guest, so its screenshot or screencast waits for a frame + * that never comes. The client paints the guest behind the app while one is pending; the + * capture then finishes on its own, and the guest goes back offscreen once none is. + */ + const syncPainting = (tab: AttachedTab) => { + const active = + tabs.get(keyOf(tab.key)) === tab && + (tab.screencasts.size > 0 || + waitingHolds(tab) || + [...tab.focusPending.values()].some((hold) => hold.paints)); + if (tab.painting === active) return; + tab.painting = active; + runFork(PubSub.publish(painting, { key: tab.key, active })); + }; + + /** A command may wait on the page's next frame, so the guest stays focused until it settles. */ + const holdFocus = ( + tab: AttachedTab, + method: string, + owner: string | undefined, + work: () => Promise, + ) => { + const pending = {}; + tab.focusPending.set(pending, { owner, paints: method === "Page.captureScreenshot" }); + tab.focusUses += 1; + setFocusEmulation(tab, true); + releaseFocusWhenIdle(tab); + syncPainting(tab); + return work().finally(() => { + if (!tab.focusPending.delete(pending)) return; + tab.focusUses += 1; + releaseFocusWhenIdle(tab); + syncPainting(tab); + }); + }; + + /** + * Chromium can leave a command unanswered, so the screenshot guard's release points + * also end every hold: a released relay has no one waiting, and a new document answers + * nothing pending from the old one. A released relay's screencast has no viewer to stop it. + */ + const dropFocusHolds = (tab: AttachedTab) => { + tab.focusPending.clear(); + releaseFocusWhenIdle(tab); + syncPainting(tab); + }; + + const dropRelay = (tab: AttachedTab) => { + tab.relay = null; + tab.screencasts.clear(); + tab.agentUsed = false; + dropFocusHolds(tab); + }; + + /** A detached session, such as a closed viewer, waits on nothing it sent. */ + const dropSessionHolds = (tab: AttachedTab, owner: string) => { + tab.screencasts.delete(owner); + for (const [pending, hold] of tab.focusPending) { + if (hold.owner === owner) tab.focusPending.delete(pending); + } + releaseFocusWhenIdle(tab); + syncPainting(tab); + }; + + /** + * A command the server stopped waiting on, such as a timed-out screenshot or evaluation, + * may never settle; the turn's end ends every hold. The agent also sends on its own extra + * session, so this cannot spare other sessions; a viewer's screencast still holds. + */ + const endAgentTurn = (threadId: string) => { + agentTurns.delete(threadId); + for (const tab of tabs.values()) { + if (tab.key.threadId !== threadId) continue; + tab.agentUsed = false; + // Still sent in turn, so the queue keeps moving, but no longer kept painting. + for (const waiting of tab.waitingScreenshots) waiting.held = false; + dropFocusHolds(tab); + } + }; + const relayFor = (tab: AttachedTab) => { if (tab.relay) return tab.relay; const { webContents, debugger: debuggee } = tab.debuggee; + const send = (method: string, params: Record, sessionId?: string) => + sessionId === undefined + ? sendPageCommand(webContents, debuggee, method, params) + : debuggee.sendCommand(method, params, sessionId); + const detachedOwners = new Set(); + /** Viewers and recordings stream; the agent's own sessions never do. */ + const streamingOwners = new Set(); const relay: CdpRelayConnection = createCdpRelayConnection( { - send: (method, params, sessionId) => - sessionId === undefined - ? sendPageCommand(webContents, debuggee, method, params) - : debuggee.sendCommand(method, params, sessionId), + send: (method, params, sessionId, owner) => { + // A child session's screencast is not the page's, such as a late one on a detached session. + if (sessionId === undefined && method === "Page.startScreencast") { + tab.screencasts.add(owner); + if (owner !== undefined) streamingOwners.add(owner); + } else if (sessionId === undefined && method === "Page.stopScreencast") { + tab.screencasts.delete(owner); + } + // A person's input through a viewer, or Playwright's own housekeeping, is not the agent's. + if ( + AGENT_INPUT_METHOD.test(method) && + (owner === undefined || !streamingOwners.has(owner)) + ) { + tab.agentUsed = true; + } + // Waits for focus emulation; insertText and other non-CDP input would not queue behind it. + const forward = (current?: () => boolean) => { + const change = tab.focusChange; + const run = () => + tab.relay === relay && (current === undefined || current()) + ? send(method, params, sessionId) + : Promise.reject(new Error("The page this screenshot was for has moved on.")); + return change === null ? run() : change.then(run); + }; + return method === "Page.captureScreenshot" + ? takeScreenshot( + tab, + relay, + () => owner === undefined || !detachedOwners.has(owner), + (current, held) => + held ? holdFocus(tab, method, owner, () => forward(current)) : forward(current), + ) + : method === "Page.startScreencast" + ? holdFocus(tab, method, owner, forward).catch((cause: unknown) => { + // A viewer can outlive a refused stream; nothing is streaming for it. + if (sessionId === undefined && tab.relay === relay) tab.screencasts.delete(owner); + releaseFocusWhenIdle(tab); + syncPainting(tab); + throw cause; + }) + : holdFocus(tab, method, owner, forward); + }, + sessionDetached: (owner) => { + detachedOwners.add(owner); + dropSessionHolds(tab, owner); + }, targetId: () => debuggee .sendCommand("Target.getTargetInfo") @@ -115,15 +378,30 @@ export const make = Effect.gen(function* () { emit({ type: "cdp", ...tab.key, message }); } }, + // Announcing the tab again would reconnect Playwright, and the page could + // replay the same oversized event, so the tab stays detached. + () => { + if (tab.relay !== relay || tabs.get(keyOf(tab.key)) !== tab) return; + // Disabling auto-attach detaches child sessions and releases their debugger pauses. + void debuggee + .sendCommand("Target.setAutoAttach", { + autoAttach: false, + waitForDebuggerOnStart: false, + flatten: true, + }) + .catch(() => {}); + if (tab.screencasts.size > 0) { + void debuggee.sendCommand("Page.stopScreencast").catch(() => {}); + } + setFocusEmulation(tab, false); + detach(tab.key); + }, ); tab.relay = relay; return relay; }; - /** - * Without a path Electron would open its Save dialog over the app for a file - * the agent asked for. CDP names the download just before this runs. - */ + // CDP supplies the path before this runs; otherwise Electron opens a Save dialog. const placeDownload = (source: Electron.WebContents, item: Electron.DownloadItem) => { const tab = [...tabs.values()].find( (candidate) => candidate.debuggee.webContents === source && candidate.downloadDirectory, @@ -139,7 +417,10 @@ export const make = Effect.gen(function* () { const tab = tabs.get(id); if (!tab) return; tabs.delete(id); + tab.relay = null; tab.debuggee.debugger.off("message", tab.onMessage); + tab.debuggee.webContents.off("did-navigate", tab.onNewDocument); + syncPainting(tab); emit({ type: "detached", ...key }); }; @@ -151,9 +432,19 @@ export const make = Effect.gen(function* () { key, debuggee, relay: null, + screenshotTurn: null, + waitingScreenshots: [], downloadDirectory: null, pendingDownloadGuid: null, agentInputAt: Number.NEGATIVE_INFINITY, + focusEmulated: false, + focusChange: null, + focusUses: 0, + focusPending: new Map(), + painting: false, + agentUsed: false, + focusReleasing: false, + screencasts: new Set(), onMessage: (_event, method, params, sessionId) => { if (method === "Browser.downloadWillBegin") { const guid = (params as { guid?: unknown } | undefined)?.guid; @@ -161,9 +452,17 @@ export const make = Effect.gen(function* () { } tab.relay?.event(method, params, sessionId); }, + // A screenshot pending when the page loads a new document, a reload included, can + // stay unanswered. A crashed page lands here once it reloads, well after its renderer died. + onNewDocument: () => { + // Before the next screenshot starts, so its own hold survives. + dropFocusHolds(tab); + if (tab.screenshotTurn !== null) nextScreenshot(tab); + }, }; tabs.set(id, tab); debuggee.debugger.on("message", tab.onMessage); + debuggee.webContents.on("did-navigate", tab.onNewDocument); emit({ type: "attached", ...key }); }; @@ -216,6 +515,11 @@ export const make = Effect.gen(function* () { ); return; } + if (command.value.type === "turn") { + if (command.value.active) agentTurns.add(command.value.threadId); + else endAgentTurn(command.value.threadId); + return; + } const tab = tabs.get(keyOf(command.value)); if (!tab) return; if (command.value.type === "pointer") { @@ -224,7 +528,7 @@ export const make = Effect.gen(function* () { return; } if (command.value.type === "release") { - tab.relay = null; + dropRelay(tab); return; } if (AGENT_INPUT_COMMAND.test(command.value.message)) tab.agentInputAt = performance.now(); @@ -236,19 +540,22 @@ export const make = Effect.gen(function* () { return tab !== undefined && performance.now() - tab.agentInputAt > AGENT_DOWNLOAD_WINDOW_MS; }; - const announceAll = Effect.suspend(() => - Effect.forEach( + const announceAll = Effect.suspend(() => { + // A new backend: the old one's turns ended without telling us. + agentTurns.clear(); + return Effect.forEach( [...tabs.values()], (tab) => { - tab.relay = null; + dropRelay(tab); return PubSub.publish(outbox, { type: "attached", ...tab.key }); }, { discard: true }, - ), - ); + ); + }); return DesktopBrowserHost.of({ pointers: Stream.fromPubSub(pointers), + painting: Stream.fromPubSub(painting), // Subscribes before announcing, so no attach falls between the two. events: Stream.unwrap( Effect.gen(function* () { diff --git a/apps/desktop/src/preview/FaviconCapture.ts b/apps/desktop/src/preview/FaviconCapture.ts index a2b36d182a8f3..4716645c9defa 100644 --- a/apps/desktop/src/preview/FaviconCapture.ts +++ b/apps/desktop/src/preview/FaviconCapture.ts @@ -669,8 +669,7 @@ async function rasterizeFavicon( ); if (signal.aborted) onAbort(); }); - // The logical timeout does not cancel Electron's renderer work. Keep the - // gate closed until that physical execution actually settles. + // Logical timeouts leave renderer work running; keep the gate closed until it settles. const launchAllowed = execution.then( () => undefined, () => undefined, diff --git a/apps/desktop/src/preview/GuestInput.test.ts b/apps/desktop/src/preview/GuestInput.test.ts index 6cb297ff81e90..b531182c92959 100644 --- a/apps/desktop/src/preview/GuestInput.test.ts +++ b/apps/desktop/src/preview/GuestInput.test.ts @@ -2,7 +2,6 @@ import { describe, expect, it, vi } from "vite-plus/test"; import { sendPageCommand, toKeyboardInputEvents } from "./GuestInput.ts"; -/** A guest whose page reports `focusedDocument` for the focus probe. */ const makeGuest = ({ focused, focusedDocument = true, diff --git a/apps/desktop/src/preview/GuestInput.ts b/apps/desktop/src/preview/GuestInput.ts index 35006dfcec08b..42201b48ed61c 100644 --- a/apps/desktop/src/preview/GuestInput.ts +++ b/apps/desktop/src/preview/GuestInput.ts @@ -1,26 +1,12 @@ -/** - * Keyboard and text input for a preview tab's page that never lands outside it. - * - * Chromium sends a page's CDP key and text input to whichever frame holds focus - * in the window. A `` guest shares that focus with the app around it, - * so while a person works in the app, `Input.insertText` on the guest's own - * debugger types into the app's focused field. Such input goes through CDP only - * while the guest holds focus. Otherwise it goes straight to the guest's own - * widget, which nothing redirects. - */ +// CDP input follows shared window focus; send directly to unfocused guests to avoid typing into the app. -/** CDP input Chromium delivers to the window's focused frame rather than the page's. */ const FOCUS_ROUTED_INPUT = new Set([ "Input.insertText", "Input.dispatchKeyEvent", "Input.imeSetComposition", ]); -/** - * Page script: the document holding the page's focus, or null when a cross-site - * frame holds it. Electron's direct input reaches only the main frame's process, - * and `insertText` crashes the page when focus is in another one. - */ +/** Direct input reaches only the main-frame process; insertText crashes when a cross-site frame has focus. */ const FOCUSED_DOCUMENT = `(() => { let doc = document; for (;;) { @@ -31,11 +17,7 @@ const FOCUSED_DOCUMENT = `(() => { } })()`; -/** - * macOS editing commands a key press asks for (Cmd+A is `selectAll`), which - * Chromium runs only for CDP keys. Clipboard commands stay out: they would read - * or replace the person's clipboard. - */ +/** Electron runs editing commands only for CDP keys; exclude clipboard commands to preserve the user's clipboard. */ const EDITING_COMMANDS = new Set(["selectAll", "undo", "redo"]); const CROSS_SITE_FOCUS_MESSAGE = @@ -74,18 +56,13 @@ const MODIFIER_BITS = [ [8, "shift"], ] as const; -/** Electron's accelerator name for a DOM key value, or null when it has none. */ const keyCodeFor = (key: string) => { if ([...key].length === 1) return key; if (ARROW_KEYS[key]) return ARROW_KEYS[key]; return NAMED_KEYS.has(key) || /^F(?:[1-9]|1\d|2[0-4])$/u.test(key) ? key : null; }; -/** - * The Electron key events for one CDP `Input.dispatchKeyEvent`. Electron - * derives key, code, and a char's text from `keyCode`, so typed text travels - * as `char` events of its own. - */ +/** Electron derives text from keyCode, so typed text needs separate char events. */ export const toKeyboardInputEvents = ( params: Record, ): Array => { diff --git a/apps/desktop/src/preview/Manager.test.ts b/apps/desktop/src/preview/Manager.test.ts index 6ded53bfaf1ba..41ac8abd37822 100644 --- a/apps/desktop/src/preview/Manager.test.ts +++ b/apps/desktop/src/preview/Manager.test.ts @@ -80,16 +80,19 @@ describe("previewWindowOpenAction", () => { }); it("opens a real window for scripted popups so the opener survives", () => { - // OAuth SDKs read a null `window.open()` as a blocked popup, and they need - // the opener alive to receive the credential back. expect(PreviewManager.previewWindowOpenAction(details({}))).toBe("popup"); expect( PreviewManager.previewWindowOpenAction(details({ url: "http://localhost:5173/auth" })), ).toBe("popup"); }); + it("opens HTTP links in preview tabs", () => { + for (const disposition of ["foreground-tab", "background-tab"] as const) { + expect(PreviewManager.previewWindowOpenAction(details({ disposition }))).toBe("new-tab"); + } + }); + it("keeps a form POST with a body on the in-place path", () => { - // A new tab can only reopen the URL as a GET, which would drop the body. const postBody = { data: [], contentType: "application/x-www-form-urlencoded" }; expect( PreviewManager.previewWindowOpenAction({ @@ -100,22 +103,34 @@ describe("previewWindowOpenAction", () => { }); it("does not hand a window to schemes that cannot be hardened", () => { - // A popup skips the `will-attach-webview` hardening, so it only gets a window - // when its preferences can be overridden. Chromium copies the guest's - // preferences for `about:blank` and forbids overriding them. for (const url of [ - "javascript:alert(1)", - "file:///etc/passwd", "vscode://vscode-remote/ssh-remote+box/tmp", - "not a url", + "blob:https://example.com/0b6c6a5e-55d4-4b4c-9d47-8f1b0c1d2e3f", ]) { expect(PreviewManager.previewWindowOpenAction(details({ url }))).toBe("navigate"); } }); + it("denies local and inline schemes that no page could open in place itself", () => { + for (const url of [ + "data:text/html,

hi

", + "DaTa:text/html,

hi

", + "file:///etc/passwd", + "javascript:alert(1)", + "view-source:https://example.com", + "chrome://gpu", + "about:srcdoc", + "devtools://devtools/bundled/inspector.html", + "filesystem:https://example.com/temporary/page.html", + "not a url", + ]) { + for (const disposition of ["new-window", "foreground-tab", "background-tab"] as const) { + expect(PreviewManager.previewWindowOpenAction(details({ url, disposition }))).toBe("deny"); + } + } + }); + it("denies a blank window instead of blanking the opener", () => { - // MSAL opens `about:blank` first and falls back to a redirect on `null`; - // loading the blank page into the tab would destroy that fallback. for (const url of ["about:blank", ""]) { for (const disposition of ["new-window", "foreground-tab"] as const) { expect(PreviewManager.previewWindowOpenAction(details({ url, disposition }))).toBe("deny"); @@ -155,6 +170,7 @@ const { vi.mock("electron", () => ({ BrowserWindow: browserWindowConstructor, + // oxlint-disable-next-line typescript/no-extraneous-class -- This constructor-only mock implements the browser ClipboardItem API. ClipboardItem: class { constructor(data: Record) { clipboardItemConstructor(data); @@ -249,7 +265,6 @@ const withManager =
( interface TestCapturedPreviewImage { readonly toJPEG: () => Buffer; - /** Only fixtures that deliver picture-in-picture frames need pixels to fingerprint. */ readonly toBitmap?: () => Buffer; readonly getSize: () => { readonly width: number; readonly height: number }; } @@ -608,7 +623,6 @@ describe("PreviewManager", () => { const older = makeFaviconWebContents({ id: 42 }); const newer = makeFaviconWebContents({ id: 43 }); for (const tab of [older, newer]) Object.assign(tab.webContents, { hostWebContents: host }); - // Electron names one arbitrary guest here when several share a focused window. getFocusedWebContents.mockReturnValue(newer.webContents as never); fromId.mockReturnValue(older.webContents); yield* manager.createTab("tab_older"); @@ -634,7 +648,6 @@ describe("PreviewManager", () => { expect(preventDefault).toHaveBeenCalledOnce(); expect(send).toHaveBeenCalledExactlyOnceWith("desktop:menu-action", "view.reopenClosed"); - // The person types in the older tab, so keys reaching the newer one are an agent's. Object.assign(newer.webContents, { focusedFrame: null }); const agentInput = newer.listeners.get("before-input-event")!; const agentPreventDefault = vi.fn(); @@ -770,9 +783,6 @@ describe("PreviewManager", () => { effectIt.effect("detaches through the pinned debugger after the webview is destroyed", () => withManager((manager) => Effect.gen(function* () { - // Real Electron throws on any `wc.debugger` access once the - // WebContents is destroyed, so cleanup must go through the debugger - // reference captured at attach time (electron/electron#53376). let destroyed = false; let attached = false; const debuggerOff = vi.fn(); @@ -1061,7 +1071,6 @@ describe("PreviewManager", () => { id, isDestroyed: () => destroyed, isDevToolsOpened: () => { - // Electron throws from native methods once a WebContents is destroyed. if (destroyed) throw new TypeError("Object has been destroyed"); return false; }, @@ -1173,11 +1182,7 @@ describe("PreviewManager", () => { audible = next; listeners.get("audio-state-changed")?.({ audible: next } as never); }, - /** - * Starts playing between the attach-time read and the post-attach - * reconcile, without a delivered event — the window in which - * audio-state-changed fires against a guest the tab does not own yet. - */ + /** Simulate playback starting during attach before the tab owns the guest and can receive its events. */ startPlayingAfterFirstRead: () => { audibleAfterFirstRead = true; }, @@ -1237,9 +1242,6 @@ describe("PreviewManager", () => { yield* manager.registerWebview("tab_audio_window", 42); yield* Effect.yieldNow; - // audio-state-changed for this transition was dropped: it fired before - // the tab owned the guest. Without a post-attach reconcile the icon - // stays wrong until the next real transition, which may never come. expect(states.at(-1)?.audible).toBe(true); }), ), @@ -1369,7 +1371,6 @@ describe("PreviewManager", () => { fromId.mockReturnValue(makeTestPreviewWebContents(capturePage)); yield* manager.createTab("tab_1"); yield* manager.registerWebview("tab_1", 42); - // it.effect keeps TestClock fixed until explicitly advanced. const first = yield* manager.captureScreenshot("tab_1"); const second = yield* manager.captureScreenshot("tab_1"); @@ -1735,6 +1736,65 @@ describe("PreviewManager", () => { }).pipe(Effect.provide(managerLayer()), Effect.scoped), ); + effectIt.effect( + "asks the client to paint a navigated server tab while the agent captures it", + () => + Effect.gen(function* () { + const host = yield* DesktopBrowserHost.DesktopBrowserHost; + const serverTab = { threadId: "thread-1", tabId: "server-tab-1" }; + const contents = Object.assign( + makeTestPreviewWebContents(async () => { + throw new Error("unused"); + }, 42), + { + isDevToolsOpened: () => false, + getUserAgent: () => "Electron", + loadURL: vi.fn(async () => undefined), + }, + ); + const screenshot = Promise.withResolvers(); + contents.debugger.sendCommand = vi.fn((method: string) => + method === "Page.captureScreenshot" ? screenshot.promise : Promise.resolve(undefined), + ) as unknown as typeof contents.debugger.sendCommand; + fromId.mockReturnValue(contents); + const manager = yield* PreviewManager.PreviewManager; + const capturing = yield* Queue.unbounded(); + yield* manager.subscribeStateChanges((_tabId, state) => + Queue.offer(capturing, state.capturing).pipe(Effect.asVoid), + ); + const attached = yield* Deferred.make(); + yield* host.events.pipe( + Stream.runForEach((line) => + new TextDecoder().decode(line).includes('"type":"attached"') + ? Deferred.succeed(attached, undefined) + : Effect.void, + ), + Effect.forkScoped, + ); + yield* manager.createTab("tab_1", { serverTab }); + yield* manager.registerWebview("tab_1", 42); + yield* Deferred.await(attached); + // Navigating rebuilds the tab's state, which must keep the server tab it answers for. + yield* manager.navigate("tab_1", "https://example.com/next"); + yield* Queue.clear(capturing); + + yield* host.handleCommandLine( + JSON.stringify({ + type: "cdp", + ...serverTab, + message: JSON.stringify({ + id: 1, + method: "Page.captureScreenshot", + sessionId: "t3-preview-page", + }), + }), + ); + expect(yield* Queue.take(capturing)).toBe(true); + screenshot.resolve({ data: "" }); + expect(yield* Queue.take(capturing)).toBe(false); + }).pipe(Effect.provide(managerLayer()), Effect.scoped), + ); + effectIt.effect("discards a screenshot that resolves after its guest is replaced", () => withManager((manager) => Effect.gen(function* () { @@ -2164,6 +2224,48 @@ describe("PreviewManager", () => { ), ); + effectIt.effect("shows picture-in-picture and keeps capturing after stalled captures", () => + withManager((manager) => + Effect.gen(function* () { + const image = { + toJPEG: () => Buffer.from("preview-frame"), + getSize: () => ({ width: 1280, height: 720 }), + }; + const stalledInitial = Promise.withResolvers(); + const stalledLoop = Promise.withResolvers(); + const capturePage = vi + .fn<() => Promise>() + .mockImplementationOnce(() => stalledInitial.promise) + .mockImplementationOnce(() => stalledLoop.promise) + .mockResolvedValue(image); + fromId.mockReturnValue(makeTestPreviewWebContents(capturePage)); + const { pictureInPictureWindow, send } = makeTestPictureInPictureWindow(); + browserWindowConstructor.mockImplementation(function () { + return pictureInPictureWindow; + }); + yield* manager.createTab("tab_pip_stalled_capture"); + yield* manager.registerWebview("tab_pip_stalled_capture", 42); + + try { + const open = yield* manager + .openPictureInPicture("tab_pip_stalled_capture") + .pipe(Effect.forkChild({ startImmediately: true })); + yield* TestClock.adjust(1_000); + expect(pictureInPictureWindow.showInactive).toHaveBeenCalledOnce(); + yield* Fiber.join(open); + + expect(send).not.toHaveBeenCalled(); + yield* TestClock.adjust(500); + expect(send).toHaveBeenCalled(); + } finally { + // Release stalled native calls after a failing assertion against unchanged base. + stalledInitial.resolve(image); + stalledLoop.resolve(image); + } + }), + ), + ); + effectIt.effect("rejects picture-in-picture when its webview changes during initialization", () => withManager((manager) => Effect.gen(function* () { diff --git a/apps/desktop/src/preview/Manager.ts b/apps/desktop/src/preview/Manager.ts index e9578c711ae40..dc05f1a8c82e5 100644 --- a/apps/desktop/src/preview/Manager.ts +++ b/apps/desktop/src/preview/Manager.ts @@ -1,10 +1,3 @@ -/** - * Desktop side of the in-app browser preview. - * - * Hosts per-tab Chromium WebContents references (the actual - * elements live in the renderer; we only attach listeners and forward state - * here). Single layer-scoped browser session partition. - */ import * as NodeZlib from "node:zlib"; import { DesktopPreviewRecordingInputSchema, @@ -109,6 +102,7 @@ export interface PreviewTabState { audioMuted: boolean; audible: boolean; controller: "human" | "agent" | "none"; + capturing: boolean; favicon?: DesktopPreviewFavicon; serverTab?: { readonly threadId: string; readonly tabId: string }; updatedAt: string; @@ -123,10 +117,7 @@ const ZOOM_EPSILON = 0.001; const RECORDING_ARM_GRACE_MS = 10_000; const PICTURE_IN_PICTURE_FRAME_INTERVAL_MS = Math.ceil(1_000 / 12); const PICTURE_IN_PICTURE_JPEG_QUALITY = 80; -/** - * Cold guests can reject capturePage with UnknownVizError or never settle it. - * Bound each attempt so snapshots release control even when Chromium stalls. - */ +// Cold guests can reject capturePage with UnknownVizError or stall; bound each attempt. const CAPTURE_PAGE_RETRY_ATTEMPTS = 3; const CAPTURE_PAGE_RETRY_DELAY_MS = 120; const CAPTURE_PAGE_ATTEMPT_TIMEOUT_MS = 1_000; @@ -325,22 +316,12 @@ const cropAnnotationScreenshot = ( return { dataUrl: cropped.toDataURL(), width: size.width, height: size.height, cropRect }; }; -/** - * Electron converts `toBitmap()` output to sRGB by default. Captures on P3 Macs are - * P3, so that conversion costs more per tick than the JPEG encode the fingerprint - * replaces. An invalid target color space has no Skia color space, so `readPixels` - * copies the pixels without a color transform. The fingerprint only compares frames - * with each other, so color accuracy is irrelevant. - */ +// An invalid color space skips costly P3-to-sRGB conversion; fingerprints need no color accuracy. const FINGERPRINT_BITMAP_OPTIONS: Electron.ToBitmapOptions = { colorSpace: { primaries: "invalid", transfer: "invalid", matrix: "invalid", range: "invalid" }, }; -/** - * Identity of a captured frame: cheap enough to compute every tick, unlike a JPEG - * encode. Null when the pixels could not be read (Electron reports a failed - * `readPixels` as an empty buffer), so the caller treats the frame as changed. - */ +/** Empty readPixels results have no fingerprint and must be treated as changed frames. */ const fingerprintCapturedFrame = (image: Electron.NativeImage, size: Electron.Size) => { let bitmap: Buffer; try { @@ -378,7 +359,6 @@ const nextZoomLevel = (current: number, direction: "in" | "out"): number => { }; type Listener = (tabId: string, state: PreviewTabState) => Effect.Effect; -type RecordingFrameListener = (frame: DesktopPreviewRecordingFrame) => Effect.Effect; type PreviewInputSignal = | { readonly kind: "pointer"; readonly x: number; readonly y: number; readonly button: number } @@ -421,10 +401,7 @@ interface PickSession { interface BrowserControlSession { readonly webContentsId: number; - // Electron's Debugger is GC-managed but registered with Chromium as a raw - // DevToolsAgentHostClient pointer; collecting it while attached crashes the - // browser process (electron/electron#53376). Detach must also go through - // this reference: `wc.debugger` throws once the WebContents is destroyed. + // Retain the attached Debugger to prevent GC crashes (electron/electron#53376); wc.debugger throws after destruction. readonly debugger: Electron.Debugger; readonly semaphore: Semaphore.Semaphore; readonly scope: Scope.Closeable; @@ -443,29 +420,22 @@ type PointerEventListener = (event: DesktopPreviewPointerEvent) => Effect.Effect type OpenLinkListener = (event: DesktopPreviewOpenLinkEvent) => Effect.Effect; -/** - * `about:blank` stays out: Chromium skips browser-side navigation for it, so the child copies - * the guest's `contextIsolation: false` preferences and Electron gives no way to override them. - * Deliberately not `ElectronShell.parseSafeExternalUrl`: that also admits - * `vscode://vscode-remote/...` deep links, which belong in `shell.openExternal` and not in a - * window spawned by a third-party page in the preview. - */ +// about:blank inherits relaxed guest preferences; external editor schemes must reach the OS handler. const POPUP_PROTOCOLS = new Set(["http:", "https:"]); -const isPopupUrl = (rawUrl: string): boolean => { - try { - return POPUP_PROTOCOLS.has(new URL(rawUrl).protocol); - } catch { - return false; - } -}; +// Main-process loadURL bypasses Chromium's renderer-side restrictions on local and inline URLs. +const IN_PLACE_DENIED_PROTOCOLS = new Set([ + "about:", + "chrome:", + "data:", + "devtools:", + "file:", + "filesystem:", + "javascript:", + "view-source:", +]); -/** - * A popup is not a webview attach, so the `will-attach-webview` hardening in `DesktopWindow` - * never sees it, and an unoverridden child would inherit the guest's relaxed posture: the - * picker preload needs `contextIsolation: false` to share `globalThis` with the previewed page, - * and no OAuth provider should get that. - */ +/** Popups bypass will-attach-webview hardening and would inherit the picker's contextIsolation:false. */ const POPUP_WINDOW_OPTIONS = { webPreferences: { contextIsolation: true, @@ -475,19 +445,18 @@ const POPUP_WINDOW_OPTIONS = { } satisfies Electron.BrowserWindowConstructorOptions; /** - * `"popup"` opens a real window, which scripted popups need: denying them makes `window.open()` - * return `null` (OAuth SDKs report that as a blocked popup), and navigating the preview tab - * instead destroys the opener the popup has to `postMessage` its result back to. Schemes a - * popup cannot be hardened for keep loading in place, and so does a form POST with a body, - * which a new tab could only reopen as a GET. + * OAuth needs a surviving popup opener. `blob:`, app links (behind the session's `openExternal` + * prompt) and form POSTs stay in place. */ export const previewWindowOpenAction = (details: { readonly url: string; readonly disposition: Electron.HandlerDetails["disposition"]; readonly postBody?: Electron.PostBody; }): "popup" | "new-tab" | "navigate" | "deny" => { - if (details.url === "" || details.url === "about:blank") return "deny"; - if (!isPopupUrl(details.url)) return "navigate"; + const protocol = URL.parse(details.url)?.protocol; + // MSAL redirects on a denied blank popup; navigating the tab would destroy that fallback. + if (protocol === undefined || IN_PLACE_DENIED_PROTOCOLS.has(protocol)) return "deny"; + if (!POPUP_PROTOCOLS.has(protocol)) return "navigate"; if (details.disposition === "new-window") return "popup"; return !details.postBody && (details.disposition === "foreground-tab" || details.disposition === "background-tab") @@ -574,9 +543,6 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function const recordingInputListenersRef = yield* Ref.make>( new Set(), ); - const recordingFrameListenersRef = yield* Ref.make>( - new Set(), - ); const pickSessionsRef = yield* Ref.make>(new Map()); const controlSessionsRef = yield* SynchronizedRef.make< ReadonlyMap @@ -590,9 +556,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function const pictureInPictureAspectRatiosRef = yield* Ref.make>(new Map()); const pictureInPictureMutationSemaphore = yield* Semaphore.make(1); const closingTabIdsRef = yield* Ref.make>(new Set()); - // Tab recording uses `setDisplayMediaRequestHandler` because Electron's legacy - // `getMediaSourceId` + `chromeMediaSource: "tab"` capture path was removed upstream - // (electron#44618) and now always rejects with NotAllowedError. + // Legacy tab capture is unsupported (electron/electron#44618); recording uses setDisplayMediaRequestHandler. let pendingRecording: PendingRecording | null = null; const displayMediaHandlerSessions = new WeakSet(); let frameCaptureWindowOpen = true; @@ -841,12 +805,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function }); const deliverEvent = ( - eventKind: - | "state-change" - | "recording-frame" - | "recording-input" - | "pointer-event" - | "open-link", + eventKind: "state-change" | "recording-input" | "pointer-event" | "open-link", tabId: string, delivery: () => Effect.Effect, ) => @@ -897,10 +856,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function }), ] as const; }); - // emitIfCurrent, not emit: an event-driven writer such as syncTabAudible - // can commit between the modify above and here, and republishing this - // snapshot would roll the UI back to a value that writer will not send - // again because it suppresses unchanged audibility. + // syncTabAudible can commit after this update; emitIfCurrent prevents publishing a stale snapshot. if (Option.isSome(next)) { if (patch.controller !== undefined && next.value.webContentsId != null) { const capture = (yield* SynchronizedRef.get(frameCaptureSessionsRef)).get(tabId); @@ -917,11 +873,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function } }); - /** - * Anything that applies zoom after an await goes through here: a snapshot taken before the - * await can be older than a zoom action that landed in between, and re-applying it would roll - * that action back. - */ + /** Read zoom after awaits so concurrent zoom actions cannot be rolled back by an older snapshot. */ const assertTabZoom = Effect.fn("PreviewManager.assertTabZoom")(function* (tabId: string) { const tab = (yield* SynchronizedRef.get(tabsRef)).get(tabId); if (!tab || tab.webContentsId == null) return; @@ -932,11 +884,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function ).pipe(Effect.ignore); }); - /** - * Mute counterpart to {@link assertTabZoom}: pushes the tab's committed mute - * onto whichever guest it currently owns, reading both at call time so an - * older snapshot can never roll back a mute action that landed after it. - */ + /** Read committed mute and current guest at call time so stale snapshots cannot roll back newer actions. */ const assertTabAudioMuted = Effect.fn("PreviewManager.assertTabAudioMuted")(function* ( tabId: string, ) { @@ -1098,8 +1046,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function const scope = yield* Scope.fork(parentScope, "sequential"); const wcDebugger = wc.debugger; const consoleReleases = yield* Queue.sliding(1); - // Console message eviction does not release the debugger's strong object handles. We - // keep text only, so release the whole group, including its object-id bookkeeping. + // Console eviction leaves strong debugger handles; release the group because we keep only text. yield* Effect.forkIn( Effect.forever( Queue.take(consoleReleases).pipe( @@ -1129,35 +1076,6 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function () => wcDebugger.sendCommand("Page.screencastFrameAck", { sessionId }), ).pipe(Effect.ignore); } - const tabId = yield* tabIdForWebContents(wc.id); - const metadata = - typeof params["metadata"] === "object" && params["metadata"] !== null - ? (params["metadata"] as Record) - : {}; - if (tabId && typeof params["data"] === "string") { - const captureSession = (yield* SynchronizedRef.get(frameCaptureSessionsRef)).get( - tabId, - ); - if (captureSession?.consumers.has("recording")) { - const receivedAt = yield* currentIso; - const listeners = yield* Ref.get(recordingFrameListenersRef); - const frame: DesktopPreviewRecordingFrame = { - tabId, - data: params["data"], - width: - typeof metadata["deviceWidth"] === "number" ? metadata["deviceWidth"] : 0, - height: - typeof metadata["deviceHeight"] === "number" ? metadata["deviceHeight"] : 0, - receivedAt, - }; - yield* Effect.forEach( - listeners, - (listener) => - deliverEvent("recording-frame", frame.tabId, () => listener(frame)), - { discard: true }, - ); - } - } } if (method === "Runtime.consoleAPICalled" || method === "Runtime.exceptionThrown") { yield* Queue.offer(consoleReleases, undefined); @@ -1198,9 +1116,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function wcDebugger.on("detach", onDetach); wcDebugger.attach("1.3"); }); - // Without this, dark-scheme pages with no background of their own (text/plain, e.g. - // .md files) render white text on white. Sent first because a document that paints - // before it arrives keeps the transparent base until its next load. + // Set an opaque base before first paint or background-less dark pages retain white-on-white text. yield* attemptPromise( { operation: "initializeDebugger.defaultBackground", webContentsId: wc.id }, () => @@ -1250,9 +1166,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function const url = wc.getURL(); const title = wc.getTitle(); if (url === "" || url === "about:blank") return { kind: "Idle" }; - // Main frame only. `isLoading()` covers the whole frame tree, so a - // cross-origin iframe that loads after the page can leave it true with no - // later event to clear it, and the tab's loading bar never finishes. + // isLoading() includes late iframes whose completion may never clear the tab's loading bar. if (wc.isLoadingMainFrame()) return { kind: "Loading", url, title }; return { kind: "Success", url, title }; }; @@ -1291,9 +1205,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function if (!current || current.webContentsId !== wc.id || webContents.fromId(wc.id) !== wc) { return [Option.none(), tabs] as const; } - // Electron emits did-stop-loading after did-fail-load. At that point the - // failed guest is no longer "loading", but it has not successfully - // navigated anywhere. + // did-stop-loading follows did-fail-load without proving successful navigation. const navStatus = preserveLoadFailure && current.navStatus.kind === "LoadFailed" && @@ -1311,9 +1223,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function navStatus, canGoBack, canGoForward, - // zoomFactor is deliberately not read back from the guest: Chromium - // reports the level it inherited from the app window, so mirroring it - // would turn an app zoom into the preview's own zoom. + // Guest zoom inherits app zoom; mirroring it would overwrite the tab's own setting. updatedAt, }; return [ @@ -1517,8 +1427,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function }).pipe(Effect.ignore), ); }; - // Not getFocusedWebContents(): every guest of a focused window reports focus. - // An agent's keys reach a guest without a focused frame through GuestInput. + // Every guest of a focused window reports focus; GuestInput handles guests without a focused frame. const holdsKeyboardFocus = (contents: Electron.WebContents) => contents.isFocused() && contents.focusedFrame !== null; const syncMenuShortcuts = (contents: Electron.WebContents, input: Electron.Input): void => { @@ -1527,9 +1436,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function !isPreviewEditingShortcut(input, hostPlatform) || !holdsKeyboardFocus(contents), ); }; - // A popup opens with Electron's default handler, so the page inside it could - // otherwise spawn native windows without limit. Nothing in an OAuth flow - // opens a second popup, so the chain stops at the first one. + // Popups inherit Electron's unrestricted window handler; block nested popups to bound the chain. const windowCreated = (window: Electron.BrowserWindow): void => { window.webContents.setIgnoreMenuShortcuts(true); window.webContents.setWindowOpenHandler(() => ({ action: "deny" })); @@ -1568,7 +1475,16 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function ); if (forwarded && host) { event.preventDefault(); - if (!input.isAutoRepeat) host.send(MENU_ACTION_CHANNEL, forwarded.command); + if (!input.isAutoRepeat) { + if ( + forwarded.command === "workspace.focusNext" || + forwarded.command === "workspace.focusPrevious" + ) { + // DOM focus in the renderer cannot by itself release the guest's native keyboard focus. + host.focus(); + } + host.send(MENU_ACTION_CHANNEL, forwarded.command); + } return; } if (isPreviewRefreshShortcut(input)) { @@ -1716,6 +1632,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function audioMuted: false, audible: false, controller: "none", + capturing: false, updatedAt, }; return [ @@ -1789,6 +1706,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function audioMuted: false, audible: false, controller: "none", + capturing: false, updatedAt, }; yield* emit(tabId, closed); @@ -1872,15 +1790,11 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function ) { return yield* new PreviewTabNotFoundError({ tabId }); } - // Always assert the tab's own zoom rather than reading the guest's: a guest - // attaching while the app UI is zoomed starts at the embedder's inherited - // zoom level, which is not the preview's zoom. Done before the guest is - // published so it never paints a frame at the inherited zoom. + // Restore the tab's zoom before publishing the guest so it never paints at inherited app zoom. yield* attempt({ operation: "registerWebview.restoreZoomFactor", tabId, webContentsId }, () => wc.setZoomFactor(currentTab.zoomFactor), ); - // A replacement guest attaches unmuted, so reassert the tab's mute before it is published - // rather than letting it emit audio the user already silenced. + // Replacement guests start unmuted; restore mute before publishing them. yield* attempt({ operation: "registerWebview.restoreAudioMuted", tabId, webContentsId }, () => wc.setAudioMuted(currentTab.audioMuted), ); @@ -1934,16 +1848,12 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function return yield* new PreviewTabNotFoundError({ tabId }); } const { state: registered, pendingUrl } = registration.value; - // A zoom or mute action that landed while this attach was in flight - // addressed the guest this one replaced, so settle the new guest on the - // committed values. + // Concurrent actions targeted the previous guest; reconcile this one with committed zoom and mute. yield* assertTabZoom(tabId); yield* assertTabAudioMuted(tabId).pipe(Effect.ignore); runFork(restoreControlSession(tabId, wc)); yield* emitIfCurrent(tabId, registered); - // Transitions that fired before the tab owned this guest were dropped by - // syncTabAudible's ownership check, so re-read and reconcile through the - // same path the event uses. + // Ownership checks dropped pre-attach audibility events; reconcile through the event path. yield* syncTabAudible(tabId, wc, yield* readAudible); yield* attempt({ operation: "registerWebview.sendTheme", tabId, webContentsId }, () => { wc.send(ANNOTATION_THEME_CHANNEL, annotationTheme); @@ -1975,9 +1885,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function ); }); - // Called when a guest attaches to the window, before its first document paints. A tab opened - // straight to a URL often paints before the renderer gets to registerWebview, which would - // leave that page on the transparent base. + // URL tabs can paint before registerWebview; set the background at attach time. const prepareWebview = Effect.fn("PreviewManager.prepareWebview")(function* ( wc: Electron.WebContents, ) { @@ -2016,14 +1924,13 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function zoomFactor: current?.zoomFactor ?? DEFAULT_ZOOM_FACTOR, pictureInPicture: current?.pictureInPicture ?? false, colorScheme: current?.colorScheme ?? "system", - // Mute is user intent, and the old document keeps playing until loadURL - // actually replaces it, so clearing audibility here would drop the - // speaker with no transition left to restore it. Chromium reports the - // change when it happens. + // Keep audibility until Chromium replaces the document; clearing it here can lose the final transition. audioMuted: current?.audioMuted ?? false, audible: current?.audible ?? false, controller: current?.controller ?? "none", + capturing: current?.capturing ?? false, ...(current?.favicon ? { favicon: current.favicon } : {}), + ...(current?.serverTab ? { serverTab: current.serverTab } : {}), updatedAt, }; return [ @@ -2177,8 +2084,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function wc.off("destroyed", onDestroyed); wc.off("did-start-navigation", onNavigated); }).pipe(Effect.ignore); - // Only drop the slot while it is still ours. A newer session may - // already have swapped itself in before cancelling this one. + // A newer session may already own the slot when this one is cancelled. yield* Ref.update(pickSessionsRef, (sessions) => sessions.get(tabId) === session ? replaceMap(sessions, (copy) => { @@ -2270,9 +2176,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function : { annotation: { ...payload, screenshot }, submission }, }), Effect.flatMap((result) => { - // A capture that outlives its session must not touch the - // overlay: the preload tears down on the captured signal, and - // by now it may be running a newer pick. + // Late captures must not signal an overlay that may now belong to a newer pick. if (!claimSettle()) return Effect.void; return attempt( { operation: "pickElement.captureComplete", tabId, webContentsId: wc.id }, @@ -2291,10 +2195,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function if (event.isMainFrame) settle(null); }; const registerPickElement = Effect.fn("PreviewManager.registerPickElement")(function* () { - // Two picks on one tab can overlap. Swap this session in and cancel - // the previous holder in one step, so no third pick can slip into an - // empty slot in between and the session we push out still resumes - // its renderer. + // Atomically swap/cancel overlapping picks so another pick cannot claim a transient empty slot. const replaced = yield* Ref.modify(pickSessionsRef, (sessions) => [ sessions.get(tabId) ?? null, replaceMap(sessions, (copy) => { @@ -2302,9 +2203,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function }), ]); if (replaced) yield* replaced.cancel; - // A newer pick may have cancelled this session while the previous - // one was torn down. Cleanup already ran, so attaching listeners now - // would leak them and start an overlay nobody is waiting on. + // A newer pick may cancel during teardown; do not leak listeners or start an abandoned overlay. if (settled) return; yield* attempt({ operation: "pickElement.register", tabId, webContentsId: wc.id }, () => { wc.ipc.on(ELEMENT_PICKED_CHANNEL, onMessage); @@ -2352,9 +2251,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function yield* update(tabId, { zoomFactor: next }); }); - // Emulated media lives on the CDP debugger session, not the WebContents, so - // it is lost whenever the session detaches (webview swap, DevTools - // open/close) and must be re-applied after every (re)attach. + // Media emulation belongs to the debugger session and must be restored after every reattach. const applyColorScheme = Effect.fn("PreviewManager.applyColorScheme")(function* ( tabId: string, wc: Electron.WebContents, @@ -2386,7 +2283,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function return; } if (afterAttach.serverTab) { - yield* listenForAgentPointers; + yield* listenToBrowserHost; browserHost.attach(afterAttach.serverTab, { webContents: wc, debugger: control.debugger }); } if (afterAttach.colorScheme !== "system") { @@ -2440,8 +2337,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function if (tab.colorScheme !== colorScheme) { yield* update(tabId, { colorScheme }); } - // Re-read after the update: registerWebview may have swapped the guest - // in the meantime and the override must land on the current one. + // registerWebview may swap guests during the update; apply to the current one. const webContentsId = (yield* SynchronizedRef.get(tabsRef)).get(tabId)?.webContentsId; if (webContentsId == null) return; const wc = webContents.fromId(webContentsId); @@ -2457,10 +2353,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function if (!tab) { return yield* new PreviewTabNotFoundError({ tabId }); } - // Commit and apply under the tab's lifecycle lock, then assert the - // committed value rather than this call's argument. Two overlapping toggles - // would otherwise be free to commit in one order and reach Chromium in the - // other, leaving the icon disagreeing with the guest. + // Serialize commit/apply, then read committed mute so concurrent toggles cannot reach Chromium out of order. yield* withTabLifecycleLock( tabId, Effect.gen(function* () { @@ -2469,8 +2362,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function if (committed) { yield* update(tabId, { audioMuted }); } - // Roll the commit back if Chromium refused: reporting success here - // would leave the tab drawn as muted while it keeps playing. + // Roll back rejected mute commits so the UI reflects actual playback. yield* assertTabAudioMuted(tabId).pipe( Effect.tapError(() => committed ? update(tabId, { audioMuted: previous }) : Effect.void, @@ -2542,13 +2434,13 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function if (!captureSession?.consumers.has("picture-in-picture") || captureSession.scope === null) return; const wc = yield* requireWebContents(tabId); - const image = yield* attemptPromise( - { - operation: "frameCapture.capturePage", - tabId, - webContentsId: wc.id, - }, - () => wc.capturePage(), + const captureContext = { operation: "frameCapture.capturePage", tabId, webContentsId: wc.id }; + const image = yield* attemptPromise(captureContext, () => wc.capturePage()).pipe( + Effect.timeout(CAPTURE_PAGE_ATTEMPT_TIMEOUT_MS), + Effect.catchTags({ + TimeoutError: (cause) => + Effect.fail(new PreviewOperationError({ ...captureContext, cause })), + }), ); const currentCaptureSession = yield* Effect.all( [SynchronizedRef.get(frameCaptureSessionsRef), SynchronizedRef.get(tabsRef)], @@ -2582,9 +2474,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function } const frameSession = (yield* SynchronizedRef.get(frameCaptureSessionsRef)).get(tabId); if (frameSession?.scope !== captureSession.scope) return; - // Fingerprint the raw pixels before encoding so an unchanged page skips the - // synchronous JPEG encode, the base64 copy and the IPC send. An unreadable - // frame has no fingerprint and is always delivered. + // Fingerprint before encoding so unchanged frames skip JPEG, base64, and IPC; unreadable frames must still be sent. const fingerprint = fingerprintCapturedFrame(image, size); const pictureInPicture = frameSession.consumers.has("picture-in-picture") && @@ -2606,78 +2496,66 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function height: size.height, receivedAt, }; - const deliveries: Array> = []; - if (pictureInPicture) { - const pictureInPictureWindow = (yield* SynchronizedRef.get(pictureInPictureSessionsRef)).get( - tabId, - )?.window; - if (pictureInPictureWindow && !pictureInPictureWindow.isDestroyed()) { - deliveries.push( - Effect.gen(function* () { - const previousAspectRatio = (yield* Ref.get(pictureInPictureAspectRatiosRef)).get( - tabId, - ); - const aspectRatio = frame.width / frame.height; - if ( - previousAspectRatio === undefined || - Math.abs(previousAspectRatio - aspectRatio) > PICTURE_IN_PICTURE_ASPECT_RATIO_EPSILON - ) { - yield* attempt( - { - operation: "pictureInPicture.setAspectRatio", - tabId, - webContentsId: wc.id, - }, - () => { - const contentSize = fitPictureInPictureContentSize( - pictureInPictureWindow.getContentSize(), - aspectRatio, - ); - pictureInPictureWindow.setAspectRatio(0); - pictureInPictureWindow.setContentSize(contentSize[0], contentSize[1], false); - pictureInPictureWindow.setAspectRatio(aspectRatio); - }, - ); - yield* Ref.update(pictureInPictureAspectRatiosRef, (aspectRatios) => - replaceMap(aspectRatios, (copy) => { - copy.set(tabId, aspectRatio); - }), - ); - } - yield* attempt( - { - operation: "pictureInPicture.deliverFrame", - tabId, - webContentsId: wc.id, - }, - () => { - pictureInPictureWindow.webContents.send( - PREVIEW_PICTURE_IN_PICTURE_FRAME_CHANNEL, - frame, - ); - }, + const pictureInPictureWindow = (yield* SynchronizedRef.get(pictureInPictureSessionsRef)).get( + tabId, + )?.window; + if (!pictureInPictureWindow || pictureInPictureWindow.isDestroyed()) return; + yield* Effect.gen(function* () { + const previousAspectRatio = (yield* Ref.get(pictureInPictureAspectRatiosRef)).get(tabId); + const aspectRatio = frame.width / frame.height; + if ( + previousAspectRatio === undefined || + Math.abs(previousAspectRatio - aspectRatio) > PICTURE_IN_PICTURE_ASPECT_RATIO_EPSILON + ) { + yield* attempt( + { + operation: "pictureInPicture.setAspectRatio", + tabId, + webContentsId: wc.id, + }, + () => { + const contentSize = fitPictureInPictureContentSize( + pictureInPictureWindow.getContentSize(), + aspectRatio, ); - yield* SynchronizedRef.update(frameCaptureSessionsRef, (sessions) => { - if (sessions.get(tabId) !== frameSession) return sessions; - return replaceMap(sessions, (copy) => { - copy.set(tabId, { - ...frameSession, - lastPictureInPictureFingerprint: fingerprint, - }); - }); - }); - }).pipe( - Effect.catch((error) => - Effect.logWarning("Picture-in-picture frame delivery failed.", { - tabId, - error, - }), - ), - ), + pictureInPictureWindow.setAspectRatio(0); + pictureInPictureWindow.setContentSize(contentSize[0], contentSize[1], false); + pictureInPictureWindow.setAspectRatio(aspectRatio); + }, + ); + yield* Ref.update(pictureInPictureAspectRatiosRef, (aspectRatios) => + replaceMap(aspectRatios, (copy) => { + copy.set(tabId, aspectRatio); + }), ); } - } - yield* Effect.all(deliveries, { concurrency: 2, discard: true }); + yield* attempt( + { + operation: "pictureInPicture.deliverFrame", + tabId, + webContentsId: wc.id, + }, + () => { + pictureInPictureWindow.webContents.send(PREVIEW_PICTURE_IN_PICTURE_FRAME_CHANNEL, frame); + }, + ); + yield* SynchronizedRef.update(frameCaptureSessionsRef, (sessions) => { + if (sessions.get(tabId) !== frameSession) return sessions; + return replaceMap(sessions, (copy) => { + copy.set(tabId, { + ...frameSession, + lastPictureInPictureFingerprint: fingerprint, + }); + }); + }); + }).pipe( + Effect.catch((error) => + Effect.logWarning("Picture-in-picture frame delivery failed.", { + tabId, + error, + }), + ), + ); }); const startFrameCapture = Effect.fn("PreviewManager.startFrameCapture")(function* ( @@ -2939,8 +2817,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function if (hostPlatform === "darwin") { pictureInPictureWindow.setVisibleOnAllWorkspaces(true, { visibleOnFullScreen: true, - // Electron otherwise temporarily transforms the entire app into - // a UIElement process, which removes the owning app from the Dock. + // Electron's temporary UIElement transformation would remove the app from the Dock. skipTransformProcessType: true, }); } @@ -3075,10 +2952,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function if (pendingRecording?.tabId === tabId) pendingRecording = null; }; - /** - * A display-media request carries no tab identity, so the slot is exclusive: a second tab - * arming before the first request lands would redirect the first renderer's stream. - */ + /** Display-media requests lack tab identity; only one tab may arm a recording to prevent stream redirection. */ const armPendingRecording = Effect.fn("PreviewManager.armPendingRecording")(function* ( tabId: string, wc: Electron.WebContents, @@ -3105,8 +2979,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function armedAtMillis: now, }; pendingRecording = armed; - // The handler callback is sync and cannot read a clock, so expiry is driven from here. - // Identity compare: a re-arm replaces the object, and this fiber must not clobber it. + // The synchronous callback cannot read a clock. Compare identity so expiry cannot clobber a re-arm. yield* Effect.forkIn( Effect.sleep(RECORDING_ARM_GRACE_MS).pipe( Effect.andThen( @@ -3119,8 +2992,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function ); }); - // Installed once per session: answers the renderer's `getDisplayMedia()` with the tab that - // `startRecording` armed, and denies anything else so pages cannot capture on their own. + // Only serve the tab armed by startRecording; pages must not capture independently. const installDisplayMediaRequestHandler = (session: Session) => { if (displayMediaHandlerSessions.has(session)) return; displayMediaHandlerSessions.add(session); @@ -3339,14 +3211,33 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function { discard: true }, ); }); - let pointersStarted = false; - const listenForAgentPointers = Effect.suspend(() => { - if (pointersStarted) return Effect.void; - pointersStarted = true; - return browserHost.pointers.pipe( - Stream.runForEach(emitAgentPointer), - Effect.forkIn(parentScope), - Effect.asVoid, + const updateServerTabCapturing = Effect.fn("PreviewManager.updateServerTabCapturing")( + function* (painting: { + readonly key: { readonly threadId: string; readonly tabId: string }; + readonly active: boolean; + }) { + const tab = [...(yield* SynchronizedRef.get(tabsRef)).values()].find( + (candidate) => + candidate.serverTab?.threadId === painting.key.threadId && + candidate.serverTab.tabId === painting.key.tabId, + ); + if (tab && tab.capturing !== painting.active) { + yield* update(tab.tabId, { capturing: painting.active }); + } + }, + ); + let browserHostStarted = false; + // Subscribes before the attach that follows, so no event falls between the two. + const listenToBrowserHost = Effect.suspend(() => { + if (browserHostStarted) return Effect.void; + browserHostStarted = true; + const listen = Effect.forkIn(parentScope, { startImmediately: true }); + return Effect.all( + [ + browserHost.pointers.pipe(Stream.runForEach(emitAgentPointer), listen), + browserHost.painting.pipe(Stream.runForEach(updateServerTabCapturing), listen), + ], + { discard: true }, ); }); @@ -3382,7 +3273,6 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function Ref.set(listenersRef, new Set()), Ref.set(pointerEventListenersRef, new Set()), Ref.set(openLinkListenersRef, new Set()), - Ref.set(recordingFrameListenersRef, new Set()), Ref.set(recordingInputListenersRef, new Set()), ], { discard: true }, @@ -3430,8 +3320,6 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function subscribeOpenLinks: (listener: OpenLinkListener) => subscribe(openLinkListenersRef, listener), subscribeRecordingInputs: (listener: RecordingInputListener) => subscribe(recordingInputListenersRef, listener), - subscribeRecordingFrames: (listener: RecordingFrameListener) => - subscribe(recordingFrameListenersRef, listener), subscribeStateChanges: (listener: Listener) => subscribe(listenersRef, listener), zoomIn: (tabId: string) => applyZoom(tabId, (current) => nextZoomLevel(current, "in")), zoomOut: (tabId: string) => applyZoom(tabId, (current) => nextZoomLevel(current, "out")), @@ -3673,13 +3561,10 @@ export class PreviewManager extends Context.Service< readonly subscribeRecordingInputs: ( listener: RecordingInputListener, ) => Effect.Effect; - readonly subscribeRecordingFrames: ( - listener: RecordingFrameListener, - ) => Effect.Effect; } >()("@t3tools/desktop/preview/Manager/PreviewManager") {} -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* PreviewManagerMake() { const environment = yield* DesktopEnvironment.DesktopEnvironment; const browserSession = yield* BrowserSession.BrowserSession; @@ -3809,7 +3694,6 @@ export const make = Effect.gen(function* PreviewManagerMake() { subscribeStateChanges: operations.subscribeStateChanges, subscribePointerEvents: operations.subscribePointerEvents, subscribeOpenLinks: operations.subscribeOpenLinks, - subscribeRecordingFrames: operations.subscribeRecordingFrames, subscribeRecordingInputs: operations.subscribeRecordingInputs, }); }).pipe(Effect.withSpan("PreviewManager.make")); diff --git a/apps/desktop/src/preview/PasskeyBackendMac.ts b/apps/desktop/src/preview/PasskeyBackendMac.ts index ccdffa2a70c08..91cefaddc42f1 100644 --- a/apps/desktop/src/preview/PasskeyBackendMac.ts +++ b/apps/desktop/src/preview/PasskeyBackendMac.ts @@ -6,8 +6,7 @@ import type { PasskeyCeremonyResult } from "./PasskeyBridge.ts"; const ES256 = -7; -// WebAuthn rejects RP IDs that are public suffixes, private registries -// included, so one github.io site cannot mint passkeys for every other one. +// WebAuthn rejects public suffix RP IDs, including private registries such as github.io. const isPublicSuffix = (domain: string) => domain !== "localhost" && getPublicSuffix(domain, { allowPrivateDomains: true }) === domain; @@ -32,13 +31,10 @@ const toBase64Url = (value: BufferSource) => : new Uint8Array(value), ).toString("base64url"); -/** - * Needs Apple's managed browser entitlement in the signed build. - */ +/** Requires Apple's managed browser entitlement in the signed build. */ export const macPasskeyBackend: PasskeyBackend = { create: async (publicKey, context): Promise => { - // The native layer only converts P-256 keys and never settles for any - // other algorithm, so ES256 is the only one it may negotiate. + // The native layer only converts P-256 keys, so negotiate only ES256. const params: unknown = publicKey.pubKeyCredParams; if (params !== undefined && !Array.isArray(params)) return { success: false, error: "TypeError" }; @@ -56,8 +52,7 @@ export const macPasskeyBackend: PasskeyBackend = { options, ); if (!result.success) return { success: false, error: result.error }; - // The native layer reports parsed authenticator data as JSON and claims - // every credential is a synced platform passkey; neither is reliable. + // Native parsed authenticator JSON and synced-platform-passkey claims are unreliable. const authData = authenticatorDataFromAttestation( Buffer.from(result.data.attestationObject, "base64url"), ); @@ -79,8 +74,7 @@ export const macPasskeyBackend: PasskeyBackend = { options, ); if (!result.success) return { success: false, error: result.error }; - // The native layer applies the site's allow list to platform passkeys only, - // so a security key can answer with a credential the site did not ask for. + // Native allow lists cover only platform passkeys; security-key responses need checking here. const allowed = (Array.isArray(publicKey.allowCredentials) ? publicKey.allowCredentials : []) .filter((credential) => credential?.type === "public-key" && isBufferSource(credential.id)) .map((credential) => toBase64Url(credential.id)); diff --git a/apps/desktop/src/preview/PasskeyBridge.test.ts b/apps/desktop/src/preview/PasskeyBridge.test.ts index 3b72ab5890757..998a9298baf3c 100644 --- a/apps/desktop/src/preview/PasskeyBridge.test.ts +++ b/apps/desktop/src/preview/PasskeyBridge.test.ts @@ -27,10 +27,6 @@ const illegalInvocation = (): never => { throw new TypeError("Illegal invocation"); }; -/** - * Installs the bridge over fresh stand-ins for the page's DOM classes. Like - * Chromium's, their getters only work on objects the browser created itself. - */ const install = (respond: (channel: string) => unknown) => { const nativeCreate = vi.fn(async () => "native-create"); const nativeGet = vi.fn(async () => "native-get"); diff --git a/apps/desktop/src/preview/PasskeyBridge.ts b/apps/desktop/src/preview/PasskeyBridge.ts index fbb9fefa4aa5f..bc77b38c1cf0a 100644 --- a/apps/desktop/src/preview/PasskeyBridge.ts +++ b/apps/desktop/src/preview/PasskeyBridge.ts @@ -44,10 +44,7 @@ const ceremonyError = (name: string) => DOM_EXCEPTION_NAMES.has(name) ? name : "NotAllowedError", ); -/** - * Chromium ignores members it does not know, so functions and other uncloneable - * values drop out here instead of failing the whole ceremony. - */ +// Chromium drops unknown members; discard uncloneable values instead of failing the ceremony. const toCloneable = (value: unknown): unknown => { if (value instanceof ArrayBuffer) return value.slice(0); if (ArrayBuffer.isView(value)) { @@ -64,9 +61,7 @@ const toCloneable = (value: unknown): unknown => { return value; }; -// The objects below borrow the native prototypes so `instanceof` checks pass. -// Their own properties shadow the native getters, which only work on objects -// Chromium created itself. +// Shadow native getters: they reject objects Chromium did not create, even with the correct prototype. const withValues = (target: T, values: Record) => { for (const [key, value] of Object.entries(values)) { Object.defineProperty(target, key, { value, enumerable: true, configurable: true }); @@ -202,10 +197,7 @@ const credentialFromGetResult = (data: Extract signal.reason ?? new DOMException("The operation was aborted.", "AbortError"); -/** - * Conditional (autofill and automatic upgrade) requests stay native: the system - * sheet is modal and must not open on its own. - */ +/** Keep conditional requests native so autofill and upgrades cannot open a modal sheet unprompted. */ export function installPasskeyBridge(invoke: InvokePasskeyCeremony) { if (typeof CredentialsContainer === "undefined" || typeof PublicKeyCredential === "undefined") { return; diff --git a/apps/desktop/src/preview/Passkeys.test.ts b/apps/desktop/src/preview/Passkeys.test.ts index f848aff47b8f9..219c67fac5061 100644 --- a/apps/desktop/src/preview/Passkeys.test.ts +++ b/apps/desktop/src/preview/Passkeys.test.ts @@ -120,7 +120,6 @@ describe("PreviewPasskeys", () => { assert.isFalse(options.isPublicSuffix("example.com")); assert.isFalse(options.isPublicSuffix("localhost")); - // WebAuthn defaults the RP ID to the caller's own host. yield* call(PASSKEY_GET_CHANNEL, { challenge: new Uint8Array([1]) }); assert.strictEqual(webauthn.getCredential.mock.calls[1]?.[0].rpId, "accounts.example.com"); @@ -218,7 +217,6 @@ describe("PreviewPasskeys", () => { allowCredentials: [{ type: "public-key", id: new Uint8Array([1]) }], }; - // macOS applies the allow list to passkeys but not to security keys. webauthn.getCredential.mockResolvedValueOnce(assertion("Ag")); const other = yield* call(PASSKEY_GET_CHANNEL, publicKey); assert.deepStrictEqual(other, { success: false, error: "NotAllowedError" }); @@ -244,7 +242,6 @@ describe("PreviewPasskeys", () => { const lan = makeGuest("http://192.168.1.5:3000"); passkeys.attachGuest(lan.guest); assert.deepStrictEqual(yield* lan.call(PASSKEY_GET_CHANNEL, publicKey), notAllowed); - // macOS refuses `*.localhost`, so the page hears no rather than a native error. const subdomain = makeGuest("http://app.localhost:3000"); passkeys.attachGuest(subdomain.guest); assert.deepStrictEqual(yield* subdomain.call(PASSKEY_GET_CHANNEL, publicKey), notAllowed); diff --git a/apps/desktop/src/preview/Passkeys.ts b/apps/desktop/src/preview/Passkeys.ts index 5456aaab6a8a2..34db1404aacb8 100644 --- a/apps/desktop/src/preview/Passkeys.ts +++ b/apps/desktop/src/preview/Passkeys.ts @@ -84,8 +84,7 @@ const chooseAccount = async (details: Electron.SelectWebauthnAccountDetails) => const NATIVE_DEFAULT_TIMEOUT_MS = 10 * 60 * 1000; const NATIVE_MAX_TIMEOUT_MS = 60 * 60 * 1000; -// Mirrors the native layer's own clamp, plus a margin: it can leave a ceremony -// unsettled, and the page must still get an answer. +// Native ceremonies can remain unsettled; match its deadline clamp with a margin. const ceremonyDeadline = (timeout: unknown) => (typeof timeout === "number" && timeout > 0 ? Math.min(timeout, NATIVE_MAX_TIMEOUT_MS) @@ -99,9 +98,7 @@ const withDeadline = (ceremony: Promise, milliseconds: nu return Promise.race([ceremony, deadline]).finally(() => clearTimeout(timer)); }; -// Secure contexts only: https, or http on this machine. Chromium also trusts -// `*.localhost`, but the macOS layer refuses it, so it is turned away here -// instead of failing deeper with a less useful error. +// macOS refuses *.localhost even though Chromium trusts it. const isTrustworthyOrigin = (origin: string) => { if (!URL.canParse(origin)) return false; const { protocol, hostname } = new URL(origin); @@ -112,9 +109,7 @@ const isTrustworthyOrigin = (origin: string) => { ); }; -/** - * Windows needs none: Chromium already hands WebAuthn to Windows Hello there. - */ +// Chromium already delegates to Windows Hello. const backendFor = (platform: NodeJS.Platform): PasskeyBackend | undefined => platform === "darwin" ? macPasskeyBackend : undefined; @@ -168,9 +163,7 @@ const make = Effect.gen(function* () { // Only the guest's main frame runs the bridge preload. const frame = event.senderFrame; if (!frame || frame !== guest.mainFrame) return notAllowed; - // The page shares a JS world with the preload, so nothing it sends can - // be trusted for the origin. Read the committed origin before any await: - // the frame object outlives a navigation. + // The page shares the preload's JS world; read the frame's committed origin before any await/navigation. const origin = frame.origin; if (!isTrustworthyOrigin(origin) || ceremonyPending || !guest.isFocused()) { return notAllowed; diff --git a/apps/desktop/src/preview/PickPreload.ts b/apps/desktop/src/preview/PickPreload.ts index e49d27d40ba9e..4cb5987cdeb85 100644 --- a/apps/desktop/src/preview/PickPreload.ts +++ b/apps/desktop/src/preview/PickPreload.ts @@ -35,6 +35,7 @@ import { START_PICK_CHANNEL, } from "./GuestProtocol.ts"; const OVERLAY_ATTRIBUTE = "data-t3code-annotation-ui"; +const INPUT_LAYER_ATTRIBUTE = "data-t3code-annotation-input"; const Z_INDEX_OVERLAY = 2147483646; const PRIMARY = "var(--t3-primary)"; const PRIMARY_FILL = "color-mix(in srgb, var(--t3-primary) 10%, transparent)"; @@ -196,11 +197,7 @@ const navigationDirectionForButton = (button: number): "back" | "forward" | null return null; }; -// Chromium routes thumb-button history navigation to the *focused* WebContents, -// so hovering this guest without focusing it sends the host app's router back -// instead of the preview. Suppress Chromium's default here and drive this tab's -// history explicitly so the buttons always navigate the browser the pointer is -// over — never the host app. +// Chromium routes thumb-button navigation to the focused WebContents; navigate this hovered guest explicitly. const suppressNavigationButton = (event: MouseEvent): void => { if (!event.isTrusted || navigationDirectionForButton(event.button) === null) return; event.preventDefault(); @@ -268,7 +265,7 @@ function isAnnotationNode(element: Element): boolean { function pickFromPoint(clientX: number, clientY: number): Element | null { for (const candidate of document.elementsFromPoint(clientX, clientY)) { if (!(candidate instanceof Element)) continue; - if (isAnnotationNode(candidate)) continue; + if (isAnnotationNode(candidate) || candidate.hasAttribute(INPUT_LAYER_ATTRIBUTE)) continue; if (candidate === document.documentElement || candidate === document.body) continue; return candidate; } @@ -390,11 +387,7 @@ function toStackFrame(frame: { }; } -/** - * `getElementContext` walks the inspected page's React internals, and some pages leave it - * pending forever. Without a bound, the whole submit chain stalls and the overlay sits on - * "Capturing…". - */ +/** React-internals lookups can remain pending forever; bound them so submit cannot stall the overlay. */ function withCaptureTimeout(promise: Promise, millis: number): Promise { let timer: ReturnType | undefined; return Promise.race([ @@ -407,11 +400,7 @@ function withCaptureTimeout(promise: Promise, millis: number): Promise { const base = { pageUrl: location.href, @@ -636,7 +625,18 @@ function startAnnotation(sendEnabled: boolean): void { const strokes: PreviewAnnotationStrokeTarget[] = []; const styleChanges = new Map(); const toolButtons = new Map(); - let tool: AnnotationTool = "select"; + // Chromium draws a PDF in its own viewer frame, so pointer and key input over it + // never reaches this document. A transparent layer above the viewer catches the + // pointer and takes focus for Escape and the tool keys. A PDF has no elements to + // select, so it starts on Region. + const isPdf = document.contentType === "application/pdf"; + const inputLayer = isPdf ? document.createElement("div") : null; + if (inputLayer) { + inputLayer.setAttribute(INPUT_LAYER_ATTRIBUTE, ""); + inputLayer.tabIndex = -1; + inputLayer.style.cssText = `position:fixed;inset:0;z-index:${Z_INDEX_OVERLAY - 1};cursor:crosshair;outline:none`; + } + let tool: AnnotationTool = isPdf ? "marquee" : "select"; let dragStart: PreviewAnnotationPoint | null = null; let activeStroke: { target: PreviewAnnotationStrokeTarget; path: SVGPathElement } | null = null; let pendingCapture = false; @@ -1356,6 +1356,7 @@ function startAnnotation(sendEnabled: boolean): void { ipcRenderer.off(ANNOTATION_CAPTURED_CHANNEL, onCaptured); document.documentElement.removeAttribute("data-t3code-annotation-tool"); cursorStyle.remove(); + inputLayer?.remove(); host.remove(); activeSession = null; if (notifyMain) ipcRenderer.send(ELEMENT_PICKED_CHANNEL, null); @@ -1386,8 +1387,7 @@ function startAnnotation(sendEnabled: boolean): void { pendingCapture = true; submit.disabled = true; submit.textContent = "Capturing…"; - // The element context lookup can take up to its timeout, and the user can - // keep editing meanwhile; the annotation must describe what they submitted. + // Snapshot the submitted comment before context lookup lets the user edit it. const submittedComment = comment.value.trim(); const submittedRegions = [...regions]; const submittedStrokes = [...strokes]; @@ -1408,8 +1408,7 @@ function startAnnotation(sendEnabled: boolean): void { }), ) .then((elements) => { - // The overlay may have been cancelled or replaced while the capture - // ran. A late submit must not deliver into the next pick's listener. + // A late submit must not reach a replacement pick's listener. if (finished) return; const annotation: PreviewAnnotationPayload = { id: nextId("annotation"), @@ -1448,8 +1447,7 @@ function startAnnotation(sendEnabled: boolean): void { root.addEventListener("keydown", (event) => { const submission = event.target === comment ? resolveAnnotationSubmission(event, sendEnabled) : null; - // Keep this in the bubble phase so editor inputs receive the event before - // it is isolated from listeners installed by the inspected page. + // Bubble phase lets editor inputs handle events before hiding them from the page. event.stopImmediatePropagation(); if (!submission) return; event.preventDefault(); @@ -1467,6 +1465,10 @@ function startAnnotation(sendEnabled: boolean): void { window.addEventListener("resize", repaint, { passive: true }); ipcRenderer.on(CANCEL_PICK_CHANNEL, onCancel); ipcRenderer.on(ANNOTATION_CAPTURED_CHANNEL, onCaptured); + if (inputLayer) { + document.documentElement.appendChild(inputLayer); + inputLayer.focus({ preventScroll: true }); + } document.documentElement.appendChild(host); rootResizeObserver.observe(document.documentElement); refreshToolButtons(); diff --git a/apps/desktop/src/preview/RecordingCursor.ts b/apps/desktop/src/preview/RecordingCursor.ts index 4524b0d017b61..5b9fb3c13bc37 100644 --- a/apps/desktop/src/preview/RecordingCursor.ts +++ b/apps/desktop/src/preview/RecordingCursor.ts @@ -11,11 +11,7 @@ import { type RecordingKeyPress, } from "./RecordingInput.ts"; -/** - * Chromium's capture cursor uses native window bounds, which do not follow a - * webview's CSS placement or scale. Draw it in the guest's coordinate space - * while recording, and make the native cursor transparent to avoid two cursors. - */ +/** Draw in guest coordinates; Chromium's native cursor ignores webview CSS placement/scale. Hide it to avoid duplicates. */ export function installRecordingCursor( document: Document, window: Window, diff --git a/apps/desktop/src/preview/WebviewPreferences.test.ts b/apps/desktop/src/preview/WebviewPreferences.test.ts index 182b6a505d166..572a290e2b669 100644 --- a/apps/desktop/src/preview/WebviewPreferences.test.ts +++ b/apps/desktop/src/preview/WebviewPreferences.test.ts @@ -6,7 +6,6 @@ function parseWebPreferences(input: string): Record { const out: Record = {}; for (const pair of input.split(",")) { if (pair !== pair.trim()) { - // Electron's parser doesn't trim; surface the bug as undefined-key. out[pair] = pair.split("=")[1]; continue; } @@ -21,9 +20,6 @@ describe("PREVIEW_WEBVIEW_PREFERENCES", () => { const parsed = parseWebPreferences(PREVIEW_WEBVIEW_PREFERENCES); it("uses canonical JS-boolean string literals (not yes/no, on/off, 1/0)", () => { - // `value="no"` is a TRUTHY string when assigned to webPreferences.X — so - // `contextIsolation="no"` would silently leave isolation ENABLED. Lock - // the values to `"true"` / `"false"` so the parser does the right thing. for (const value of Object.values(parsed)) { expect(value).toMatch(/^(true|false)$/); } diff --git a/apps/desktop/src/preview/WebviewPreferences.ts b/apps/desktop/src/preview/WebviewPreferences.ts index 4236b78293ab1..4dc9d9aa6b732 100644 --- a/apps/desktop/src/preview/WebviewPreferences.ts +++ b/apps/desktop/src/preview/WebviewPreferences.ts @@ -1,9 +1,3 @@ -/** - * - `sandbox=true`: keeps the OS-level renderer sandbox enabled. Critical - * when paired with `contextIsolation=false` — without sandbox, the preload - * has full Node access (`require`, `fs`, `child_process`, ...) and that - * `require` would land on the page's shared `globalThis`, giving any - * third-party page in the preview full Node + IPC access to the host. - */ +/** sandbox:true is required with contextIsolation:false or the shared page global would expose Node and IPC. */ export const PREVIEW_WEBVIEW_PREFERENCES = "contextIsolation=false,sandbox=true,nodeIntegration=false"; diff --git a/apps/desktop/src/settings/DesktopAppSettings.test.ts b/apps/desktop/src/settings/DesktopAppSettings.test.ts index 832a774577149..0135225f90c48 100644 --- a/apps/desktop/src/settings/DesktopAppSettings.test.ts +++ b/apps/desktop/src/settings/DesktopAppSettings.test.ts @@ -4,6 +4,7 @@ import * as Effect from "effect/Effect"; import * as FileSystem from "effect/FileSystem"; import * as Layer from "effect/Layer"; import * as Schema from "effect/Schema"; +import * as Tracer from "effect/Tracer"; import * as DesktopConfig from "../app/DesktopConfig.ts"; import * as DesktopEnvironment from "../app/DesktopEnvironment.ts"; @@ -90,6 +91,37 @@ function writeSettingsPatch(patch: typeof DesktopSettingsPatch.Type) { } describe("DesktopSettings", () => { + it.effect("records one bounds operation span with its input attributes", () => + Effect.gen(function* () { + const spans: Array = []; + const tracer = Tracer.make({ + span: (options) => { + const span = new Tracer.NativeSpan(options); + spans.push(span); + return span; + }, + }); + yield* withSettings( + Effect.gen(function* () { + const settings = yield* DesktopAppSettings.DesktopAppSettings; + yield* settings.setMainWindowBounds({ x: 10, y: 20, width: 900, height: 600 }, true); + }), + ).pipe(Effect.provideService(Tracer.Tracer, tracer)); + const operationSpans = spans.filter( + (span) => span.name === "desktop.settings.setMainWindowBounds", + ); + assert.lengthOf(operationSpans, 1); + assert.deepEqual(Object.fromEntries(operationSpans[0]!.attributes), { + x: 10, + y: 20, + width: 900, + height: 600, + isMaximized: true, + }); + assert.equal(operationSpans[0]!.status._tag, "Ended"); + }), + ); + it.effect( "persists disabling and re-enabling local execution without clearing backend settings", () => diff --git a/apps/desktop/src/settings/DesktopAppSettings.ts b/apps/desktop/src/settings/DesktopAppSettings.ts index 1c131681295fa..a0624ced669ea 100644 --- a/apps/desktop/src/settings/DesktopAppSettings.ts +++ b/apps/desktop/src/settings/DesktopAppSettings.ts @@ -22,7 +22,7 @@ import { normalizeLinuxPasswordStorePreference, type LinuxPasswordStorePreference, } from "../linuxSecretStorage.ts"; -import { resolveDefaultDesktopUpdateChannel } from "../updates/updateChannels.ts"; +import { desktopUpdateChannelOf } from "@t3tools/shared/cliRelease"; import { isValidDistroName } from "../wsl/wslPathParsing.ts"; export interface DesktopSettings { @@ -37,8 +37,7 @@ export interface DesktopSettings { readonly updateChannelConfiguredByUser: boolean; readonly wslBackendEnabled: boolean; readonly wslDistro: string | null; - // Changing this requires a desktop restart because the pool's primary spec is - // chosen once at layer init. + // Requires restart because the pool chooses its primary spec at layer initialization. readonly wslOnly: boolean; } @@ -181,7 +180,7 @@ export class DesktopAppSettings extends Context.Service< export function resolveDefaultDesktopSettings(appVersion: string): DesktopSettings { return { ...DEFAULT_DESKTOP_SETTINGS, - updateChannel: resolveDefaultDesktopUpdateChannel(appVersion), + updateChannel: desktopUpdateChannelOf(appVersion), }; } @@ -466,7 +465,6 @@ const writeSettings = Effect.fn("desktop.settings.writeSettings")(function* (inp }); /** @public */ -/** @public Service construction is part of the canonical Effect module API. */ export const make = Effect.gen(function* () { const environment = yield* DesktopEnvironment.DesktopEnvironment; const fileSystem = yield* FileSystem.FileSystem; @@ -523,48 +521,56 @@ export const make = Effect.gen(function* () { ); return yield* SynchronizedRef.setAndGet(settingsRef, settings); }).pipe(Effect.withSpan("desktop.settings.load")), - setMainWindowBounds: (bounds, isMaximized) => - persist((settings) => setMainWindowBounds(settings, bounds, isMaximized)).pipe( - Effect.withSpan("desktop.settings.setMainWindowBounds", { - attributes: { - x: bounds.x, - y: bounds.y, - width: bounds.width, - height: bounds.height, - isMaximized, - }, - }), - ), - setServerExposureMode: (mode) => - persist((settings) => setServerExposureMode(settings, mode)).pipe( - Effect.withSpan("desktop.settings.setServerExposureMode", { attributes: { mode } }), - ), - setTailscaleServe: (input) => - persist((settings) => setTailscaleServe(settings, input)).pipe( - Effect.withSpan("desktop.settings.setTailscaleServe", { attributes: input }), - ), - setUpdateChannel: (channel) => - persist((settings) => setUpdateChannel(settings, channel)).pipe( - Effect.withSpan("desktop.settings.setUpdateChannel", { attributes: { channel } }), - ), - setWslBackendEnabled: (enabled) => - persist((settings) => setWslBackendEnabled(settings, enabled)).pipe( - Effect.withSpan("desktop.settings.setWslBackendEnabled", { attributes: { enabled } }), - ), - setWslDistro: (distro) => - persist((settings) => setWslDistro(settings, distro)).pipe( - Effect.withSpan("desktop.settings.setWslDistro", { - attributes: { distro: distro ?? null }, - }), - ), - setWslOnly: (enabled) => - persist((settings) => setWslOnly(settings, enabled)).pipe( - Effect.withSpan("desktop.settings.setWslOnly", { attributes: { enabled } }), - ), - setLocalEnvironmentEnabled: (enabled) => - persist((settings) => setLocalEnvironmentEnabled(settings, enabled)).pipe( - Effect.withSpan("desktop.settings.setLocalEnvironmentEnabled", { attributes: { enabled } }), - ), + setMainWindowBounds: Effect.fn("desktop.settings.setMainWindowBounds")( + function* (bounds, isMaximized) { + yield* Effect.annotateCurrentSpan({ + x: bounds.x, + y: bounds.y, + width: bounds.width, + height: bounds.height, + isMaximized, + }); + + return yield* persist((settings) => setMainWindowBounds(settings, bounds, isMaximized)); + }, + ), + setServerExposureMode: Effect.fn("desktop.settings.setServerExposureMode")(function* (mode) { + yield* Effect.annotateCurrentSpan({ mode }); + + return yield* persist((settings) => setServerExposureMode(settings, mode)); + }), + setTailscaleServe: Effect.fn("desktop.settings.setTailscaleServe")(function* (input) { + yield* Effect.annotateCurrentSpan(input); + + return yield* persist((settings) => setTailscaleServe(settings, input)); + }), + setUpdateChannel: Effect.fn("desktop.settings.setUpdateChannel")(function* (channel) { + yield* Effect.annotateCurrentSpan({ channel }); + + return yield* persist((settings) => setUpdateChannel(settings, channel)); + }), + setWslBackendEnabled: Effect.fn("desktop.settings.setWslBackendEnabled")(function* (enabled) { + yield* Effect.annotateCurrentSpan({ enabled }); + + return yield* persist((settings) => setWslBackendEnabled(settings, enabled)); + }), + setWslDistro: Effect.fn("desktop.settings.setWslDistro")(function* (distro) { + yield* Effect.annotateCurrentSpan({ distro: distro ?? null }); + + return yield* persist((settings) => setWslDistro(settings, distro)); + }), + setWslOnly: Effect.fn("desktop.settings.setWslOnly")(function* (enabled) { + yield* Effect.annotateCurrentSpan({ enabled }); + + return yield* persist((settings) => setWslOnly(settings, enabled)); + }), + setLocalEnvironmentEnabled: Effect.fn("desktop.settings.setLocalEnvironmentEnabled")( + function* (enabled) { + yield* Effect.annotateCurrentSpan({ enabled }); + + return yield* persist((settings) => setLocalEnvironmentEnabled(settings, enabled)); + }, + ), applyWslWindowsFallback: persist(applyWslWindowsFallback).pipe( Effect.withSpan("desktop.settings.applyWslWindowsFallback"), ), @@ -596,18 +602,38 @@ export const layerTest = (initialSettings: DesktopSettings = DEFAULT_DESKTOP_SET return DesktopAppSettings.of({ get: SynchronizedRef.get(settingsRef), load: SynchronizedRef.get(settingsRef), - setMainWindowBounds: (bounds, isMaximized) => - update((settings) => setMainWindowBounds(settings, bounds, isMaximized)), - setServerExposureMode: (mode) => - update((settings) => setServerExposureMode(settings, mode)), - setTailscaleServe: (input) => update((settings) => setTailscaleServe(settings, input)), - setUpdateChannel: (channel) => update((settings) => setUpdateChannel(settings, channel)), - setWslBackendEnabled: (enabled) => - update((settings) => setWslBackendEnabled(settings, enabled)), - setWslDistro: (distro) => update((settings) => setWslDistro(settings, distro)), - setWslOnly: (enabled) => update((settings) => setWslOnly(settings, enabled)), - setLocalEnvironmentEnabled: (enabled) => - update((settings) => setLocalEnvironmentEnabled(settings, enabled)), + setMainWindowBounds: Effect.fn("DesktopAppSettings.setMainWindowBounds")( + function (bounds, isMaximized) { + return update((settings) => setMainWindowBounds(settings, bounds, isMaximized)); + }, + ), + setServerExposureMode: Effect.fn("DesktopAppSettings.setServerExposureMode")( + function (mode) { + return update((settings) => setServerExposureMode(settings, mode)); + }, + ), + setTailscaleServe: Effect.fn("DesktopAppSettings.setTailscaleServe")(function (input) { + return update((settings) => setTailscaleServe(settings, input)); + }), + setUpdateChannel: Effect.fn("DesktopAppSettings.setUpdateChannel")(function (channel) { + return update((settings) => setUpdateChannel(settings, channel)); + }), + setWslBackendEnabled: Effect.fn("DesktopAppSettings.setWslBackendEnabled")( + function (enabled) { + return update((settings) => setWslBackendEnabled(settings, enabled)); + }, + ), + setWslDistro: Effect.fn("DesktopAppSettings.setWslDistro")(function (distro) { + return update((settings) => setWslDistro(settings, distro)); + }), + setWslOnly: Effect.fn("DesktopAppSettings.setWslOnly")(function (enabled) { + return update((settings) => setWslOnly(settings, enabled)); + }), + setLocalEnvironmentEnabled: Effect.fn("DesktopAppSettings.setLocalEnvironmentEnabled")( + function (enabled) { + return update((settings) => setLocalEnvironmentEnabled(settings, enabled)); + }, + ), applyWslWindowsFallback: update(applyWslWindowsFallback), applyWslWindowsFallbackInMemory: update(applyWslWindowsFallback), }); diff --git a/apps/desktop/src/settings/DesktopClientSettings.test.ts b/apps/desktop/src/settings/DesktopClientSettings.test.ts index 51c3d31daae85..ec5062f9105bf 100644 --- a/apps/desktop/src/settings/DesktopClientSettings.test.ts +++ b/apps/desktop/src/settings/DesktopClientSettings.test.ts @@ -34,8 +34,6 @@ const clientSettings: ClientSettings = { confirmThreadDelete: false, confirmThreadUnpin: false, contextWindowMeterEnabled: false, - composerCollapseOnScroll: true, - dismissedProviderUpdateNotificationKeys: [], diffFilesCollapsed: true, diffIgnoreWhitespace: true, diffLayout: "stacked", @@ -64,7 +62,10 @@ const clientSettings: ClientSettings = { }, sidebarProjectSortOrder: "manual", sidebarThreadSortOrder: "created_at", - sidebarThreadPreviewCount: 6, + boringSidebarEnabled: false, + boringSidebarMultilineRows: false, + threadDetailsUsageEnabled: false, + threadDetailsItems: {}, legacySidebarEnabled: false, sidebarWorkingShelfEnabled: false, loadBalancingEnabled: false, diff --git a/apps/desktop/src/settings/DesktopClientSettings.ts b/apps/desktop/src/settings/DesktopClientSettings.ts index 7c65c35cf0439..0836db6678226 100644 --- a/apps/desktop/src/settings/DesktopClientSettings.ts +++ b/apps/desktop/src/settings/DesktopClientSettings.ts @@ -194,8 +194,8 @@ export const make = Effect.gen(function* () { get: readClientSettings(fileSystem, environment.clientSettingsPath).pipe( Effect.withSpan("desktop.clientSettings.get"), ), - set: (settings) => - crypto.randomUUIDv4().pipe( + set: Effect.fn("desktop.clientSettings.set")(function (settings) { + return crypto.randomUUIDv4().pipe( Effect.map((uuid) => uuid.replace(/-/g, "")), Effect.mapError( (cause) => @@ -214,8 +214,8 @@ export const make = Effect.gen(function* () { suffix, }), ), - Effect.withSpan("desktop.clientSettings.set"), - ), + ); + }), }); }); @@ -228,7 +228,9 @@ export const layerTest = (initialSettings: Option.Option = Optio const settingsRef = yield* Ref.make(initialSettings); return DesktopClientSettings.of({ get: Ref.get(settingsRef), - set: (settings) => Ref.set(settingsRef, Option.some(settings)), + set: Effect.fn("DesktopClientSettings.set")(function (settings) { + return Ref.set(settingsRef, Option.some(settings)); + }), }); }), ); diff --git a/apps/desktop/src/settings/DesktopSavedEnvironments.ts b/apps/desktop/src/settings/DesktopSavedEnvironments.ts index 248fb9b6f8482..cccc0585024af 100644 --- a/apps/desktop/src/settings/DesktopSavedEnvironments.ts +++ b/apps/desktop/src/settings/DesktopSavedEnvironments.ts @@ -221,7 +221,7 @@ function decodeSecretBytes( ); } -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const environment = yield* DesktopEnvironment.DesktopEnvironment; const fileSystem = yield* FileSystem.FileSystem; diff --git a/apps/desktop/src/shell/DesktopShellEnvironment.test.ts b/apps/desktop/src/shell/DesktopShellEnvironment.test.ts index 9d12ed5a07fe6..4804823069024 100644 --- a/apps/desktop/src/shell/DesktopShellEnvironment.test.ts +++ b/apps/desktop/src/shell/DesktopShellEnvironment.test.ts @@ -149,7 +149,7 @@ describe("DesktopShellEnvironment", () => { }; const commands: ChildProcess.Command[] = []; - yield* runShellEnvironment({ + const prepared = yield* runShellEnvironment({ env, platform: "darwin", handler: (command) => { @@ -167,6 +167,7 @@ describe("DesktopShellEnvironment", () => { assert.equal(env.PATH, "/opt/homebrew/bin:/usr/bin:/Users/test/.local/bin"); assert.equal(env.SSH_AUTH_SOCK, "/tmp/secretive.sock"); assert.equal(env.HOMEBREW_PREFIX, "/opt/homebrew"); + assert.isTrue(prepared); }), ); @@ -267,7 +268,7 @@ describe("DesktopShellEnvironment", () => { }; const commands: string[] = []; - yield* runShellEnvironment({ + const prepared = yield* runShellEnvironment({ env, platform: "darwin", handler: (command) => { @@ -279,6 +280,19 @@ describe("DesktopShellEnvironment", () => { assert.deepEqual(commands, ["/opt/homebrew/bin/nu", "/bin/zsh", "/bin/launchctl"]); assert.equal(env.PATH, "/opt/homebrew/bin:/usr/bin"); + assert.isFalse(prepared); + }), + ); + + it.effect("leaves macOS preparation incomplete when no login shell returns a PATH", () => + Effect.gen(function* () { + const prepared = yield* runShellEnvironment({ + env: { SHELL: "/bin/zsh", PATH: "/usr/bin:/bin:/usr/sbin:/sbin" }, + platform: "darwin", + handler: () => "", + }); + + assert.isFalse(prepared); }), ); diff --git a/apps/desktop/src/shell/DesktopShellEnvironment.ts b/apps/desktop/src/shell/DesktopShellEnvironment.ts index 3fdec7932366b..6e0fdbd38050f 100644 --- a/apps/desktop/src/shell/DesktopShellEnvironment.ts +++ b/apps/desktop/src/shell/DesktopShellEnvironment.ts @@ -95,6 +95,7 @@ const LOGIN_SHELL_ENV_NAMES = [ "SSL_CERT_DIR", "NODE_EXTRA_CA_CERTS", "T3CODE_TELEMETRY_ENABLED", + "T3CODE_GITHUB_APP_CLIENT_ID", "__MISE_DIFF", ] as const; const WINDOWS_PROFILE_ENV_NAMES = ["PATH", "FNM_DIR", "FNM_MULTISHELL_PATH"] as const; @@ -360,11 +361,6 @@ const installWindowsEnvironment = Effect.fn("desktop.shellEnvironment.installWin function* ( config: ShellEnvironmentConfig, ): Effect.fn.Return { - // Concurrent, not sequential: these two probes are independent (only their - // results are combined below) and each spawns its own PowerShell. Run in - // series they sit at offset 0 of desktop.startup, before anything else, and - // launch traces measured them at 2718ms then 2066ms — the entire 4.8s - // startup span, of which desktop.bootstrap is ~30ms. const [noProfile, profile] = yield* Effect.all( [ readWindowsEnvironment(["PATH"], { loadProfile: false }), @@ -396,7 +392,7 @@ const installPosixEnvironment = Effect.fn("desktop.shellEnvironment.installPosix function* ( config: ShellEnvironmentConfig, ): Effect.fn.Return< - void, + boolean, never, ChildProcessSpawner.ChildProcessSpawner | FileSystem.FileSystem > { @@ -432,9 +428,7 @@ const installPosixEnvironment = Effect.fn("desktop.shellEnvironment.installPosix "XDG_CURRENT_DESKTOP", "XDG_SESSION_DESKTOP", "XDG_SESSION_TYPE", - // mise's record of the PATH entries it added. It must travel with the - // shell's PATH, or `mise x` can rebuild PATH behind a same-named wrapper - // (`exec mise x claude -- claude`) that then re-runs itself forever. + // Forward mise's PATH delta too, or mise x can rebuild PATH into a recursive same-named wrapper. "__MISE_DIFF", ] as const; for (const name of shellPreferredEnvNames) { @@ -452,21 +446,19 @@ const installPosixEnvironment = Effect.fn("desktop.shellEnvironment.installPosix "XDG_DATA_HOME", "XDG_RUNTIME_DIR", "WAYLAND_DISPLAY", - // CA trust set in the shell profile. Without it, a Node or OpenSSL build - // that has no bundled roots (a shared-OpenSSL node on PATH) cannot verify - // TLS, so provider updaters and agents fail to reach their registries. + // Shell CA settings are required by Node/OpenSSL builds without bundled roots for registry TLS. "SSL_CERT_FILE", "SSL_CERT_DIR", "NODE_EXTRA_CA_CERTS", "T3CODE_TELEMETRY_ENABLED", + "T3CODE_GITHUB_APP_CLIENT_ID", ] as const) { if (!config.env[name] && shellEnvironment[name]) { config.env[name] = shellEnvironment[name]; } } - // Locale variables form one precedence group: LC_ALL can override an inherited - // LANG or LC_CTYPE, so only hydrate the group when the process has none of them. + // Hydrate locale variables together; inherited LC_ALL can override LANG or LC_CTYPE. if ( config.platform === "darwin" && LOCALE_ENV_NAMES.every((name) => Option.isNone(trimNonEmpty(config.env[name]))) @@ -478,11 +470,7 @@ const installPosixEnvironment = Effect.fn("desktop.shellEnvironment.installPosix } } - // GUI launches inherit no locale from launchd, so spawned agents land in the C - // locale and pbcopy decodes their UTF-8 output as MacRoman. Older supported - // macOS releases do not provide C.UTF-8, so set only LC_CTYPE to a UTF-8 locale - // available on those releases. Leaving LANG unset keeps C-stable collation and - // formatting, so output parsing is unaffected. + // launchd lacks locale; UTF-8 LC_CTYPE fixes pbcopy's MacRoman decoding without changing C formatting or collation. if (LOCALE_ENV_NAMES.every((name) => Option.isNone(trimNonEmpty(config.env[name])))) { config.env.LC_CTYPE = FALLBACK_LC_CTYPE; } @@ -503,6 +491,8 @@ const installPosixEnvironment = Effect.fn("desktop.shellEnvironment.installPosix } } } + + return Option.isSome(trimNonEmpty(shellEnvironment.PATH)); }, ); @@ -517,12 +507,12 @@ const installShellEnvironment = ( return installWindowsEnvironment(config); } if (config.platform === "darwin" || config.platform === "linux") { - return installPosixEnvironment(config).pipe(Effect.as(true)); + return installPosixEnvironment(config); } return Effect.succeed(false); }; -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const environment = yield* DesktopEnvironment.DesktopEnvironment; const fileSystem = yield* FileSystem.FileSystem; diff --git a/apps/desktop/src/snapShot/ActiveWindow.ts b/apps/desktop/src/snapShot/ActiveWindow.ts index f62669a39bf36..20f56cc19442c 100644 --- a/apps/desktop/src/snapShot/ActiveWindow.ts +++ b/apps/desktop/src/snapShot/ActiveWindow.ts @@ -6,10 +6,7 @@ import * as Schema from "effect/Schema"; import { loadWindowsForegroundApi } from "../electron/WindowsForeground.ts"; -/** - * `id` is the CGWindowNumber on macOS and the HWND on Windows, which is what - * the capture backends key on. - */ +/** id is CGWindowNumber on macOS or HWND on Windows, matching the capture backend. */ export type ActiveWindow = { readonly platform: "macos" | "windows"; readonly id: number; diff --git a/apps/desktop/src/snapShot/DesktopSnapShot.test.ts b/apps/desktop/src/snapShot/DesktopSnapShot.test.ts index 39a7dddf5de72..8532dee0038a0 100644 --- a/apps/desktop/src/snapShot/DesktopSnapShot.test.ts +++ b/apps/desktop/src/snapShot/DesktopSnapShot.test.ts @@ -798,7 +798,6 @@ it.effect.each(["darwin", "win32"] as const)( for (const finish of heldFlights) finish(); yield* Fiber.join(landing); - // Landing releases the guard even before the first capture is acknowledged. yield* Effect.promise(fixture.trigger); assert.equal(fixture.state.snapshots, 2); assert.lengthOf(fixture.readyIds, 2); @@ -1049,9 +1048,15 @@ it.effect("matches Windows accessibility windows on a scaled display", () => { ); }); -it.effect.each(["gnome", "niri", "kde", "hyprland"] as const)( - "persists %s text without inventing AT-SPI screen coordinates", - (backend) => { +it.effect.each([ + { backend: "gnome", screenshot: "PNG" }, + { backend: "niri", screenshot: "PNG" }, + { backend: "kde", screenshot: "PNG" }, + { backend: "hyprland", screenshot: "PNG" }, + { backend: "gnome", screenshot: "invalid" }, +] as const)( + "persists $backend accessibility text with a $screenshot screenshot", + ({ backend, screenshot }) => { vi.stubEnv("XDG_SESSION_TYPE", "wayland"); flashWindows.length = 0; const window = { @@ -1068,7 +1073,16 @@ it.effect.each(["gnome", "niri", "kde", "hyprland"] as const)( ...(backend === "niri" ? { accessibilityBoundsReliable: false } : {}), ...(backend === "kde" ? { clientBounds: { x: 479, y: 371, width: 700, height: 520 } } : {}), }; - linuxCaptureMock.mockResolvedValueOnce({ png: Buffer.from([1, 2, 3]), window }); + // The captured pixels differ from the compositor's logical window bounds. + const imageSize = screenshot === "PNG" ? { width: 1400, height: 1040 } : window.bounds; + const png = + screenshot === "PNG" + ? Buffer.from( + "iVBORw0KGgoAAAANSUhEUgAABXgAAAQQAQAAAABwoA4ZAAAAyElEQVR4nO3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgYyx4AAepc/c0AAAAASUVORK5CYII=", + "base64", + ) + : Buffer.from([1, 2, 3]); + linuxCaptureMock.mockResolvedValueOnce({ png, window }); activeWindowMock.mockClear(); getSourcesMock.mockClear(); accessibilityByPidMock.mockReset().mockResolvedValue({ @@ -1108,7 +1122,7 @@ it.effect.each(["gnome", "niri", "kde", "hyprland"] as const)( assert.deepInclude(saved.source.accessibility, { format: "element-tree", coordinateSpace: "captured-image", - imageSize: { width: 700, height: window.bounds.height }, + imageSize: { width: imageSize.width, height: imageSize.height }, truncated: false, }); assert.deepInclude( @@ -1118,7 +1132,7 @@ it.effect.each(["gnome", "niri", "kde", "hyprland"] as const)( { role: "window", name: "Editor", - bounds: { x: 0, y: 0, width: 700, height: window.bounds.height }, + bounds: { x: 0, y: 0, width: imageSize.width, height: imageSize.height }, state: { active: true }, }, ); diff --git a/apps/desktop/src/snapShot/DesktopSnapShot.ts b/apps/desktop/src/snapShot/DesktopSnapShot.ts index 164c97b4f22fc..e31d347084209 100644 --- a/apps/desktop/src/snapShot/DesktopSnapShot.ts +++ b/apps/desktop/src/snapShot/DesktopSnapShot.ts @@ -1,5 +1,6 @@ // @effect-diagnostics globalTimers:off -- Capture timeouts and Electron overlay animation timers run at native callback boundaries outside Effect fibers. +import { pipe } from "effect/Function"; import { DEFAULT_CLIENT_SETTINGS, DesktopPendingSnapShot, @@ -90,6 +91,7 @@ import { snapShotShortcutSystemConflict, } from "./snapShot.ts"; import * as HostProcess from "@t3tools/shared/HostProcess"; +import { readImageDimensions } from "@t3tools/shared/imageDimensions"; const MAX_CAPTURE_WIDTH = 2_560; const MAX_CAPTURE_HEIGHT = 1_600; @@ -211,7 +213,6 @@ export class DesktopSnapShotSetupError extends Schema.TaggedError 0 && size.height > 0) return size; - } catch {} + // Capture backends already validate or encode the PNG. Reading its header + // avoids decoding every pixel again just to size accessibility coordinates. + const size = readImageDimensions(png); + if (size) return size; return { width: Math.max(1, Math.round(fallback.width)), height: Math.max(1, Math.round(fallback.height)), @@ -609,7 +606,7 @@ function createSnapShotFlashWindow(bounds: Electron.Rectangle): Electron.BaseWin return window; } -export class SnapShotFlash { +class SnapShotFlash { private flashWindow: Electron.BaseWindow | undefined; private animationTimer: ReturnType | undefined; private closeTimer: ReturnType | undefined; @@ -903,8 +900,7 @@ export const make = Effect.gen(function* () { const imageTempPath = path.join(captureDirectory, `${id}.tmp.png`); return yield* Effect.gen(function* () { - // Retire feedback before reading screen pixels, so a rapid capture cannot - // photograph the previous capture's overlay. + // Retire feedback before capture so rapid captures cannot photograph the previous overlay. closeLinuxFeedback(); flash.dispose(); transition.dispose(); @@ -1033,8 +1029,7 @@ export const make = Effect.gen(function* () { }).pipe(Effect.withSpan("desktop.snapShot.capture")); const captureFromShortcut = Effect.gen(function* () { - // Repeated shortcuts must not tear down a moving capture and start another - // renderer. Drop them while the flight runs, just as during pixel acquisition. + // Repeated shortcuts must not replace a capture during its flight. if (shortcutSuppressed || transition.isAnimating) return; shortcutVerified = true; const now = yield* Clock.currentTimeNanos; @@ -1140,9 +1135,7 @@ export const make = Effect.gen(function* () { transition.dispose(); closeLinuxFeedback(); } - // Every client-settings save lands here. Only the fields that decide which - // shortcut listener runs may tear it down; a font-size change must not - // uninstall a global keyboard hook or drop an approved portal session. + // Unrelated settings saves must not uninstall the keyboard hook or drop an approved portal session. const shortcutInputsChanged = settings.snapShotEnabled !== previousSettings.snapShotEnabled || settings.snapShotIncludeAccessibility !== previousSettings.snapShotIncludeAccessibility || @@ -1296,10 +1289,10 @@ export const make = Effect.gen(function* () { if (isModifierPairShortcut(shortcut)) { registered = yield* Effect.tryPromise(() => startPairShortcutProcess(snapShotShortcutModifierPair(shortcut), onCurrentShortcut, () => { - void runPromise( - setShortcutFailure( - snapShotShortcutRegistrationFailureMessage(shortcut, environment.platform), - ), + void pipe( + snapShotShortcutRegistrationFailureMessage(shortcut, environment.platform), + setShortcutFailure, + runPromise, ).catch(() => undefined); }), ).pipe( @@ -1726,24 +1719,28 @@ export const make = Effect.gen(function* () { ), ), ), - setAnimationDestination: (id, destination) => - Effect.promise(async () => { - if (linuxFeedback?.id === id && destination.relativeFrame) { - await linuxFeedback.feedback - .animateTo(destination.relativeFrame) - .catch(() => closeLinuxFeedback(id)); - return; - } - transition.animateTo(id, destination); - await transition.waitForLanding(id); - }), - dismissAnimation: (id) => - Effect.sync(() => { + setAnimationDestination: Effect.fn("DesktopSnapShot.setAnimationDestination")( + function (id, destination) { + return Effect.promise(async () => { + if (linuxFeedback?.id === id && destination.relativeFrame) { + await linuxFeedback.feedback + .animateTo(destination.relativeFrame) + .catch(() => closeLinuxFeedback(id)); + return; + } + transition.animateTo(id, destination); + await transition.waitForLanding(id); + }); + }, + ), + dismissAnimation: Effect.fn("DesktopSnapShot.dismissAnimation")(function (id) { + return Effect.sync(() => { closeLinuxFeedback(id); transition.dismiss(id); - }), - acknowledge: (id) => - Effect.promise(async () => { + }); + }), + acknowledge: Effect.fn("DesktopSnapShot.acknowledge")(function (id) { + return Effect.promise(async () => { await completeLinuxFeedback(id); await transition.complete(id); }).pipe( @@ -1759,7 +1756,8 @@ export const make = Effect.gen(function* () { Effect.mapError( (cause) => new DesktopSnapShotError({ operation: "acknowledge", captureId: id, cause }), ), - ), + ); + }), }); }); diff --git a/apps/desktop/src/snapShot/KdeSnapShot.ts b/apps/desktop/src/snapShot/KdeSnapShot.ts index bfd6b2984147d..50d9e700ee51e 100644 --- a/apps/desktop/src/snapShot/KdeSnapShot.ts +++ b/apps/desktop/src/snapShot/KdeSnapShot.ts @@ -182,8 +182,7 @@ export class KdeCaptureSetup { } // KService must see the new desktop entry before KWin checks the executable. await run("kbuildsycoca6", ["--noincremental"]); - // AppImages change XDG search paths, and KService caches are also locale-specific. - // Refresh Plasma's cache in its session environment, not just the app's cache. + // AppImage search paths and locale affect KService caches; refresh in Plasma's session environment. await run("systemd-run", [ "--user", "--quiet", diff --git a/apps/desktop/src/snapShot/MacModifierPairShortcutProcess.ts b/apps/desktop/src/snapShot/MacModifierPairShortcutProcess.ts index ad7b2e03c4954..117ffa652566b 100644 --- a/apps/desktop/src/snapShot/MacModifierPairShortcutProcess.ts +++ b/apps/desktop/src/snapShot/MacModifierPairShortcutProcess.ts @@ -11,8 +11,7 @@ const MAC_MODIFIER_PAIR_DEVICE_MASKS: Record { send(event, { ScreenshotCaptured: { path: "/another-app.png" } }); send(event, { ScreenshotCaptured: { path: screenshot.path } }); } - // The event may beat the command reply. send(socket, { Ok: "Handled" }); } else send(socket, { Ok: "Handled" }); }; diff --git a/apps/desktop/src/snapShot/RegionSnapShotWorker.ts b/apps/desktop/src/snapShot/RegionSnapShotWorker.ts index 374745c96e60c..f0ac7b9c1bba2 100644 --- a/apps/desktop/src/snapShot/RegionSnapShotWorker.ts +++ b/apps/desktop/src/snapShot/RegionSnapShotWorker.ts @@ -1,5 +1,4 @@ -// Runs in a forked Node-mode child so the native screenshot call cannot crash -// or stall the main process. +// Isolate native screenshot crashes and stalls in a Node-mode child. import type { RegionSnapShotRequest, RegionSnapShotResult } from "./RegionSnapShot.ts"; process.once("disconnect", () => process.exit(0)); diff --git a/apps/desktop/src/snapShot/SnapShotAccessibility.ts b/apps/desktop/src/snapShot/SnapShotAccessibility.ts index 3361aafc3c78a..9021c8904e3fe 100644 --- a/apps/desktop/src/snapShot/SnapShotAccessibility.ts +++ b/apps/desktop/src/snapShot/SnapShotAccessibility.ts @@ -172,8 +172,7 @@ async function readCapturedWindowAccessibility( .catch(() => { progress.flatComplete = true; }); - // A decorated screenshot contains more than the accessibility client area. Keep its - // frame origin/scale so element coordinates include the actual decoration offset. + // Preserve the screenshot frame origin and scale so accessibility coordinates include decorations. const sourceBounds = matchMode === "wayland" && active.clientBounds ? active.bounds diff --git a/apps/desktop/src/snapShot/SnapShotAccessibilityProcess.ts b/apps/desktop/src/snapShot/SnapShotAccessibilityProcess.ts index dd1474b885052..542e3f13c08dc 100644 --- a/apps/desktop/src/snapShot/SnapShotAccessibilityProcess.ts +++ b/apps/desktop/src/snapShot/SnapShotAccessibilityProcess.ts @@ -49,8 +49,7 @@ export function startSnapShotAccessibilityProcess(workerPath: string): Accessibi let worker: NodeChildProcess.ChildProcess; try { worker = NodeChildProcess.fork(workerPath, ["read"], { - // Electron defaults to its Helper executable on macOS, which does not - // share the main app's Accessibility grant checked during setup. + // Electron's default macOS Helper executable lacks the main app's Accessibility grant. execPath: process.execPath, env: { ...process.env, diff --git a/apps/desktop/src/snapShot/SnapShotTransition.ts b/apps/desktop/src/snapShot/SnapShotTransition.ts index a8ca237009bbe..4b6ce04a1bf27 100644 --- a/apps/desktop/src/snapShot/SnapShotTransition.ts +++ b/apps/desktop/src/snapShot/SnapShotTransition.ts @@ -310,8 +310,7 @@ export class SnapShotTransition { } } if (this.waitForCompositorFrame) { - // Cover the source with a composited snapshot before the caller reveals T3. - // Decoding and renderer animation frames alone can leave a transparent gap. + // Renderer frames alone can leave a transparent gap; composite the snapshot before revealing T3. await Promise.all( overlays.map(async (overlay) => { if (this.active !== active || overlay.window.isDestroyed()) return; @@ -408,8 +407,7 @@ export class SnapShotTransition { ); if (this.active !== active || overlay.window.isDestroyed()) return; if (this.waitForCompositorFrame) { - // Read back one pixel after preparation to flush queued compositor work - // before the animation clock starts on any of the display surfaces. + // Read back one pixel to flush compositor work before starting any display's animation clock. await overlay.window.webContents.capturePage({ x: 0, y: 0, width: 1, height: 1 }); } return overlay; diff --git a/apps/desktop/src/snapShot/WindowsCaptureFeedback.ts b/apps/desktop/src/snapShot/WindowsCaptureFeedback.ts index eb02eb7a03d13..ca4165626b260 100644 --- a/apps/desktop/src/snapShot/WindowsCaptureFeedback.ts +++ b/apps/desktop/src/snapShot/WindowsCaptureFeedback.ts @@ -4,8 +4,7 @@ const WINDOW_ANIMATIONS_DISABLED = "wm-window-animations-disabled"; /** Show capture feedback without Aura's extra 200 ms fade/scale on transparent windows. */ export function showWindowsCaptureOverlay(window: Electron.BaseWindow): void { - // Chromium reads this switch synchronously inside Show(). Restore it before returning - // so other windows and CSS animations keep their normal behavior. + // Show() reads the switch synchronously; restore it before other windows or animations can be affected. const alreadyDisabled = Electron.app.commandLine.hasSwitch(WINDOW_ANIMATIONS_DISABLED); if (!alreadyDisabled) Electron.app.commandLine.appendSwitch(WINDOW_ANIMATIONS_DISABLED); try { diff --git a/apps/desktop/src/snapShot/linuxCaptureSession.ts b/apps/desktop/src/snapShot/linuxCaptureSession.ts index c35fee18db45e..59fe40b7c5212 100644 --- a/apps/desktop/src/snapShot/linuxCaptureSession.ts +++ b/apps/desktop/src/snapShot/linuxCaptureSession.ts @@ -4,8 +4,7 @@ import * as NodeURL from "node:url"; import type { SnapShotKeyChord } from "@t3tools/contracts"; import { nativeImage } from "electron"; -// Linux helpers that need no D-Bus. Keep this module free of dbus-next so the main -// process can answer "which desktop is this" and read a PNG without loading it. +// Keep dbus-next out of desktop detection and PNG reads in the main process. export const HYPRLAND_CAPTURE_ACTION = "capture-window"; export const NIRI_CAPTURE_PATH = "/com/t3tools/SnapShot"; diff --git a/apps/desktop/src/snapShot/snapShot.test.ts b/apps/desktop/src/snapShot/snapShot.test.ts index 26ae8fbf9ebe9..fe166f5d099a0 100644 --- a/apps/desktop/src/snapShot/snapShot.test.ts +++ b/apps/desktop/src/snapShot/snapShot.test.ts @@ -1,5 +1,6 @@ import { it as effectIt } from "@effect/vitest"; import * as HostProcess from "@t3tools/shared/HostProcess"; +import { parseKeybindingShortcut } from "@t3tools/shared/keybindings"; import * as Effect from "effect/Effect"; import { describe, expect, it } from "vite-plus/test"; @@ -8,9 +9,8 @@ import { accessibleWindowText, compactAccessibilityTree, findAccessibleWindow, - findCaptureSource, - hideAndWaitForBlur, isWaylandSession, + toElectronAccelerator, } from "./snapShot.ts"; describe("accessibleWindowText", () => { @@ -450,65 +450,18 @@ describe("findAccessibleWindow", () => { }); }); -describe("hideAndWaitForBlur", () => { - it("waits for a delayed blur after hiding the window", async () => { - let blur: (() => void) | undefined; - let settled = false; - const hidden = hideAndWaitForBlur({ - hide: () => undefined, - once: (_event, listener) => { - blur = listener; - }, - removeListener: () => undefined, - }).then(() => { - settled = true; - }); - - await Promise.resolve(); - expect(settled).toBe(false); - blur?.(); - await hidden; - expect(settled).toBe(true); - }); -}); - -describe("findCaptureSource", () => { - const sources = [ - { id: "window:42:0", name: "Terminal" }, - { id: "window:84:0", name: "Editor" }, - ]; - - it("matches the native window id before its title", () => { - expect( - findCaptureSource(sources, { - id: 84, - title: "Changed title", - }), - ).toEqual(sources[1]); - }); - - it("falls back to a unique title match", () => { - expect( - findCaptureSource(sources, { - id: 100, - title: "Terminal", - }), - ).toEqual(sources[0]); - }); - - it("does not guess when a title is ambiguous", () => { - expect( - findCaptureSource( - [ - { id: "window:42:0", name: "Editor" }, - { id: "window:84:0", name: "Editor" }, - ], - { - id: 100, - title: "Editor", - }, - ), - ).toBeUndefined(); +describe("toElectronAccelerator", () => { + // The settings recorder stores shortcuts through parseKeybindingShortcut, which lowercases keys. + it.each([ + ["mod+shift+arrowup", "CommandOrControl+Shift+Up"], + ["mod+shift+arrowdown", "CommandOrControl+Shift+Down"], + ["ctrl+alt+arrowleft", "Control+Alt+Left"], + ["ctrl+alt+arrowright", "Control+Alt+Right"], + ["mod+shift+esc", "CommandOrControl+Shift+Esc"], + ["mod+shift+space", "CommandOrControl+Shift+Space"], + ["mod+shift+2", "CommandOrControl+Shift+2"], + ])("maps a recorded %s to an Electron accelerator", (recorded, accelerator) => { + expect(toElectronAccelerator(parseKeybindingShortcut(recorded)!)).toBe(accelerator); }); }); diff --git a/apps/desktop/src/snapShot/snapShot.ts b/apps/desktop/src/snapShot/snapShot.ts index 958e017299e0e..8be137cb32a46 100644 --- a/apps/desktop/src/snapShot/snapShot.ts +++ b/apps/desktop/src/snapShot/snapShot.ts @@ -23,7 +23,6 @@ interface AccessibilityTreeNode { } const MAX_ACCESSIBILITY_TREE_NODES = 10_000; -const WINDOW_BLUR_TIMEOUT_MS = 1_000; export const WINDOWS_MODIFIER_PAIR_VIRTUAL_KEYS: Record< SnapShotModifier, @@ -438,25 +437,6 @@ export async function accessibleWindowElementTree( return { root: compacted.root, truncated: completedTruncated }; } -export function hideAndWaitForBlur(window: { - readonly hide: () => void; - readonly once: (event: "blur", listener: () => void) => unknown; - readonly removeListener: (event: "blur", listener: () => void) => unknown; -}): Promise { - return new Promise((resolve, reject) => { - const timeout = setTimeout(() => { - window.removeListener("blur", onBlur); - reject(new Error("Timed out waiting for T3 Code to lose focus.")); - }, WINDOW_BLUR_TIMEOUT_MS); - const onBlur = () => { - clearTimeout(timeout); - resolve(); - }; - window.once("blur", onBlur); - window.hide(); - }); -} - type WindowBounds = { readonly x: number; readonly y: number; @@ -520,8 +500,7 @@ export function findAccessibleWindow< const browserMatch = findBrowserTitleMatch(windows, titles, captured, matchMode, matchesBounds); if (browserMatch) return browserMatch; } - // GTK4/libadwaita often exposes the frame as an unnamed group. A PID-scoped - // lookup can accept the one window whose bounds match; size-only guesses cannot. + // GTK4 frames may be unnamed; accept only a PID-scoped unique bounds match, never size alone. if (!options.allowUntitledUniqueBounds) return undefined; const boundsMatches = windows.filter( (window) => normalizeTitle(window.name ?? "") === "" && matchesBounds(window), @@ -560,14 +539,15 @@ function findBrowserTitleMatch( return browserMatches.length === 1 ? browserMatches[0] : undefined; } +// Keyed by the lowercase tokens parseKeybindingShortcut stores; Electron has no `ArrowUp` token. const ELECTRON_KEY_NAMES: Readonly> = { " ": "Space", "+": "Plus", - ArrowDown: "Down", - ArrowLeft: "Left", - ArrowRight: "Right", - ArrowUp: "Up", - Escape: "Esc", + arrowdown: "Down", + arrowleft: "Left", + arrowright: "Right", + arrowup: "Up", + escape: "Esc", }; export function sameSnapShotShortcut(left: SnapShotShortcut, right: SnapShotShortcut): boolean { @@ -592,30 +572,6 @@ export function toElectronAccelerator(shortcut: SnapShotKeyChord): string { return parts.join("+"); } -interface CaptureSourceLike { - readonly id: string; - readonly name: string; -} - -interface ActiveWindowLike { - readonly id: number; - readonly title: string; -} - -export function findCaptureSource( - sources: readonly T[], - activeWindow: ActiveWindowLike, -): T | undefined { - const idPrefix = `window:${activeWindow.id}:`; - const idMatch = sources.find((source) => source.id.startsWith(idPrefix)); - if (idMatch) return idMatch; - - const title = activeWindow.title.trim(); - if (!title) return undefined; - const titleMatches = sources.filter((source) => source.name.trim() === title); - return titleMatches.length === 1 ? titleMatches[0] : undefined; -} - export function isWaylandSession( platform: NodeJS.Platform, environment: NodeJS.ProcessEnv, diff --git a/apps/desktop/src/ssh/DesktopSshEnvironment.ts b/apps/desktop/src/ssh/DesktopSshEnvironment.ts index 61b104b4ac62b..f6c9ee43d7580 100644 --- a/apps/desktop/src/ssh/DesktopSshEnvironment.ts +++ b/apps/desktop/src/ssh/DesktopSshEnvironment.ts @@ -125,7 +125,7 @@ const makePasswordPrompt = ( prompts.request(request).pipe(Effect.mapError(toSshPasswordPromptError)), }); -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const manager = yield* SshTunnel.SshEnvironmentManager; const prompts = yield* DesktopSshPasswordPrompts.DesktopSshPasswordPrompts; @@ -133,32 +133,26 @@ export const make = Effect.gen(function* () { const passwordPrompt = SshAuth.SshPasswordPrompt.of(makePasswordPrompt(prompts)); return DesktopSshEnvironment.of({ - discoverHosts: (input) => - discoverDesktopSshHostsEffect(input).pipe( - Effect.provide(runtimeContext), - Effect.withSpan("desktop.ssh.discoverHosts"), - ), - resolveHost: (alias) => - resolveSshTarget(alias.trim()).pipe( - Effect.provide(runtimeContext), - Effect.withSpan("desktop.ssh.resolveHost"), - ), - ensureEnvironment: (target, ensureOptions) => - manager - .ensureEnvironment(target, ensureOptions) - .pipe( - Effect.provideService(SshAuth.SshPasswordPrompt, passwordPrompt), - Effect.provide(runtimeContext), - Effect.withSpan("desktop.ssh.ensureEnvironment"), - ), - disconnectEnvironment: (target) => - manager - .disconnectEnvironment(target) - .pipe( - Effect.provideService(SshAuth.SshPasswordPrompt, passwordPrompt), - Effect.provide(runtimeContext), - Effect.withSpan("desktop.ssh.disconnectEnvironment"), - ), + discoverHosts: Effect.fn("desktop.ssh.discoverHosts")(function* (input) { + return yield* discoverDesktopSshHostsEffect(input); + }, Effect.provide(runtimeContext)), + resolveHost: Effect.fn("desktop.ssh.resolveHost")(function* (alias) { + return yield* resolveSshTarget(alias.trim()); + }, Effect.provide(runtimeContext)), + ensureEnvironment: Effect.fn("desktop.ssh.ensureEnvironment")( + function* (target, ensureOptions) { + return yield* manager.ensureEnvironment(target, ensureOptions); + }, + Effect.provideService(SshAuth.SshPasswordPrompt, passwordPrompt), + Effect.provide(runtimeContext), + ), + disconnectEnvironment: Effect.fn("desktop.ssh.disconnectEnvironment")( + function* (target) { + return yield* manager.disconnectEnvironment(target); + }, + Effect.provideService(SshAuth.SshPasswordPrompt, passwordPrompt), + Effect.provide(runtimeContext), + ), }); }); diff --git a/apps/desktop/src/ssh/DesktopSshPasswordPrompts.ts b/apps/desktop/src/ssh/DesktopSshPasswordPrompts.ts index 296b81339e80e..7442282aa15ad 100644 --- a/apps/desktop/src/ssh/DesktopSshPasswordPrompts.ts +++ b/apps/desktop/src/ssh/DesktopSshPasswordPrompts.ts @@ -218,7 +218,7 @@ const failPending = ( error: DesktopSshPasswordPromptRequestError, ) => Deferred.fail(pending.deferred, error).pipe(Effect.asVoid); -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.fn("desktop.sshPasswordPrompts.make")(function* ( options: DesktopSshPasswordPromptsOptions = {}, ) { diff --git a/apps/desktop/src/telemetry/DesktopTelemetryPublisher.ts b/apps/desktop/src/telemetry/DesktopTelemetryPublisher.ts index 5e4b1de81b833..8800c4f428331 100644 --- a/apps/desktop/src/telemetry/DesktopTelemetryPublisher.ts +++ b/apps/desktop/src/telemetry/DesktopTelemetryPublisher.ts @@ -141,7 +141,7 @@ function sampleInterval( return LIVE_SAMPLE_INTERVAL; } -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.fn("desktop.telemetryPublisher.make")(function* () { const electronApp = yield* ElectronApp.ElectronApp; const powerMonitor = yield* ElectronPowerMonitor.ElectronPowerMonitor; diff --git a/apps/desktop/src/updates/DesktopRemoteUpdates.test.ts b/apps/desktop/src/updates/DesktopRemoteUpdates.test.ts index 49acc3f86a483..1f5321148b77b 100644 --- a/apps/desktop/src/updates/DesktopRemoteUpdates.test.ts +++ b/apps/desktop/src/updates/DesktopRemoteUpdates.test.ts @@ -22,9 +22,7 @@ import * as DesktopRemoteUpdates from "./DesktopRemoteUpdates.ts"; import * as DesktopUpdates from "./DesktopUpdates.ts"; import { makeHarness } from "./updatesTestHarness.ts"; -// The remote flow hops between the test runtime's fibers and the updater's -// runPromise-driven event handlers, so settling needs real microtask turns, -// not just fiber yields. +// Updater runPromise handlers need real microtasks between test-runtime fiber yields. const settle = Effect.gen(function* () { for (let i = 0; i < 20; i += 1) { yield* Effect.yieldNow; @@ -121,6 +119,239 @@ describe("DesktopRemoteUpdates", () => { ); }); + it.effect("switches to the requested track before preparing its release", () => { + // In-memory settings keep the channel write off real disk I/O. + const harness = makeHarness({ beforeSetUpdateChannel: Effect.void }); + + return runRemoteUpdatesTest(harness, ({ reports, requests }) => + Effect.gen(function* () { + const updates = yield* DesktopUpdates.DesktopUpdates; + yield* Queue.offer(requests, { + ...request("req-switch"), + channel: "nightly", + targetVersion: "1.2.4-nightly.20261027.1", + }); + yield* settle; + assert.equal((yield* updates.getState).channel, "nightly"); + + harness.emit("update-available", { version: "1.2.4-nightly.20261027.1" }); + yield* settle; + harness.emit("update-downloaded", { version: "1.2.4-nightly.20261027.1" }); + yield* settle; + + const terminals = terminalReports(reports); + assert.deepEqual( + terminals.map((report) => [report.requestId, report.outcome]), + [["req-switch", "ready-to-install"]], + ); + assert.equal(terminals[0]?.state.downloadedVersion, "1.2.4-nightly.20261027.1"); + }), + ); + }); + + it.effect( + "refuses a crossing whose feed has only an older build, and never offers it later", + () => { + const harness = makeHarness({ beforeSetUpdateChannel: Effect.void }); + + return runRemoteUpdatesTest(harness, ({ reports, requests }) => + Effect.gen(function* () { + const updates = yield* DesktopUpdates.DesktopUpdates; + const older = "1.2.4-nightly.20261020.1"; + yield* Queue.offer(requests, { + ...request("req-older"), + channel: "nightly", + targetVersion: "1.2.4-nightly.20261027.1", + }); + yield* settle; + // Answers the track change's check, then the request's own check. + harness.emit("update-available", { version: older }); + yield* settle; + harness.emit("update-available", { version: older }); + yield* settle; + + assert.deepEqual( + terminalReports(reports).map((report) => [report.outcome, report.reason]), + [["failed", "The desktop app found no build of 1.2.4-nightly.20261027.1."]], + ); + // The saved track is the user's intent; a retry picks it up from here. + assert.equal((yield* updates.getState).channel, "nightly"); + + // A plain update afterwards cannot reach the build the switch refused. + yield* Queue.offer(requests, request("req-plain")); + yield* settle; + harness.emit("update-available", { version: older }); + yield* settle; + assert.isNull((yield* updates.getState).availableVersion); + assert.equal(harness.downloadCount(), 0); + }), + ); + }, + ); + + it.effect("only saves the track on a host already running the release", () => { + const harness = makeHarness({ savedChannel: "nightly" }); + + return runRemoteUpdatesTest(harness, ({ reports, requests }) => + Effect.gen(function* () { + const updates = yield* DesktopUpdates.DesktopUpdates; + yield* Queue.offer(requests, { + ...request("req-track-only"), + channel: "latest", + targetVersion: "1.2.3", + }); + yield* settle; + // Even with a newer build on the feed, the host only saves its track. + harness.emit("update-available", { version: "1.2.4" }); + yield* settle; + + assert.deepEqual( + terminalReports(reports).map((report) => report.outcome), + ["up-to-date"], + ); + assert.equal((yield* updates.getState).channel, "latest"); + assert.equal(harness.downloadCount(), 0); + }), + ); + }); + + it.effect("drops a retained download below the switch's checked release", () => { + const harness = makeHarness({ beforeSetUpdateChannel: Effect.void }); + + return runRemoteUpdatesTest(harness, ({ reports, requests }) => + Effect.gen(function* () { + const updates = yield* DesktopUpdates.DesktopUpdates; + // Downloaded earlier on this Stable host, before the switch checked 1.2.5. + harness.emit("update-downloaded", { version: "1.2.4" }); + yield* settle; + assert.equal((yield* updates.getState).downloadedVersion, "1.2.4"); + + yield* Queue.offer(requests, { + ...request("req-floor"), + channel: "latest", + targetVersion: "1.2.5", + }); + yield* settle; + harness.emit("update-available", { version: "1.2.5" }); + yield* settle; + harness.emit("update-downloaded", { version: "1.2.5" }); + yield* settle; + + assert.deepEqual( + terminalReports(reports).map((report) => [ + report.outcome, + report.state.downloadedVersion, + ]), + [["ready-to-install", "1.2.5"]], + ); + }), + ); + }); + + it.effect("refuses to cross tracks remotely while WSL backends need their own checks", () => { + const harness = makeHarness({ beforeSetUpdateChannel: Effect.void, wslBackend: true }); + + return runRemoteUpdatesTest(harness, ({ reports, requests }) => + Effect.gen(function* () { + const updates = yield* DesktopUpdates.DesktopUpdates; + yield* Queue.offer(requests, { + ...request("req-wsl"), + channel: "nightly", + targetVersion: "1.2.4-nightly.20261027.1", + }); + yield* settle; + + assert.deepEqual( + terminalReports(reports).map((report) => report.outcome), + ["failed"], + ); + assert.include(terminalReports(reports)[0]?.reason ?? "", "Switch it on that machine"); + assert.equal((yield* updates.getState).channel, "latest"); + }), + ); + }); + + it.effect("fails a switch that leaves a same-track host below the checked release", () => { + const harness = makeHarness({ beforeSetUpdateChannel: Effect.void }); + + return runRemoteUpdatesTest(harness, ({ reports, requests }) => + Effect.gen(function* () { + yield* Queue.offer(requests, { + ...request("req-behind"), + channel: "latest", + targetVersion: "1.2.5", + }); + yield* settle; + // The feed lags npm and has nothing newer than this host's 1.2.3. + harness.emit("update-not-available"); + yield* settle; + harness.emit("update-not-available"); + yield* settle; + + assert.deepEqual( + terminalReports(reports).map((report) => [report.outcome, report.reason]), + [["failed", "The desktop app found no build of 1.2.5."]], + ); + }), + ); + }); + + it.effect("fails a crossing to an older-numbered Stable that the feed does not offer", () => { + const harness = makeHarness({ + appVersion: "1.2.4-nightly.20261027.1", + beforeSetUpdateChannel: Effect.void, + }); + + return runRemoteUpdatesTest(harness, ({ reports, requests }) => + Effect.gen(function* () { + yield* Queue.offer(requests, { + ...request("req-to-stable"), + channel: "latest", + targetVersion: "1.2.3", + }); + yield* settle; + harness.emit("update-not-available"); + yield* settle; + harness.emit("update-not-available"); + yield* settle; + + // Still on Nightly, though the target is numbered below this build. + assert.deepEqual( + terminalReports(reports).map((report) => [report.outcome, report.reason]), + [["failed", "The desktop app found no build of 1.2.3."]], + ); + }), + ); + }); + + it.effect("accepts a newer build than the checked release on the requested track", () => { + const harness = makeHarness({ beforeSetUpdateChannel: Effect.void }); + + return runRemoteUpdatesTest(harness, ({ reports, requests }) => + Effect.gen(function* () { + const newer = "1.2.4-nightly.20261028.2"; + yield* Queue.offer(requests, { + ...request("req-newer"), + channel: "nightly", + targetVersion: "1.2.4-nightly.20261027.1", + }); + yield* settle; + harness.emit("update-available", { version: newer }); + yield* settle; + harness.emit("update-downloaded", { version: newer }); + yield* settle; + + assert.deepEqual( + terminalReports(reports).map((report) => [ + report.outcome, + report.state.downloadedVersion, + ]), + [["ready-to-install", newer]], + ); + }), + ); + }); + it.effect("reports a failed outcome when quitAndInstall fails", () => { const harness = makeHarness({ quitAndInstall: Effect.fail( @@ -326,8 +557,6 @@ describe("DesktopRemoteUpdates", () => { }); it.effect("retries a download refused while the check still holds the reservation", () => { - // electron-updater emits update-available from inside checkForUpdates, - // before the check action releases its reservation. const releaseCheck = Deferred.makeUnsafe(); const harness = makeHarness({ checkForUpdates: Deferred.await(releaseCheck) }); @@ -359,9 +588,6 @@ describe("DesktopRemoteUpdates", () => { }); it.effect("waits for the download reservation before reporting prepared", () => { - // update-downloaded fires from inside downloadUpdate. If the flow - // reported "installing" right then, install would be refused for the - // held reservation after the irrevocable terminal already went out. const releaseDownload = Deferred.makeUnsafe(); const harness = makeHarness({ downloadUpdate: Deferred.await(releaseDownload) }); @@ -532,6 +758,42 @@ describe("DesktopRemoteUpdates", () => { ); }); + it.effect("cancels a track switch while its own feed check is still running", () => { + const releaseCheck = Deferred.makeUnsafe(); + const harness = makeHarness({ + beforeSetUpdateChannel: Effect.void, + checkForUpdates: Deferred.await(releaseCheck), + }); + + return runRemoteUpdatesTest(harness, ({ requests, cancellations }) => + Effect.gen(function* () { + yield* Queue.offer(requests, { + ...request("req-switch-cancel"), + channel: "nightly", + targetVersion: "1.2.4-nightly.20261027.1", + }); + yield* settle; + const updates = yield* DesktopUpdates.DesktopUpdates; + yield* Queue.offer(cancellations, { + version: 1, + type: "cancelDesktopUpdate", + requestId: "req-switch-cancel", + }); + yield* settle; + // The next request starts without waiting for the cancelled switch's feed check. + yield* Queue.offer(requests, { + ...request("req-switch-back"), + channel: "latest", + targetVersion: "1.2.3", + }); + yield* settle; + + assert.equal((yield* updates.getState).channel, "latest"); + yield* Deferred.succeed(releaseCheck, undefined); + }), + ); + }); + it.effect("cancels an active preparation so the next request can run", () => { const releaseCheck = Deferred.makeUnsafe(); const harness = makeHarness({ checkForUpdates: Deferred.await(releaseCheck) }); diff --git a/apps/desktop/src/updates/DesktopRemoteUpdates.ts b/apps/desktop/src/updates/DesktopRemoteUpdates.ts index cb1b86c07754b..560e2e78d4bb1 100644 --- a/apps/desktop/src/updates/DesktopRemoteUpdates.ts +++ b/apps/desktop/src/updates/DesktopRemoteUpdates.ts @@ -10,10 +10,13 @@ import * as Effect from "effect/Effect"; import * as Option from "effect/Option"; import * as Queue from "effect/Queue"; import * as Ref from "effect/Ref"; +import { desktopUpdateChannelOf } from "@t3tools/shared/cliRelease"; +import { compareSemverVersions } from "@t3tools/shared/semver"; import type * as Scope from "effect/Scope"; import * as Stream from "effect/Stream"; import * as DesktopObservability from "../app/DesktopObservability.ts"; +import * as DesktopBackendPool from "../backend/DesktopBackendPool.ts"; import * as DesktopTelemetryPublisher from "../telemetry/DesktopTelemetryPublisher.ts"; import * as DesktopUpdates from "./DesktopUpdates.ts"; import { @@ -44,9 +47,13 @@ type CommitClaim = export const listen: Effect.Effect< void, never, - DesktopUpdates.DesktopUpdates | DesktopTelemetryPublisher.DesktopTelemetryPublisher | Scope.Scope + | DesktopUpdates.DesktopUpdates + | DesktopTelemetryPublisher.DesktopTelemetryPublisher + | DesktopBackendPool.DesktopBackendPool + | Scope.Scope > = Effect.gen(function* () { const updates = yield* DesktopUpdates.DesktopUpdates; + const backends = yield* DesktopBackendPool.DesktopBackendPool; const publisher = yield* DesktopTelemetryPublisher.DesktopTelemetryPublisher; const activeRequestIdRef = yield* Ref.make(Option.none()); const requestControlRef = yield* Ref.make<{ @@ -171,15 +178,63 @@ export const listen: Effect.Effect< return; } yield* Ref.set(activeRequestIdRef, Option.some(request.requestId)); - yield* logInfo("remote update requested", { requestId: request.requestId }); + yield* logInfo("remote update requested", { + requestId: request.requestId, + channel: request.channel, + }); + // A switch saves its track first, so the step machine never sees the old track's offer. + // The saved track is the user's intent and stays even if this request fails: a track saved + // toward Stable never offers an older build outside a guarded switch. + if (request.channel !== undefined) { + // A reinstall restarts every backend, but the requesting server checked only its own + // database. A WSL backend keeps its own, so cross tracks only where all can be checked. + const current = yield* updates.getState; + if ( + desktopUpdateChannelOf(current.currentVersion) !== request.channel && + (yield* backends.list).length > 1 + ) { + yield* publishReport( + current, + { + outcome: "failed", + reason: + "This desktop app also runs WSL backends, whose databases a remote switch cannot check. Switch it on that machine.", + }, + request.requestId, + ); + return; + } + const switched = yield* Effect.raceFirst( + updates.setChannel(request.channel, { minimumVersion: request.targetVersion }).pipe( + Effect.as(true), + Effect.catch((error) => + updates.getState.pipe( + Effect.flatMap((state) => + publishReport( + state, + { outcome: "failed", reason: error.message }, + request.requestId, + ), + ), + Effect.as(false), + ), + ), + ), + Deferred.await(cancellation).pipe(Effect.as(false)), + ); + if (!switched) return; + // A host already running the target only needed its track saved; installing a newer + // build here would restart it without the dialog having said so. + const state = yield* updates.getState; + if (request.targetVersion === state.currentVersion) { + yield* publishReport(state, { outcome: "up-to-date" }, request.requestId); + return; + } + } const { latest, changes } = yield* updates.subscribe; const disabledReason = Option.getOrNull(yield* updates.disabledReason); let attempts: RemoteDesktopUpdateAttempts = { checks: 0, downloads: 0 }; - // A state event can land while the action that produced it still holds - // the reservation (e.g. "available" before the check releases), so a - // forked action can be refused with no later state event to retry on. - // Rejected actions re-enqueue their state here after a short pause so - // the step runs again once the reservation is free. + // State events can precede reservation release; re-enqueue refused actions so they retry after release. const retries = yield* Queue.unbounded(); const retryLater = (state: DesktopUpdateState) => Effect.sleep(ACTION_RETRY_DELAY).pipe( @@ -188,6 +243,12 @@ export const listen: Effect.Effect< Effect.forkScoped, ); + // A host leaving its build's track may need an older build, down to the checked release; + // the updater offers nothing below it. + const crossing = (state: DesktopUpdateState) => + request.channel !== undefined && + request.targetVersion !== undefined && + desktopUpdateChannelOf(state.currentVersion) !== request.channel; const step = Effect.fn("DesktopRemoteUpdates.step")(function* ( state: DesktopUpdateState, ): Effect.fn.Return { @@ -197,7 +258,7 @@ export const listen: Effect.Effect< return false; case "check": attempts = { ...attempts, checks: attempts.checks + 1 }; - yield* updates.check("remote-update").pipe( + yield* updates.check("remote-update", { allowDowngrade: crossing(state) }).pipe( Effect.flatMap((result) => { if (result.checked) return Effect.void; attempts = { ...attempts, checks: attempts.checks - 1 }; @@ -250,21 +311,34 @@ export const listen: Effect.Effect< yield* logInfo("remote update prepared", { requestId: request.requestId }); return true; } - case "done": + case "done": { + // A switch that leaves the host on its old track, or below its checked release, did + // not reach it; a track-only host already at the release is done. + const done = + request.targetVersion !== undefined && + next.outcome === "up-to-date" && + (crossing(state) || + compareSemverVersions(state.currentVersion, request.targetVersion) < 0) + ? { + outcome: "failed" as const, + reason: `The desktop app found no build of ${request.targetVersion}.`, + } + : next; yield* publishReport( state, { - outcome: next.outcome, - ...(next.reason === undefined ? {} : { reason: next.reason }), + outcome: done.outcome, + ...(done.reason === undefined ? {} : { reason: done.reason }), }, request.requestId, ); yield* logInfo("remote update finished", { requestId: request.requestId, - outcome: next.outcome, - reason: next.reason ?? null, + outcome: done.outcome, + reason: done.reason ?? null, }); return true; + } } }); @@ -416,11 +490,7 @@ export const listen: Effect.Effect< result.state.downloadedVersion === claim.prepared.downloadedVersion && (yield* updates.isInstallActive) ) { - // Another install (local, or an earlier remote request) already owns - // the shutdown and will relaunch the app on the same downloaded - // version. This commit joins it: no failure marker, and the client - // proves the handoff the same way, by transport loss then the - // target version on reconnect. + // Join the existing install; reconnect and target-version checks prove its handoff. yield* logInfo("remote update commit joining an in-progress install", { requestId: commit.requestId, }); @@ -433,9 +503,7 @@ export const listen: Effect.Effect< } return; } - // A successful install tears down this backend. Do not send a success - // marker from the old process: transport loss followed by the target - // version is the only proof that the handoff succeeded. + // Installation kills this backend; only transport loss followed by the target version proves handoff. }).pipe( Effect.ensuring(clearActiveRequest(commit.requestId)), Effect.catchCause((cause) => diff --git a/apps/desktop/src/updates/DesktopUpdates.test.ts b/apps/desktop/src/updates/DesktopUpdates.test.ts index 1d1b781946455..42aec756284c9 100644 --- a/apps/desktop/src/updates/DesktopUpdates.test.ts +++ b/apps/desktop/src/updates/DesktopUpdates.test.ts @@ -2,6 +2,7 @@ import { assert, describe, it } from "@effect/vitest"; import { DESKTOP_UPDATE_RESTART_MARKER_FILE } from "@t3tools/contracts"; import * as Cause from "effect/Cause"; import * as Deferred from "effect/Deferred"; +import * as Duration from "effect/Duration"; import * as Effect from "effect/Effect"; import * as Fiber from "effect/Fiber"; import * as Layer from "effect/Layer"; @@ -21,6 +22,22 @@ import * as DesktopUpdates from "./DesktopUpdates.ts"; import { flushCallbacks, makeHarness } from "./updatesTestHarness.ts"; describe("DesktopUpdates", () => { + it.effect("keeps fork previews on manual updates even with a feed", () => { + const harness = makeHarness({ + appVersion: "0.1.6-unlock.1-preview.20261101.1", + env: { T3CODE_DESKTOP_MOCK_UPDATES: "true" }, + }); + return Effect.scoped( + Effect.gen(function* () { + const updates = yield* DesktopUpdates.DesktopUpdates; + yield* updates.configure; + const state = yield* updates.getState; + assert.equal(state.status, "disabled"); + assert.include(state.message ?? "", "Unlock Digital preview"); + }), + ).pipe(Effect.provide(harness.layer)); + }); + it.effect.each([ { isPackaged: false, env: { T3CODE_DESKTOP_MOCK_UPDATES: "false" } }, { @@ -733,6 +750,65 @@ describe("DesktopUpdates", () => { ).pipe(Effect.provide(Layer.merge(TestClock.layer(), harness.layer))); }); + it.effect("ignores a finished download from a track it no longer follows", () => { + const harness = makeHarness(); + + return Effect.scoped( + Effect.gen(function* () { + const updates = yield* DesktopUpdates.DesktopUpdates; + yield* updates.configure; + // A backed-out switch's download keeps reporting progress until it finishes. + harness.emit("download-progress", { percent: 40 }); + yield* flushCallbacks; + harness.emit("update-downloaded", { version: "1.2.4-nightly.20261027.1" }); + yield* flushCallbacks; + + const state = yield* updates.getState; + assert.equal(state.downloadedVersion, null); + assert.notEqual(state.status, "downloading"); + }), + ).pipe(Effect.provide(Layer.merge(TestClock.layer(), harness.layer))); + }); + + it.effect("offers older releases only to checks that leave the running build's track", () => { + const harness = makeHarness({ beforeSetUpdateChannel: Effect.void }); + + return Effect.scoped( + Effect.gen(function* () { + const updates = yield* DesktopUpdates.DesktopUpdates; + yield* updates.configure; + const before = harness.checkAllowedDowngrade.length; + yield* updates.setChannel("nightly"); + yield* updates.setChannel("latest"); + yield* updates.check("remote-update", { allowDowngrade: true }); + + // Back on its own Stable track the build never needs an older release. + assert.deepEqual(harness.checkAllowedDowngrade.slice(before), [true, false, true]); + assert.isFalse(harness.allowDowngrade()); + }), + ).pipe(Effect.provide(Layer.merge(TestClock.layer(), harness.layer))); + }); + + it.effect("re-checks a saved track that differs from the running build's track", () => { + const harness = makeHarness({ + appVersion: "1.2.4-nightly.20261027.1", + beforeSetUpdateChannel: Effect.void, + }); + + return Effect.scoped( + Effect.gen(function* () { + const updates = yield* DesktopUpdates.DesktopUpdates; + yield* updates.configure; + yield* updates.setChannel("latest"); + const checks = harness.checkCount(); + + yield* updates.setChannel("latest"); + + assert.equal(harness.checkCount(), checks + 1); + }), + ).pipe(Effect.provide(Layer.merge(TestClock.layer(), harness.layer))); + }); + it.effect("does not persist an unchanged update channel as a user preference", () => { const harness = makeHarness(); @@ -752,6 +828,116 @@ describe("DesktopUpdates", () => { ).pipe(Effect.provide(Layer.merge(TestClock.layer(), harness.layer))); }); + it.effect("offers nothing below a track switch's checked release", () => { + const harness = makeHarness({ + appVersion: "1.2.4-nightly.20261027.1", + beforeSetUpdateChannel: Effect.void, + }); + + return Effect.scoped( + Effect.gen(function* () { + const updates = yield* DesktopUpdates.DesktopUpdates; + yield* updates.configure; + yield* updates.setChannel("latest", { minimumVersion: "1.2.3" }); + + harness.emit("update-available", { version: "1.2.2" }); + yield* flushCallbacks; + assert.isNull((yield* updates.getState).availableVersion); + harness.emit("update-downloaded", { version: "1.2.2" }); + yield* flushCallbacks; + assert.isNull((yield* updates.getState).downloadedVersion); + + harness.emit("update-available", { version: "1.2.3" }); + yield* flushCallbacks; + assert.equal((yield* updates.getState).availableVersion, "1.2.3"); + }), + ).pipe(Effect.provide(Layer.merge(TestClock.layer(), harness.layer))); + }); + + it.effect("keeps a saved Stable track across a restart without offering an older release", () => { + // A Nightly build whose switch to Stable did not finish before the app quit. + const harness = makeHarness({ appVersion: "1.2.4-nightly.20261027.1", savedChannel: "latest" }); + + return Effect.scoped( + Effect.gen(function* () { + const updates = yield* DesktopUpdates.DesktopUpdates; + yield* updates.configure; + yield* updates.check("startup"); + + assert.equal((yield* updates.getState).channel, "latest"); + assert.deepEqual(harness.checkAllowedDowngrade, [false]); + // Semver ranks Stable 1.2.4 above this Nightly, but a Nightly built before the release's + // version bump can hold migrations 1.2.4 lacks. Crossing needs a guarded switch. + harness.emit("update-available", { version: "1.2.4" }); + yield* flushCallbacks; + assert.isNull((yield* updates.getState).availableVersion); + }), + ).pipe(Effect.provide(Layer.merge(TestClock.layer(), harness.layer))); + }); + + it.effect("keeps a saved Nightly track across a restart without crossing on its own", () => { + // A Stable build whose switch to Nightly was refused before the app quit; its floor is gone. + const harness = makeHarness({ savedChannel: "nightly" }); + + return Effect.scoped( + Effect.gen(function* () { + const updates = yield* DesktopUpdates.DesktopUpdates; + yield* updates.configure; + yield* updates.check("startup"); + harness.emit("update-available", { version: "1.2.4-nightly.20261027.1" }); + yield* flushCallbacks; + + assert.equal((yield* updates.getState).channel, "nightly"); + assert.isNull((yield* updates.getState).availableVersion); + assert.deepEqual(harness.checkAllowedDowngrade, [false]); + }), + ).pipe(Effect.provide(Layer.merge(TestClock.layer(), harness.layer))); + }); + + it.effect("never offers an older Nightly to a Nightly build's own checks", () => { + const harness = makeHarness({ appVersion: "1.2.4-nightly.20261027.1" }); + + return Effect.scoped( + Effect.gen(function* () { + const updates = yield* DesktopUpdates.DesktopUpdates; + yield* updates.configure; + yield* updates.check("poll"); + + assert.equal((yield* updates.getState).channel, "nightly"); + assert.deepEqual(harness.checkAllowedDowngrade, [false]); + }), + ).pipe(Effect.provide(Layer.merge(TestClock.layer(), harness.layer))); + }); + + it.effect("waits out a background check instead of refusing a track change", () => + Effect.gen(function* () { + const checkStarted = yield* Deferred.make(); + const releaseCheck = yield* Deferred.make(); + const harness = makeHarness({ + beforeSetUpdateChannel: Effect.void, + checkForUpdates: Deferred.succeed(checkStarted, undefined).pipe( + Effect.andThen(Deferred.await(releaseCheck)), + ), + }); + + yield* Effect.scoped( + Effect.gen(function* () { + const updates = yield* DesktopUpdates.DesktopUpdates; + yield* updates.configure; + yield* updates.check("poll").pipe(Effect.forkScoped); + yield* Deferred.await(checkStarted); + + const channelFiber = yield* updates.setChannel("nightly").pipe(Effect.forkScoped); + yield* Deferred.succeed(releaseCheck, undefined); + yield* TestClock.adjust(Duration.seconds(2)); + const state = yield* Fiber.join(channelFiber); + + assert.equal(state.channel, "nightly"); + }), + ).pipe(Effect.provide(Layer.merge(TestClock.layer(), harness.layer))); + }), + ); + it.effect("rejects checks while an update channel change is being persisted", () => Effect.gen(function* () { const channelChangeStarted = yield* Deferred.make(); diff --git a/apps/desktop/src/updates/DesktopUpdates.ts b/apps/desktop/src/updates/DesktopUpdates.ts index 90021fc4ee3a7..72550ee9dcb86 100644 --- a/apps/desktop/src/updates/DesktopUpdates.ts +++ b/apps/desktop/src/updates/DesktopUpdates.ts @@ -1,3 +1,4 @@ +import { isUnlockDigitalPreviewVersion } from "@t3tools/shared/forkIdentity"; import { DESKTOP_UPDATE_RESTART_MARKER_FILE, DesktopUpdateChannelSchema, @@ -19,6 +20,7 @@ import * as Layer from "effect/Layer"; import * as Option from "effect/Option"; import * as PubSub from "effect/PubSub"; import * as Ref from "effect/Ref"; +import * as Schedule from "effect/Schedule"; import * as Schema from "effect/Schema"; import * as Scope from "effect/Scope"; import * as Semaphore from "effect/Semaphore"; @@ -34,7 +36,8 @@ import * as ElectronWindow from "../electron/ElectronWindow.ts"; import * as IpcChannels from "../ipc/channels.ts"; import * as DesktopAppSettings from "../settings/DesktopAppSettings.ts"; import { normalizeDesktopUpdateReleaseNotes } from "./releaseNotes.ts"; -import { resolveDefaultDesktopUpdateChannel } from "./updateChannels.ts"; +import { desktopUpdateChannelOf } from "@t3tools/shared/cliRelease"; +import { compareSemverVersions } from "@t3tools/shared/semver"; import { createInitialDesktopUpdateState, reduceDesktopUpdateStateOnCheckFailure, @@ -49,6 +52,8 @@ import { resolveNotAppliedInstallVersion, } from "./updateMachine.ts"; +const CHANNEL_CHANGE_RETRY_DELAY = Duration.seconds(1); +const CHANNEL_CHANGE_RETRIES = 30; const AUTO_UPDATE_STARTUP_DELAY = "15 seconds"; const AUTO_UPDATE_POLL_INTERVAL = "4 minutes"; const PREPARED_INSTALL_CHECK_WAIT = Duration.seconds(90); @@ -64,10 +69,9 @@ type AppUpdateYmlConfig = typeof AppUpdateYmlConfig.Type; const UpdateInfo = Schema.Struct({ version: Schema.String, - // Left unvalidated on purpose: a malformed release-notes payload must never - // fail the decode and block the update state transition. The shape is - // validated defensively in normalizeDesktopUpdateReleaseNotes. + // Malformed notes must not block update-state decoding; normalizeDesktopUpdateReleaseNotes validates separately. releaseNotes: Schema.optional(Schema.Unknown), + releaseDate: Schema.optional(Schema.String), }); const DownloadProgressInfo = Schema.Struct({ @@ -158,8 +162,6 @@ export class DesktopUpdateUnexpectedActionError extends Schema.TaggedError; readonly emitState: Effect.Effect; readonly disabledReason: Effect.Effect>; - readonly configure: Effect.Effect; + readonly configure: Effect.Effect; + /** `minimumVersion` is a track switch's checked release; nothing older is offered after. */ readonly setChannel: ( channel: DesktopUpdateChannel, + options?: { readonly minimumVersion?: string | undefined }, ) => Effect.Effect; - readonly check: (reason: string) => Effect.Effect; + /** `allowDowngrade` is for a guarded track switch, which checked that older release. */ + readonly check: ( + reason: string, + options?: { readonly allowDowngrade?: boolean }, + ) => Effect.Effect; readonly download: Effect.Effect; readonly install: Effect.Effect; readonly installPrepared: ( @@ -309,6 +317,7 @@ function shouldBroadcastDownloadProgress( } function getAutoUpdateDisabledReason(args: { + appVersion: string; isDevelopment: boolean; isPackaged: boolean; platform: NodeJS.Platform; @@ -320,6 +329,9 @@ function getAutoUpdateDisabledReason(args: { if (args.isDevelopment || !args.isPackaged) { return "Source build: use Upstream Updates to prepare a candidate, then review, test, rebuild, and restart when ready."; } + if (isUnlockDigitalPreviewVersion(args.appVersion)) { + return "Unlock Digital preview: install reviewed releases manually from github.com/unlockdigital/t3code/releases. Automatic replacement is disabled for this preview."; + } if (!args.hasUpdateFeedConfig) { return "Automatic updates are not available because no update feed is configured."; } @@ -336,7 +348,7 @@ function isArm64HostRunningIntelBuild(runtimeInfo: DesktopRuntimeInfo): boolean return runtimeInfo.hostArch === "arm64" && runtimeInfo.appArch === "x64"; } -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const config = yield* DesktopConfig.DesktopConfig; const pool = yield* DesktopBackendPool.DesktopBackendPool; @@ -356,6 +368,20 @@ export const make = Effect.gen(function* () { const updaterConfiguredRef = yield* Ref.make(false); const lastLoggedDownloadMilestoneRef = yield* Ref.make(-1); const notAppliedVersionRef = yield* Ref.make(Option.none()); + // The release a track switch's database check cleared. A build crosses to another track only + // through such a switch, and never below that release: version order alone cannot tell whether + // a Stable knows a Nightly's migrations. + const releaseFloorRef = yield* Ref.make(Option.none()); + const offerable = (version: string, state: DesktopUpdateState) => + Ref.get(releaseFloorRef).pipe( + Effect.map( + (floor) => + desktopUpdateChannelOf(version) === state.channel && + (Option.isSome(floor) + ? compareSemverVersions(version, floor.value) >= 0 + : desktopUpdateChannelOf(environment.appVersion) === state.channel), + ), + ); const updateStateRef = yield* Ref.make( createInitialDesktopUpdateState( environment.appVersion, @@ -365,8 +391,7 @@ export const make = Effect.gen(function* () { ); const stateChanges = yield* PubSub.sliding(16); - // Makes ref writes + publishes atomic against subscribe, so a snapshot - // never overlaps with the first change a subscriber receives. + // Serialize writes and publishes against subscription so snapshots cannot overlap the first change. const stateMutex = yield* Semaphore.make(1); const emitState = Ref.get(updateStateRef).pipe( @@ -400,8 +425,7 @@ export const make = Effect.gen(function* () { ), ); - // The .deb carries electron-builder's resources/package-type marker. - // electron-updater reads the same file and installs updates with dpkg. + // electron-updater uses this marker to install .deb updates with dpkg. const isDebPackage = environment.platform === "linux" && environment.isPackaged ? yield* fileSystem @@ -420,6 +444,7 @@ export const make = Effect.gen(function* () { const hasFeedConfig = yield* hasUpdateFeedConfig; return Option.fromNullishOr( getAutoUpdateDisabledReason({ + appVersion: environment.appVersion, isDevelopment: environment.isDevelopment, isPackaged: environment.isPackaged, platform: environment.platform, @@ -461,12 +486,13 @@ export const make = Effect.gen(function* () { const allowsPrerelease = channel === "nightly"; yield* electronUpdater.setChannel(channel); yield* electronUpdater.setAllowPrerelease(allowsPrerelease); - yield* electronUpdater.setAllowDowngrade(allowsPrerelease); + // An older build can lack migrations this one ran. Only a guarded track switch's own check + // may offer one. + yield* electronUpdater.setAllowDowngrade(false); yield* electronUpdater.setFullChangelog(allowsPrerelease); yield* logUpdaterInfo("using update channel", { channel, allowPrerelease: allowsPrerelease, - allowDowngrade: allowsPrerelease, fullChangelog: allowsPrerelease, }); }); @@ -474,6 +500,7 @@ export const make = Effect.gen(function* () { const checkForUpdates = Effect.fn("desktop.updates.checkForUpdates")(function* ( reason: string, actionReservation: "acquire" | "held" = "acquire", + allowDowngrade = false, ) { yield* Effect.annotateCurrentSpan({ reason }); if (yield* Ref.get(desktopState.quitting)) return false; @@ -495,7 +522,11 @@ export const make = Effect.gen(function* () { yield* setState(reduceDesktopUpdateStateOnCheckStart(state, checkedAt)); yield* logUpdaterInfo("checking for updates", { reason }); + // The flag is shared updater state, so it flips only while this check holds the reservation. + const restoreDowngrade = yield* electronUpdater.allowDowngrade; + if (allowDowngrade) yield* electronUpdater.setAllowDowngrade(true); return yield* electronUpdater.checkForUpdates.pipe( + Effect.ensuring(electronUpdater.setAllowDowngrade(restoreDowngrade).pipe(Effect.ignore)), Effect.as(true), Effect.catchTags({ ElectronUpdaterCheckForUpdatesError: Effect.fn( @@ -598,8 +629,7 @@ export const make = Effect.gen(function* () { ), ); - // A failed or interrupted install brings no updated backend, so a later - // quit must release the tunnel. + // Failed or interrupted installs leave no replacement backend; later quits must release the tunnel. const removeUpdateRestartMarker = fileSystem .remove(updateRestartMarkerPath, { force: true }) .pipe(Effect.ignore); @@ -743,11 +773,7 @@ export const make = Effect.gen(function* () { yield* writeUpdateRestartMarker; const { downloadedVersion } = yield* Ref.get(updateStateRef); if (downloadedVersion !== null) yield* writeInstallRecord(downloadedVersion); - // Stop every backend in the pool, not just the primary. With parallel - // WSL + Windows backends, leaving the WSL instance up means - // quitAndInstall's app.quit() exits before the pool's scope cascade - // has a chance to run its stop finalizer, so the WSL child gets - // hard-killed by the OS instead of receiving SIGTERM + grace. + // Stop pooled backends before quitAndInstall can outrun their scope finalizers. const instances = yield* pool.list; // stop clears desiredRunning, so retain the recovery set beforehand. const runningInstances = yield* Effect.filter(instances, (instance) => @@ -861,8 +887,8 @@ export const make = Effect.gen(function* () { Effect.flatMap( Effect.fn("desktop.updates.applyUpdateAvailable")(function* (info) { const state = yield* Ref.get(updateStateRef); - if (resolveDefaultDesktopUpdateChannel(info.version) !== state.channel) { - yield* logUpdaterInfo("ignoring update that does not match selected channel", { + if (!(yield* offerable(info.version, state))) { + yield* logUpdaterInfo("ignoring update outside the selected channel or its floor", { version: info.version, channel: state.channel, }); @@ -877,6 +903,7 @@ export const make = Effect.gen(function* () { info.releaseNotes, info.version, state.channel, + info.releaseDate, ); yield* setState( reduceDesktopUpdateStateOnUpdateAvailable( @@ -998,6 +1025,20 @@ export const make = Effect.gen(function* () { Effect.flatMap( Effect.fn("desktop.updates.applyUpdateDownloaded")(function* (info) { const state = yield* Ref.get(updateStateRef); + // A download can finish after its track switch moved on; never offer that build. + if (!(yield* offerable(info.version, state))) { + yield* logUpdaterInfo("ignoring download outside the selected channel or its floor", { + version: info.version, + channel: state.channel, + }); + // Its progress events left the updater "downloading", which would block every check. + if (state.status === "downloading") { + yield* setState( + reduceDesktopUpdateStateOnNoUpdate(state, yield* currentIsoTimestamp), + ); + } + return; + } yield* setState(reduceDesktopUpdateStateOnDownloadComplete(state, info.version)); yield* logUpdaterInfo("update downloaded", { version: info.version }); }), @@ -1104,9 +1145,17 @@ export const make = Effect.gen(function* () { }).pipe(Effect.withSpan("desktop.updates.configure")), setChannel: Effect.fn("desktop.updates.setChannel")(function* ( nextChannel: DesktopUpdateChannel, + options?: { readonly minimumVersion?: string | undefined }, ) { yield* Effect.annotateCurrentSpan({ channel: nextChannel }); - const activeAction = yield* tryStartChannelChange; + // A background check holds the updater only briefly, so wait it out instead of refusing. + const activeAction = yield* tryStartChannelChange.pipe( + Effect.repeat({ + while: (active) => Option.isSome(active) && active.value === "check", + schedule: Schedule.spaced(CHANNEL_CHANGE_RETRY_DELAY), + times: CHANNEL_CHANGE_RETRIES, + }), + ); if (Option.isSome(activeAction)) { return yield* new DesktopUpdateActionInProgressError({ action: activeAction.value === "install-recovery" ? "install" : activeAction.value, @@ -1115,8 +1164,16 @@ export const make = Effect.gen(function* () { } return yield* Effect.gen(function* () { + yield* Ref.set(releaseFloorRef, Option.fromNullishOr(options?.minimumVersion)); const state = yield* Ref.get(updateStateRef); - if (nextChannel === state.channel) { + const retained = state.downloadedVersion ?? state.availableVersion; + // A build from another track re-checks, so retrying a track switch finds an older release. + // So does a retained offer below the new floor, which must not install. + if ( + nextChannel === state.channel && + nextChannel === desktopUpdateChannelOf(environment.appVersion) && + (retained === null || (yield* offerable(retained, state))) + ) { return state; } @@ -1136,15 +1193,19 @@ export const make = Effect.gen(function* () { } yield* applyAutoUpdaterChannel(nextChannel); - const allowDowngrade = yield* electronUpdater.allowDowngrade; - yield* electronUpdater.setAllowDowngrade(true); - yield* checkForUpdates("channel-change", "held").pipe( - Effect.ensuring(electronUpdater.setAllowDowngrade(allowDowngrade).pipe(Effect.ignore)), + // Only leaving the running build's track can need an older release. + yield* checkForUpdates( + "channel-change", + "held", + nextChannel !== desktopUpdateChannelOf(environment.appVersion), ); return yield* Ref.get(updateStateRef); }).pipe(Effect.ensuring(finishUpdateAction("channel"))); }), - check: Effect.fn("desktop.updates.check")(function* (reason: string) { + check: Effect.fn("desktop.updates.check")(function* ( + reason: string, + options?: { readonly allowDowngrade?: boolean }, + ) { yield* Effect.annotateCurrentSpan({ reason }); if (!(yield* Ref.get(updaterConfiguredRef))) { return { @@ -1152,7 +1213,7 @@ export const make = Effect.gen(function* () { state: yield* Ref.get(updateStateRef), }; } - const checked = yield* checkForUpdates(reason); + const checked = yield* checkForUpdates(reason, "acquire", options?.allowDowngrade === true); return { checked, state: yield* Ref.get(updateStateRef), @@ -1169,7 +1230,9 @@ export const make = Effect.gen(function* () { install: installWithExpectedVersion().pipe( Effect.map(({ accepted, completed, state }) => ({ accepted, completed, state })), ), - installPrepared: (expectedVersion) => installWithExpectedVersion(expectedVersion), + installPrepared: Effect.fn("DesktopUpdates.installPrepared")(function (expectedVersion) { + return installWithExpectedVersion(expectedVersion); + }), }); }); diff --git a/apps/desktop/src/updates/releaseNotes.test.ts b/apps/desktop/src/updates/releaseNotes.test.ts index 008a83eab03db..30db8274c208f 100644 --- a/apps/desktop/src/updates/releaseNotes.test.ts +++ b/apps/desktop/src/updates/releaseNotes.test.ts @@ -28,6 +28,7 @@ describe("normalizeDesktopUpdateReleaseNotes", () => { releaseNotes: [ { version: "0.0.36-nightly.20260828.1213", + releasedAt: "2026-08-28", items: [ "fix(opencode): handle child approvals, stops, and model catalogs by @human in #8480", "fix(web): keep long task drawers usable on small screens by @human in #8313", @@ -60,6 +61,37 @@ describe("normalizeDesktopUpdateReleaseNotes", () => { }); }); + it("reads a generated summary as a note and skips the folded full list", () => { + const fixes = Array.from({ length: 9 }, (_, index) => `- Fix ${index + 1} (#${index + 1})`); + const result = normalizeDesktopUpdateReleaseNotes( + [ + "**v1.2.4** · 12 changes from 3 contributors", + "## Highlights", + "Link machines (beta).", + "## Fixes", + ...fixes, + "
", + "Full changelog", + "* fix: raw entry by @human in https://github.com/pingdotgg/t3code/pull/1", + "
", + ].join("\n"), + "1.2.4", + "latest", + "2026-10-29T10:00:00.000Z", + ); + + expect(result.releaseNotes).toEqual([ + { + version: "1.2.4", + releasedAt: "2026-10-29T10:00:00.000Z", + stats: "12 changes from 3 contributors", + intro: "Link machines (beta).", + items: fixes.map((_, index) => `Fix ${index + 1}`), + totalItems: 10, + }, + ]); + }); + it("does not count Markdown or HTML section headings as changes", () => { const changes = Array.from({ length: 8 }, (_, index) => `Change ${index + 1}`); const result = normalizeDesktopUpdateReleaseNotes( @@ -80,9 +112,36 @@ describe("normalizeDesktopUpdateReleaseNotes", () => { ]); }); + it("reads handwritten notes with their own
as a list", () => { + const result = normalizeDesktopUpdateReleaseNotes( + "- Older fix\n- Newer fix\n
Logs\n- hidden\n
", + "1.2.3", + "latest", + ); + + expect(result.releaseNotes).toEqual([ + { version: "1.2.3", items: ["hidden", "Logs", "Newer fix", "Older fix"], totalItems: 4 }, + ]); + }); + + it("dates the offered release from the feed and older nightlies by their build day", () => { + const result = normalizeDesktopUpdateReleaseNotes( + [ + { version: "0.0.41-nightly.20260914.1707", note: "- Nightly change 2" }, + { version: "0.0.41-nightly.20260913.1700", note: "- Nightly change 1" }, + ], + "0.0.41-nightly.20260914.1707", + "nightly", + "2026-09-14T18:30:00.000Z", + ); + + expect(result.releaseNotes.map(({ releasedAt }) => releasedAt)).toEqual([ + "2026-09-14T18:30:00.000Z", + "2026-09-13", + ]); + }); + it("drops releases from other trains before grouping on nightly", () => { - // electron-updater's full changelog is "every version above the running - // one", and preview sorts above nightly, so the preview cuts come first. const releaseNotes = [ { version: "0.0.41-preview.20260914.1683", note: "- Maintainer test build" }, { version: "0.0.41-preview.20260913.1669", note: "- Maintainer test build" }, @@ -173,4 +232,45 @@ describe("normalizeDesktopUpdateReleaseNotes", () => { omittedReleaseCount: 0, }); }); + + it("ignores the Full Changelog paragraph that ends GitHub's generated notes", () => { + const fullChangelog = (from: string, to: string) => + `

Full Changelog: v${from}...v${to}

`; + const result = normalizeDesktopUpdateReleaseNotes( + [ + { + version: "0.1.3-nightly.20261024.3604", + note: fullChangelog("0.1.3-nightly.20261023.3592", "0.1.3-nightly.20261024.3604"), + }, + { + version: "0.1.3-nightly.20261023.3592", + note: + "

What's Changed

\n
    \n" + + '
  • fix(web): A by @a in #1
  • \n' + + '
  • fix(web): B by @b in #2
  • \n' + + "
  • Full Changelog: links open in the browser in #3
  • \n" + + "
\n" + + fullChangelog("0.1.3-nightly.20261023.3579", "0.1.3-nightly.20261023.3592"), + }, + ], + "0.1.3-nightly.20261024.3604", + "nightly", + ); + + expect(result).toEqual({ + releaseNotes: [ + { + version: "0.1.3-nightly.20261023.3592", + items: [ + "Full Changelog: links open in the browser in #3", + "fix(web): B by @b in #2", + "fix(web): A by @a in #1", + ], + releasedAt: "2026-10-23", + totalItems: 3, + }, + ], + omittedReleaseCount: 0, + }); + }); }); diff --git a/apps/desktop/src/updates/releaseNotes.ts b/apps/desktop/src/updates/releaseNotes.ts index ef6d217299d09..1fb81088175c1 100644 --- a/apps/desktop/src/updates/releaseNotes.ts +++ b/apps/desktop/src/updates/releaseNotes.ts @@ -1,6 +1,6 @@ import type { DesktopUpdateChannel, DesktopUpdateReleaseNote } from "@t3tools/contracts"; -import { resolveDefaultDesktopUpdateChannel } from "./updateChannels.ts"; +import { desktopUpdateChannelOf } from "@t3tools/shared/cliRelease"; interface ElectronReleaseNoteInfo { readonly version: string; @@ -30,8 +30,6 @@ const HTML_ENTITY_REPLACEMENTS: Readonly> = { }; function decodeCodePoint(codePoint: number, entity: string): string { - // String.fromCodePoint throws RangeError outside the valid Unicode range, and - // Number.isFinite alone lets oversized values (e.g. �) through. if (!Number.isInteger(codePoint) || codePoint < 0 || codePoint > 0x10ffff) { return `&${entity};`; } @@ -88,18 +86,55 @@ function isIgnoredReleaseNoteLine(line: string): boolean { normalized === "what's changed" || normalized === "whats changed" || normalized.startsWith("compare: ") || - normalized.includes("/compare/") + normalized.includes("/compare/") || + // The feed's HTML footer loses its compare URL to stripMarkup, leaving only the range. + /^full changelog: \S+\.\.\.\S+$/.test(normalized) ); } interface ExtractedReleaseNoteItems { readonly items: ReadonlyArray; readonly totalItems: number; + readonly intro?: string; + readonly stats?: string; +} + +/** + * Reads a generated summary (`scripts/generate-release-notes.ts`): a `v1.2.3 · N changes…` + * header, a highlights paragraph, and fix bullets. PR numbers are left to the GitHub page. + */ +function extractReleaseNoteSummary(summary: string): ExtractedReleaseNoteItems { + let stats: string | undefined; + const intro: string[] = []; + const items: string[] = []; + for (const rawLine of stripMarkup(summary).split("\n")) { + const line = rawLine.trim().replace(/\s+/g, " "); + if (line === "" || /^#{1,6}\s+/.test(line)) continue; + if (stats === undefined && /^v\S+ · /.test(line)) { + stats = line.slice(line.indexOf(" · ") + 3); + continue; + } + const text = line + .replace(/^[-*]\s+/, "") + .replace(/\s*\((?:#\d+(?:,\s*)?)+\)\.?$/, "") + .trim(); + if (/^[-*]\s+/.test(line)) items.push(text); + else intro.push(text); + } + return { + items, + totalItems: items.length + intro.length, + ...(intro.length > 0 ? { intro: intro.join(" ") } : {}), + ...(stats ? { stats } : {}), + }; } function extractReleaseNoteItems(note: string | null | undefined): ExtractedReleaseNoteItems { if (!note) return { items: [], totalItems: 0 }; + // Generated summaries fold GitHub's full list under this exact
block. + const summaryEnd = note.search(/
\s*\s*Full changelog\s*<\/summary>/i); + if (summaryEnd >= 0) return extractReleaseNoteSummary(note.slice(0, summaryEnd)); const items: string[] = []; let totalItems = 0; for (const rawLine of stripMarkup(note).split("\n")) { @@ -119,21 +154,26 @@ function extractReleaseNoteItems(note: string | null | undefined): ExtractedRele return { items: items.toReversed(), totalItems }; } +// The update feed dates only the offered version; prerelease versions carry their UTC build day. +const PRERELEASE_BUILD_DAY = /-(?:nightly|preview)\.(\d{4})(\d{2})(\d{2})\.\d+$/; + +function resolveReleasedAt(version: string, offeredVersion: string, releaseDate?: string) { + if (version === offeredVersion && releaseDate) return releaseDate; + const day = PRERELEASE_BUILD_DAY.exec(version); + return day ? `${day[1]}-${day[2]}-${day[3]}` : undefined; +} + interface NormalizedDesktopUpdateReleaseNotes { readonly releaseNotes: ReadonlyArray; readonly omittedReleaseCount: number; } -/** - * With `fullChangelog` on (nightly), electron-updater collects every GitHub - * release whose version is semver-greater than the running one, whatever train - * it belongs to; a maintainers' `-preview.` cut sorts above every `-nightly.` - * of the same base version and would lead the list. - */ +/** fullChangelog includes all greater semvers, so preview cuts sort above nightlies of the same base version. */ export function normalizeDesktopUpdateReleaseNotes( releaseNotes: unknown, fallbackVersion: string, channel: DesktopUpdateChannel, + releaseDate?: string, ): NormalizedDesktopUpdateReleaseNotes { const rawNotes = ( typeof releaseNotes === "string" @@ -141,16 +181,20 @@ export function normalizeDesktopUpdateReleaseNotes( : Array.isArray(releaseNotes) ? releaseNotes.filter(isElectronReleaseNoteInfo) : [] - ).filter((entry) => resolveDefaultDesktopUpdateChannel(entry.version) === channel); + ).filter((entry) => desktopUpdateChannelOf(entry.version) === channel); const normalizedNotes = rawNotes.flatMap((entry) => { - const { items, totalItems } = extractReleaseNoteItems(entry.note); + const { items, totalItems, intro, stats } = extractReleaseNoteItems(entry.note); if (totalItems === 0) return []; + const releasedAt = resolveReleasedAt(entry.version, fallbackVersion, releaseDate); return [ { version: entry.version, items, totalItems, + ...(intro ? { intro } : {}), + ...(stats ? { stats } : {}), + ...(releasedAt ? { releasedAt } : {}), }, ]; }); diff --git a/apps/desktop/src/updates/remoteUpdateFlow.ts b/apps/desktop/src/updates/remoteUpdateFlow.ts index f7c65b35820cc..1d9588315559c 100644 --- a/apps/desktop/src/updates/remoteUpdateFlow.ts +++ b/apps/desktop/src/updates/remoteUpdateFlow.ts @@ -11,12 +11,7 @@ export type RemoteDesktopUpdateStep = readonly reason?: string; }; -/** - * The caps are what stop a check -> up-to-date -> check loop and endless - * download retries; they are counts rather than booleans because a state event - * raced by the local 4-minute poller can re-show an already-handled status - * once. - */ +/** Bound retries with counts: background poller races can repeat an already-handled status once. */ export interface RemoteDesktopUpdateAttempts { readonly checks: number; readonly downloads: number; @@ -46,9 +41,7 @@ export function nextRemoteDesktopUpdateStep( reason: disabledReason ?? "Automatic updates are disabled on this machine.", }; } - // An install of this version already failed to apply here. Installing it - // again from afar would stop the app's threads for nothing, so only the user - // on this machine retries it. + // Reinstalling a failed version disrupts threads without updating; retries require the local user. if ( state.notAppliedVersion !== undefined && (state.downloadedVersion ?? state.availableVersion) === state.notAppliedVersion @@ -59,11 +52,7 @@ export function nextRemoteDesktopUpdateStep( reason: `Update ${state.notAppliedVersion} did not apply on this machine. Retry it from the desktop app there.`, }; } - // Mirror installDownloadedUpdate's own admission rule exactly, so the run - // never reports an install that the updater then refuses. A download - // survives an unrelated background updater error (errorContext null) and - // a previous failed install (errorContext "install"); it does not survive - // a check or download error, which fall through to the error branch. + // Match install admission, including retained downloads after unrelated background or earlier install errors. if (isInstallableDesktopUpdateState(state)) { return { action: "install" }; } @@ -80,9 +69,7 @@ export function nextRemoteDesktopUpdateStep( } return { action: "download" }; } - // "up-to-date" and "error" are retained from earlier/background checks, - // so before this run has issued its own check they are stale, not - // terminal: the whole point of a remote request is to look again. + // Background up-to-date/error states are stale until this request has issued its own check. if (state.status === "up-to-date") { if (attempts.checks === 0) { return { action: "check" }; @@ -109,11 +96,7 @@ export function nextRemoteDesktopUpdateStep( return { action: "check" }; } -/** - * Updater messages are plain strings and may be blank; a blank reason would - * fail encoding and silently drop the terminal report, leaving the server to - * wait for its timeout. - */ +/** Blank reasons fail encoding and drop the terminal report, forcing the server to time out. */ export function normalizeRemoteUpdateReason(reason: string | undefined): string | undefined { const trimmed = reason?.trim(); return trimmed ? trimmed : undefined; diff --git a/apps/desktop/src/updates/updateChannels.ts b/apps/desktop/src/updates/updateChannels.ts index 1b1a1ec1efa99..b07735ceb7a29 100644 --- a/apps/desktop/src/updates/updateChannels.ts +++ b/apps/desktop/src/updates/updateChannels.ts @@ -1,16 +1,6 @@ -import type { DesktopUpdateChannel } from "@t3tools/contracts"; - -const NIGHTLY_VERSION_PATTERN = /^[^-+]+-nightly\.\d{8}\.\d+$/; -// They share nightly's branding but are packaged without an update feed (see -// isDesktopPreviewVersion in scripts/build-desktop-artifact.ts), so the channel -// a preview install reports is cosmetic: it never checks for updates and no -// updater feed ever lists a preview release. +// Preview builds share nightly branding but ship without an update feed. const PRERELEASE_VERSION_PATTERN = /^[^-+]+-(?:nightly|preview)\.\d{8}\.\d+$/; export function isNightlyDesktopVersion(version: string): boolean { return PRERELEASE_VERSION_PATTERN.test(version); } - -export function resolveDefaultDesktopUpdateChannel(appVersion: string): DesktopUpdateChannel { - return NIGHTLY_VERSION_PATTERN.test(appVersion) ? "nightly" : "latest"; -} diff --git a/apps/desktop/src/updates/updateMachine.test.ts b/apps/desktop/src/updates/updateMachine.test.ts index 41af75f61e962..03e864b93d271 100644 --- a/apps/desktop/src/updates/updateMachine.test.ts +++ b/apps/desktop/src/updates/updateMachine.test.ts @@ -8,7 +8,6 @@ import { reduceDesktopUpdateStateOnDownloadFailure, reduceDesktopUpdateStateOnInstallFailure, reduceDesktopUpdateStateOnNoUpdate, - reduceDesktopUpdateStateOnUpdateAvailable, } from "./updateMachine.ts"; const runtimeInfo = { @@ -50,30 +49,6 @@ describe("updateMachine", () => { expect(failed.message).toBeNull(); }); - it("keeps the installer when the feed still offers its version", () => { - const releaseNotes = [{ version: "1.1.0", items: ["fix: queued update"], totalItems: 1 }]; - const state = reduceDesktopUpdateStateOnUpdateAvailable( - { - ...createInitialDesktopUpdateState("1.0.0", runtimeInfo, "latest"), - enabled: true, - status: "downloaded", - availableVersion: "1.1.0", - downloadedVersion: "1.1.0", - releaseNotes, - omittedReleaseCount: 2, - downloadPercent: 100, - }, - "1.1.0", - "2026-03-04T00:00:00.000Z", - ); - - expect(state.status).toBe("downloaded"); - expect(state.downloadedVersion).toBe("1.1.0"); - expect(state.releaseNotes).toEqual(releaseNotes); - expect(state.omittedReleaseCount).toBe(2); - expect(state.downloadPercent).toBe(100); - }); - it("preserves available version on download failure for retry", () => { const state = reduceDesktopUpdateStateOnDownloadFailure( { @@ -114,35 +89,6 @@ describe("updateMachine", () => { expect(failedInstall.canRetry).toBe(true); }); - it("preserves a downloaded update when no update is available", () => { - const releaseNotes = [{ version: "1.1.0", items: ["fix: queued update"], totalItems: 1 }]; - const state = reduceDesktopUpdateStateOnNoUpdate( - { - ...createInitialDesktopUpdateState("1.0.0", runtimeInfo, "latest"), - enabled: true, - status: "error", - availableVersion: "1.1.0", - downloadedVersion: "1.1.0", - releaseNotes, - omittedReleaseCount: 2, - message: "old failure", - errorContext: "download", - canRetry: true, - }, - "2026-03-04T00:00:00.000Z", - ); - - expect(state.status).toBe("downloaded"); - expect(state.availableVersion).toBe("1.1.0"); - expect(state.downloadedVersion).toBe("1.1.0"); - expect(state.releaseNotes).toBe(releaseNotes); - expect(state.omittedReleaseCount).toBe(2); - expect(state.downloadPercent).toBe(100); - expect(state.message).toBeNull(); - expect(state.errorContext).toBeNull(); - expect(state.canRetry).toBe(true); - }); - it("clears stale available state when no update is available", () => { const state = reduceDesktopUpdateStateOnNoUpdate( { diff --git a/apps/desktop/src/updates/updatesTestHarness.ts b/apps/desktop/src/updates/updatesTestHarness.ts index 3df31108949aa..069c25a76df2c 100644 --- a/apps/desktop/src/updates/updatesTestHarness.ts +++ b/apps/desktop/src/updates/updatesTestHarness.ts @@ -36,6 +36,11 @@ export interface UpdatesHarnessOptions { readonly platform?: NodeJS.Platform; readonly packageType?: string | undefined; readonly installRecord?: string | undefined; + readonly appVersion?: string; + /** Starts from in-memory settings with this track saved, as after a restart. */ + readonly savedChannel?: DesktopAppSettings.DesktopSettings["updateChannel"]; + /** Adds a WSL backend beside the primary, as on a Windows host with WSL enabled. */ + readonly wslBackend?: boolean; } export function makeHarness(options: UpdatesHarnessOptions = {}) { @@ -43,6 +48,7 @@ export function makeHarness(options: UpdatesHarnessOptions = {}) { let quitAndInstallCount = 0; let downloadCount = 0; let allowDowngrade = false; + const checkAllowedDowngrade: boolean[] = []; let fullChangelog = false; const feedUrls: ElectronUpdater.ElectronUpdaterFeedUrl[] = []; const listeners = new Map void>>(); @@ -87,6 +93,7 @@ export function makeHarness(options: UpdatesHarnessOptions = {}) { setDisableDifferentialDownload: () => options.setDisableDifferentialDownload ?? Effect.void, checkForUpdates: Effect.sync(() => { checkCount += 1; + checkAllowedDowngrade.push(allowDowngrade); }).pipe(Effect.andThen(options.checkForUpdates ?? Effect.void)), downloadUpdate: Effect.sync(() => { downloadCount += 1; @@ -150,7 +157,17 @@ export function makeHarness(options: UpdatesHarnessOptions = {}) { waitForReady: () => Effect.succeed(true), }; const layerBackend = DesktopBackendPool.layerTest( - options.backendInstances ?? [stubBackendInstance], + options.backendInstances ?? + (options.wslBackend + ? [ + stubBackendInstance, + { + ...stubBackendInstance, + id: DesktopBackendPool.BackendInstanceId("wsl:Ubuntu"), + label: Effect.succeed("Ubuntu"), + }, + ] + : [stubBackendInstance]), ); const layerEnvironment = DesktopEnvironment.layer({ @@ -158,7 +175,7 @@ export function makeHarness(options: UpdatesHarnessOptions = {}) { homeDirectory: `/tmp/t3-desktop-updates-home-${process.pid}`, platform: options.platform ?? "darwin", processArch: "x64", - appVersion: "1.2.3", + appVersion: options.appVersion ?? "1.2.3", appPath: "/repo", isPackaged: options.isPackaged ?? true, resourcesPath: "/missing/resources", @@ -179,10 +196,13 @@ export function makeHarness(options: UpdatesHarnessOptions = {}) { let testSettings: DesktopAppSettings.DesktopSettings = { ...DesktopAppSettings.DEFAULT_DESKTOP_SETTINGS, + ...(options.savedChannel === undefined + ? {} + : { updateChannel: options.savedChannel, updateChannelConfiguredByUser: true }), }; const setUpdateChannelError = options.setUpdateChannelError; const layerSettings = - setUpdateChannelError || options.beforeSetUpdateChannel + setUpdateChannelError || options.beforeSetUpdateChannel || options.savedChannel ? Layer.succeed(DesktopAppSettings.DesktopAppSettings, { get: Effect.sync(() => testSettings), load: Effect.sync(() => testSettings), @@ -280,6 +300,9 @@ export function makeHarness(options: UpdatesHarnessOptions = {}) { downloadCount: () => downloadCount, feedUrls: (): ElectronUpdater.ElectronUpdaterFeedUrl[] => feedUrls, fullChangelog: () => fullChangelog, + /** Whether each feed check could offer an older release, and the flag now. */ + checkAllowedDowngrade, + allowDowngrade: () => allowDowngrade, listenerCount: () => Array.from(listeners.values()).reduce( (total, eventListeners) => total + eventListeners.size, diff --git a/apps/desktop/src/window/DesktopApplicationMenu.test.ts b/apps/desktop/src/window/DesktopApplicationMenu.test.ts index df7e1fd2e85ac..9d8efd056665b 100644 --- a/apps/desktop/src/window/DesktopApplicationMenu.test.ts +++ b/apps/desktop/src/window/DesktopApplicationMenu.test.ts @@ -199,6 +199,41 @@ describe("DesktopApplicationMenu", () => { }), ); + it.effect("never binds Cmd/Ctrl+W to closing the window", () => + Effect.gen(function* () { + for (const platform of ["darwin", "linux", "win32"] as const) { + const applicationMenuTemplate = + yield* Deferred.make(); + yield* configureMenu(yield* Deferred.make(), applicationMenuTemplate, { + platform, + }); + + const items: Electron.MenuItemConstructorOptions[] = []; + const collect = (template: readonly Electron.MenuItemConstructorOptions[]) => { + for (const item of template) { + items.push(item); + if (Array.isArray(item.submenu)) collect(item.submenu); + } + }; + collect(yield* Deferred.await(applicationMenuTemplate)); + + assert.isUndefined( + items.find((item) => item.role === "close"), + platform, + ); + // Electron's default windowMenu submenu includes a close role. + assert.isUndefined( + items.find((item) => item.role === "windowMenu" && item.submenu === undefined), + platform, + ); + assert.isUndefined( + items.find((item) => item.accelerator?.toLowerCase().endsWith("+w")), + platform, + ); + } + }), + ); + it.effect("reloads the main window even while a browser page has focus", () => Effect.gen(function* () { const selectedAction = yield* Deferred.make(); diff --git a/apps/desktop/src/window/DesktopApplicationMenu.ts b/apps/desktop/src/window/DesktopApplicationMenu.ts index aeaca83507093..07fd8654af6be 100644 --- a/apps/desktop/src/window/DesktopApplicationMenu.ts +++ b/apps/desktop/src/window/DesktopApplicationMenu.ts @@ -106,14 +106,13 @@ const handleCheckForUpdatesMenuClick = Effect.gen(function* () { return; } - // The result dialogs need no main window. Opening one before the backend - // answers strands the renderer on a failed auth bootstrap. + // Opening a window before backend confirmation can strand it on failed auth bootstrap. const desktopWindow = yield* DesktopWindow.DesktopWindow; yield* desktopWindow.activate; yield* checkForUpdatesFromMenu; }).pipe(Effect.withSpan("desktop.menu.handleCheckForUpdatesClick")); -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const electronMenu = yield* ElectronMenu.ElectronMenu; const environment = yield* DesktopEnvironment.DesktopEnvironment; @@ -143,10 +142,7 @@ export const make = Effect.gen(function* () { const settingsClick = () => { runMenuEffect("open-settings", dispatchMenuAction("open-settings")); }; - // Chromium already pastes as plain text for this chord, so the accelerator - // needs nothing from the menu: the composer and the terminal each arm - // themselves from the same keydown. Routing it through the renderer anyway - // lands a second, injected paste and doubles the text. + // Chromium and the renderer already handle this chord; injecting another paste duplicates text. const pasteAsTextClick = ( _item: Electron.MenuItem, _window: Electron.BaseWindow | undefined, @@ -204,7 +200,10 @@ export const make = Effect.gen(function* () { }, { type: "separator" as const }, ]), - { role: environment.platform === "darwin" ? "close" : "quit" }, + // Cmd/Ctrl+W belongs to the renderer's tab close; it must never close the window. + environment.platform === "darwin" + ? { label: "Close Window", click: (_item, window) => window?.close() } + : { role: "quit" }, ], }, { @@ -238,11 +237,7 @@ export const make = Effect.gen(function* () { { label: "View", submenu: [ - /* - Not the reload, DevTools or zoom roles: those act on the focused - webContents, so with a browser page focused they reload or zoom - the guest page and the app UI appears stuck. - */ + /* Native reload/DevTools/zoom roles target focused guests; these commands must target the app. */ { label: "Reload", accelerator: "CmdOrCtrl+R", click: mainContentsClick("reload") }, { label: "Force Reload", @@ -274,8 +269,7 @@ export const make = Effect.gen(function* () { ] : []), { label: "Zoom Out", accelerator: "CmdOrCtrl+-", click: zoomClick("out") }, - // The numeric keypad sends its own key codes, so the number-row - // accelerators above never match it. + // Keypad codes do not match number-row accelerators. { label: "Actual Size", accelerator: "CmdOrCtrl+num0", @@ -298,7 +292,17 @@ export const make = Effect.gen(function* () { { role: "togglefullscreen" }, ], }, - { role: "windowMenu" }, + { + // Electron's default Window submenu adds a Ctrl+W close role off macOS. + role: "windowMenu", + submenu: [ + { role: "minimize" }, + { role: "zoom" }, + ...(environment.platform === "darwin" + ? [{ type: "separator" as const }, { role: "front" as const }] + : []), + ], + }, { role: "help", submenu: [ diff --git a/apps/desktop/src/window/DesktopWindow.test.ts b/apps/desktop/src/window/DesktopWindow.test.ts index dbdde033cae76..0dcb2b85ac2c5 100644 --- a/apps/desktop/src/window/DesktopWindow.test.ts +++ b/apps/desktop/src/window/DesktopWindow.test.ts @@ -78,6 +78,12 @@ function makeFakeBrowserWindow() { zoomLevel = level; }), isLoadingMainFrame: vi.fn(() => false), + navigationHistory: { + canGoBack: vi.fn(() => true), + canGoForward: vi.fn(() => true), + goBack: vi.fn(), + goForward: vi.fn(), + }, on: vi.fn((eventName: string, listener: (...args: readonly unknown[]) => void) => { webContentsListeners.set(eventName, listener); }), @@ -136,6 +142,7 @@ function makeFakeBrowserWindow() { reload: webContents.reload, reloadIgnoringCache: webContents.reloadIgnoringCache, toggleDevTools: webContents.toggleDevTools, + navigationHistory: webContents.navigationHistory, send: webContents.send, setZoomLevel: webContents.setZoomLevel, setWindowButtonPosition: window.setWindowButtonPosition, @@ -472,6 +479,45 @@ describe("DesktopWindow", () => { ); }); + it("rejects renderer navigations whose origin only serializes as null", () => { + for (const applicationUrl of ["t3code://app/", "t3code-dev://app/"]) { + assert.isTrue( + DesktopWindow.isSameOriginRendererNavigation({ + applicationUrl, + navigationUrl: `${applicationUrl}threads?id=1#latest`, + }), + applicationUrl, + ); + } + for (const navigationUrl of [ + "t3code://other/", + "t3code://app.example/", + "t3code://app:8080/", + "t3code://user@other/", + "t3code:app", + "t3code-dev://app/", + "file:///etc/passwd", + "data:text/html,

hi

", + "javascript:alert(1)", + "about:blank", + "blob:t3code://app/0b5e2c4a", + ]) { + assert.isFalse( + DesktopWindow.isSameOriginRendererNavigation({ + applicationUrl: "t3code://app/", + navigationUrl, + }), + navigationUrl, + ); + } + assert.isFalse( + DesktopWindow.isSameOriginRendererNavigation({ + applicationUrl: "data:text/html,app", + navigationUrl: "data:text/html,other", + }), + ); + }); + it.effect( "opens and reopens the window without backend readiness when local execution is disabled", () => @@ -585,8 +631,6 @@ describe("DesktopWindow", () => { }), ); - // Ctrl+wheel bypasses the menu accelerators, so it has to take the same - // zoom step, preview restore included, from the window's zoom-changed event. it.effect("zooms the app from Ctrl+wheel like the menu does", () => Effect.gen(function* () { const fakeWindow = makeFakeBrowserWindow(); @@ -897,6 +941,39 @@ describe("DesktopWindow", () => { }), ); + it.effect("maps macOS horizontal swipes to available history navigation", () => + Effect.gen(function* () { + const fakeWindow = makeFakeBrowserWindow(); + const createCount = yield* Ref.make(0); + const mainWindow = yield* Ref.make>(Option.none()); + const layer = layerTest({ window: fakeWindow.window, createCount, mainWindow }); + + yield* Effect.gen(function* () { + const desktopWindow = yield* DesktopWindow.DesktopWindow; + yield* desktopWindow.handleBackendReady(new URL("http://127.0.0.1:3773")); + const swipe = fakeWindow.windowListeners.get("swipe"); + assert.isDefined(swipe); + if (!swipe) return; + const history = fakeWindow.navigationHistory; + + swipe({}, "left"); + assert.equal(history.goBack.mock.calls.length, 1); + assert.equal(history.goForward.mock.calls.length, 0); + swipe({}, "right"); + assert.equal(history.goForward.mock.calls.length, 1); + + swipe({}, "up"); + swipe({}, "down"); + history.canGoBack.mockReturnValue(false); + history.canGoForward.mockReturnValue(false); + swipe({}, "left"); + swipe({}, "right"); + assert.equal(history.goBack.mock.calls.length, 1); + assert.equal(history.goForward.mock.calls.length, 1); + }).pipe(Effect.provide(layer)); + }), + ); + it.effect("persists the current main window bounds before the window closes", () => Effect.gen(function* () { const fakeWindow = makeFakeBrowserWindow(); @@ -975,6 +1052,17 @@ describe("DesktopWindow", () => { if (!willNavigate) { return yield* Effect.die("will-navigate listener was not registered"); } + for (const [url, expectedPrevented] of [ + ["t3code-dev://app/threads?id=1#latest", false], + ["t3code-dev://other/", true], + ["t3code://app/", true], + ] as const) { + const preventDefault = vi.fn(); + willNavigate({ preventDefault }, url); + assert.equal(preventDefault.mock.calls.length, expectedPrevented ? 1 : 0, url); + } + assert.deepEqual(openedExternalUrls, []); + let prevented = false; willNavigate( { diff --git a/apps/desktop/src/window/DesktopWindow.ts b/apps/desktop/src/window/DesktopWindow.ts index 297c67ddace08..580c81b7eeac2 100644 --- a/apps/desktop/src/window/DesktopWindow.ts +++ b/apps/desktop/src/window/DesktopWindow.ts @@ -23,6 +23,7 @@ import { MENU_ACTION_CHANNEL, QUIT_SHORTCUT_CHANNEL, SNAP_SHOT_EVENT_CHANNEL, + TRACKPAD_SCROLL_BEGIN_CHANNEL, TRACKPAD_SCROLL_END_CHANNEL, WINDOW_FULLSCREEN_STATE_CHANNEL, } from "../ipc/channels.ts"; @@ -37,8 +38,7 @@ import { makeQuitShortcutHandler } from "./QuitHold.ts"; import { copyContextMenuImage } from "./ContextMenuImage.ts"; const TITLEBAR_HEIGHT = 40; -// Matches --workspace-topbar-height in apps/web/src/index.css. Native macOS -// buttons are 14 points tall and do not scale with the renderer's zoom. +// Match --workspace-topbar-height in apps/web/src/index.css; native macOS buttons stay 14 points at any zoom. const MACOS_WORKSPACE_TOPBAR_HEIGHT = 52; const MACOS_WINDOW_BUTTON_RADIUS = 7; @@ -109,9 +109,7 @@ export class DesktopWindow extends Context.Service< readonly dispatchSnapShotEvent: ( event: DesktopSnapShotEvent, ) => Effect.Effect; - // The Electron `zoomIn`/`zoomOut` menu roles act on whichever webContents - // has keyboard focus, so with an embedded preview WebContentsView (or - // DevTools) focused they zoom the guest page instead of the app UI. + // Electron zoom roles target focused guests; zoomMain must always target the app. readonly zoomMain: (direction: MainWindowZoomDirection) => Effect.Effect; readonly runMainContentsCommand: (command: MainWindowContentsCommand) => Effect.Effect; readonly syncAppearance: Effect.Effect; @@ -134,7 +132,7 @@ function getIconOption( } function getInitialWindowBackgroundColor(shouldUseDarkColors: boolean): string { - return shouldUseDarkColors ? "#0a0a0a" : "#ffffff"; + return shouldUseDarkColors ? "#000000" : "#ffffff"; } type DisplayBounds = Pick; @@ -185,12 +183,19 @@ function buildConnectingSplashDataUrl(shouldUseDarkColors: boolean): string { return `data:text/html;charset=utf-8,${encodeURIComponent(html)}`; } -function isSameOriginRendererNavigation(input: { +export function isSameOriginRendererNavigation(input: { readonly applicationUrl: string; readonly navigationUrl: string; }): boolean { try { - return new URL(input.applicationUrl).origin === new URL(input.navigationUrl).origin; + const applicationUrl = new URL(input.applicationUrl); + const navigationUrl = new URL(input.navigationUrl); + // Node serializes custom-scheme origins as "null", even for different hosts and schemes. + return ( + applicationUrl.host !== "" && + navigationUrl.protocol === applicationUrl.protocol && + navigationUrl.host === applicationUrl.host + ); } catch { return false; } @@ -222,8 +227,7 @@ function concealPendingQuitWindow( if (window.isFullScreen()) { window.setFullScreen(false); } - // Electron implements window opacity on macOS and Windows. Linux keeps the - // release-gated quit behavior but cannot make the pending window disappear. + // Linux lacks Electron window opacity; release-gated quits remain visible there. window.setOpacity(0); } @@ -286,7 +290,7 @@ function bindFirstRevealTrigger( } } -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = Effect.gen(function* () { const environment = yield* DesktopEnvironment.DesktopEnvironment; const desktopState = yield* DesktopState.DesktopState; @@ -315,11 +319,7 @@ export const make = Effect.gen(function* () { } }); - // currentMainOrFirst / focusedMainOrFirst fall back to "any first window", - // which during WSL-only boot is the connecting splash. The splash is never - // registered via setMain, so it must be treated as "no real main window" -- - // otherwise ensureMain/activate/dispatchMenuAction latch onto it and never - // open (or retry) the real main. + // Electron's first-window fallback can select the unregistered connecting splash; exclude it so main creation retries. const withoutSplash = (window: Option.Option) => Ref.get(splashWindowRef).pipe( Effect.map((splash) => @@ -341,9 +341,7 @@ export const make = Effect.gen(function* () { direction === "reset" ? 0 : webContents.getZoomLevel() + (direction === "in" ? 0.5 : -0.5), ); if (environment.platform === "darwin") syncMacosWindowButtons(window); - // Chromium pushes the new level down to embedded guests, which would zoom - // the previewed page along with the app UI. The preview browser keeps its - // own zoom, so put each guest back where the preview left it. + // App zoom propagates to guests; restore each preview's own zoom. yield* previewManager.reapplyZoom(); }); @@ -353,7 +351,11 @@ export const make = Effect.gen(function* () { > { if (yield* Ref.get(desktopState.quitting)) return Option.none(); yield* previewManager.getBrowserSession(); - const applicationUrl = getDesktopUrl(environment.isDevelopment); + const applicationUrl = getDesktopUrl( + environment.isDevelopment, + environment.appVersion, + environment.isPackaged, + ); const iconPaths = yield* assets.iconPaths; const iconOption = getIconOption(iconPaths, environment.platform); const shouldUseDarkColors = yield* electronTheme.shouldUseDarkColors; @@ -394,18 +396,13 @@ export const make = Effect.gen(function* () { ...getWindowTitleBarOptions(shouldUseDarkColors, environment.platform), webPreferences: { preload: environment.preloadPath, - // Chromium throttles hidden renderers: timers coalesce and rAF stops, - // which stalls first paint. Boot unthrottled; the first-reveal trigger - // re-enables throttling so a hidden or minimized window goes back to - // being cheap after it has been shown once. + // Hidden-renderer throttling stalls first paint; re-enable it after the first reveal. backgroundThrottling: false, contextIsolation: true, nodeIntegration: false, sandbox: true, webviewTag: true, - // A preview guest's fullscreen request is mirrored onto this embedder, - // which would otherwise put the whole window into OS fullscreen. With - // both sides opted out the page fills its webview and the window stays. + // Guest fullscreen propagates to the embedder; both must opt out to keep it inside the webview. disableHtmlFullscreenWindowResize: true, }, }); @@ -541,8 +538,7 @@ export const make = Effect.gen(function* () { contents.on("context-menu", (event, params) => { event.preventDefault(); if (contents.isDestroyed() || ownerWindow.isDestroyed()) return; - // Native editing roles act on the focused contents, which may still be - // the host renderer when the user right-clicks inside a browser guest. + // Right-clicking a guest may leave native editing roles targeting the host renderer. contents.focus(); const menuTemplate: Electron.MenuItemConstructorOptions[] = []; @@ -635,9 +631,6 @@ export const make = Effect.gen(function* () { } }); - // Electron's windowMenu close role owns CmdOrCtrl+W. Holding the - // close-terminal shortcut can outlive the terminal that handled its first - // press, so reject repeats before they reach the native window accelerator. const quitShortcutHandler = makeQuitShortcutHandler({ platform: environment.platform, getMode: () => @@ -655,8 +648,7 @@ export const make = Effect.gen(function* () { window.webContents.send(QUIT_SHORTCUT_CHANNEL, hint); } }, - // Keep the transparent window focused until the physical shortcut is - // released so its remaining repeats cannot reach the next app. + // Hold focus until shortcut release so remaining repeats cannot reach the next app. concealWindow: () => concealPendingQuitWindow(window), quit: () => { void runPromise(electronApp.quit); @@ -664,6 +656,7 @@ export const make = Effect.gen(function* () { }); window.webContents.on("before-input-event", (event, input) => { quitShortcutHandler(event, input); + // A held Cmd/Ctrl+W closes one tab or terminal, not each one behind it. if (input.type !== "keyDown" || !input.isAutoRepeat) return; const modifier = environment.platform === "darwin" ? input.meta : input.control; if (modifier && !input.alt && !input.shift && input.key.toLowerCase() === "w") { @@ -671,11 +664,13 @@ export const make = Effect.gen(function* () { } }); window.webContents.on("input-event", (_event, input) => { - if (input.type === "gestureScrollEnd") window.webContents.send(TRACKPAD_SCROLL_END_CHANNEL); + if (input.type === "gestureScrollBegin") { + window.webContents.send(TRACKPAD_SCROLL_BEGIN_CHANNEL); + } else if (input.type === "gestureScrollEnd") { + window.webContents.send(TRACKPAD_SCROLL_END_CHANNEL); + } }); - // Ctrl+wheel never reaches the menu accelerators: Chromium reports it here - // and leaves applying the zoom to the app. A preview guest under the - // pointer emits this on its own webContents and keeps its own zoom. + // Ctrl+wheel bypasses menus; guest contents emit their own zoom-changed event. window.webContents.on("zoom-changed", (_event, direction) => { if (window.isDestroyed()) return; runFork(zoomWindow(window, direction)); @@ -694,6 +689,12 @@ export const make = Effect.gen(function* () { }); if (environment.platform === "darwin") { + // Mouse drivers can deliver Back/Forward as macOS swipe gestures instead of buttons. + window.on("swipe", (_event, direction) => { + const history = window.webContents.navigationHistory; + if (direction === "left" && history.canGoBack()) history.goBack(); + else if (direction === "right" && history.canGoForward()) history.goForward(); + }); window.on("enter-full-screen", () => { window.webContents.send(WINDOW_FULLSCREEN_STATE_CHANNEL, true); }); @@ -793,8 +794,6 @@ export const make = Effect.gen(function* () { details.reason === "oom" || details.reason === "killed" || details.reason === "abnormal-exit"; - // Recovery attempts are bounded so a renderer that dies immediately on - // boot cannot reload-loop forever. runFork( Effect.gen(function* () { @@ -959,8 +958,7 @@ export const make = Effect.gen(function* () { const send = Effect.sync(() => { if (!targetWindow.isDestroyed()) targetWindow.webContents.send(channel, payload); }); - // The renderer must learn about the event even when another process refuses to - // yield the foreground, so send first and treat the reveal as best effort. + // Send before best-effort reveal; another process may refuse to yield foreground focus. const dispatch = reveal ? send.pipe(Effect.andThen(electronWindow.reveal(targetWindow).pipe(Effect.ignoreCause))) : send; @@ -1034,8 +1032,7 @@ export const make = Effect.gen(function* () { }), runMainContentsCommand: Effect.fn("desktop.window.runMainContentsCommand")(function* (command) { yield* Effect.annotateCurrentSpan({ command }); - // The registered main window, never the focused one: with an OAuth popup - // focused, Reload would otherwise reload the popup mid sign-in. + // A focused OAuth popup must not receive the app's Reload command. const window = yield* electronWindow.main; if (Option.isNone(window) || window.value.isDestroyed()) return; const webContents = window.value.webContents; diff --git a/apps/desktop/src/window/QuitHold.ts b/apps/desktop/src/window/QuitHold.ts index b87ae9ceab29a..f7db33f17ed5e 100644 --- a/apps/desktop/src/window/QuitHold.ts +++ b/apps/desktop/src/window/QuitHold.ts @@ -4,11 +4,9 @@ import type { QuitConfirmationMode, QuitShortcutHintEvent } from "@t3tools/contr export const QUIT_HOLD_DURATION_MS = 1200; export const QUIT_DOUBLE_PRESS_MS = 500; -// "Still held" is proven by auto-repeat keydowns, not by the absence of a -// release: macOS suppresses a letter keyUp while the command key is down, so a -// tap release can go completely unseen and a release-based timer would quit -// anyway. Once held, quitting waits for Q keyUp or a quiet grace period after -// repeats stop so they cannot reach the next app. +// Auto-repeat keydowns prove the hold: macOS drops a letter keyUp while Command is down, +// so a release-based timer would quit anyway. Once held, quitting waits for Q keyUp or a +// quiet grace period so trailing repeats cannot reach the next app. const QUIT_HOLD_RELEASE_GRACE_MS = 600; // A slow repeat rate can exceed the fixed grace. Waiting for two observed // cadences keeps the timer behind the next repeat without slowing normal rates. @@ -46,9 +44,7 @@ export function makeQuitShortcutHandler( let lastPressAt = 0; let lastRepeatAt = 0; let repeatCadenceMs = 0; - // Incremented when a press is superseded or explicitly cancelled. A plain - // key release does not invalidate its pending mode read: a direct-mode - // press must still quit after that read settles. + // A key release must not invalidate a pending direct-mode read; only superseding/cancelled presses do. let generation = 0; const clearWatchdog = () => { @@ -125,8 +121,7 @@ export function makeQuitShortcutHandler( if (!modifierDown || input.alt || input.shift || key !== "q") { if (key === modifierKey && !input.alt && !input.shift) return; - // Keep this separate from release(), which also runs when a fresh Q - // keydown follows a keyUp that macOS did not deliver. + // release() also runs on fresh keydown after a missing macOS keyUp. if (!input.isAutoRepeat) { lastPressAt = 0; release(); diff --git a/apps/desktop/src/wsl/DesktopWslBackend.ts b/apps/desktop/src/wsl/DesktopWslBackend.ts index d1f61ecc0bded..e77d896be2469 100644 --- a/apps/desktop/src/wsl/DesktopWslBackend.ts +++ b/apps/desktop/src/wsl/DesktopWslBackend.ts @@ -15,8 +15,6 @@ import * as DesktopServerExposure from "../backend/DesktopServerExposure.ts"; import * as DesktopAppSettings from "../settings/DesktopAppSettings.ts"; import * as DesktopWslEnvironment from "./DesktopWslEnvironment.ts"; -// Exported so callers that parse pool ids (e.g. the pickFolder IPC handler in -// ipc/methods/window.ts) reference the same prefix this module produces. export const WSL_INSTANCE_ID_PREFIX = "wsl:"; const WSL_DEFAULT_DISTRO_ID = `${WSL_INSTANCE_ID_PREFIX}default`; const MAX_TCP_PORT = 65_535; @@ -43,9 +41,7 @@ const isWslInstanceId = (id: DesktopBackendPool.BackendInstanceId): boolean => const buildLabel = (distro: string | null): string => distro === null ? "WSL (default distro)" : `WSL (${distro})`; -// Loopback-only port scan starting one above the primary's port. The -// WSL backend is reachable via 127.0.0.1 from Windows (wslhost -// auto-forwards), so we only need to verify the IPv4 loopback can bind. +// WSL auto-forwards loopback ports, so only IPv4 loopback availability matters. const scanForWslPort = Effect.fn("desktop.wslBackend.scanForWslPort")(function* ( startPort: number, ): Effect.fn.Return { @@ -69,11 +65,7 @@ export const layer = Layer.effect( const wslEnvironment = yield* DesktopWslEnvironment.DesktopWslEnvironment; const appSettings = yield* DesktopAppSettings.DesktopAppSettings; const net = yield* NetService.NetService; - // Serialize reconcile so the bootstrap fork and the IPC handlers - // (setWslBackendEnabled, setWslDistro) can't interleave. Without - // this, two reconciles could both observe "no WSL instance - // registered" between their pool reads and both call startNew - // with different distros, leaving the loser stranded. + // Serialize bootstrap and IPC reconciles so concurrent reads cannot register competing WSL instances. const reconcileMutex = yield* Semaphore.make(1); const preflightErrorRef = yield* Ref.make(Option.none()); @@ -169,11 +161,7 @@ export const layer = Layer.effect( const existing = yield* findExistingWslInstance; const existingId = Option.map(existing, (instance) => instance.id); - // In wsl-only mode the pool's primary IS the WSL backend (see - // DesktopBackendConfiguration.resolvePrimary), so the - // orchestrator skips registering a parallel "wsl:" - // secondary. Without this skip we'd spin up two WSL processes - // on the same distro for users who explicitly asked for one. + // In wsl-only mode WSL is already primary; do not start a second backend on the same distro. const shouldRun = settings.wslBackendEnabled && available && !settings.wslOnly; const targetId = shouldRun ? Option.some(resolveTargetInstanceId(settings.wslDistro)) @@ -210,8 +198,7 @@ export const layer = Layer.effect( } if (Option.isSome(targetId)) { - // Pre-warm the WSL VM before registering so the readiness probe doesn't - // race wsl.exe's first-spawn cold start. + // Pre-warm WSL so readiness cannot race its cold start. yield* wslEnvironment.preWarm(settings.wslDistro); yield* startNew({ distro: settings.wslDistro }); } diff --git a/apps/desktop/src/wsl/DesktopWslEnvironment.test.ts b/apps/desktop/src/wsl/DesktopWslEnvironment.test.ts index 711733cb36b54..67549f6b8a54f 100644 --- a/apps/desktop/src/wsl/DesktopWslEnvironment.test.ts +++ b/apps/desktop/src/wsl/DesktopWslEnvironment.test.ts @@ -39,8 +39,7 @@ const posixShellRunner = (() => { const runShell = (script: string) => { if (posixShellRunner === null) throw new Error("no POSIX shell runner available"); - // The install script arrives on stdin in production too, which is what lets - // its own /proc scan not match itself. + // Pass the script on stdin, as production does, to avoid matching its own /proc scan. const result = NodeChildProcess.spawnSync( posixShellRunner.file, [...posixShellRunner.args, "-s"], @@ -54,10 +53,7 @@ const sh = (value: string) => `'${value.replaceAll("'", "'\\''")}'`; const awaitHolder = (condition: string) => `i=0; until ${condition}; do i=$((i + 1)); [ "$i" -lt 500 ] || exit 1; sleep 0.01; done`; -// Holds a cache busy the way a running server does: the holder's argv[0] is the -// runtime entry, which the prune and install scripts look for in /proc cmdline. -// It reads a pipe the script keeps open on fd 7, so it exits with the script -// instead of outliving it on a timer. +// Use runtime-entry argv[0] for /proc detection; an open pipe keeps it alive only while this script runs. const holdRuntimeBusy = (entry: string) => [ `exec 7> >(exec -a ${entry} cat >/dev/null 2>&1)`, @@ -124,8 +120,7 @@ describe.skipIf(posixShellRunner === null)("WSL runtime install script (executed const archivePath = `${work}/wsl-runtime.tar.gz`; const archiveSha = readField(result.stdout, "archiveSha"); const runtimeId = `sha256-${archiveSha}`; - // The script reads $HOME, and WSL does not inherit the parent process's - // environment, so the home override rides in the script itself. + // WSL does not inherit HOME; embed the fixture's override in the script. const installScript = (archive = archivePath, sha = archiveSha) => [ `HOME=${sh(`${work}/home`)}`, @@ -288,8 +283,7 @@ describe.skipIf(posixShellRunner === null)("WSL runtime install script (executed `cat > "$work/install.sh" <<'T3CODE_INSTALL_SCRIPT'`, fixture.installScript(), "T3CODE_INSTALL_SCRIPT", - // Both racers run the same file, and neither file path contains the - // runtime root, so the script's own /proc scan cannot see them. + // Keep runtime roots out of both racers' argv so their /proc scans cannot match themselves. 'sh "$work/install.sh" > "$work/first.out" 2>&1 &', "first=$!", 'sh "$work/install.sh" > "$work/second.out" 2>&1 &', diff --git a/apps/desktop/src/wsl/DesktopWslEnvironment.ts b/apps/desktop/src/wsl/DesktopWslEnvironment.ts index ca5b89c9d49fa..ab52ca07a0d59 100644 --- a/apps/desktop/src/wsl/DesktopWslEnvironment.ts +++ b/apps/desktop/src/wsl/DesktopWslEnvironment.ts @@ -89,9 +89,7 @@ export class DesktopWslEnvironment extends Context.Service< DesktopWslEnvironment, { readonly isAvailable: Effect.Effect; - // Best-effort enumeration for renderer UX. Backend health checks must use - // probeDistros so a transient command failure is not mistaken for a - // successful empty installation. + // UX-only best effort; health checks need probeDistros to distinguish failures from an empty installation. readonly listDistros: Effect.Effect; readonly probeDistros: Effect.Effect; readonly preWarm: (distro: string | null) => Effect.Effect; @@ -100,11 +98,7 @@ export class DesktopWslEnvironment extends Context.Service< windowsPath: string, ) => Effect.Effect>; readonly getUserHome: (distro: string | null) => Effect.Effect>; - // The orchestrator uses this for the WSL backend's httpBaseUrl so the - // renderer can reach it without relying on wslhost's localhost→WSL - // automatic forwarding, which is flaky in practice (the backend can be - // listening for 30+ seconds before wslhost starts forwarding 127.0.0.1:port - // to WSL-side localhost). + // Use the distro IP to avoid unreliable wslhost localhost forwarding. readonly getDistroIp: (distro: string | null) => Effect.Effect>; readonly prepareRuntime: ( distro: string | null, @@ -177,8 +171,7 @@ const buildWslNodeEnvPreamble = ( ensure_remote_node_path || true `; -// wsl.exe re-escapes args before forwarding them to the Linux side, which -// mangles quotes inside `bash -lc " diff --git a/apps/marketing/src/pages/legal.astro b/apps/marketing/src/pages/legal.astro index d75413a8da7e0..b4ede5224a36d 100644 --- a/apps/marketing/src/pages/legal.astro +++ b/apps/marketing/src/pages/legal.astro @@ -24,7 +24,7 @@ const documents = [ --- diff --git a/apps/marketing/src/pages/privacy-policy.astro b/apps/marketing/src/pages/privacy-policy.astro index 52e97084d8c23..ea22d8ad9d358 100644 --- a/apps/marketing/src/pages/privacy-policy.astro +++ b/apps/marketing/src/pages/privacy-policy.astro @@ -17,7 +17,7 @@ const sections = [ ---

- Provisions that by their nature should survive termination—including ownership, disclaimers, - limitations of liability, indemnification, and dispute terms—will survive. + Provisions that by their nature should survive termination (including ownership, disclaimers, + limitations of liability, indemnification, and dispute terms) will survive.

diff --git a/apps/marketing/src/styles/fonts.css b/apps/marketing/src/styles/fonts.css deleted file mode 100644 index 2f3933d61239c..0000000000000 --- a/apps/marketing/src/styles/fonts.css +++ /dev/null @@ -1,193 +0,0 @@ -/*! DM Sans v17 and JetBrains Mono v24. Licenses: /fonts/dm-sans-OFL.txt and /fonts/jetbrains-mono-OFL.txt. */ -/* Keep subset bytes out of the stylesheet so unused glyph ranges do not add transfer size. */ -/* latin-ext */ -@font-face { - font-family: "DM Sans"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(../assets/fonts/dm-sans-latin-ext.woff2?no-inline) format("woff2"); - unicode-range: - U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, - U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, - U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: "DM Sans"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(../assets/fonts/dm-sans-latin.woff2?no-inline) format("woff2"); - unicode-range: - U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, - U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* latin-ext */ -@font-face { - font-family: "DM Sans"; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(../assets/fonts/dm-sans-latin-ext.woff2?no-inline) format("woff2"); - unicode-range: - U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, - U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, - U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: "DM Sans"; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(../assets/fonts/dm-sans-latin.woff2?no-inline) format("woff2"); - unicode-range: - U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, - U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* latin-ext */ -@font-face { - font-family: "DM Sans"; - font-style: normal; - font-weight: 600; - font-display: swap; - src: url(../assets/fonts/dm-sans-latin-ext.woff2?no-inline) format("woff2"); - unicode-range: - U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, - U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, - U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: "DM Sans"; - font-style: normal; - font-weight: 600; - font-display: swap; - src: url(../assets/fonts/dm-sans-latin.woff2?no-inline) format("woff2"); - unicode-range: - U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, - U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: "JetBrains Mono"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(../assets/fonts/jetbrains-mono-cyrillic-ext.woff2?no-inline) format("woff2"); - unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: "JetBrains Mono"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(../assets/fonts/jetbrains-mono-cyrillic.woff2?no-inline) format("woff2"); - unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek */ -@font-face { - font-family: "JetBrains Mono"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(../assets/fonts/jetbrains-mono-greek.woff2?no-inline) format("woff2"); - unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; -} -/* vietnamese */ -@font-face { - font-family: "JetBrains Mono"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(../assets/fonts/jetbrains-mono-vietnamese.woff2?no-inline) format("woff2"); - unicode-range: - U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, - U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: "JetBrains Mono"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(../assets/fonts/jetbrains-mono-latin-ext.woff2?no-inline) format("woff2"); - unicode-range: - U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, - U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, - U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: "JetBrains Mono"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(../assets/fonts/jetbrains-mono-latin.woff2?no-inline) format("woff2"); - unicode-range: - U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, - U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: "JetBrains Mono"; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(../assets/fonts/jetbrains-mono-cyrillic-ext.woff2?no-inline) format("woff2"); - unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: "JetBrains Mono"; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(../assets/fonts/jetbrains-mono-cyrillic.woff2?no-inline) format("woff2"); - unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek */ -@font-face { - font-family: "JetBrains Mono"; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(../assets/fonts/jetbrains-mono-greek.woff2?no-inline) format("woff2"); - unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; -} -/* vietnamese */ -@font-face { - font-family: "JetBrains Mono"; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(../assets/fonts/jetbrains-mono-vietnamese.woff2?no-inline) format("woff2"); - unicode-range: - U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, - U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: "JetBrains Mono"; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(../assets/fonts/jetbrains-mono-latin-ext.woff2?no-inline) format("woff2"); - unicode-range: - U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, - U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, - U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: "JetBrains Mono"; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(../assets/fonts/jetbrains-mono-latin.woff2?no-inline) format("woff2"); - unicode-range: - U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, - U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} diff --git a/apps/marketing/vercel.ts b/apps/marketing/vercel.ts index 1ec71b1c7115b..e785d6f6b99a4 100644 --- a/apps/marketing/vercel.ts +++ b/apps/marketing/vercel.ts @@ -7,8 +7,7 @@ export const config: VercelConfig = { installCommand: "npm install -g vite-plus && vp install --filter '@t3tools/marketing...'", buildCommand: "vp run --filter @t3tools/marketing build", outputDirectory: "dist", - // `curl … | sh` needs the scripts served as plain text, uncompressed by - // content negotiation, and never cached past a deploy. + // curl | sh requires plain, uncompressed scripts with no cache across deploys. headers: [ { source: "/install.sh", diff --git a/apps/mobile/.swiftlint.yml b/apps/mobile/.swiftlint.yml index c56a56251f739..4450e0485c52b 100644 --- a/apps/mobile/.swiftlint.yml +++ b/apps/mobile/.swiftlint.yml @@ -1,6 +1,7 @@ included: - ios/T3Code - modules/t3-composer-editor/ios + - modules/t3-highlights/ios - modules/t3-native-controls/ios - modules/t3-terminal/ios - modules/t3-review-diff/ios diff --git a/apps/mobile/README.md b/apps/mobile/README.md index 20f98c6c9e34e..1b033082d58f9 100644 --- a/apps/mobile/README.md +++ b/apps/mobile/README.md @@ -22,20 +22,33 @@ repository-root `.env` or `.env.local`, not an `apps/mobile/.env` file. See ## Development -For simulator/emulator development, select and boot a device, then ensure its native client matches -this checkout before starting Metro: +For simulator, emulator, or Android phone development, boot or connect a device, then install the +native client that matches this checkout before starting Metro: ```bash -node ../../scripts/mobile-native-client.ts ensure ios -# Or: node ../../scripts/mobile-native-client.ts ensure android +vp run mobile:install ios [simulator-udid] +# Or: vp run mobile:install android [emulator-or-phone-serial] vp run dev:client ``` -The helper compares a local Expo fingerprint and the installed binary with its last successful -build record. It builds and installs missing, stale, or unverified clients and reuses matching ones. -Use `check` instead of `ensure` for a read-only decision: exit 0 means compatible, 2 means a build is -needed, and 1 means an operational error. Run it on the simulator host; no EAS login is required. -An externally installed client is unverified until the helper builds it once. +The device argument can be omitted when exactly one device is booted or connected. The helper +compares this checkout's Expo fingerprint and the installed binary with its last install record, +and reuses a matching client. Otherwise it installs the build for that fingerprint from +`~/.cache/t3code/native-clients/artifacts`, then the shared task cache, and builds only when +neither has it. One iOS simulator build serves every iPhone and iPad simulator, and one APK per +ABI (x86_64 or arm64-v8a) serves every emulator and phone of that ABI. Build output goes to the +log file it prints (`T3_NATIVE_CLIENT_VERBOSE=1` streams it instead). Builds are shared back when +your task-cache login (`bash infra/task-cache/install.sh`) can write. `T3_NATIVE_CLIENT_CACHE=read` +skips the upload and `off` skips the shared cache. Physical iPhones still use `vp run ios:dev`. + +`--session ` installs into an agent-device session opened elsewhere, such as a device pool +or a cloud simulator, instead of a local device: `vp run mobile:install android --session pool-1 +--metro http://:8081`. It uses only the cached build (x86_64 by default; `--abi` +for ARM) and fails with the next step when no machine has built this fingerprint yet. + +For a read-only decision, run `node ../../scripts/mobile-native-client.ts check +[device]`: exit 0 means compatible, 2 means an install is needed, and 1 means an operational error. +An externally installed client is unverified until the helper installs it once. Start Metro for an already verified dev client: @@ -96,14 +109,6 @@ Build and run the local iOS preview app: vp run ios:preview ``` -Force the review diff highlighter engine: - -```bash -EXPO_PUBLIC_REVIEW_HIGHLIGHTER_ENGINE=javascript vp run ios:dev -``` - -`javascript` is the default and recommended setting for the review diff screen. Set `EXPO_PUBLIC_REVIEW_HIGHLIGHTER_ENGINE=native` only when you explicitly want to test the native Shiki engine. - Inspect the resolved Expo config for a variant: ```bash diff --git a/apps/mobile/app.config.test.ts b/apps/mobile/app.config.test.ts new file mode 100644 index 0000000000000..b8111f45587cf --- /dev/null +++ b/apps/mobile/app.config.test.ts @@ -0,0 +1,33 @@ +import { afterEach, expect, it, vi } from "vite-plus/test"; + +// Keep config parsing independent of local env files and build credentials. +vi.mock("../../scripts/lib/public-config.ts", () => ({ + loadRepoEnv: () => ({ APP_VARIANT: process.env.APP_VARIANT }), +})); + +afterEach(() => { + vi.unstubAllEnvs(); +}); + +async function loadConfig(variant: string | undefined) { + vi.resetModules(); + vi.stubEnv("APP_VARIANT", variant); + return (await import("./app.config.ts")).default; +} + +it.each(["prod", ""])("rejects APP_VARIANT=%j before selecting production IDs", async (value) => { + await expect(loadConfig(value)).rejects.toThrow( + "APP_VARIANT must be development, preview, or production.", + ); +}); + +it.each([ + [undefined, "com.t3tools.t3code"], + ["development", "com.t3tools.t3code.dev"], + ["preview", "com.t3tools.t3code.preview"], + ["production", "com.t3tools.t3code"], +])("keeps the iOS and Android identifiers for APP_VARIANT=%j", async (value, identifier) => { + const config = await loadConfig(value); + expect(config.ios?.bundleIdentifier).toBe(identifier); + expect(config.android?.package).toBe(identifier); +}); diff --git a/apps/mobile/app.config.ts b/apps/mobile/app.config.ts index 55451537ef5a5..e6d388b9a9856 100644 --- a/apps/mobile/app.config.ts +++ b/apps/mobile/app.config.ts @@ -17,6 +17,12 @@ const runtimeVersionPolicy = const personalTeamBundleIdentifier = repoEnv.T3CODE_IOS_PERSONAL_TEAM_BUNDLE_ID?.trim(); const IOS_BUNDLE_IDENTIFIER_PATTERN = /^[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+$/; +// Compiled into the native project. Without a relay, Observe's native side could dispatch to +// Expo's own ingest before observe.ts turns it off; `.invalid` never resolves (RFC 6761). +const observeEndpointUrl = repoEnv.T3CODE_RELAY_URL?.trim() + ? new URL("/v1/mobile/observe", repoEnv.T3CODE_RELAY_URL.trim()).toString() + : "https://observe.invalid"; + const fromRepoRoot = (relativePath: string) => `../../${relativePath}`; const androidAdaptiveForeground = "./assets/android-icon-foreground.png"; @@ -102,8 +108,10 @@ function resolveAppVariant(value: string | undefined): AppVariant { case "preview": case "production": return value; - default: + case undefined: return "production"; + default: + throw new Error("APP_VARIANT must be development, preview, or production."); } } @@ -124,8 +132,7 @@ const widgetsPlugin: NonNullable[number] = [ bundleIdentifier: `${iosBundleIdentifier}.widgets`, groupIdentifier: `group.${iosBundleIdentifier}`, enablePushNotifications: true, - // Agent activity can update many times an hour; without the - // frequent-updates entitlement iOS throttles the update budget sooner. + // Frequent updates need the iOS entitlement to avoid early throttling. frequentUpdates: true, enableAndroid: true, widgets: [ @@ -175,8 +182,7 @@ const widgetsPlugin: NonNullable[number] = [ targetCellWidth: 4, targetCellHeight: 3, resizeMode: "both", - // Embeds the layout in the APK so the widget renders before the app - // has run once; the app replaces it with stored props on publish. + // The embedded layout renders before first launch; publishing replaces it with stored props. initialLayout: "./src/widgets/SubscriptionUsage.android.tsx", }, }, @@ -195,9 +201,7 @@ const sharingPlugin: NonNullable[number] = [ "expo-sharing", { ios: { - // Personal Teams cannot sign App Groups or extension targets. Keep the - // reduced-capability local build usable while release builds expose the - // real system share target. + // Personal Teams cannot sign App Groups or extension targets; keep local builds usable. enabled: !isIosPersonalTeamBuild, extensionBundleIdentifier: `${iosBundleIdentifier}.sharing`, appGroupId: `group.${iosBundleIdentifier}`, @@ -217,20 +221,16 @@ const sharingPlugin: NonNullable[number] = [ }, ]; -// These aliases match the fonts' PostScript names on iOS. Register the same -// names on Android so React Native and the native composer use one set of -// family names without waiting for runtime font loading. +// Match iOS PostScript names on Android so RN and the native composer share fonts before runtime loading. const config: ExpoConfig = { name: variant.appName, slug: "t3-code", platforms: ["ios", "android"], scheme: variant.scheme, - version: repoEnv.T3CODE_MOBILE_VERSION ?? "2.1.0", + version: repoEnv.T3CODE_MOBILE_VERSION ?? "2.2.0", runtimeVersion: { - // Development manifests resolve on every launch, so avoid fingerprint's - // expensive native-project calculation there. Preview and production stay - // fingerprinted so OTAs only reach binaries with matching native projects. + // Skip costly fingerprinting on dev launches; preview and production OTAs require matching native projects. policy: runtimeVersionPolicy, }, orientation: "portrait", @@ -247,9 +247,7 @@ const config: ExpoConfig = { supportsTablet: true, requireFullScreen: process.env.T3_SHOWCASE_CAPTURE_BUILD === "1", bundleIdentifier: iosBundleIdentifier, - // Pin code signing to the T3 Tools team so non-interactive `expo run:ios` - // does not fall back to a personal team (which cannot sign app groups, - // Sign in with Apple, or push notification entitlements). + // Avoid Personal Team fallback: it cannot sign App Groups, Apple sign-in or push entitlements. appleTeamId: "ARK85ZXQ4Z", associatedDomains: [ `applinks:${variant.relyingParty}`, @@ -270,15 +268,10 @@ const config: ExpoConfig = { NSLocalNetworkUsageDescription: "Allow T3 Code to connect to T3 Code servers on your local network or tailnet.", NSPhotoLibraryAddUsageDescription: "Allow T3 Code to save images to your photo library.", - // "Audio, AirPlay, and Picture in Picture": the browser screen's system - // picture in picture needs it to start and to stay up outside the app. + // System picture in picture needs background audio to start and survive outside the app. UIBackgroundModes: ["audio"], ITSAppUsesNonExemptEncryption: false, - // The App Store screenshot harness rotates the iPad interface from - // inside the app (CI denies osascript the Accessibility access that - // Simulator menu scripting needs), and iPadOS ignores programmatic - // orientation requests for multitasking-capable apps — so the capture - // build opts out of multitasking and declares landscape support. + // Capture builds disable multitasking because iPadOS otherwise ignores orientation requests. ...(process.env.T3_SHOWCASE_CAPTURE_BUILD === "1" ? { "UISupportedInterfaceOrientations~ipad": [ @@ -305,9 +298,7 @@ const config: ExpoConfig = { foregroundImage: variant.assets.androidAdaptiveForeground, monochromeImage: variant.assets.androidMonochromeIcon, }, - // Opts into OnBackInvokedCallback-based back dispatch (Android 13+). - // JS back handling survives it via react-native's Android 16 shim plus - // withAndroidPredictiveBackCompat on Android 13-15. + // JS back dispatch needs RN's Android 16 shim and withAndroidPredictiveBackCompat on Android 13-15. predictiveBackGestureEnabled: true, // expo-sensors declares this for its pedometer, which the app does not use. blockedPermissions: ["android.permission.ACTIVITY_RECOGNITION"], @@ -355,15 +346,12 @@ const config: ExpoConfig = { mode: APP_VARIANT === "development" ? "development" : "production", }, ], - // appleSignIn must be gated here: withoutIosPersonalTeamCapabilities.cjs runs before - // plugins earlier in this array, so it cannot strip the entitlement Clerk would add. + // Gate Clerk here: withoutIosPersonalTeamCapabilities runs too early to strip its entitlement. ["@clerk/expo", { theme: "./clerk-theme.json", appleSignIn: !isIosPersonalTeamBuild }], "expo-web-browser", [ "expo-quick-actions", { - // Adaptive launcher-shortcut icon; referenced by resource name from - // the shortcut items set in src/features/shortcuts. androidIcons: { shortcut_icon: { foregroundImage: variant.assets.androidAdaptiveForeground, @@ -406,10 +394,7 @@ const config: ExpoConfig = { backgroundColor: "#0a0a0a", }, android: { - // Android 12+ masks the splash icon to a circle over the central two thirds of - // its 288dp canvas, so the iOS export's corners get cut. A full-canvas image of - // the composed adaptive layers puts the wordmark in the same frame the launcher - // icon uses. + // Android 12+ masks the central two thirds of the 288dp canvas; adaptive layers avoid clipped corners. image: variant.assets.androidSplashIcon, imageWidth: 288, dark: { image: variant.assets.androidSplashIcon }, @@ -421,12 +406,7 @@ const config: ExpoConfig = { { android: { minSdkVersion: 24, - // kotlinx-io uses Kotlin 2.3's return-value checker annotation, while - // SDK 58 builds with Kotlin 2.2. It has no runtime behavior. - // WorkManager 2.9 keeps InputMerger classes but not their constructors, - // and R8 full mode no longer keeps a default constructor implicitly. - // Without it no work request can start, so the Glance session behind - // the widget never renders and it stays on "Loading widget". + // SDK 58 lacks Kotlin 2.3's runtime-inert annotation. R8 needs explicit InputMerger constructors for widgets. extraProguardRules: [ "-dontwarn kotlin.MustUseReturnValues", "-keep class * extends androidx.work.InputMerger { (); }", @@ -443,18 +423,12 @@ const config: ExpoConfig = { }, ], "./plugins/withIosCocoaPodsUuidCache.cjs", - // Only the accelerometer is used (device viewer shake). Compile out the - // pedometer so iOS needs no motion purpose string. + // Compile out the unused pedometer to avoid an iOS motion purpose string. ["expo-sensors", { motionPermission: false }], - // Must be listed BEFORE expo-widgets: same-type mods run last-registered- - // first, so registering earlier makes this plugin's mods run AFTER - // expo-widgets' — its dangerous mod wipes ios/ExpoWidgetsTarget/ (which - // would delete the asset catalog) and its xcodeproj mod creates the widget - // target (which must exist before the compile phase can be attached). + // Mods run in reverse order; expo-widgets must create and wipe the target before assets are added. ...(!isIosPersonalTeamBuild ? ["./plugins/withWidgetLogoAsset.cjs", widgetsPlugin] : []), - "./plugins/withAndroidCleartextTraffic.cjs", + "./plugins/withAndroidNetworkSecurityConfig.cjs", "./plugins/withAndroidGradleHeap.cjs", - "./plugins/withAndroidFbjniVersion.cjs", "./plugins/withAndroidInputBackground.cjs", "./plugins/withAndroidModernPopupMenu.cjs", "./plugins/withAndroidModernAlertDialog.cjs", @@ -472,11 +446,7 @@ const config: ExpoConfig = { publishableKey: repoEnv.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY ?? null, jwtTemplate: repoEnv.EXPO_PUBLIC_CLERK_JWT_TEMPLATE ?? null, }, - // @clerk/expo reads these from `extra` - // under their exact env-var names (not nested), and its config plugin reads - // the iOS URL scheme at prebuild to register it in Info.plist. - // Unset values must be omitted (not null): the public manifest serializes - // null to {}, which is truthy and would defeat Clerk's fallback checks. + // Clerk reads these exact names at prebuild. Omit unset values: manifest null becomes truthy {}. EXPO_PUBLIC_CLERK_GOOGLE_WEB_CLIENT_ID: repoEnv.EXPO_PUBLIC_CLERK_GOOGLE_WEB_CLIENT_ID, EXPO_PUBLIC_CLERK_GOOGLE_IOS_CLIENT_ID: repoEnv.EXPO_PUBLIC_CLERK_GOOGLE_IOS_CLIENT_ID, EXPO_PUBLIC_CLERK_GOOGLE_ANDROID_CLIENT_ID: repoEnv.EXPO_PUBLIC_CLERK_GOOGLE_ANDROID_CLIENT_ID, @@ -488,6 +458,7 @@ const config: ExpoConfig = { }, eas: { projectId: "d763fcb8-d37c-41ea-a773-b54a0ab4a454", + observe: { endpointUrl: observeEndpointUrl }, }, }, owner: "pingdotgg", diff --git a/apps/mobile/assets/context-chip-icons/server.png b/apps/mobile/assets/context-chip-icons/server.png new file mode 100644 index 0000000000000..92bc2ce457f16 Binary files /dev/null and b/apps/mobile/assets/context-chip-icons/server.png differ diff --git a/apps/mobile/assets/icons/chevron-down.xml b/apps/mobile/assets/icons/chevron-down.xml new file mode 100644 index 0000000000000..285eda9c1b463 --- /dev/null +++ b/apps/mobile/assets/icons/chevron-down.xml @@ -0,0 +1,4 @@ + + + diff --git a/apps/mobile/assets/link-icons/azure-devops.png b/apps/mobile/assets/link-icons/azure-devops.png new file mode 100644 index 0000000000000..0d0f09b298140 Binary files /dev/null and b/apps/mobile/assets/link-icons/azure-devops.png differ diff --git a/apps/mobile/assets/link-icons/bitbucket.png b/apps/mobile/assets/link-icons/bitbucket.png new file mode 100644 index 0000000000000..91799fb692e08 Binary files /dev/null and b/apps/mobile/assets/link-icons/bitbucket.png differ diff --git a/apps/mobile/assets/link-icons/forgejo.png b/apps/mobile/assets/link-icons/forgejo.png new file mode 100644 index 0000000000000..a80471d31bdec Binary files /dev/null and b/apps/mobile/assets/link-icons/forgejo.png differ diff --git a/apps/mobile/assets/link-icons/gitcafe.png b/apps/mobile/assets/link-icons/gitcafe.png new file mode 100644 index 0000000000000..5604d59a9d1a9 Binary files /dev/null and b/apps/mobile/assets/link-icons/gitcafe.png differ diff --git a/apps/mobile/assets/link-icons/github.png b/apps/mobile/assets/link-icons/github.png index 87eab9f5218ff..502b7ada4e77b 100644 Binary files a/apps/mobile/assets/link-icons/github.png and b/apps/mobile/assets/link-icons/github.png differ diff --git a/apps/mobile/assets/link-icons/gitlab.png b/apps/mobile/assets/link-icons/gitlab.png new file mode 100644 index 0000000000000..28d26431001c5 Binary files /dev/null and b/apps/mobile/assets/link-icons/gitlab.png differ diff --git a/apps/mobile/deps/README.md b/apps/mobile/deps/README.md index cf51c97c8560c..939ac2d9147ed 100644 --- a/apps/mobile/deps/README.md +++ b/apps/mobile/deps/README.md @@ -1,3 +1,3 @@ -The Enriched Markdown tarball comes from [`feat/t3chat-markdown-parity-v2`](https://github.com/pingdotgg/enriched-markdown/tree/feat/t3chat-markdown-parity-v2), based on Julius's [`fork/t3-mobile` branch](https://github.com/pingdotgg/enriched-markdown/tree/fork/t3-mobile). Its `t3-fork.json` records the exact source commit and upstream base. File/skill link recognition, back navigation from horizontal blocks, table-image presses, and code-block headers use upstream implementations. The fork retains clipboard metadata, parsed asset manifests, signed image source resolution, React media slots, and development-host autolinks. The fork retains native math parsing, scrolling and copying, table layout and gestures, and inline-code layout. Character-reference decoding, iOS intrinsic-width measurement, and HTML clipboard round trips now use the upstream fixes included in Julius's base. RaTeX uses the upstream-released 0.1.15 dependency. +The Enriched Markdown tarball comes from Julius's [`fork/t3-mobile` branch](https://github.com/pingdotgg/enriched-markdown/tree/fork/t3-mobile). Its `t3-fork.json` records the exact source commit and upstream base. React block renderers and signed image sources (`renderers`, `resolveImageSource`) are upstream. The fork carries native streaming memory bounds (an 8 MiB measurement-key budget and coalesced pending renders), plus changes with an open upstream PR: the `onLinksChange` link list that link pills and iOS link menus read ([#1088](https://github.com/software-mansion/enriched-markdown/pull/1088)), Android inline image alignment ([#1089](https://github.com/software-mansion/enriched-markdown/pull/1089)), clipboard link metadata ([#962](https://github.com/software-mansion/enriched-markdown/pull/962)), development-host autolinks ([#961](https://github.com/software-mansion/enriched-markdown/pull/961)), and `md4cFlags.preserveWindowsPaths`, which keeps backslashes in Windows drive paths in prose ([#1105](https://github.com/software-mansion/enriched-markdown/pull/1105), after [md4c#5](https://github.com/software-mansion-labs/md4c/pull/5)). -To replace it, commit the fork changes, run `yarn install --immutable` and `yarn workspace react-native-enriched-markdown prepare` in the fork checkout, then `node scripts/pack-t3.mjs /path/to/t3code/apps/mobile/deps`. Keep the package version aligned with Julius's `fork/t3-mobile` branch. Rename the archive to include the first eight characters of the source commit, such as `react-native-enriched-markdown-1.2.0-t3.15-fee84114.tgz`, so each build has a distinct dependency path without version bumps. Update the tarball path in `apps/mobile/package.json` and `pnpm-workspace.yaml`'s `allowBuilds`, and run `vp i` to update the lockfile. Native clients need rebuilding when this dependency changes. +To replace it, commit the fork changes, run `yarn install --immutable` and `yarn workspace react-native-enriched-markdown prepare` in the fork checkout, then `node scripts/pack-t3.mjs /path/to/t3code/apps/mobile/deps`. Keep the package version aligned with Julius's `fork/t3-mobile` branch. Rename the archive to include the first eight characters of the source commit, such as `react-native-enriched-markdown-1.2.0-t3.16-8d2f84a8.tgz`, so each build has a distinct dependency path without version bumps. Update the tarball path in `apps/mobile/package.json` and `pnpm-workspace.yaml`'s `allowBuilds`, and run `vp i` to update the lockfile. Native clients need rebuilding when this dependency changes. diff --git a/apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.15-fee84114.tgz b/apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.15-fee84114.tgz deleted file mode 100644 index e8c91b75a781e..0000000000000 Binary files a/apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.15-fee84114.tgz and /dev/null differ diff --git a/apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.16-29ddd424.tgz b/apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.16-29ddd424.tgz new file mode 100644 index 0000000000000..06ac560ff2eba Binary files /dev/null and b/apps/mobile/deps/react-native-enriched-markdown-1.2.0-t3.16-29ddd424.tgz differ diff --git a/apps/mobile/deps/react-native-screens-5.0.0-t3.36.tgz b/apps/mobile/deps/react-native-screens-5.0.0-t3.36.tgz deleted file mode 100644 index 071a4022a7b3f..0000000000000 Binary files a/apps/mobile/deps/react-native-screens-5.0.0-t3.36.tgz and /dev/null differ diff --git a/apps/mobile/deps/react-native-screens-5.0.0-t3.48.tgz b/apps/mobile/deps/react-native-screens-5.0.0-t3.48.tgz new file mode 100644 index 0000000000000..f1eb3858e9865 Binary files /dev/null and b/apps/mobile/deps/react-native-screens-5.0.0-t3.48.tgz differ diff --git a/apps/mobile/eas.json b/apps/mobile/eas.json index 15ae4a15ba4af..f773c2c5bbc3a 100644 --- a/apps/mobile/eas.json +++ b/apps/mobile/eas.json @@ -18,6 +18,13 @@ "image": "macos-tahoe-26.6-xcode-27.1" } }, + "development-simulator": { + "extends": "development", + "ios": { + "simulator": true, + "image": "macos-tahoe-26.6-xcode-27.1" + } + }, "preview": { "corepack": true, "env": { @@ -59,7 +66,8 @@ "corepack": true, "env": { "APP_VARIANT": "production", - "NODE_OPTIONS": "--max-old-space-size=4096" + "NODE_OPTIONS": "--max-old-space-size=4096", + "SOURCEMAP_FILE": "/tmp/t3code-ios-main.jsbundle.map" }, "channel": "production", "environment": "production", diff --git a/apps/mobile/fingerprint.config.js b/apps/mobile/fingerprint.config.js index fd743f455a525..7e684229320a2 100644 --- a/apps/mobile/fingerprint.config.js +++ b/apps/mobile/fingerprint.config.js @@ -2,11 +2,7 @@ const fs = require("node:fs"); const path = require("node:path"); -// Expo's fingerprint ignores the app version, so binaries of different majors -// share a runtime version whenever native code is unchanged, and a production -// OTA from main would reach every older store binary. Hashing the major -// version keeps each major's OTAs on its own binaries: a new major reaches -// users only once its store build is promoted. +// Include the major version, which Expo ignores, to prevent OTAs reaching older store binaries. const appConfig = fs.readFileSync(path.join(__dirname, "app.config.ts"), "utf8"); const version = process.env.T3CODE_MOBILE_VERSION ?? diff --git a/apps/mobile/generated-uniwind-themes.css b/apps/mobile/generated-uniwind-themes.css index caf91e40348b0..039c7d694ed5b 100644 --- a/apps/mobile/generated-uniwind-themes.css +++ b/apps/mobile/generated-uniwind-themes.css @@ -110,6 +110,8 @@ --color-adaptive-emerald-500-a12-a16: oklch(69.6% 0.17 162.48 / 12%); --color-adaptive-emerald-600-400: oklch(59.6% 0.145 163.225); --color-adaptive-emerald-700-300: oklch(50.8% 0.118 165.612); + --color-adaptive-fuchsia-500-a50-300-a40: oklch(66.7% 0.295 322.15 / 50%); + --color-adaptive-fuchsia-600-300: oklch(59.1% 0.293 322.896); --color-adaptive-indigo-500-a12-a16: oklch(58.5% 0.233 277.117 / 12%); --color-adaptive-indigo-600-300: oklch(51.1% 0.262 276.966); --color-adaptive-indigo-700-300: oklch(45.7% 0.24 277.023); @@ -271,6 +273,8 @@ --color-adaptive-emerald-500-a12-a16: oklch(69.6% 0.17 162.48 / 16%); --color-adaptive-emerald-600-400: oklch(76.5% 0.177 163.223); --color-adaptive-emerald-700-300: oklch(84.5% 0.143 164.978); + --color-adaptive-fuchsia-500-a50-300-a40: oklch(83.3% 0.145 321.434 / 40%); + --color-adaptive-fuchsia-600-300: oklch(83.3% 0.145 321.434); --color-adaptive-indigo-500-a12-a16: oklch(58.5% 0.233 277.117 / 16%); --color-adaptive-indigo-600-300: oklch(78.5% 0.115 274.713); --color-adaptive-indigo-700-300: oklch(78.5% 0.115 274.713); @@ -432,6 +436,8 @@ --color-adaptive-emerald-500-a12-a16: oklch(69.6% 0.17 162.48 / 12%); --color-adaptive-emerald-600-400: oklch(59.6% 0.145 163.225); --color-adaptive-emerald-700-300: oklch(50.8% 0.118 165.612); + --color-adaptive-fuchsia-500-a50-300-a40: oklch(66.7% 0.295 322.15 / 50%); + --color-adaptive-fuchsia-600-300: oklch(59.1% 0.293 322.896); --color-adaptive-indigo-500-a12-a16: oklch(58.5% 0.233 277.117 / 12%); --color-adaptive-indigo-600-300: oklch(51.1% 0.262 276.966); --color-adaptive-indigo-700-300: oklch(45.7% 0.24 277.023); @@ -593,6 +599,8 @@ --color-adaptive-emerald-500-a12-a16: oklch(69.6% 0.17 162.48 / 16%); --color-adaptive-emerald-600-400: oklch(76.5% 0.177 163.223); --color-adaptive-emerald-700-300: oklch(84.5% 0.143 164.978); + --color-adaptive-fuchsia-500-a50-300-a40: oklch(83.3% 0.145 321.434 / 40%); + --color-adaptive-fuchsia-600-300: oklch(83.3% 0.145 321.434); --color-adaptive-indigo-500-a12-a16: oklch(58.5% 0.233 277.117 / 16%); --color-adaptive-indigo-600-300: oklch(78.5% 0.115 274.713); --color-adaptive-indigo-700-300: oklch(78.5% 0.115 274.713); @@ -754,6 +762,8 @@ --color-adaptive-emerald-500-a12-a16: oklch(69.6% 0.17 162.48 / 12%); --color-adaptive-emerald-600-400: oklch(59.6% 0.145 163.225); --color-adaptive-emerald-700-300: oklch(50.8% 0.118 165.612); + --color-adaptive-fuchsia-500-a50-300-a40: oklch(66.7% 0.295 322.15 / 50%); + --color-adaptive-fuchsia-600-300: oklch(59.1% 0.293 322.896); --color-adaptive-indigo-500-a12-a16: oklch(58.5% 0.233 277.117 / 12%); --color-adaptive-indigo-600-300: oklch(51.1% 0.262 276.966); --color-adaptive-indigo-700-300: oklch(45.7% 0.24 277.023); @@ -915,6 +925,8 @@ --color-adaptive-emerald-500-a12-a16: oklch(69.6% 0.17 162.48 / 16%); --color-adaptive-emerald-600-400: oklch(76.5% 0.177 163.223); --color-adaptive-emerald-700-300: oklch(84.5% 0.143 164.978); + --color-adaptive-fuchsia-500-a50-300-a40: oklch(83.3% 0.145 321.434 / 40%); + --color-adaptive-fuchsia-600-300: oklch(83.3% 0.145 321.434); --color-adaptive-indigo-500-a12-a16: oklch(58.5% 0.233 277.117 / 16%); --color-adaptive-indigo-600-300: oklch(78.5% 0.115 274.713); --color-adaptive-indigo-700-300: oklch(78.5% 0.115 274.713); @@ -1076,6 +1088,8 @@ --color-adaptive-emerald-500-a12-a16: oklch(69.6% 0.17 162.48 / 12%); --color-adaptive-emerald-600-400: oklch(59.6% 0.145 163.225); --color-adaptive-emerald-700-300: oklch(50.8% 0.118 165.612); + --color-adaptive-fuchsia-500-a50-300-a40: oklch(66.7% 0.295 322.15 / 50%); + --color-adaptive-fuchsia-600-300: oklch(59.1% 0.293 322.896); --color-adaptive-indigo-500-a12-a16: oklch(58.5% 0.233 277.117 / 12%); --color-adaptive-indigo-600-300: oklch(51.1% 0.262 276.966); --color-adaptive-indigo-700-300: oklch(45.7% 0.24 277.023); @@ -1237,6 +1251,8 @@ --color-adaptive-emerald-500-a12-a16: oklch(69.6% 0.17 162.48 / 16%); --color-adaptive-emerald-600-400: oklch(76.5% 0.177 163.223); --color-adaptive-emerald-700-300: oklch(84.5% 0.143 164.978); + --color-adaptive-fuchsia-500-a50-300-a40: oklch(83.3% 0.145 321.434 / 40%); + --color-adaptive-fuchsia-600-300: oklch(83.3% 0.145 321.434); --color-adaptive-indigo-500-a12-a16: oklch(58.5% 0.233 277.117 / 16%); --color-adaptive-indigo-600-300: oklch(78.5% 0.115 274.713); --color-adaptive-indigo-700-300: oklch(78.5% 0.115 274.713); @@ -1398,6 +1414,8 @@ --color-adaptive-emerald-500-a12-a16: oklch(69.6% 0.17 162.48 / 12%); --color-adaptive-emerald-600-400: oklch(59.6% 0.145 163.225); --color-adaptive-emerald-700-300: oklch(50.8% 0.118 165.612); + --color-adaptive-fuchsia-500-a50-300-a40: oklch(66.7% 0.295 322.15 / 50%); + --color-adaptive-fuchsia-600-300: oklch(59.1% 0.293 322.896); --color-adaptive-indigo-500-a12-a16: oklch(58.5% 0.233 277.117 / 12%); --color-adaptive-indigo-600-300: oklch(51.1% 0.262 276.966); --color-adaptive-indigo-700-300: oklch(45.7% 0.24 277.023); @@ -1559,6 +1577,8 @@ --color-adaptive-emerald-500-a12-a16: oklch(69.6% 0.17 162.48 / 16%); --color-adaptive-emerald-600-400: oklch(76.5% 0.177 163.223); --color-adaptive-emerald-700-300: oklch(84.5% 0.143 164.978); + --color-adaptive-fuchsia-500-a50-300-a40: oklch(83.3% 0.145 321.434 / 40%); + --color-adaptive-fuchsia-600-300: oklch(83.3% 0.145 321.434); --color-adaptive-indigo-500-a12-a16: oklch(58.5% 0.233 277.117 / 16%); --color-adaptive-indigo-600-300: oklch(78.5% 0.115 274.713); --color-adaptive-indigo-700-300: oklch(78.5% 0.115 274.713); @@ -1720,6 +1740,8 @@ --color-adaptive-emerald-500-a12-a16: oklch(69.6% 0.17 162.48 / 12%); --color-adaptive-emerald-600-400: oklch(59.6% 0.145 163.225); --color-adaptive-emerald-700-300: oklch(50.8% 0.118 165.612); + --color-adaptive-fuchsia-500-a50-300-a40: oklch(66.7% 0.295 322.15 / 50%); + --color-adaptive-fuchsia-600-300: oklch(59.1% 0.293 322.896); --color-adaptive-indigo-500-a12-a16: oklch(58.5% 0.233 277.117 / 12%); --color-adaptive-indigo-600-300: oklch(51.1% 0.262 276.966); --color-adaptive-indigo-700-300: oklch(45.7% 0.24 277.023); @@ -1881,6 +1903,8 @@ --color-adaptive-emerald-500-a12-a16: oklch(69.6% 0.17 162.48 / 16%); --color-adaptive-emerald-600-400: oklch(76.5% 0.177 163.223); --color-adaptive-emerald-700-300: oklch(84.5% 0.143 164.978); + --color-adaptive-fuchsia-500-a50-300-a40: oklch(83.3% 0.145 321.434 / 40%); + --color-adaptive-fuchsia-600-300: oklch(83.3% 0.145 321.434); --color-adaptive-indigo-500-a12-a16: oklch(58.5% 0.233 277.117 / 16%); --color-adaptive-indigo-600-300: oklch(78.5% 0.115 274.713); --color-adaptive-indigo-700-300: oklch(78.5% 0.115 274.713); diff --git a/apps/mobile/index.ts b/apps/mobile/index.ts index a91c318c3c05b..9367ade408e95 100644 --- a/apps/mobile/index.ts +++ b/apps/mobile/index.ts @@ -1,5 +1,8 @@ -// Must stay first: the render counter wraps the DevTools hook before any React commit. +// Must stay first: the render counter and behavior probe wrap the DevTools hook before any React commit. import "./src/features/development/render-counter-entry"; +import "./src/features/development/behavior-probe-entry"; +// Next, so errors thrown while the rest of the app loads are recorded too. +import "./src/features/observability/observe"; import { registerRootComponent } from "expo"; import "react-native-gesture-handler"; import { LogBox } from "react-native"; @@ -7,8 +10,7 @@ import { featureFlags } from "react-native-screens"; import App from "./src/App"; -// Required for react-native-screens' iOS FormSheet sizing fix when a nested -// native stack is rendered inside a non-fitToContents formSheet. +// Enables iOS FormSheet sizing for nested native stacks in non-fitToContents sheets. featureFlags.experiment.synchronousScreenUpdatesEnabled = true; if (process.env.EXPO_PUBLIC_SHOWCASE === "1") { diff --git a/apps/mobile/metro.config.js b/apps/mobile/metro.config.js index f8d55cf796d20..6371da34fd190 100644 --- a/apps/mobile/metro.config.js +++ b/apps/mobile/metro.config.js @@ -16,23 +16,8 @@ const licenseGeneratorSource = path.join( "third-party-licenses.ts", ); const escapedWorkspaceRoot = workspaceRoot.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); -const mobileShikiRoot = path.dirname(require.resolve("shiki/package.json", { paths: [__dirname] })); const generatedDeviceStreamRoot = path.join(__dirname, ".generated", "device-stream"); const generatedPreviewStreamRoot = path.join(__dirname, ".generated", "preview-stream"); -const resolveShikiDependencyRoot = (packageName) => { - const entryPath = require.resolve(packageName, { paths: [mobileShikiRoot] }); - let currentDir = path.dirname(entryPath); - - while (!fs.existsSync(path.join(currentDir, "package.json"))) { - const parentDir = path.dirname(currentDir); - if (parentDir === currentDir) { - throw new Error(`Could not resolve package root for ${packageName}`); - } - currentDir = parentDir; - } - - return currentDir; -}; config.watchFolders = [...new Set([...(config.watchFolders ?? []), workspaceRoot])]; config.resolver = { @@ -50,14 +35,6 @@ config.resolver = { "@t3tools/mobile-third-party-licenses": generatedLicenseModuleRoot, "@t3tools/mobile-device-stream": generatedDeviceStreamRoot, "@t3tools/mobile-preview-stream": generatedPreviewStreamRoot, - shiki: mobileShikiRoot, - "@shikijs/core": resolveShikiDependencyRoot("@shikijs/core"), - "@shikijs/engine-javascript": resolveShikiDependencyRoot("@shikijs/engine-javascript"), - "@shikijs/engine-oniguruma": resolveShikiDependencyRoot("@shikijs/engine-oniguruma"), - "@shikijs/langs": resolveShikiDependencyRoot("@shikijs/langs"), - "@shikijs/themes": resolveShikiDependencyRoot("@shikijs/themes"), - "@shikijs/types": resolveShikiDependencyRoot("@shikijs/types"), - "@shikijs/vscode-textmate": resolveShikiDependencyRoot("@shikijs/vscode-textmate"), }, }; @@ -79,10 +56,6 @@ async function generateMobileThirdPartyLicenses() { const manifest = await generateThirdPartyLicenseManifest({ configFile: path.join(workspaceRoot, "third-party-licenses.config.json"), packageManifests: [{ bundle: "mobile", path: path.join(__dirname, "package.json") }], - allowMissingGeneratedNotices: - process.env.NODE_ENV !== "production" && - process.env.EAS_BUILD !== "true" && - process.env.T3CODE_LICENSES_STRICT !== "1", }); await Promise.all([ diff --git a/apps/mobile/modules/t3-agent-notifications/android/src/main/java/expo/modules/t3agentnotifications/AgentActivityPresentation.kt b/apps/mobile/modules/t3-agent-notifications/android/src/main/java/expo/modules/t3agentnotifications/AgentActivityPresentation.kt index feca1133d9a3e..0adeb3fc3c42c 100644 --- a/apps/mobile/modules/t3-agent-notifications/android/src/main/java/expo/modules/t3agentnotifications/AgentActivityPresentation.kt +++ b/apps/mobile/modules/t3-agent-notifications/android/src/main/java/expo/modules/t3agentnotifications/AgentActivityPresentation.kt @@ -11,11 +11,6 @@ import androidx.core.content.ContextCompat internal data class ActivityRow(val status: String, val title: String, val project: String) -/** - * One entry per relay phase. The status label matches the relay's row wording and the - * tint matches the web sidebar pills and the iOS Live Activity so a thread reads the - * same on every surface. The icon is always the T3 mark; the chip verb carries the state. - */ internal enum class ActivityPhase( val status: String, val heading: String, @@ -91,12 +86,6 @@ internal fun activityPhase(data: Map, rows: List): else -> rows.firstOrNull()?.let { ActivityPhase.forStatus(it.status) } } -/** - * Header carries the state, the title says what needs you (or which thread, when - * there is only one), and the body lists every thread with its status in front. - * System UI renders all of it, so the same builder serves the shade, the lock - * screen and the status bar chip. - */ internal class ActivityPresentation(data: Map, private val active: Boolean) { private val rows = activityRows(data) private val hero = rows.firstOrNull() @@ -153,7 +142,6 @@ internal class ActivityPresentation(data: Map, private val activ ) } val body = body(context) - // The collapsed card gets the priority row; the expanded card gets them all. val lineBreak = body.indexOf('\n') val firstLine = if (lineBreak >= 0) body.subSequence(0, lineBreak) else body builder.setContentText(firstLine).setStyle(NotificationCompat.BigTextStyle().bigText(body)) @@ -164,7 +152,6 @@ internal class ActivityPresentation(data: Map, private val activ private fun body(context: Context): CharSequence = when { hero == null -> legacyBody - // The title already names the thread; the body only needs its status and project. rows.size == 1 -> statusLine(context, hero.copy(title = hero.project), "") else -> SpannableStringBuilder().apply { rows.forEachIndexed { index, row -> diff --git a/apps/mobile/modules/t3-agent-notifications/android/src/main/java/expo/modules/t3agentnotifications/AgentNotifications.kt b/apps/mobile/modules/t3-agent-notifications/android/src/main/java/expo/modules/t3agentnotifications/AgentNotifications.kt index 5c7cd2e43560c..f9b69a7117741 100644 --- a/apps/mobile/modules/t3-agent-notifications/android/src/main/java/expo/modules/t3agentnotifications/AgentNotifications.kt +++ b/apps/mobile/modules/t3-agent-notifications/android/src/main/java/expo/modules/t3agentnotifications/AgentNotifications.kt @@ -91,7 +91,6 @@ object AgentNotifications { .forEach { manager.cancel(it.tag, it.id) } } - /** Records the thread route the app is showing, or null when none is open. */ @Volatile private var threadOnScreen: String? = null fun setThreadOnScreen(path: String?) { @@ -220,7 +219,6 @@ object AgentNotifications { data: Map, updatedAt: Long ) { - // Ignore reordered status updates without dropping an unrelated alert. if (updatedAt < prefs.getLong("lastUpdate", 0)) return prefs.edit().putLong("lastUpdate", updatedAt).apply() val active = data["active"] == "true" @@ -269,8 +267,6 @@ object AgentNotifications { .setContentIntent(openThread) .setDeleteIntent(dismissIntent) presentation.applyTo(builder, context) - // A finished card is no longer ongoing, so it swipes away and a tap opens - // the thread; buttons would only repeat that. val action = presentation.action if (action != null) { if (openThread != null) builder.addAction(0, action, openThread) diff --git a/apps/mobile/modules/t3-agent-notifications/android/src/test/java/expo/modules/t3agentnotifications/AgentNotificationsTest.kt b/apps/mobile/modules/t3-agent-notifications/android/src/test/java/expo/modules/t3agentnotifications/AgentNotificationsTest.kt index 7492bf743dcbf..7ca6edbc2133e 100644 --- a/apps/mobile/modules/t3-agent-notifications/android/src/test/java/expo/modules/t3agentnotifications/AgentNotificationsTest.kt +++ b/apps/mobile/modules/t3-agent-notifications/android/src/test/java/expo/modules/t3agentnotifications/AgentNotificationsTest.kt @@ -49,7 +49,6 @@ class AgentNotificationsTest { ) AgentNotifications.clear(context) AgentNotifications.configure(context, "device", "user", "t3code-dev", true) - // The fixtures alert for this thread; a resumed app is showing it. AgentNotifications.setThreadOnScreen("/threads/environment/thread") } diff --git a/apps/mobile/modules/t3-composer-editor/android/src/main/java/expo/modules/t3composereditor/T3ComposerEditorView.kt b/apps/mobile/modules/t3-composer-editor/android/src/main/java/expo/modules/t3composereditor/T3ComposerEditorView.kt index 0b44599016b13..ecc37df17c993 100644 --- a/apps/mobile/modules/t3-composer-editor/android/src/main/java/expo/modules/t3composereditor/T3ComposerEditorView.kt +++ b/apps/mobile/modules/t3-composer-editor/android/src/main/java/expo/modules/t3composereditor/T3ComposerEditorView.kt @@ -585,10 +585,8 @@ internal class SelectionAwareEditText(context: Context) : EditText(context) { var clipboardFragment = "" /** - * Placeholder shown while the draft is empty. An editable TextView never ellipsizes its hint, - * so a long placeholder wraps once a wide system font or a large font scale (Samsung defaults) - * runs out of width, and the resting composer grows to two lines. The hint is instead cut to - * one line with an ellipsis for whatever width the editor is measured at. + * Editable TextView hints do not ellipsize, so long placeholders wrap and grow the composer. + * Truncate the hint to the measured width instead. */ var placeholder = "" set(value) { diff --git a/apps/mobile/modules/t3-composer-editor/android/src/main/java/expo/modules/t3composereditor/T3ContextChip.kt b/apps/mobile/modules/t3-composer-editor/android/src/main/java/expo/modules/t3composereditor/T3ContextChip.kt index d2b7b9cb9e460..b181c663df54b 100644 --- a/apps/mobile/modules/t3-composer-editor/android/src/main/java/expo/modules/t3composereditor/T3ContextChip.kt +++ b/apps/mobile/modules/t3-composer-editor/android/src/main/java/expo/modules/t3composereditor/T3ContextChip.kt @@ -34,8 +34,6 @@ class T3ContextChip( } private val em = fontSize - // The size reads as metadata beside the name, so it draws a step down from the label the - // way the web chip does. private val detailPaint = TextPaint(Paint.ANTI_ALIAS_FLAG).apply { textSize = fontSize * 0.84f typeface = Typeface.create("sans-serif-medium", Typeface.NORMAL) diff --git a/apps/mobile/modules/t3-composer-editor/ios/T3ComposerEditorModule.swift b/apps/mobile/modules/t3-composer-editor/ios/T3ComposerEditorModule.swift index a108c79fcc089..99504e6de8936 100644 --- a/apps/mobile/modules/t3-composer-editor/ios/T3ComposerEditorModule.swift +++ b/apps/mobile/modules/t3-composer-editor/ios/T3ComposerEditorModule.swift @@ -36,8 +36,6 @@ enum T3ComposerClipboard { } } -// Expo Modules 2.0: the clipboard function is a @JS member; the view stays in -// definition() until the 2.0 view API lands. @ExpoModule("T3ComposerEditor") public class T3ComposerEditorModule: Module { // UIPasteboard is main-thread only, so the member is main-actor isolated. diff --git a/apps/mobile/modules/t3-composer-editor/ios/T3ComposerEditorView.swift b/apps/mobile/modules/t3-composer-editor/ios/T3ComposerEditorView.swift index 919902b051ca8..f54f75caf5f50 100644 --- a/apps/mobile/modules/t3-composer-editor/ios/T3ComposerEditorView.swift +++ b/apps/mobile/modules/t3-composer-editor/ios/T3ComposerEditorView.swift @@ -85,9 +85,7 @@ private final class ComposerTextView: UITextView { var textPasteThresholdBytes = 0 var maxInputChars = Int.max var enterBehavior: ComposerEnterBehavior = .send - /// Shortcut HUD titles. JS supplies what the two sends actually do right now - /// ("Queue Message" / "Steer Message"), so the iPad Command-hold list names - /// the outcome rather than a generic "Send". + /// JS supplies the actual send outcomes so the iPad Command-hold HUD names the configured actions. var submitTitle = "Send Message" var alternateSubmitTitle = "Send Message" private var bypassTextPasteInterception = false @@ -95,9 +93,6 @@ private final class ComposerTextView: UITextView { override var keyCommands: [UIKeyCommand]? { var commands = super.keyCommands ?? [] guard !isReadOnly, markedTextRange == nil else { return commands } - // The plainer chord always performs the configured follow-up behavior and - // the more-modified one performs its opposite, so Command is the "other - // way" modifier whichever Return behavior is configured. if enterBehavior == .send { let submitOnReturn = UIKeyCommand( input: "\r", diff --git a/apps/mobile/modules/t3-highlights/T3HighlightsNative.podspec b/apps/mobile/modules/t3-highlights/T3HighlightsNative.podspec new file mode 100644 index 0000000000000..0cc380369f0c4 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/T3HighlightsNative.podspec @@ -0,0 +1,30 @@ +require 'json' + +package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) + +Pod::Spec.new do |s| + s.name = 'T3HighlightsNative' + s.version = package['version'] + s.summary = 'Native @pierre/highlights syntax highlighter for T3 Code mobile.' + s.description = 'Runs the @pierre/highlights lexers, compiled from WebAssembly to C with wasm2c.' + s.homepage = 'https://t3tools.com' + s.license = { :type => 'UNLICENSED' } + s.author = { 'T3 Tools' => 'hello@t3tools.com' } + s.platforms = { :ios => '16.1' } + s.source = { :path => '.' } + s.source_files = 'ios/**/*.swift', 'cpp/**/*.{c,h,inc}', 'Vendor/**/*.{c,h,inc}' + # Swift sees only the wrapper; the generated and runtime headers stay private. + s.public_header_files = 'cpp/t3_highlights.h' + # Debug builds compile at -O0 by default, which makes the lexers several times + # slower. They are generated code, so optimize them in every configuration. + s.compiler_flags = '-O2' + s.pod_target_xcconfig = { + 'DEFINES_MODULE' => 'YES', + # Plain malloc memory with explicit bounds checks: no guard-page signal + # handlers competing with the app's crash reporting. + 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) WASM_RT_USE_MMAP=0 WASM_RT_MEMCHECK_BOUNDS_CHECK=1 WASM_RT_SKIP_SIGNAL_RECOVERY=1', + 'HEADER_SEARCH_PATHS' => '$(inherited) "${PODS_TARGET_SRCROOT}/Vendor" "${PODS_TARGET_SRCROOT}/Vendor/highlights" "${PODS_TARGET_SRCROOT}/Vendor/wasm2c"', + } + s.swift_version = '5.9' + s.dependency 'ExpoModulesCore' +end diff --git a/apps/mobile/modules/t3-highlights/Vendor/highlights/highlights.c b/apps/mobile/modules/t3-highlights/Vendor/highlights/highlights.c new file mode 100644 index 0000000000000..d319651012d3f --- /dev/null +++ b/apps/mobile/modules/t3-highlights/Vendor/highlights/highlights.c @@ -0,0 +1,96483 @@ +/* Generated by apps/mobile/scripts/generate-highlights.mts from @pierre/highlights 0.2.0 (highlights.wasm sha256 cf5fc4d83e7c1ddab19d163de096f787f87efe61504909aa469434f61ef51e2e). Do not edit. */ +/* Automatically generated by wasm2c */ +#include +#include +#include +#include +#include +#if defined(__MINGW32__) +#include +#elif defined(_MSC_VER) +#include +#include +#define alloca _alloca +#elif defined(__FreeBSD__) || defined(__OpenBSD__) +#include +#else +#include +#endif + +#include "highlights.h" +#define IS_SINGLE_UNSHARED_DEFAULT32_MEMORY 1 + +// Computes a pointer to an object of the given size in a little-endian memory. +// +// On a little-endian host, this is just &mem->data[addr] - the object's size is +// unused. On a big-endian host, it's &mem->data[mem->size - addr - n], where n +// is the object's size. +// +// Note that mem may be evaluated multiple times. +// +// Parameters: +// mem - The memory. +// addr - The address. +// n - The size of the object. +// +// Result: +// A pointer for an object of size n. +#if WABT_BIG_ENDIAN +#define MEM_ADDR(mem, addr, n) ((mem)->data_end - (addr) - (n)) +#else +#define MEM_ADDR(mem, addr, n) &((mem)->data[addr]) +#endif + +// We can only use Segue for this module if it uses a single unshared, +// default-page, 32-bit imported or exported memory. +#if WASM_RT_USE_SEGUE && IS_SINGLE_UNSHARED_DEFAULT32_MEMORY +#define WASM_RT_USE_SEGUE_FOR_THIS_MODULE 1 +#else +#define WASM_RT_USE_SEGUE_FOR_THIS_MODULE 0 +#endif + +#ifndef WASM_RT_USE_LOCAL_MEMORY_BASE_SIZE +#define WASM_RT_USE_LOCAL_MEMORY_BASE_SIZE 1 +#endif + +#if WASM_RT_USE_LOCAL_MEMORY_BASE_SIZE && WASM_RT_USE_MMAP && \ + IS_SINGLE_UNSHARED_DEFAULT32_MEMORY && !WABT_BIG_ENDIAN +#define WASM_RT_USE_LOCAL_MEMORY_BASE_SIZE_FOR_THIS_MODULE 1 +#else +#define WASM_RT_USE_LOCAL_MEMORY_BASE_SIZE_FOR_THIS_MODULE 0 +#endif + +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +// POSIX uses FS for TLS, GS is free +static inline void* wasm_rt_segue_read_base() { + if (wasm_rt_fsgsbase_inst_supported) { + return (void*)__builtin_ia32_rdgsbase64(); + } else { + return wasm_rt_syscall_get_segue_base(); + } +} +static inline void wasm_rt_segue_write_base(void* base) { +#if WASM_RT_SEGUE_FREE_SEGMENT + if (wasm_rt_last_segment_val == base) { + return; + } + + wasm_rt_last_segment_val = base; +#endif + + if (wasm_rt_fsgsbase_inst_supported) { + __builtin_ia32_wrgsbase64((uintptr_t)base); + } else { + wasm_rt_syscall_set_segue_base(base); + } +} +#define MEM_ADDR_MEMOP(mem, addr, n) ((uint8_t __seg_gs*)(uintptr_t)addr) +#elif WASM_RT_USE_LOCAL_MEMORY_BASE_SIZE_FOR_THIS_MODULE +#define MEM_ADDR_MEMOP(mem, addr, n) (&wasm_rt_local_memory_base[(addr)]) +#else +#define MEM_ADDR_MEMOP(mem, addr, n) MEM_ADDR(mem, addr, n) +#endif + +#define TRAP(x) (wasm_rt_trap(WASM_RT_TRAP_##x), 0) + +#if WASM_RT_STACK_DEPTH_COUNT +#define FUNC_PROLOGUE \ + if (++wasm_rt_call_stack_depth > WASM_RT_MAX_CALL_STACK_DEPTH) \ + TRAP(EXHAUSTION); + +#define FUNC_EPILOGUE --wasm_rt_call_stack_depth +#else +#define FUNC_PROLOGUE + +#define FUNC_EPILOGUE +#endif + +#define UNREACHABLE TRAP(UNREACHABLE) + +#if defined(__clang__) || defined(__GNUC__) +#define W2C_COLD_FUNC __attribute__((noinline, cold)) +#elif defined(_MSC_VER) +#define W2C_COLD_FUNC __declspec(noinline) +#else +#define W2C_COLD_FUNC +#endif + +W2C_COLD_FUNC static bool func_types_eq_slowpath( + const wasm_rt_funcref_table_t* table, + const wasm_rt_func_type_t expected_type, + uint32_t index) { + const size_t sha256size = 32; + if (index >= table->size) { + // Table index out of bounds. Raise Wasm trap. + TRAP(CALL_INDIRECT); + return false; + } + const wasm_rt_funcref_t* const func_ref = &table->data[index]; + if (!expected_type || !func_ref->func || !func_ref->func_type || + memcmp(expected_type, func_ref->func_type, sha256size) != 0) { + // Type check failed. Raise Wasm trap. + TRAP(CALL_INDIRECT); + return false; + } + return true; +} + +#define CHECK_CALL_INDIRECT(table, ft, x) \ + (LIKELY((x) < table.size && ft == table.data[x].func_type) || \ + func_types_eq_slowpath(&(table), ft, x)) + +#define DO_CALL_INDIRECT(table, t, x, ...) ((t)table.data[x].func)(__VA_ARGS__) + +#define CALL_INDIRECT(table, t, ft, x, ...) \ + (CHECK_CALL_INDIRECT(table, ft, x), \ + DO_CALL_INDIRECT(table, t, x, __VA_ARGS__)) + +static inline uint64_t checked_add_u64(uint64_t a, uint64_t b) { + uint64_t ret; +#if __has_builtin(__builtin_add_overflow) + if (__builtin_add_overflow(a, b, &ret)) + TRAP(OOB); +#elif defined(_MSC_VER) + if (_addcarry_u64(0, a, b, &ret)) + TRAP(OOB); +#else + ret = a + b; + if (ret < a) + TRAP(OOB); +#endif + return ret; +} + +#define RANGE_CHECK(mem, offset, len) \ + do { \ + uint64_t res = checked_add_u64(offset, len); \ + if (UNLIKELY(res > (mem)->size)) \ + TRAP(OOB); \ + } while (0); + +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && WASM_RT_SANITY_CHECKS +#include +#define WASM_RT_CHECK_BASE(mem) \ + if (((uintptr_t)((mem)->data)) != ((uintptr_t)wasm_rt_segue_read_base())) { \ + puts("Segment register mismatch\n"); \ + abort(); \ + } +#else +#define WASM_RT_CHECK_BASE(mem) +#endif + +// MEMCHECK_DEFAULT32 is an "accelerated" MEMCHECK used only for +// default-page-size, 32-bit memories. It may do nothing at all +// (if hardware bounds-checking is enabled via guard pages) +// or it may do a slightly faster RANGE_CHECK. +#if WASM_RT_MEMCHECK_GUARD_PAGES +#define MEMCHECK_DEFAULT32(mem, local_memory_size, a, t) \ + WASM_RT_CHECK_BASE(mem); +#else +#if WASM_RT_USE_LOCAL_MEMORY_BASE_SIZE_FOR_THIS_MODULE +#define MEMCHECK_DEFAULT32(mem, local_memory_size, a, t) \ + WASM_RT_CHECK_BASE(mem); \ + if (UNLIKELY(a + (uint64_t)sizeof(t) > local_memory_size)) \ + TRAP(OOB); +#else +#define MEMCHECK_DEFAULT32(mem, local_memory_size, a, t) \ + WASM_RT_CHECK_BASE(mem); \ + if (UNLIKELY(a + (uint64_t)sizeof(t) > mem->size)) \ + TRAP(OOB); +#endif +#endif + +// MEMCHECK_GENERAL can be used for any memory +#define MEMCHECK_GENERAL(mem, a, t) \ + WASM_RT_CHECK_BASE(mem); \ + RANGE_CHECK(mem, a, sizeof(t)); + +// When using guard pages, reads have to be immediately consumed so that OOB +// trap checks are applied in the right place, and not optimized away. This is +// done using FORCE_READ_INT/FORCE_READ_FLOAT +#if WASM_RT_MEMCHECK_BOUNDS_CHECK || \ + WASM_RT_NONCONFORMING_ALLOW_OOB_READ_ELIMINATION +#define FORCE_READ_INT(var) +#define FORCE_READ_FLOAT(var) +#elif defined(__GNUC__) && WASM_RT_MEMCHECK_GUARD_PAGES +#define FORCE_READ_INT(var) __asm__("" ::"r"(var)) + +#if defined(__x86_64__) || defined(_M_X64) +#define FORCE_READ_FLOAT_CONSTRAINT "x" +#elif defined(__aarch64__) && defined(__ARM_FP) && ((__ARM_FP & 0x4) != 0) +#define FORCE_READ_FLOAT_CONSTRAINT "w" +#elif defined(__mips__) && defined(__clang__) && !defined(__mips_soft_float) +// Clang before v18 uses hard floats which has a different constraint +#define FORCE_READ_FLOAT_CONSTRAINT "f" +#elif (defined(__powerpc__) || defined(__ppc__) || defined(__PPC__)) && \ + !(defined(_SOFT_FLOAT) || defined(__NO_FPRS__)) +#define FORCE_READ_FLOAT_CONSTRAINT "f" +#elif defined(__riscv) && defined(__riscv_flen) && (__riscv_flen >= 32) +#define FORCE_READ_FLOAT_CONSTRAINT "f" +#elif defined(__s390__) || defined(__s390x__) +#define FORCE_READ_FLOAT_CONSTRAINT "f" +#else +#define FORCE_READ_FLOAT_CONSTRAINT "r" +#endif + +#define FORCE_READ_FLOAT(var) __asm__("" ::FORCE_READ_FLOAT_CONSTRAINT(var)) +#else +#error \ + "Guard page mode for Wasm not supported on this platform because FORCE_READ_INT/FORCE_READ_FLOAT could not be instantiated." \ + "Either enable specify -DWASM_RT_NONCONFORMING_ALLOW_OOB_READ_ELIMINATION=1 during compilation or use -DWASM_RT_MEMCHECK_BOUNDS_CHECK=1 to use bounds check mode" +#endif + +static inline void load_data(u8* dest, const u8* src, size_t n) { + if (!n) { + return; + } +#if WABT_BIG_ENDIAN + for (size_t i = 0; i < n; i++) { + dest[i] = src[n - i - 1]; + } +#else + wasm_rt_memcpy(dest, src, n); +#endif +} + +#define LOAD_DATA(m, o, i, s) \ + do { \ + RANGE_CHECK((&m), o, s); \ + load_data(MEM_ADDR(&m, o, s), i, s); \ + } while (0) + +#define DEF_MEM_CHECKS0(name, shared, mem_type, ret_kw, return_type) \ + static inline return_type name##_default32( \ + uint8_t* const wasm_rt_local_memory_base, \ + uint64_t wasm_rt_local_memory_size, wasm_rt##shared##memory_t* mem, \ + u64 addr) { \ + MEMCHECK_DEFAULT32(mem, wasm_rt_local_memory_size, addr, mem_type); \ + ret_kw name##_unchecked(wasm_rt_local_memory_base, mem, addr); \ + } \ + static inline return_type name(uint8_t* const wasm_rt_local_memory_base, \ + uint64_t wasm_rt_local_memory_size, \ + wasm_rt##shared##memory_t* mem, u64 addr) { \ + MEMCHECK_GENERAL(mem, addr, mem_type); \ + ret_kw name##_unchecked(wasm_rt_local_memory_base, mem, addr); \ + } + +#define DEF_MEM_CHECKS1(name, shared, mem_type, ret_kw, return_type, \ + val_type1) \ + static inline return_type name##_default32( \ + uint8_t* const wasm_rt_local_memory_base, \ + uint64_t wasm_rt_local_memory_size, wasm_rt##shared##memory_t* mem, \ + u64 addr, val_type1 val1) { \ + MEMCHECK_DEFAULT32(mem, wasm_rt_local_memory_size, addr, mem_type); \ + ret_kw name##_unchecked(wasm_rt_local_memory_base, mem, addr, val1); \ + } \ + static inline return_type name(uint8_t* const wasm_rt_local_memory_base, \ + uint64_t wasm_rt_local_memory_size, \ + wasm_rt##shared##memory_t* mem, u64 addr, \ + val_type1 val1) { \ + MEMCHECK_GENERAL(mem, addr, mem_type); \ + ret_kw name##_unchecked(wasm_rt_local_memory_base, mem, addr, val1); \ + } + +#define DEF_MEM_CHECKS2(name, shared, mem_type, ret_kw, return_type, \ + val_type1, val_type2) \ + static inline return_type name##_default32( \ + uint8_t* const wasm_rt_local_memory_base, \ + uint64_t wasm_rt_local_memory_size, wasm_rt##shared##memory_t* mem, \ + u64 addr, val_type1 val1, val_type2 val2) { \ + MEMCHECK_DEFAULT32(mem, wasm_rt_local_memory_size, addr, mem_type); \ + ret_kw name##_unchecked(wasm_rt_local_memory_base, mem, addr, val1, val2); \ + } \ + static inline return_type name(uint8_t* const wasm_rt_local_memory_base, \ + uint64_t wasm_rt_local_memory_size, \ + wasm_rt##shared##memory_t* mem, u64 addr, \ + val_type1 val1, val_type2 val2) { \ + MEMCHECK_GENERAL(mem, addr, mem_type); \ + ret_kw name##_unchecked(wasm_rt_local_memory_base, mem, addr, val1, val2); \ + } + +#define DEFINE_LOAD(name, t1, t2, t3, force_read) \ + static inline t3 name##_unchecked(uint8_t* const wasm_rt_local_memory_base, \ + wasm_rt_memory_t* mem, u64 addr) { \ + t1 result; \ + wasm_rt_memcpy(&result, MEM_ADDR_MEMOP(mem, addr, sizeof(t1)), \ + sizeof(t1)); \ + t3 ret = (t3)(t2)result; \ + force_read(ret); \ + return ret; \ + } \ + DEF_MEM_CHECKS0(name, _, t1, return, t3) + +#define DEFINE_STORE(name, t1, t2) \ + static inline void name##_unchecked( \ + uint8_t* const wasm_rt_local_memory_base, wasm_rt_memory_t* mem, \ + u64 addr, t2 value) { \ + t1 wrapped = (t1)value; \ + wasm_rt_memcpy(MEM_ADDR_MEMOP(mem, addr, sizeof(t1)), &wrapped, \ + sizeof(t1)); \ + } \ + DEF_MEM_CHECKS1(name, _, t1, , void, t2) + +DEFINE_LOAD(i32_load, u32, u32, u32, FORCE_READ_INT) +DEFINE_LOAD(i64_load, u64, u64, u64, FORCE_READ_INT) +DEFINE_LOAD(f32_load, f32, f32, f32, FORCE_READ_FLOAT) +DEFINE_LOAD(f64_load, f64, f64, f64, FORCE_READ_FLOAT) +DEFINE_LOAD(i32_load8_s, s8, s32, u32, FORCE_READ_INT) +DEFINE_LOAD(i64_load8_s, s8, s64, u64, FORCE_READ_INT) +DEFINE_LOAD(i32_load8_u, u8, u32, u32, FORCE_READ_INT) +DEFINE_LOAD(i64_load8_u, u8, u64, u64, FORCE_READ_INT) +DEFINE_LOAD(i32_load16_s, s16, s32, u32, FORCE_READ_INT) +DEFINE_LOAD(i64_load16_s, s16, s64, u64, FORCE_READ_INT) +DEFINE_LOAD(i32_load16_u, u16, u32, u32, FORCE_READ_INT) +DEFINE_LOAD(i64_load16_u, u16, u64, u64, FORCE_READ_INT) +DEFINE_LOAD(i64_load32_s, s32, s64, u64, FORCE_READ_INT) +DEFINE_LOAD(i64_load32_u, u32, u64, u64, FORCE_READ_INT) +DEFINE_STORE(i32_store, u32, u32) +DEFINE_STORE(i64_store, u64, u64) +DEFINE_STORE(f32_store, f32, f32) +DEFINE_STORE(f64_store, f64, f64) +DEFINE_STORE(i32_store8, u8, u32) +DEFINE_STORE(i32_store16, u16, u32) +DEFINE_STORE(i64_store8, u8, u64) +DEFINE_STORE(i64_store16, u16, u64) +DEFINE_STORE(i64_store32, u32, u64) + +#if defined(_MSC_VER) + +// Adapted from +// https://github.com/nemequ/portable-snippets/blob/master/builtin/builtin.h + +static inline int I64_CLZ(unsigned long long v) { + unsigned long r = 0; +#if defined(_M_AMD64) || defined(_M_ARM) + if (_BitScanReverse64(&r, v)) { + return 63 - r; + } +#else + if (_BitScanReverse(&r, (unsigned long)(v >> 32))) { + return 31 - r; + } else if (_BitScanReverse(&r, (unsigned long)v)) { + return 63 - r; + } +#endif + return 64; +} + +static inline int I32_CLZ(unsigned long v) { + unsigned long r = 0; + if (_BitScanReverse(&r, v)) { + return 31 - r; + } + return 32; +} + +static inline int I64_CTZ(unsigned long long v) { + if (!v) { + return 64; + } + unsigned long r = 0; +#if defined(_M_AMD64) || defined(_M_ARM) + _BitScanForward64(&r, v); + return (int)r; +#else + if (_BitScanForward(&r, (unsigned int)(v))) { + return (int)(r); + } + + _BitScanForward(&r, (unsigned int)(v >> 32)); + return (int)(r + 32); +#endif +} + +static inline int I32_CTZ(unsigned long v) { + if (!v) { + return 32; + } + unsigned long r = 0; + _BitScanForward(&r, v); + return (int)r; +} + +#define POPCOUNT_DEFINE_PORTABLE(f_n, T) \ + static inline u32 f_n(T x) { \ + x = x - ((x >> 1) & (T) ~(T)0 / 3); \ + x = (x & (T) ~(T)0 / 15 * 3) + ((x >> 2) & (T) ~(T)0 / 15 * 3); \ + x = (x + (x >> 4)) & (T) ~(T)0 / 255 * 15; \ + return (T)(x * ((T) ~(T)0 / 255)) >> (sizeof(T) - 1) * 8; \ + } + +POPCOUNT_DEFINE_PORTABLE(I32_POPCNT, u32) +POPCOUNT_DEFINE_PORTABLE(I64_POPCNT, u64) + +#undef POPCOUNT_DEFINE_PORTABLE + +#else + +#define I32_CLZ(x) ((x) ? __builtin_clz(x) : 32) +#define I64_CLZ(x) ((x) ? __builtin_clzll(x) : 64) +#define I32_CTZ(x) ((x) ? __builtin_ctz(x) : 32) +#define I64_CTZ(x) ((x) ? __builtin_ctzll(x) : 64) +#define I32_POPCNT(x) (__builtin_popcount(x)) +#define I64_POPCNT(x) (__builtin_popcountll(x)) + +#endif + +#define DIV_S(ut, min, x, y) \ + ((UNLIKELY((y) == 0)) ? TRAP(DIV_BY_ZERO) \ + : (UNLIKELY((x) == min && (y) == -1)) ? TRAP(INT_OVERFLOW) \ + : (ut)((x) / (y))) + +#define REM_S(ut, min, x, y) \ + ((UNLIKELY((y) == 0)) ? TRAP(DIV_BY_ZERO) \ + : (UNLIKELY((x) == min && (y) == -1)) ? 0 \ + : (ut)((x) % (y))) + +#define I32_DIV_S(x, y) DIV_S(u32, INT32_MIN, (s32)x, (s32)y) +#define I64_DIV_S(x, y) DIV_S(u64, INT64_MIN, (s64)x, (s64)y) +#define I32_REM_S(x, y) REM_S(u32, INT32_MIN, (s32)x, (s32)y) +#define I64_REM_S(x, y) REM_S(u64, INT64_MIN, (s64)x, (s64)y) + +#define DIVREM_U(op, x, y) \ + ((UNLIKELY((y) == 0)) ? TRAP(DIV_BY_ZERO) : ((x)op(y))) + +#define DIV_U(x, y) DIVREM_U(/, x, y) +#define REM_U(x, y) DIVREM_U(%, x, y) + +#define ROTL(x, y, mask) \ + (((x) << ((y) & (mask))) | ((x) >> (((mask) - (y) + 1) & (mask)))) +#define ROTR(x, y, mask) \ + (((x) >> ((y) & (mask))) | ((x) << (((mask) - (y) + 1) & (mask)))) + +#define I32_ROTL(x, y) ROTL(x, y, 31) +#define I64_ROTL(x, y) ROTL(x, y, 63) +#define I32_ROTR(x, y) ROTR(x, y, 31) +#define I64_ROTR(x, y) ROTR(x, y, 63) + +#define FMIN(x, y) \ + ((UNLIKELY((x) != (x))) ? NAN \ + : (UNLIKELY((y) != (y))) ? NAN \ + : (UNLIKELY((x) == 0 && (y) == 0)) ? (signbit(x) ? x : y) \ + : (x < y) ? x \ + : y) + +#define FMAX(x, y) \ + ((UNLIKELY((x) != (x))) ? NAN \ + : (UNLIKELY((y) != (y))) ? NAN \ + : (UNLIKELY((x) == 0 && (y) == 0)) ? (signbit(x) ? y : x) \ + : (x > y) ? x \ + : y) + +#define TRUNC_S(ut, st, ft, min, minop, max, x) \ + ((UNLIKELY((x) != (x))) ? TRAP(INVALID_CONVERSION) \ + : (UNLIKELY(!((x)minop(min) && (x) < (max)))) ? TRAP(INT_OVERFLOW) \ + : (ut)(st)(x)) + +#define I32_TRUNC_S_F32(x) \ + TRUNC_S(u32, s32, f32, (f32)INT32_MIN, >=, 2147483648.f, x) +#define I64_TRUNC_S_F32(x) \ + TRUNC_S(u64, s64, f32, (f32)INT64_MIN, >=, (f32)INT64_MAX, x) +#define I32_TRUNC_S_F64(x) \ + TRUNC_S(u32, s32, f64, -2147483649., >, 2147483648., x) +#define I64_TRUNC_S_F64(x) \ + TRUNC_S(u64, s64, f64, (f64)INT64_MIN, >=, (f64)INT64_MAX, x) + +#define TRUNC_U(ut, ft, max, x) \ + ((UNLIKELY((x) != (x))) ? TRAP(INVALID_CONVERSION) \ + : (UNLIKELY(!((x) > (ft) - 1 && (x) < (max)))) ? TRAP(INT_OVERFLOW) \ + : (ut)(x)) + +#define I32_TRUNC_U_F32(x) TRUNC_U(u32, f32, 4294967296.f, x) +#define I64_TRUNC_U_F32(x) TRUNC_U(u64, f32, (f32)UINT64_MAX, x) +#define I32_TRUNC_U_F64(x) TRUNC_U(u32, f64, 4294967296., x) +#define I64_TRUNC_U_F64(x) TRUNC_U(u64, f64, (f64)UINT64_MAX, x) + +#define TRUNC_SAT_S(ut, st, ft, min, smin, minop, max, smax, x) \ + ((UNLIKELY((x) != (x))) ? 0 \ + : (UNLIKELY(!((x)minop(min)))) ? smin \ + : (UNLIKELY(!((x) < (max)))) ? smax \ + : (ut)(st)(x)) + +#define I32_TRUNC_SAT_S_F32(x) \ + TRUNC_SAT_S(u32, s32, f32, (f32)INT32_MIN, INT32_MIN, >=, 2147483648.f, \ + INT32_MAX, x) +#define I64_TRUNC_SAT_S_F32(x) \ + TRUNC_SAT_S(u64, s64, f32, (f32)INT64_MIN, INT64_MIN, >=, (f32)INT64_MAX, \ + INT64_MAX, x) +#define I32_TRUNC_SAT_S_F64(x) \ + TRUNC_SAT_S(u32, s32, f64, -2147483649., INT32_MIN, >, 2147483648., \ + INT32_MAX, x) +#define I64_TRUNC_SAT_S_F64(x) \ + TRUNC_SAT_S(u64, s64, f64, (f64)INT64_MIN, INT64_MIN, >=, (f64)INT64_MAX, \ + INT64_MAX, x) + +#define TRUNC_SAT_U(ut, ft, max, smax, x) \ + ((UNLIKELY((x) != (x))) ? 0 \ + : (UNLIKELY(!((x) > (ft) - 1))) ? 0 \ + : (UNLIKELY(!((x) < (max)))) ? smax \ + : (ut)(x)) + +#define I32_TRUNC_SAT_U_F32(x) \ + TRUNC_SAT_U(u32, f32, 4294967296.f, UINT32_MAX, x) +#define I64_TRUNC_SAT_U_F32(x) \ + TRUNC_SAT_U(u64, f32, (f32)UINT64_MAX, UINT64_MAX, x) +#define I32_TRUNC_SAT_U_F64(x) TRUNC_SAT_U(u32, f64, 4294967296., UINT32_MAX, x) +#define I64_TRUNC_SAT_U_F64(x) \ + TRUNC_SAT_U(u64, f64, (f64)UINT64_MAX, UINT64_MAX, x) + +#define DEFINE_REINTERPRET(name, t1, t2) \ + static inline t2 name(t1 x) { \ + t2 result; \ + wasm_rt_memcpy(&result, &x, sizeof(result)); \ + return result; \ + } + +DEFINE_REINTERPRET(f32_reinterpret_i32, u32, f32) +DEFINE_REINTERPRET(i32_reinterpret_f32, f32, u32) +DEFINE_REINTERPRET(f64_reinterpret_i64, u64, f64) +DEFINE_REINTERPRET(i64_reinterpret_f64, f64, u64) + +static float quiet_nanf(float x) { + uint32_t tmp; + wasm_rt_memcpy(&tmp, &x, 4); + tmp |= 0x7fc00000lu; + wasm_rt_memcpy(&x, &tmp, 4); + return x; +} + +static double quiet_nan(double x) { + uint64_t tmp; + wasm_rt_memcpy(&tmp, &x, 8); + tmp |= 0x7ff8000000000000llu; + wasm_rt_memcpy(&x, &tmp, 8); + return x; +} + +static double wasm_quiet(double x) { + if (UNLIKELY(isnan(x))) { + return quiet_nan(x); + } + return x; +} + +static float wasm_quietf(float x) { + if (UNLIKELY(isnan(x))) { + return quiet_nanf(x); + } + return x; +} + +static double wasm_floor(double x) { + if (UNLIKELY(isnan(x))) { + return quiet_nan(x); + } + return floor(x); +} + +static float wasm_floorf(float x) { + if (UNLIKELY(isnan(x))) { + return quiet_nanf(x); + } + return floorf(x); +} + +static double wasm_ceil(double x) { + if (UNLIKELY(isnan(x))) { + return quiet_nan(x); + } + return ceil(x); +} + +static float wasm_ceilf(float x) { + if (UNLIKELY(isnan(x))) { + return quiet_nanf(x); + } + return ceilf(x); +} + +static double wasm_trunc(double x) { + if (UNLIKELY(isnan(x))) { + return quiet_nan(x); + } + return trunc(x); +} + +static float wasm_truncf(float x) { + if (UNLIKELY(isnan(x))) { + return quiet_nanf(x); + } + return truncf(x); +} + +static float wasm_nearbyintf(float x) { + if (UNLIKELY(isnan(x))) { + return quiet_nanf(x); + } + return nearbyintf(x); +} + +static double wasm_nearbyint(double x) { + if (UNLIKELY(isnan(x))) { + return quiet_nan(x); + } + return nearbyint(x); +} + +static float wasm_fabsf(float x) { + if (UNLIKELY(isnan(x))) { + uint32_t tmp; + wasm_rt_memcpy(&tmp, &x, 4); + tmp = tmp & ~(1UL << 31); + wasm_rt_memcpy(&x, &tmp, 4); + return x; + } + return fabsf(x); +} + +static double wasm_fabs(double x) { + if (UNLIKELY(isnan(x))) { + uint64_t tmp; + wasm_rt_memcpy(&tmp, &x, 8); + tmp = tmp & ~(1ULL << 63); + wasm_rt_memcpy(&x, &tmp, 8); + return x; + } + return fabs(x); +} + +static double wasm_sqrt(double x) { + if (UNLIKELY(isnan(x))) { + return quiet_nan(x); + } + +#if __has_builtin(__builtin_elementwise_sqrt) + // Fastest option: doesn't set errno + return __builtin_elementwise_sqrt(x); +#elif __has_builtin(__builtin_sqrt) + // Optimized if -fno-math-errno is set + return __builtin_sqrt(x); +#else + // Libc call. May/may not be optimized + return sqrt(x); +#endif +} + +static float wasm_sqrtf(float x) { + if (UNLIKELY(isnan(x))) { + return quiet_nanf(x); + } + +#if __has_builtin(__builtin_elementwise_sqrt) + // Fastest option: doesn't set errno + return __builtin_elementwise_sqrt(x); +#elif __has_builtin(__builtin_sqrt) + // Optimized if -fno-math-errno is set + return __builtin_sqrtf(x); +#else + // Libc call. May/may not be optimized + return sqrtf(x); +#endif +} + +static inline void memory_fill(wasm_rt_memory_t* mem, u64 d, u32 val, u64 n) { + RANGE_CHECK(mem, d, n); + memset(MEM_ADDR(mem, d, n), val, n); +} + +static inline void memory_copy(wasm_rt_memory_t* dest, + const wasm_rt_memory_t* src, + u64 dest_addr, + u64 src_addr, + u64 n) { + RANGE_CHECK(dest, dest_addr, n); + RANGE_CHECK(src, src_addr, n); + memmove(MEM_ADDR(dest, dest_addr, n), MEM_ADDR(src, src_addr, n), n); +} + +static inline void memory_init(wasm_rt_memory_t* dest, + const u8* src, + u32 src_size, + u64 dest_addr, + u32 src_addr, + u32 n) { + if (UNLIKELY(src_addr + (uint64_t)n > src_size)) + TRAP(OOB); + LOAD_DATA((*dest), dest_addr, src + src_addr, n); +} + +typedef enum { RefFunc, RefNull, GlobalGet } wasm_elem_segment_expr_type_t; + +typedef struct { + wasm_elem_segment_expr_type_t expr_type; + wasm_rt_func_type_t type; + wasm_rt_function_ptr_t func; + wasm_rt_tailcallee_t func_tailcallee; + size_t module_offset; +} wasm_elem_segment_expr_t; + +static inline void funcref_table_init(wasm_rt_funcref_table_t* dest, + const wasm_elem_segment_expr_t* src, + u32 src_size, + u64 dest_addr, + u32 src_addr, + u32 n, + void* module_instance) { + if (UNLIKELY(src_addr + (uint64_t)n > src_size)) + TRAP(OOB); + RANGE_CHECK(dest, dest_addr, n); + for (u32 i = 0; i < n; i++) { + const wasm_elem_segment_expr_t* const src_expr = &src[src_addr + i]; + wasm_rt_funcref_t* const dest_val = &(dest->data[dest_addr + i]); + switch (src_expr->expr_type) { + case RefFunc: + *dest_val = (wasm_rt_funcref_t){ + src_expr->type, src_expr->func, src_expr->func_tailcallee, + (char*)module_instance + src_expr->module_offset}; + break; + case RefNull: + *dest_val = wasm_rt_funcref_null_value; + break; + case GlobalGet: + *dest_val = **(wasm_rt_funcref_t**)((char*)module_instance + + src_expr->module_offset); + break; + } + } +} + +// Currently wasm2c only supports initializing externref tables with ref.null. +static inline void externref_table_init(wasm_rt_externref_table_t* dest, + u32 src_size, + u64 dest_addr, + u32 src_addr, + u32 n) { + if (UNLIKELY(src_addr + (uint64_t)n > src_size)) + TRAP(OOB); + RANGE_CHECK(dest, dest_addr, n); + for (u32 i = 0; i < n; i++) { + dest->data[dest_addr + i] = wasm_rt_externref_null_value; + } +} + +#define DEFINE_TABLE_COPY(type) \ + static inline void type##_table_copy(wasm_rt_##type##_table_t* dest, \ + const wasm_rt_##type##_table_t* src, \ + u64 dest_addr, u64 src_addr, u64 n) { \ + RANGE_CHECK(dest, dest_addr, n); \ + RANGE_CHECK(src, src_addr, n); \ + memmove(dest->data + dest_addr, src->data + src_addr, \ + n * sizeof(wasm_rt_##type##_t)); \ + } + +DEFINE_TABLE_COPY(funcref) +DEFINE_TABLE_COPY(externref) + +#define DEFINE_TABLE_GET(type) \ + static inline wasm_rt_##type##_t type##_table_get( \ + const wasm_rt_##type##_table_t* table, u64 i) { \ + if (UNLIKELY(i >= table->size)) \ + TRAP(OOB); \ + return table->data[i]; \ + } + +DEFINE_TABLE_GET(funcref) +DEFINE_TABLE_GET(externref) + +#define DEFINE_TABLE_SET(type) \ + static inline void type##_table_set(const wasm_rt_##type##_table_t* table, \ + u64 i, const wasm_rt_##type##_t val) { \ + if (UNLIKELY(i >= table->size)) \ + TRAP(OOB); \ + table->data[i] = val; \ + } + +DEFINE_TABLE_SET(funcref) +DEFINE_TABLE_SET(externref) + +#define DEFINE_TABLE_FILL(type) \ + static inline void type##_table_fill(const wasm_rt_##type##_table_t* table, \ + u64 d, const wasm_rt_##type##_t val, \ + u64 n) { \ + RANGE_CHECK(table, d, n); \ + for (uint32_t i = d; i < d + n; i++) { \ + table->data[i] = val; \ + } \ + } + +DEFINE_TABLE_FILL(funcref) +DEFINE_TABLE_FILL(externref) + +#if defined(__GNUC__) || defined(__clang__) +#define FUNC_TYPE_DECL_EXTERN_T(x) extern const char* const x +#define FUNC_TYPE_EXTERN_T(x) const char* const x +#define FUNC_TYPE_T(x) static const char* const x +#else +#define FUNC_TYPE_DECL_EXTERN_T(x) extern const char x[] +#define FUNC_TYPE_EXTERN_T(x) const char x[] +#define FUNC_TYPE_T(x) static const char x[] +#endif + +#if (__STDC_VERSION__ < 201112L) && !defined(static_assert) +#define static_assert(X) \ + extern int(*assertion(void))[!!sizeof(struct { int x : (X) ? 2 : -1; })]; +#endif + +#ifdef _MSC_VER +#define WEAK_FUNC_DECL(func, fallback) \ + __pragma(comment(linker, "/alternatename:" #func "=" #fallback)) \ + \ + void \ + fallback(void** instance_ptr, void* tail_call_stack, \ + wasm_rt_tailcallee_t* next) +#else +#define WEAK_FUNC_DECL(func, fallback) \ + __attribute__((weak)) void func(void** instance_ptr, void* tail_call_stack, \ + wasm_rt_tailcallee_t* next) +#endif + +#include + +#ifndef WASM_RT_SIMD_TYPE_DEFINED +#define WASM_RT_SIMD_TYPE_DEFINED +typedef simde_v128_t v128; +#endif + +#if WASM_RT_MEMCHECK_BOUNDS_CHECK || \ + WASM_RT_NONCONFORMING_ALLOW_OOB_READ_ELIMINATION +#define SIMD_FORCE_READ(var) +#elif defined(__GNUC__) && WASM_RT_MEMCHECK_GUARD_PAGES +#if defined(__x86_64__) +#define SIMD_FORCE_READ(var) __asm__("" ::"x"(var)); +#elif defined(__aarch64__) +#define SIMD_FORCE_READ(var) __asm__("" ::"w"(var)); +#elif defined(__riscv) +#define SIMD_FORCE_READ(var) __asm__("" ::"vr"(var)); +#elif defined(__s390x__) +#define SIMD_FORCE_READ(var) __asm__("" ::"d"(var)); +#else +#define SIMD_FORCE_READ(var) __asm__("" ::"f"(var)); +#endif +#else +#error \ + "Guard page mode for Wasm not supported on this platform because SIMD_FORCE_READ could not be instantiated." \ + "Either enable specify -DWASM_RT_NONCONFORMING_ALLOW_OOB_READ_ELIMINATION=1 during compilation or use -DWASM_RT_MEMCHECK_BOUNDS_CHECK=1 to use bounds check mode" +#endif + +// The below SIMD operations copy to a local variable first as the +// MEM_ADDR_MEMOP maybe segment pointers if WASM_RT_USE_SEGUE_FOR_THIS_MODULE is +// defined and regular pointers otherwse. memcpy into the local works correctly +// in both cases. +#define DEFINE_SIMD_LOAD_FUNC(name, func, t) \ + static inline v128 name##_unchecked( \ + uint8_t* const wasm_rt_local_memory_base, wasm_rt_memory_t* mem, \ + u64 addr) { \ + t simd_mem_value; \ + wasm_rt_memcpy(&simd_mem_value, MEM_ADDR_MEMOP(mem, addr, sizeof(t)), \ + sizeof(t)); \ + v128 result = func(&simd_mem_value); \ + SIMD_FORCE_READ(result); \ + return result; \ + } \ + DEF_MEM_CHECKS0(name, _, t, return, v128); + +#define DEFINE_SIMD_LOAD_LANE(name, func, t, lane) \ + static inline v128 name##_unchecked( \ + uint8_t* const wasm_rt_local_memory_base, wasm_rt_memory_t* mem, \ + u64 addr, v128 vec) { \ + t simd_mem_value; \ + wasm_rt_memcpy(&simd_mem_value, MEM_ADDR_MEMOP(mem, addr, sizeof(t)), \ + sizeof(t)); \ + v128 result = func(&simd_mem_value, vec, lane); \ + SIMD_FORCE_READ(result); \ + return result; \ + } \ + DEF_MEM_CHECKS1(name, _, t, return, v128, v128); + +#define DEFINE_SIMD_STORE(name, t) \ + static inline void name##_unchecked( \ + uint8_t* const wasm_rt_local_memory_base, wasm_rt_memory_t* mem, \ + u64 addr, v128 value) { \ + t simd_mem_value; \ + simde_wasm_v128_store(&simd_mem_value, value); \ + wasm_rt_memcpy(MEM_ADDR_MEMOP(mem, addr, sizeof(t)), &simd_mem_value, \ + sizeof(t)); \ + } \ + DEF_MEM_CHECKS1(name, _, t, , void, v128); + +#define DEFINE_SIMD_STORE_LANE(name, func, t, lane) \ + static inline void name##_unchecked( \ + uint8_t* const wasm_rt_local_memory_base, wasm_rt_memory_t* mem, \ + u64 addr, v128 value) { \ + t simd_mem_value; \ + func(&simd_mem_value, value, lane); \ + wasm_rt_memcpy(MEM_ADDR_MEMOP(mem, addr, sizeof(t)), &simd_mem_value, \ + sizeof(t)); \ + } \ + DEF_MEM_CHECKS1(name, _, t, , void, v128); + +// clang-format off +#if WABT_BIG_ENDIAN +static inline v128 v128_impl_load32_zero(const void* a) { + return simde_wasm_i8x16_swizzle( + simde_wasm_v128_load32_zero(a), + simde_wasm_i8x16_const(12,13,14,15,8,9,10,11,4,5,6,7,0,1,2,3)); +} +static inline v128 v128_impl_load64_zero(const void* a) { + return simde_wasm_i8x16_swizzle( + simde_wasm_v128_load64_zero(a), + simde_wasm_i8x16_const(8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7)); +} +#else +#define v128_impl_load32_zero simde_wasm_v128_load32_zero +#define v128_impl_load64_zero simde_wasm_v128_load64_zero +#endif + +DEFINE_SIMD_LOAD_FUNC(v128_load, simde_wasm_v128_load, v128) + +DEFINE_SIMD_LOAD_FUNC(v128_load8_splat, simde_wasm_v128_load8_splat, u8) +DEFINE_SIMD_LOAD_FUNC(v128_load16_splat, simde_wasm_v128_load16_splat, u16) +DEFINE_SIMD_LOAD_FUNC(v128_load32_splat, simde_wasm_v128_load32_splat, u32) +DEFINE_SIMD_LOAD_FUNC(v128_load64_splat, simde_wasm_v128_load64_splat, u64) + +DEFINE_SIMD_LOAD_FUNC(i16x8_load8x8, simde_wasm_i16x8_load8x8, u64) +DEFINE_SIMD_LOAD_FUNC(u16x8_load8x8, simde_wasm_u16x8_load8x8, u64) +DEFINE_SIMD_LOAD_FUNC(i32x4_load16x4, simde_wasm_i32x4_load16x4, u64) +DEFINE_SIMD_LOAD_FUNC(u32x4_load16x4, simde_wasm_u32x4_load16x4, u64) +DEFINE_SIMD_LOAD_FUNC(i64x2_load32x2, simde_wasm_i64x2_load32x2, u64) +DEFINE_SIMD_LOAD_FUNC(u64x2_load32x2, simde_wasm_u64x2_load32x2, u64) + +DEFINE_SIMD_LOAD_FUNC(v128_load32_zero, v128_impl_load32_zero, u32) +DEFINE_SIMD_LOAD_FUNC(v128_load64_zero, v128_impl_load64_zero, u64) + +#if WABT_BIG_ENDIAN +DEFINE_SIMD_LOAD_LANE(v128_load8_lane0, simde_wasm_v128_load8_lane, u8, 15) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane1, simde_wasm_v128_load8_lane, u8, 14) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane2, simde_wasm_v128_load8_lane, u8, 13) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane3, simde_wasm_v128_load8_lane, u8, 12) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane4, simde_wasm_v128_load8_lane, u8, 11) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane5, simde_wasm_v128_load8_lane, u8, 10) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane6, simde_wasm_v128_load8_lane, u8, 9) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane7, simde_wasm_v128_load8_lane, u8, 8) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane8, simde_wasm_v128_load8_lane, u8, 7) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane9, simde_wasm_v128_load8_lane, u8, 6) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane10, simde_wasm_v128_load8_lane, u8, 5) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane11, simde_wasm_v128_load8_lane, u8, 4) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane12, simde_wasm_v128_load8_lane, u8, 3) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane13, simde_wasm_v128_load8_lane, u8, 2) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane14, simde_wasm_v128_load8_lane, u8, 1) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane15, simde_wasm_v128_load8_lane, u8, 0) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane0, simde_wasm_v128_load16_lane, u16, 7) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane1, simde_wasm_v128_load16_lane, u16, 6) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane2, simde_wasm_v128_load16_lane, u16, 5) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane3, simde_wasm_v128_load16_lane, u16, 4) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane4, simde_wasm_v128_load16_lane, u16, 3) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane5, simde_wasm_v128_load16_lane, u16, 2) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane6, simde_wasm_v128_load16_lane, u16, 1) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane7, simde_wasm_v128_load16_lane, u16, 0) +DEFINE_SIMD_LOAD_LANE(v128_load32_lane0, simde_wasm_v128_load32_lane, u32, 3) +DEFINE_SIMD_LOAD_LANE(v128_load32_lane1, simde_wasm_v128_load32_lane, u32, 2) +DEFINE_SIMD_LOAD_LANE(v128_load32_lane2, simde_wasm_v128_load32_lane, u32, 1) +DEFINE_SIMD_LOAD_LANE(v128_load32_lane3, simde_wasm_v128_load32_lane, u32, 0) +DEFINE_SIMD_LOAD_LANE(v128_load64_lane0, simde_wasm_v128_load64_lane, u64, 1) +DEFINE_SIMD_LOAD_LANE(v128_load64_lane1, simde_wasm_v128_load64_lane, u64, 0) +#else +DEFINE_SIMD_LOAD_LANE(v128_load8_lane0, simde_wasm_v128_load8_lane, u8, 0) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane1, simde_wasm_v128_load8_lane, u8, 1) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane2, simde_wasm_v128_load8_lane, u8, 2) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane3, simde_wasm_v128_load8_lane, u8, 3) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane4, simde_wasm_v128_load8_lane, u8, 4) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane5, simde_wasm_v128_load8_lane, u8, 5) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane6, simde_wasm_v128_load8_lane, u8, 6) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane7, simde_wasm_v128_load8_lane, u8, 7) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane8, simde_wasm_v128_load8_lane, u8, 8) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane9, simde_wasm_v128_load8_lane, u8, 9) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane10, simde_wasm_v128_load8_lane, u8, 10) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane11, simde_wasm_v128_load8_lane, u8, 11) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane12, simde_wasm_v128_load8_lane, u8, 12) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane13, simde_wasm_v128_load8_lane, u8, 13) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane14, simde_wasm_v128_load8_lane, u8, 14) +DEFINE_SIMD_LOAD_LANE(v128_load8_lane15, simde_wasm_v128_load8_lane, u8, 15) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane0, simde_wasm_v128_load16_lane, u16, 0) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane1, simde_wasm_v128_load16_lane, u16, 1) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane2, simde_wasm_v128_load16_lane, u16, 2) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane3, simde_wasm_v128_load16_lane, u16, 3) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane4, simde_wasm_v128_load16_lane, u16, 4) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane5, simde_wasm_v128_load16_lane, u16, 5) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane6, simde_wasm_v128_load16_lane, u16, 6) +DEFINE_SIMD_LOAD_LANE(v128_load16_lane7, simde_wasm_v128_load16_lane, u16, 7) +DEFINE_SIMD_LOAD_LANE(v128_load32_lane0, simde_wasm_v128_load32_lane, u32, 0) +DEFINE_SIMD_LOAD_LANE(v128_load32_lane1, simde_wasm_v128_load32_lane, u32, 1) +DEFINE_SIMD_LOAD_LANE(v128_load32_lane2, simde_wasm_v128_load32_lane, u32, 2) +DEFINE_SIMD_LOAD_LANE(v128_load32_lane3, simde_wasm_v128_load32_lane, u32, 3) +DEFINE_SIMD_LOAD_LANE(v128_load64_lane0, simde_wasm_v128_load64_lane, u64, 0) +DEFINE_SIMD_LOAD_LANE(v128_load64_lane1, simde_wasm_v128_load64_lane, u64, 1) +#endif + +DEFINE_SIMD_STORE(v128_store, v128) + +#if WABT_BIG_ENDIAN +DEFINE_SIMD_STORE_LANE(v128_store8_lane0, simde_wasm_v128_store8_lane, u8, 15) +DEFINE_SIMD_STORE_LANE(v128_store8_lane1, simde_wasm_v128_store8_lane, u8, 14) +DEFINE_SIMD_STORE_LANE(v128_store8_lane2, simde_wasm_v128_store8_lane, u8, 13) +DEFINE_SIMD_STORE_LANE(v128_store8_lane3, simde_wasm_v128_store8_lane, u8, 12) +DEFINE_SIMD_STORE_LANE(v128_store8_lane4, simde_wasm_v128_store8_lane, u8, 11) +DEFINE_SIMD_STORE_LANE(v128_store8_lane5, simde_wasm_v128_store8_lane, u8, 10) +DEFINE_SIMD_STORE_LANE(v128_store8_lane6, simde_wasm_v128_store8_lane, u8, 9) +DEFINE_SIMD_STORE_LANE(v128_store8_lane7, simde_wasm_v128_store8_lane, u8, 8) +DEFINE_SIMD_STORE_LANE(v128_store8_lane8, simde_wasm_v128_store8_lane, u8, 7) +DEFINE_SIMD_STORE_LANE(v128_store8_lane9, simde_wasm_v128_store8_lane, u8, 6) +DEFINE_SIMD_STORE_LANE(v128_store8_lane10, simde_wasm_v128_store8_lane, u8, 5) +DEFINE_SIMD_STORE_LANE(v128_store8_lane11, simde_wasm_v128_store8_lane, u8, 4) +DEFINE_SIMD_STORE_LANE(v128_store8_lane12, simde_wasm_v128_store8_lane, u8, 3) +DEFINE_SIMD_STORE_LANE(v128_store8_lane13, simde_wasm_v128_store8_lane, u8, 2) +DEFINE_SIMD_STORE_LANE(v128_store8_lane14, simde_wasm_v128_store8_lane, u8, 1) +DEFINE_SIMD_STORE_LANE(v128_store8_lane15, simde_wasm_v128_store8_lane, u8, 0) +DEFINE_SIMD_STORE_LANE(v128_store16_lane0, simde_wasm_v128_store16_lane, u16, 7) +DEFINE_SIMD_STORE_LANE(v128_store16_lane1, simde_wasm_v128_store16_lane, u16, 6) +DEFINE_SIMD_STORE_LANE(v128_store16_lane2, simde_wasm_v128_store16_lane, u16, 5) +DEFINE_SIMD_STORE_LANE(v128_store16_lane3, simde_wasm_v128_store16_lane, u16, 4) +DEFINE_SIMD_STORE_LANE(v128_store16_lane4, simde_wasm_v128_store16_lane, u16, 3) +DEFINE_SIMD_STORE_LANE(v128_store16_lane5, simde_wasm_v128_store16_lane, u16, 2) +DEFINE_SIMD_STORE_LANE(v128_store16_lane6, simde_wasm_v128_store16_lane, u16, 1) +DEFINE_SIMD_STORE_LANE(v128_store16_lane7, simde_wasm_v128_store16_lane, u16, 0) +DEFINE_SIMD_STORE_LANE(v128_store32_lane0, simde_wasm_v128_store32_lane, u32, 3) +DEFINE_SIMD_STORE_LANE(v128_store32_lane1, simde_wasm_v128_store32_lane, u32, 2) +DEFINE_SIMD_STORE_LANE(v128_store32_lane2, simde_wasm_v128_store32_lane, u32, 1) +DEFINE_SIMD_STORE_LANE(v128_store32_lane3, simde_wasm_v128_store32_lane, u32, 0) +DEFINE_SIMD_STORE_LANE(v128_store64_lane0, simde_wasm_v128_store64_lane, u64, 1) +DEFINE_SIMD_STORE_LANE(v128_store64_lane1, simde_wasm_v128_store64_lane, u64, 0) +#else +DEFINE_SIMD_STORE_LANE(v128_store8_lane0, simde_wasm_v128_store8_lane, u8, 0) +DEFINE_SIMD_STORE_LANE(v128_store8_lane1, simde_wasm_v128_store8_lane, u8, 1) +DEFINE_SIMD_STORE_LANE(v128_store8_lane2, simde_wasm_v128_store8_lane, u8, 2) +DEFINE_SIMD_STORE_LANE(v128_store8_lane3, simde_wasm_v128_store8_lane, u8, 3) +DEFINE_SIMD_STORE_LANE(v128_store8_lane4, simde_wasm_v128_store8_lane, u8, 4) +DEFINE_SIMD_STORE_LANE(v128_store8_lane5, simde_wasm_v128_store8_lane, u8, 5) +DEFINE_SIMD_STORE_LANE(v128_store8_lane6, simde_wasm_v128_store8_lane, u8, 6) +DEFINE_SIMD_STORE_LANE(v128_store8_lane7, simde_wasm_v128_store8_lane, u8, 7) +DEFINE_SIMD_STORE_LANE(v128_store8_lane8, simde_wasm_v128_store8_lane, u8, 8) +DEFINE_SIMD_STORE_LANE(v128_store8_lane9, simde_wasm_v128_store8_lane, u8, 9) +DEFINE_SIMD_STORE_LANE(v128_store8_lane10, simde_wasm_v128_store8_lane, u8, 10) +DEFINE_SIMD_STORE_LANE(v128_store8_lane11, simde_wasm_v128_store8_lane, u8, 11) +DEFINE_SIMD_STORE_LANE(v128_store8_lane12, simde_wasm_v128_store8_lane, u8, 12) +DEFINE_SIMD_STORE_LANE(v128_store8_lane13, simde_wasm_v128_store8_lane, u8, 13) +DEFINE_SIMD_STORE_LANE(v128_store8_lane14, simde_wasm_v128_store8_lane, u8, 14) +DEFINE_SIMD_STORE_LANE(v128_store8_lane15, simde_wasm_v128_store8_lane, u8, 15) +DEFINE_SIMD_STORE_LANE(v128_store16_lane0, simde_wasm_v128_store16_lane, u16, 0) +DEFINE_SIMD_STORE_LANE(v128_store16_lane1, simde_wasm_v128_store16_lane, u16, 1) +DEFINE_SIMD_STORE_LANE(v128_store16_lane2, simde_wasm_v128_store16_lane, u16, 2) +DEFINE_SIMD_STORE_LANE(v128_store16_lane3, simde_wasm_v128_store16_lane, u16, 3) +DEFINE_SIMD_STORE_LANE(v128_store16_lane4, simde_wasm_v128_store16_lane, u16, 4) +DEFINE_SIMD_STORE_LANE(v128_store16_lane5, simde_wasm_v128_store16_lane, u16, 5) +DEFINE_SIMD_STORE_LANE(v128_store16_lane6, simde_wasm_v128_store16_lane, u16, 6) +DEFINE_SIMD_STORE_LANE(v128_store16_lane7, simde_wasm_v128_store16_lane, u16, 7) +DEFINE_SIMD_STORE_LANE(v128_store32_lane0, simde_wasm_v128_store32_lane, u32, 0) +DEFINE_SIMD_STORE_LANE(v128_store32_lane1, simde_wasm_v128_store32_lane, u32, 1) +DEFINE_SIMD_STORE_LANE(v128_store32_lane2, simde_wasm_v128_store32_lane, u32, 2) +DEFINE_SIMD_STORE_LANE(v128_store32_lane3, simde_wasm_v128_store32_lane, u32, 3) +DEFINE_SIMD_STORE_LANE(v128_store64_lane0, simde_wasm_v128_store64_lane, u64, 0) +DEFINE_SIMD_STORE_LANE(v128_store64_lane1, simde_wasm_v128_store64_lane, u64, 1) +#endif + +#if WABT_BIG_ENDIAN +#define v128_const(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) simde_wasm_i8x16_const(p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a) +#define v128_i8x16_extract_lane(v, l) simde_wasm_i8x16_extract_lane(v, 15-(l)) +#define v128_u8x16_extract_lane(v, l) simde_wasm_u8x16_extract_lane(v, 15-(l)) +#define v128_i16x8_extract_lane(v, l) simde_wasm_i16x8_extract_lane(v, 7-(l)) +#define v128_u16x8_extract_lane(v, l) simde_wasm_u16x8_extract_lane(v, 7-(l)) +#define v128_i32x4_extract_lane(v, l) simde_wasm_i32x4_extract_lane(v, 3-(l)) +#define v128_i64x2_extract_lane(v, l) simde_wasm_i64x2_extract_lane(v, 1-(l)) +#define v128_f32x4_extract_lane(v, l) simde_wasm_f32x4_extract_lane(v, 3-(l)) +#define v128_f64x2_extract_lane(v, l) simde_wasm_f64x2_extract_lane(v, 1-(l)) +#define v128_i8x16_replace_lane(v, l, x) simde_wasm_i8x16_replace_lane(v, 15-(l), x) +#define v128_u8x16_replace_lane(v, l, x) simde_wasm_u8x16_replace_lane(v, 15-(l), x) +#define v128_i16x8_replace_lane(v, l, x) simde_wasm_i16x8_replace_lane(v, 7-(l), x) +#define v128_u16x8_replace_lane(v, l, x) simde_wasm_u16x8_replace_lane(v, 7-(l), x) +#define v128_i32x4_replace_lane(v, l, x) simde_wasm_i32x4_replace_lane(v, 3-(l), x) +#define v128_i64x2_replace_lane(v, l, x) simde_wasm_i64x2_replace_lane(v, 1-(l), x) +#define v128_f32x4_replace_lane(v, l, x) simde_wasm_f32x4_replace_lane(v, 3-(l), x) +#define v128_f64x2_replace_lane(v, l, x) simde_wasm_f64x2_replace_lane(v, 1-(l), x) +#define v128_i8x16_bitmask(v) simde_wasm_i8x16_bitmask(simde_wasm_i8x16_swizzle(v, simde_wasm_i8x16_const(15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0))) +#define v128_i16x8_bitmask(v) simde_wasm_i16x8_bitmask(simde_wasm_i8x16_swizzle(v, simde_wasm_i8x16_const(14,15,12,13,10,11,8,9,6,7,4,5,2,3,0,1))) +#define v128_i32x4_bitmask(v) simde_wasm_i32x4_bitmask(simde_wasm_i8x16_swizzle(v, simde_wasm_i8x16_const(12,13,14,15,8,9,10,11,4,5,6,7,0,1,2,3))) +#define v128_i64x2_bitmask(v) simde_wasm_i64x2_bitmask(simde_wasm_i8x16_swizzle(v, simde_wasm_i8x16_const(8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7))) +#define v128_i8x16_swizzle(v1, v2) simde_wasm_i8x16_swizzle(v1, simde_wasm_v128_xor(v2, simde_wasm_i8x16_splat(15))) +#define v128_i8x16_shuffle(v1,v2,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) simde_wasm_i8x16_shuffle(v2,v1,31-(p),31-(o),31-(n),31-(m),31-(l),31-(k),31-(j),31-(i),31-(h),31-(g),31-(f),31-(e),31-(d),31-(c),31-(b),31-(a)) +#define v128_i16x8_extmul_high_i8x16 simde_wasm_i16x8_extmul_low_i8x16 +#define v128_u16x8_extmul_high_u8x16 simde_wasm_u16x8_extmul_low_u8x16 +#define v128_i16x8_extmul_low_i8x16 simde_wasm_i16x8_extmul_high_i8x16 +#define v128_u16x8_extmul_low_u8x16 simde_wasm_u16x8_extmul_high_u8x16 +#define v128_i32x4_extmul_high_i16x8 simde_wasm_i32x4_extmul_low_i16x8 +#define v128_u32x4_extmul_high_u16x8 simde_wasm_u32x4_extmul_low_u16x8 +#define v128_i32x4_extmul_low_i16x8 simde_wasm_i32x4_extmul_high_i16x8 +#define v128_u32x4_extmul_low_u16x8 simde_wasm_u32x4_extmul_high_u16x8 +#define v128_i64x2_extmul_high_i32x4 simde_wasm_i64x2_extmul_low_i32x4 +#define v128_u64x2_extmul_high_u32x4 simde_wasm_u64x2_extmul_low_u32x4 +#define v128_i64x2_extmul_low_i32x4 simde_wasm_i64x2_extmul_high_i32x4 +#define v128_u64x2_extmul_low_u32x4 simde_wasm_u64x2_extmul_high_u32x4 +#define v128_i16x8_extend_high_i8x16 simde_wasm_i16x8_extend_low_i8x16 +#define v128_u16x8_extend_high_u8x16 simde_wasm_u16x8_extend_low_u8x16 +#define v128_i16x8_extend_low_i8x16 simde_wasm_i16x8_extend_high_i8x16 +#define v128_u16x8_extend_low_u8x16 simde_wasm_u16x8_extend_high_u8x16 +#define v128_i32x4_extend_high_i16x8 simde_wasm_i32x4_extend_low_i16x8 +#define v128_u32x4_extend_high_u16x8 simde_wasm_u32x4_extend_low_u16x8 +#define v128_i32x4_extend_low_i16x8 simde_wasm_i32x4_extend_high_i16x8 +#define v128_u32x4_extend_low_u16x8 simde_wasm_u32x4_extend_high_u16x8 +#define v128_i64x2_extend_high_i32x4 simde_wasm_i64x2_extend_low_i32x4 +#define v128_u64x2_extend_high_u32x4 simde_wasm_u64x2_extend_low_u32x4 +#define v128_i64x2_extend_low_i32x4 simde_wasm_i64x2_extend_high_i32x4 +#define v128_u64x2_extend_low_u32x4 simde_wasm_u64x2_extend_high_u32x4 +#define v128_i32x4_trunc_sat_f64x2_zero(a) \ + simde_wasm_i8x16_swizzle( \ + simde_wasm_i32x4_trunc_sat_f64x2_zero(a), \ + simde_wasm_i8x16_const(8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7)) +#define v128_u32x4_trunc_sat_f64x2_zero(a) \ + simde_wasm_i8x16_swizzle( \ + simde_wasm_u32x4_trunc_sat_f64x2_zero(a), \ + simde_wasm_i8x16_const(8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7)) +#define v128_i16x8_narrow_i32x4(a,b) simde_wasm_i16x8_narrow_i32x4(b,a) +#define v128_u16x8_narrow_i32x4(a,b) simde_wasm_u16x8_narrow_i32x4(b,a) +#define v128_i8x16_narrow_i16x8(a,b) simde_wasm_i8x16_narrow_i16x8(b,a) +#define v128_u8x16_narrow_i16x8(a,b) simde_wasm_u8x16_narrow_i16x8(b,a) +#define v128_f64x2_promote_low_f32x4(a) \ + simde_wasm_f64x2_promote_low_f32x4(simde_wasm_i8x16_swizzle( \ + a, \ + simde_wasm_i8x16_const(8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7))) +#define v128_f32x4_demote_f64x2_zero(a) \ + simde_wasm_i8x16_swizzle( \ + simde_wasm_f32x4_demote_f64x2_zero(a), \ + simde_wasm_i8x16_const(8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7)) +#define v128_f64x2_convert_low_i32x4(a) \ + simde_wasm_f64x2_convert_low_i32x4(simde_wasm_i8x16_swizzle( \ + a, \ + simde_wasm_i8x16_const(8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7))) +#define v128_f64x2_convert_low_u32x4(a) \ + simde_wasm_f64x2_convert_low_u32x4(simde_wasm_i8x16_swizzle( \ + a, \ + simde_wasm_i8x16_const(8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7))) +#else +#define v128_const simde_wasm_i8x16_const +#define v128_i8x16_extract_lane simde_wasm_i8x16_extract_lane +#define v128_u8x16_extract_lane simde_wasm_u8x16_extract_lane +#define v128_i16x8_extract_lane simde_wasm_i16x8_extract_lane +#define v128_u16x8_extract_lane simde_wasm_u16x8_extract_lane +#define v128_i32x4_extract_lane simde_wasm_i32x4_extract_lane +#define v128_i64x2_extract_lane simde_wasm_i64x2_extract_lane +#define v128_f32x4_extract_lane simde_wasm_f32x4_extract_lane +#define v128_f64x2_extract_lane simde_wasm_f64x2_extract_lane +#define v128_i8x16_replace_lane simde_wasm_i8x16_replace_lane +#define v128_u8x16_replace_lane simde_wasm_u8x16_replace_lane +#define v128_i16x8_replace_lane simde_wasm_i16x8_replace_lane +#define v128_u16x8_replace_lane simde_wasm_u16x8_replace_lane +#define v128_i32x4_replace_lane simde_wasm_i32x4_replace_lane +#define v128_i64x2_replace_lane simde_wasm_i64x2_replace_lane +#define v128_f32x4_replace_lane simde_wasm_f32x4_replace_lane +#define v128_f64x2_replace_lane simde_wasm_f64x2_replace_lane +#define v128_i8x16_bitmask simde_wasm_i8x16_bitmask +#define v128_i16x8_bitmask simde_wasm_i16x8_bitmask +#define v128_i32x4_bitmask simde_wasm_i32x4_bitmask +#define v128_i64x2_bitmask simde_wasm_i64x2_bitmask +#define v128_i8x16_swizzle simde_wasm_i8x16_swizzle +#define v128_i8x16_shuffle simde_wasm_i8x16_shuffle +#define v128_i16x8_extmul_high_i8x16 simde_wasm_i16x8_extmul_high_i8x16 +#define v128_u16x8_extmul_high_u8x16 simde_wasm_u16x8_extmul_high_u8x16 +#define v128_i16x8_extmul_low_i8x16 simde_wasm_i16x8_extmul_low_i8x16 +#define v128_u16x8_extmul_low_u8x16 simde_wasm_u16x8_extmul_low_u8x16 +#define v128_i32x4_extmul_high_i16x8 simde_wasm_i32x4_extmul_high_i16x8 +#define v128_u32x4_extmul_high_u16x8 simde_wasm_u32x4_extmul_high_u16x8 +#define v128_i32x4_extmul_low_i16x8 simde_wasm_i32x4_extmul_low_i16x8 +#define v128_u32x4_extmul_low_u16x8 simde_wasm_u32x4_extmul_low_u16x8 +#define v128_i64x2_extmul_high_i32x4 simde_wasm_i64x2_extmul_high_i32x4 +#define v128_u64x2_extmul_high_u32x4 simde_wasm_u64x2_extmul_high_u32x4 +#define v128_i64x2_extmul_low_i32x4 simde_wasm_i64x2_extmul_low_i32x4 +#define v128_u64x2_extmul_low_u32x4 simde_wasm_u64x2_extmul_low_u32x4 +#define v128_i16x8_extend_high_i8x16 simde_wasm_i16x8_extend_high_i8x16 +#define v128_u16x8_extend_high_u8x16 simde_wasm_u16x8_extend_high_u8x16 +#define v128_i16x8_extend_low_i8x16 simde_wasm_i16x8_extend_low_i8x16 +#define v128_u16x8_extend_low_u8x16 simde_wasm_u16x8_extend_low_u8x16 +#define v128_i32x4_extend_high_i16x8 simde_wasm_i32x4_extend_high_i16x8 +#define v128_u32x4_extend_high_u16x8 simde_wasm_u32x4_extend_high_u16x8 +#define v128_i32x4_extend_low_i16x8 simde_wasm_i32x4_extend_low_i16x8 +#define v128_u32x4_extend_low_u16x8 simde_wasm_u32x4_extend_low_u16x8 +#define v128_i64x2_extend_high_i32x4 simde_wasm_i64x2_extend_high_i32x4 +#define v128_u64x2_extend_high_u32x4 simde_wasm_u64x2_extend_high_u32x4 +#define v128_i64x2_extend_low_i32x4 simde_wasm_i64x2_extend_low_i32x4 +#define v128_u64x2_extend_low_u32x4 simde_wasm_u64x2_extend_low_u32x4 +#define v128_i32x4_trunc_sat_f64x2_zero simde_wasm_i32x4_trunc_sat_f64x2_zero +#define v128_u32x4_trunc_sat_f64x2_zero simde_wasm_u32x4_trunc_sat_f64x2_zero +#define v128_i16x8_narrow_i32x4 simde_wasm_i16x8_narrow_i32x4 +#define v128_u16x8_narrow_i32x4 simde_wasm_u16x8_narrow_i32x4 +#define v128_i8x16_narrow_i16x8 simde_wasm_i8x16_narrow_i16x8 +#define v128_u8x16_narrow_i16x8 simde_wasm_u8x16_narrow_i16x8 +#define v128_f64x2_promote_low_f32x4 simde_wasm_f64x2_promote_low_f32x4 +#define v128_f32x4_demote_f64x2_zero simde_wasm_f32x4_demote_f64x2_zero +#define v128_f64x2_convert_low_i32x4 simde_wasm_f64x2_convert_low_i32x4 +#define v128_f64x2_convert_low_u32x4 simde_wasm_f64x2_convert_low_u32x4 +#endif +// clang-format on + + +static u32 w2c_highlights_f2(w2c_highlights*, u32); +static void w2c_highlights_f3(w2c_highlights*); +static void w2c_highlights_f4(w2c_highlights*); +static u32 w2c_highlights_f5(w2c_highlights*, u32, u32, u32, u32, u32); +static void w2c_highlights_f6(w2c_highlights*); +static void w2c_highlights_f7(w2c_highlights*, u32); +static u32 w2c_highlights_f8(w2c_highlights*, u32, u32, u32, u32); +static u32 w2c_highlights_f9(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f10(w2c_highlights*, u32, u32); +static void w2c_highlights_f11(w2c_highlights*, u32); +static void w2c_highlights_f12(w2c_highlights*, u32); +static void w2c_highlights_f13(w2c_highlights*, u32); +static void w2c_highlights_f14(w2c_highlights*, u32, u32); +static void w2c_highlights_f15(w2c_highlights*, u32); +static void w2c_highlights_f16(w2c_highlights*, u32, u32); +static void w2c_highlights_f17(w2c_highlights*, u32); +static void w2c_highlights_f18(w2c_highlights*); +static void w2c_highlights_f19(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f20(w2c_highlights*, u32); +static void w2c_highlights_f21(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f22(w2c_highlights*, u32, u32); +static void w2c_highlights_f23(w2c_highlights*); +static u32 w2c_highlights_f24(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f25(w2c_highlights*, u32); +static void w2c_highlights_f26(w2c_highlights*, u32); +static void w2c_highlights_f27(w2c_highlights*, u32, u32); +static void w2c_highlights_f28(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f29(w2c_highlights*, u32, u32); +static void w2c_highlights_f30(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f31(w2c_highlights*, u32, u32); +static void w2c_highlights_f32(w2c_highlights*, u32); +static void w2c_highlights_f33(w2c_highlights*); +static void w2c_highlights_f34(w2c_highlights*, u32); +static void w2c_highlights_f35(w2c_highlights*); +static void w2c_highlights_f36(w2c_highlights*); +static u32 w2c_highlights_f37(w2c_highlights*); +static void w2c_highlights_f38(w2c_highlights*); +static void w2c_highlights_f39(w2c_highlights*); +static void w2c_highlights_f40(w2c_highlights*, u32); +static void w2c_highlights_f41(w2c_highlights*, u32); +static void w2c_highlights_f42(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f43(w2c_highlights*, u32); +static u32 w2c_highlights_f44(w2c_highlights*, u32); +static u32 w2c_highlights_f45(w2c_highlights*, u32); +static u32 w2c_highlights_f46(w2c_highlights*, u32); +static u32 w2c_highlights_f47(w2c_highlights*, u32); +static void w2c_highlights_f48(w2c_highlights*); +static void w2c_highlights_f49(w2c_highlights*, u32); +static void w2c_highlights_f50(w2c_highlights*, u32); +static u32 w2c_highlights_f51(w2c_highlights*, u32); +static u32 w2c_highlights_f52(w2c_highlights*, u32, u32, u32, u32); +static void w2c_highlights_f53(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f54(w2c_highlights*, u32, u32, u32, u32); +static void w2c_highlights_f55(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f56(w2c_highlights*, u32, u32, u32, u32); +static u32 w2c_highlights_f57(w2c_highlights*); +static u32 w2c_highlights_f58(w2c_highlights*, u32); +static u32 w2c_highlights_f59(w2c_highlights*, u32); +static void w2c_highlights_f60(w2c_highlights*, u32, u32); +static void w2c_highlights_f61(w2c_highlights*, u32, u32); +static void w2c_highlights_f62(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f63(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f64(w2c_highlights*, u32, u32, u32, u32); +static u32 w2c_highlights_f65(w2c_highlights*, u32); +static u32 w2c_highlights_f66(w2c_highlights*, u32, u32); +static void w2c_highlights_f67(w2c_highlights*, u32, u32, u32, u32); +static void w2c_highlights_f68(w2c_highlights*, u32); +static u32 w2c_highlights_f69(w2c_highlights*); +static u32 w2c_highlights_f70(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f71(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f72(w2c_highlights*); +static u32 w2c_highlights_f73(w2c_highlights*, u32); +static u32 w2c_highlights_f74(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f75(w2c_highlights*, u32, u32, u32, u32, u32); +static u32 w2c_highlights_f76(w2c_highlights*, u32, u32, u32, u32, u32); +static u32 w2c_highlights_f77(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f78(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f79(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f80(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f81(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f82(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f83(w2c_highlights*, u32); +static u32 w2c_highlights_f84(w2c_highlights*, u32); +static u32 w2c_highlights_f85(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f86(w2c_highlights*, u32); +static void w2c_highlights_f87(w2c_highlights*); +static void w2c_highlights_f88(w2c_highlights*); +static u32 w2c_highlights_f89(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f90(w2c_highlights*, u32, u32); +static void w2c_highlights_f91(w2c_highlights*); +static void w2c_highlights_f92(w2c_highlights*); +static void w2c_highlights_f93(w2c_highlights*); +static void w2c_highlights_f94(w2c_highlights*); +static u32 w2c_highlights_f95(w2c_highlights*, u32); +static u32 w2c_highlights_f96(w2c_highlights*, u32); +static void w2c_highlights_f97(w2c_highlights*); +static u32 w2c_highlights_f98(w2c_highlights*, u32, u32); +static void w2c_highlights_f99(w2c_highlights*, u32, u32, u32, u32); +static u32 w2c_highlights_f100(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f101(w2c_highlights*, u32); +static void w2c_highlights_f102(w2c_highlights*); +static u32 w2c_highlights_f103(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f104(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f105(w2c_highlights*); +static void w2c_highlights_f106(w2c_highlights*, u32); +static void w2c_highlights_f107(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f108(w2c_highlights*, u32); +static u32 w2c_highlights_f109(w2c_highlights*, u32); +static u32 w2c_highlights_f110(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f111(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f112(w2c_highlights*, u32, u32, u32, u32); +static void w2c_highlights_f113(w2c_highlights*, u32); +static void w2c_highlights_f114(w2c_highlights*, u32); +static void w2c_highlights_f115(w2c_highlights*, u32); +static void w2c_highlights_f116(w2c_highlights*, u32); +static void w2c_highlights_f117(w2c_highlights*, u32); +static void w2c_highlights_f118(w2c_highlights*); +static u32 w2c_highlights_f119(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f120(w2c_highlights*, u32); +static u32 w2c_highlights_f121(w2c_highlights*, u32); +static u32 w2c_highlights_f122(w2c_highlights*, u32); +static u32 w2c_highlights_f123(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f124(w2c_highlights*, u32, u32); +static void w2c_highlights_f125(w2c_highlights*, u32, u32); +static void w2c_highlights_f126(w2c_highlights*, u32); +static u32 w2c_highlights_f127(w2c_highlights*, u32, u32); +static void w2c_highlights_f128(w2c_highlights*); +static u32 w2c_highlights_f129(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f130(w2c_highlights*); +static u32 w2c_highlights_f131(w2c_highlights*); +static void w2c_highlights_f132(w2c_highlights*, u32); +static void w2c_highlights_f133(w2c_highlights*); +static u32 w2c_highlights_f134(w2c_highlights*, u32); +static u32 w2c_highlights_f135(w2c_highlights*, u32, u32); +static void w2c_highlights_f136(w2c_highlights*); +static u32 w2c_highlights_f137(w2c_highlights*, u32); +static u32 w2c_highlights_f138(w2c_highlights*, u32); +static u32 w2c_highlights_f139(w2c_highlights*, u32); +static u32 w2c_highlights_f140(w2c_highlights*); +static u32 w2c_highlights_f141(w2c_highlights*, u32); +static u32 w2c_highlights_f142(w2c_highlights*, u32); +static u32 w2c_highlights_f143(w2c_highlights*); +static u32 w2c_highlights_f144(w2c_highlights*, u32); +static void w2c_highlights_f145(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f146(w2c_highlights*, u32, u32); +static void w2c_highlights_f147(w2c_highlights*, u32, u32, u32, u32, u32); +static void w2c_highlights_f148(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f149(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f150(w2c_highlights*, u32, u32); +static void w2c_highlights_f151(w2c_highlights*); +static void w2c_highlights_f152(w2c_highlights*, u32); +static void w2c_highlights_f153(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f154(w2c_highlights*); +static u32 w2c_highlights_f155(w2c_highlights*); +static u32 w2c_highlights_f156(w2c_highlights*); +static void w2c_highlights_f157(w2c_highlights*, u32); +static void w2c_highlights_f158(w2c_highlights*, u32); +static u32 w2c_highlights_f159(w2c_highlights*, u32); +static void w2c_highlights_f160(w2c_highlights*); +static void w2c_highlights_f161(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f162(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f163(w2c_highlights*, u32); +static u32 w2c_highlights_f164(w2c_highlights*, u32); +static u32 w2c_highlights_f165(w2c_highlights*, u32); +static u32 w2c_highlights_f166(w2c_highlights*, u32); +static u32 w2c_highlights_f167(w2c_highlights*, u32); +static u32 w2c_highlights_f168(w2c_highlights*); +static void w2c_highlights_f169(w2c_highlights*); +static u32 w2c_highlights_f170(w2c_highlights*); +static u32 w2c_highlights_f171(w2c_highlights*, u32); +static void w2c_highlights_f172(w2c_highlights*, u32); +static void w2c_highlights_f173(w2c_highlights*); +static u32 w2c_highlights_f174(w2c_highlights*, u32); +static u32 w2c_highlights_f175(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f176(w2c_highlights*, u32); +static u32 w2c_highlights_f177(w2c_highlights*, u32); +static u32 w2c_highlights_f178(w2c_highlights*, u32); +static u32 w2c_highlights_f179(w2c_highlights*, u32, u32, u32, u32, u32); +static void w2c_highlights_f180(w2c_highlights*); +static u64 w2c_highlights_f181(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f182(w2c_highlights*, u32); +static u32 w2c_highlights_f183(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f184(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f185(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f186(w2c_highlights*, u32); +static void w2c_highlights_f187(w2c_highlights*, u32, u32); +static void w2c_highlights_f188(w2c_highlights*); +static void w2c_highlights_f189(w2c_highlights*); +static void w2c_highlights_f190(w2c_highlights*, u32); +static void w2c_highlights_f191(w2c_highlights*, u32); +static void w2c_highlights_f192(w2c_highlights*, u32, u32); +static void w2c_highlights_f193(w2c_highlights*); +static void w2c_highlights_f194(w2c_highlights*, u32); +static u32 w2c_highlights_f195(w2c_highlights*, u32, u32, u32, u32); +static u32 w2c_highlights_f196(w2c_highlights*, u32); +static u32 w2c_highlights_f197(w2c_highlights*, u32); +static u32 w2c_highlights_f198(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f199(w2c_highlights*); +static u32 w2c_highlights_f200(w2c_highlights*, u32, u32); +static void w2c_highlights_f201(w2c_highlights*, u32); +static void w2c_highlights_f202(w2c_highlights*); +static void w2c_highlights_f203(w2c_highlights*); +static u32 w2c_highlights_f204(w2c_highlights*, u32); +static u32 w2c_highlights_f205(w2c_highlights*, u32); +static u32 w2c_highlights_f206(w2c_highlights*); +static u32 w2c_highlights_f207(w2c_highlights*, u32); +static void w2c_highlights_f208(w2c_highlights*, u32); +static void w2c_highlights_f209(w2c_highlights*); +static u32 w2c_highlights_f210(w2c_highlights*, u32); +static u32 w2c_highlights_f211(w2c_highlights*); +static void w2c_highlights_f212(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f213(w2c_highlights*); +static void w2c_highlights_f214(w2c_highlights*, u32, u32, u32, u32); +static u32 w2c_highlights_f215(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f216(w2c_highlights*, u32, u32, u32, u32, u32); +static void w2c_highlights_f217(w2c_highlights*, u32); +static u32 w2c_highlights_f218(w2c_highlights*, u32); +static u32 w2c_highlights_f219(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f220(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f221(w2c_highlights*, u32); +static u32 w2c_highlights_f222(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f223(w2c_highlights*, u32, u32, u32, u32, u32); +static void w2c_highlights_f224(w2c_highlights*); +static u32 w2c_highlights_f225(w2c_highlights*); +static u32 w2c_highlights_f226(w2c_highlights*, u32, u32); +static void w2c_highlights_f227(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f228(w2c_highlights*, u32, u32); +static void w2c_highlights_f229(w2c_highlights*); +static void w2c_highlights_f230(w2c_highlights*); +static void w2c_highlights_f231(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f232(w2c_highlights*); +static u32 w2c_highlights_f233(w2c_highlights*, u32); +static u32 w2c_highlights_f234(w2c_highlights*); +static u32 w2c_highlights_f235(w2c_highlights*, u32); +static u32 w2c_highlights_f236(w2c_highlights*, u32); +static u32 w2c_highlights_f237(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f238(w2c_highlights*); +static void w2c_highlights_f239(w2c_highlights*); +static u32 w2c_highlights_f240(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f241(w2c_highlights*, u32); +static void w2c_highlights_f242(w2c_highlights*); +static u32 w2c_highlights_f243(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f244(w2c_highlights*, u32); +static void w2c_highlights_f245(w2c_highlights*); +static u32 w2c_highlights_f246(w2c_highlights*, u32); +static void w2c_highlights_f247(w2c_highlights*); +static u32 w2c_highlights_f248(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f249(w2c_highlights*); +static u32 w2c_highlights_f250(w2c_highlights*, u32); +static void w2c_highlights_f251(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f252(w2c_highlights*, u32); +static void w2c_highlights_f253(w2c_highlights*); +static u32 w2c_highlights_f254(w2c_highlights*, u32); +static u32 w2c_highlights_f255(w2c_highlights*, u32); +static void w2c_highlights_f256(w2c_highlights*); +static u32 w2c_highlights_f257(w2c_highlights*, u32); +static void w2c_highlights_f258(w2c_highlights*); +static void w2c_highlights_f259(w2c_highlights*, u32); +static void w2c_highlights_f260(w2c_highlights*); +static void w2c_highlights_f261(w2c_highlights*); +static void w2c_highlights_f262(w2c_highlights*); +static u32 w2c_highlights_f263(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f264(w2c_highlights*, u32, u32); +static void w2c_highlights_f265(w2c_highlights*); +static u32 w2c_highlights_f266(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f267(w2c_highlights*, u32, u32, u32, u32); +static u32 w2c_highlights_f268(w2c_highlights*); +static u32 w2c_highlights_f269(w2c_highlights*, u32); +static u32 w2c_highlights_f270(w2c_highlights*, u32); +static void w2c_highlights_f271(w2c_highlights*); +static u32 w2c_highlights_f272(w2c_highlights*, u32); +static u32 w2c_highlights_f273(w2c_highlights*, u32); +static void w2c_highlights_f274(w2c_highlights*); +static void w2c_highlights_f275(w2c_highlights*); +static u32 w2c_highlights_f276(w2c_highlights*, u32); +static void w2c_highlights_f277(w2c_highlights*); +static u32 w2c_highlights_f278(w2c_highlights*, u32); +static void w2c_highlights_f279(w2c_highlights*); +static void w2c_highlights_f280(w2c_highlights*); +static void w2c_highlights_f281(w2c_highlights*); +static u32 w2c_highlights_f282(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f283(w2c_highlights*, u32); +static u32 w2c_highlights_f284(w2c_highlights*, u32); +static void w2c_highlights_f285(w2c_highlights*); +static void w2c_highlights_f286(w2c_highlights*); +static u32 w2c_highlights_f287(w2c_highlights*, u32); +static u32 w2c_highlights_f288(w2c_highlights*, u32); +static void w2c_highlights_f289(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f290(w2c_highlights*, u32); +static u32 w2c_highlights_f291(w2c_highlights*, u32, u32); +static void w2c_highlights_f292(w2c_highlights*); +static u32 w2c_highlights_f293(w2c_highlights*, u32, u32, u32, u32, u32, u32, u32, u32); +static void w2c_highlights_f294(w2c_highlights*, u32, u32, u32, u32); +static void w2c_highlights_f295(w2c_highlights*); +static u32 w2c_highlights_f296(w2c_highlights*, u32, u32); +static void w2c_highlights_f297(w2c_highlights*); +static void w2c_highlights_f298(w2c_highlights*); +static void w2c_highlights_f299(w2c_highlights*); +static void w2c_highlights_f300(w2c_highlights*, u32); +static void w2c_highlights_f301(w2c_highlights*); +static u32 w2c_highlights_f302(w2c_highlights*, u32); +static void w2c_highlights_f303(w2c_highlights*); +static u32 w2c_highlights_f304(w2c_highlights*, u32); +static void w2c_highlights_f305(w2c_highlights*); +static void w2c_highlights_f306(w2c_highlights*); +static u32 w2c_highlights_f307(w2c_highlights*, u32); +static void w2c_highlights_f308(w2c_highlights*); +static u32 w2c_highlights_f309(w2c_highlights*, u32); +static void w2c_highlights_f310(w2c_highlights*); +static void w2c_highlights_f311(w2c_highlights*); +static void w2c_highlights_f312(w2c_highlights*); +static void w2c_highlights_f313(w2c_highlights*); +static void w2c_highlights_f314(w2c_highlights*); +static void w2c_highlights_f315(w2c_highlights*); +static void w2c_highlights_f316(w2c_highlights*, u32); +static u32 w2c_highlights_f317(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f318(w2c_highlights*, u32, u32, u32, u32); +static u32 w2c_highlights_f319(w2c_highlights*); +static void w2c_highlights_f320(w2c_highlights*); +static u32 w2c_highlights_f321(w2c_highlights*, u32); +static void w2c_highlights_f322(w2c_highlights*); +static u32 w2c_highlights_f323(w2c_highlights*, u32); +static void w2c_highlights_f324(w2c_highlights*); +static u32 w2c_highlights_f325(w2c_highlights*, u32); +static u32 w2c_highlights_f326(w2c_highlights*, u32, u32); +static void w2c_highlights_f327(w2c_highlights*); +static void w2c_highlights_f328(w2c_highlights*); +static u32 w2c_highlights_f329(w2c_highlights*, u32); +static void w2c_highlights_f330(w2c_highlights*); +static u32 w2c_highlights_f331(w2c_highlights*, u32, u32); +static void w2c_highlights_f332(w2c_highlights*); +static u32 w2c_highlights_f333(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f334(w2c_highlights*, u32); +static void w2c_highlights_f335(w2c_highlights*); +static void w2c_highlights_f336(w2c_highlights*, u32); +static u32 w2c_highlights_f337(w2c_highlights*, u32); +static void w2c_highlights_f338(w2c_highlights*); +static u32 w2c_highlights_f339(w2c_highlights*, u32); +static u32 w2c_highlights_f340(w2c_highlights*, u32); +static void w2c_highlights_f341(w2c_highlights*); +static void w2c_highlights_f342(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f343(w2c_highlights*, u32); +static u32 w2c_highlights_f344(w2c_highlights*, u32, u32); +static void w2c_highlights_f345(w2c_highlights*); +static u32 w2c_highlights_f346(w2c_highlights*, u32); +static u32 w2c_highlights_f347(w2c_highlights*, u32); +static u32 w2c_highlights_f348(w2c_highlights*, u32, u32); +static void w2c_highlights_f349(w2c_highlights*); +static u32 w2c_highlights_f350(w2c_highlights*, u32); +static u32 w2c_highlights_f351(w2c_highlights*, u32); +static void w2c_highlights_f352(w2c_highlights*); +static u32 w2c_highlights_f353(w2c_highlights*, u32, u32, u32, u32); +static void w2c_highlights_f354(w2c_highlights*); +static u32 w2c_highlights_f355(w2c_highlights*, u32); +static void w2c_highlights_f356(w2c_highlights*); +static void w2c_highlights_f357(w2c_highlights*, u32, u32, u32, u32); +static u32 w2c_highlights_f358(w2c_highlights*, u32); +static void w2c_highlights_f359(w2c_highlights*); +static u32 w2c_highlights_f360(w2c_highlights*, u32); +static u32 w2c_highlights_f361(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f362(w2c_highlights*, u32); +static void w2c_highlights_f363(w2c_highlights*, u32); +static void w2c_highlights_f364(w2c_highlights*); +static u32 w2c_highlights_f365(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f366(w2c_highlights*, u32); +static u32 w2c_highlights_f367(w2c_highlights*, u32); +static void w2c_highlights_f368(w2c_highlights*); +static void w2c_highlights_f369(w2c_highlights*); +static u32 w2c_highlights_f370(w2c_highlights*, u32); +static void w2c_highlights_f371(w2c_highlights*); +static void w2c_highlights_f372(w2c_highlights*); +static void w2c_highlights_f373(w2c_highlights*); +static u32 w2c_highlights_f374(w2c_highlights*, u32); +static void w2c_highlights_f375(w2c_highlights*); +static void w2c_highlights_f376(w2c_highlights*); +static void w2c_highlights_f377(w2c_highlights*); +static u32 w2c_highlights_f378(w2c_highlights*); +static void w2c_highlights_f379(w2c_highlights*); +static void w2c_highlights_f380(w2c_highlights*); +static u32 w2c_highlights_f381(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f382(w2c_highlights*, u32); +static u32 w2c_highlights_f383(w2c_highlights*, u32); +static u32 w2c_highlights_f384(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f385(w2c_highlights*, u32); +static u32 w2c_highlights_f386(w2c_highlights*, u32); +static u32 w2c_highlights_f387(w2c_highlights*, u32, u32, u32, u32); +static void w2c_highlights_f388(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f389(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f390(w2c_highlights*, u32, u32); +static void w2c_highlights_f391(w2c_highlights*); +static void w2c_highlights_f392(w2c_highlights*, u32, u32); +static void w2c_highlights_f393(w2c_highlights*, u32, u32); +static void w2c_highlights_f394(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f395(w2c_highlights*, u32, u32, u32, u32); +static void w2c_highlights_f396(w2c_highlights*); +static void w2c_highlights_f397(w2c_highlights*, u32); +static void w2c_highlights_f398(w2c_highlights*); +static void w2c_highlights_f399(w2c_highlights*); +static u32 w2c_highlights_f400(w2c_highlights*, u32); +static u32 w2c_highlights_f401(w2c_highlights*, u32); +static u32 w2c_highlights_f402(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f403(w2c_highlights*, u32, u32); +static void w2c_highlights_f404(w2c_highlights*, u32, u32); +static void w2c_highlights_f405(w2c_highlights*); +static void w2c_highlights_f406(w2c_highlights*); +static u32 w2c_highlights_f407(w2c_highlights*, u32, u32); +static u32 w2c_highlights_f408(w2c_highlights*, u32); +static void w2c_highlights_f409(w2c_highlights*, u32); +static u32 w2c_highlights_f410(w2c_highlights*, u32); +static u32 w2c_highlights_f411(w2c_highlights*, u32); +static u32 w2c_highlights_f412(w2c_highlights*, u32); +static void w2c_highlights_f413(w2c_highlights*, u32); +static void w2c_highlights_f414(w2c_highlights*); +static u32 w2c_highlights_f415(w2c_highlights*, u32, u32, u32); +static void w2c_highlights_f416(w2c_highlights*, u32); +static u32 w2c_highlights_f417(w2c_highlights*, u32); +static u32 w2c_highlights_f418(w2c_highlights*, u32); +static u32 w2c_highlights_f419(w2c_highlights*); +static u32 w2c_highlights_f420(w2c_highlights*, u32); +static void w2c_highlights_f421(w2c_highlights*, u32); +static void w2c_highlights_f422(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f423(w2c_highlights*, u32, u32); +static void w2c_highlights_f424(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_liveStage_0(w2c_highlights*, u32); +static void w2c_highlights_liveInitDoc_0(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f427(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_f428(w2c_highlights*, u32); +static void w2c_highlights_f429(w2c_highlights*, u32, u32); +static void w2c_highlights_f430(w2c_highlights*, u32, u32, u32, u32, u32); +static u32 w2c_highlights_f431(w2c_highlights*, u32, u32, u32, u32); +static void w2c_highlights_f432(w2c_highlights*, u32); +static void w2c_highlights_f433(w2c_highlights*); +static u32 w2c_highlights_f434(w2c_highlights*, u32); +static u32 w2c_highlights_f435(w2c_highlights*, u32, u32, u32, u32, u32); +static void w2c_highlights_liveApplyEdits_0(w2c_highlights*, u32, u32); +static u32 w2c_highlights_liveRun_0(w2c_highlights*, u32, u32, u32); +static u32 w2c_highlights_liveLineCount_0(w2c_highlights*); +static u32 w2c_highlights_liveLineLen_0(w2c_highlights*, u32); +static u32 w2c_highlights_liveLineByteLen_0(w2c_highlights*, u32); +static u32 w2c_highlights_liveLineTextPtr_0(w2c_highlights*, u32); +static u32 w2c_highlights_liveLineFlags_0(w2c_highlights*, u32); +static u32 w2c_highlights_liveLineTokPtr_0(w2c_highlights*, u32); +static u32 w2c_highlights_liveLineTokCount_0(w2c_highlights*, u32); +static u32 w2c_highlights_liveChangesPtr_0(w2c_highlights*); +static u32 w2c_highlights_liveStats_0(w2c_highlights*, u32); +static void w2c_highlights_highlight_0(w2c_highlights*); +static void w2c_highlights_f448(w2c_highlights*); +static void w2c_highlights_f449(w2c_highlights*, u32, u32); +static void w2c_highlights_highlightStream_0(w2c_highlights*, u32); + +#ifndef wasm_multi_ii +#define wasm_multi_ii wasm_multi_ii +struct wasm_multi_ii { + u32 i0; + u32 i1; +}; +#endif /* wasm_multi_ii */ + +FUNC_TYPE_T(w2c_highlights_t0) = "\x07\x80\x96\x7a\x42\xf7\x3e\xe6\x70\x5c\x2f\xac\x83\xf5\x67\xd2\xa2\xa0\x69\x41\x5f\xf8\xe7\x96\x7f\x23\xab\x00\x03\x5f\x4a\x3c"; +FUNC_TYPE_T(w2c_highlights_t1) = "\x36\xa9\xe7\xf1\xc9\x5b\x82\xff\xb9\x97\x43\xe0\xc5\xc4\xce\x95\xd8\x3c\x9a\x43\x0a\xac\x59\xf8\x4e\xf3\xcb\xfa\xb6\x14\x50\x68"; +FUNC_TYPE_T(w2c_highlights_t2) = "\x92\xfb\x6a\xdf\x49\x07\x0a\x83\xbe\x08\x02\x68\xcd\xf6\x95\x27\x4a\xc2\xf3\xe5\xe4\x7d\x29\x49\xe8\xed\x42\x92\x6a\x9d\xda\xf0"; +FUNC_TYPE_T(w2c_highlights_t3) = "\x89\x3a\x3d\x2c\x8f\x4d\x7f\x6d\x6c\x9d\x62\x67\x29\xaf\x3d\x44\x39\x8e\xc3\xf3\xe8\x51\xc1\x99\xb9\xdd\x9f\xd5\x3d\x1f\xd3\xe4"; +FUNC_TYPE_T(w2c_highlights_t4) = "\x26\x10\x81\xe2\x21\x43\xd6\x01\x3e\x2d\x2f\x16\x17\x78\x6f\xba\xb3\x2f\x4d\x54\x9b\x8a\xa9\xdd\xbf\x53\x92\x3c\xd3\x71\xc6\xb2"; +FUNC_TYPE_T(w2c_highlights_t5) = "\x72\xab\x00\xdf\x20\x3d\xce\xa1\xf2\x29\xc7\x9d\x13\x40\x7e\x98\xac\x7d\x41\x4a\x53\x2e\x42\x42\x61\x55\x2e\xaa\xeb\xbe\xc6\x35"; +FUNC_TYPE_T(w2c_highlights_t6) = "\x78\xde\x71\xb6\x49\x9a\x33\x9d\xd3\x70\x88\x4c\x50\xd4\xea\xdf\xe1\x2a\x18\x12\xf6\xf3\x64\xf7\xea\x4f\x94\x19\xa7\x20\x28\xe8"; +FUNC_TYPE_T(w2c_highlights_t7) = "\xcd\xad\x8f\x6a\xaf\x3e\xd0\x86\xf0\x9a\xd7\xf0\xc7\x0d\x48\x9f\x27\x59\xf3\x8d\x71\xa1\x81\xa8\xcc\x06\x53\x98\x62\x34\xaa\xf5"; +FUNC_TYPE_T(w2c_highlights_t8) = "\xf6\x98\x1b\xc6\x10\xda\xb7\xb2\x63\x37\xcd\xdc\x72\xca\xe9\x50\x00\x13\xba\x10\x6c\xde\x87\x27\x10\xf8\x86\x2f\xe3\xdb\x94\xe4"; +FUNC_TYPE_T(w2c_highlights_t9) = "\x81\x39\xe9\x80\x36\x86\x39\xf3\xbe\x5e\x29\xbf\x55\x64\xbe\x61\xa7\x82\x5c\x6d\x98\x51\xff\xf0\x20\x11\x16\xc8\x91\x9f\xb9\xb5"; +FUNC_TYPE_T(w2c_highlights_t10) = "\xff\x57\x1f\x83\x74\x67\x5d\x67\x2a\xc8\x0d\x92\x3d\xe8\x47\xa1\x1e\x73\xc7\x03\xa1\xee\x83\x72\x66\xa9\x1c\x9d\xe7\x8c\xdd\xfb"; +FUNC_TYPE_T(w2c_highlights_t11) = "\x10\x14\x42\x90\xbf\xa8\x37\x8c\xdc\x81\x9f\x4c\x63\x4e\x62\xb7\x11\x29\xaa\x09\x68\x89\x5f\x5e\x13\x9c\xcc\xe2\xcb\x51\x7a\x78"; +FUNC_TYPE_T(w2c_highlights_t12) = "\x93\xdb\x38\xf2\x1c\xb7\x06\xd6\x56\xf2\x78\xe9\x62\xcd\xa0\xd0\xca\xf1\xfa\x24\x38\x6c\xc1\x81\x2e\xe3\x0a\xdc\xf2\x6d\xff\xc5"; +FUNC_TYPE_T(w2c_highlights_t13) = "\xd4\x99\x85\x78\x64\x65\x9d\xdd\xc9\x5a\x22\xd7\xc9\x00\x34\xb0\x5b\x0f\xf0\x6e\xc9\x5c\xe5\x31\xe2\x1f\x61\x99\xd3\x8c\x37\x27"; + +static void wrap_w2c_highlights_f91(void *instance) { + return w2c_highlights_f91((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f92(void *instance) { + return w2c_highlights_f92((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f93(void *instance) { + return w2c_highlights_f93((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f94(void *instance) { + return w2c_highlights_f94((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f102(void *instance) { + return w2c_highlights_f102((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f118(void *instance) { + return w2c_highlights_f118((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f128(void *instance) { + return w2c_highlights_f128((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f151(void *instance) { + return w2c_highlights_f151((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f173(void *instance) { + return w2c_highlights_f173((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f180(void *instance) { + return w2c_highlights_f180((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f188(void *instance) { + return w2c_highlights_f188((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f193(void *instance) { + return w2c_highlights_f193((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f202(void *instance) { + return w2c_highlights_f202((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f203(void *instance) { + return w2c_highlights_f203((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f209(void *instance) { + return w2c_highlights_f209((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f229(void *instance) { + return w2c_highlights_f229((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f232(void *instance) { + return w2c_highlights_f232((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f238(void *instance) { + return w2c_highlights_f238((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f239(void *instance) { + return w2c_highlights_f239((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f242(void *instance) { + return w2c_highlights_f242((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f245(void *instance) { + return w2c_highlights_f245((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f249(void *instance) { + return w2c_highlights_f249((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f256(void *instance) { + return w2c_highlights_f256((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f258(void *instance) { + return w2c_highlights_f258((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f260(void *instance) { + return w2c_highlights_f260((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f261(void *instance) { + return w2c_highlights_f261((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f262(void *instance) { + return w2c_highlights_f262((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f265(void *instance) { + return w2c_highlights_f265((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f271(void *instance) { + return w2c_highlights_f271((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f274(void *instance) { + return w2c_highlights_f274((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f275(void *instance) { + return w2c_highlights_f275((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f277(void *instance) { + return w2c_highlights_f277((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f280(void *instance) { + return w2c_highlights_f280((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f281(void *instance) { + return w2c_highlights_f281((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f285(void *instance) { + return w2c_highlights_f285((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f292(void *instance) { + return w2c_highlights_f292((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f295(void *instance) { + return w2c_highlights_f295((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f297(void *instance) { + return w2c_highlights_f297((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f298(void *instance) { + return w2c_highlights_f298((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f299(void *instance) { + return w2c_highlights_f299((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f301(void *instance) { + return w2c_highlights_f301((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f303(void *instance) { + return w2c_highlights_f303((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f305(void *instance) { + return w2c_highlights_f305((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f306(void *instance) { + return w2c_highlights_f306((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f308(void *instance) { + return w2c_highlights_f308((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f310(void *instance) { + return w2c_highlights_f310((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f311(void *instance) { + return w2c_highlights_f311((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f312(void *instance) { + return w2c_highlights_f312((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f313(void *instance) { + return w2c_highlights_f313((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f314(void *instance) { + return w2c_highlights_f314((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f315(void *instance) { + return w2c_highlights_f315((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f322(void *instance) { + return w2c_highlights_f322((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f324(void *instance) { + return w2c_highlights_f324((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f327(void *instance) { + return w2c_highlights_f327((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f330(void *instance) { + return w2c_highlights_f330((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f332(void *instance) { + return w2c_highlights_f332((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f338(void *instance) { + return w2c_highlights_f338((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f341(void *instance) { + return w2c_highlights_f341((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f345(void *instance) { + return w2c_highlights_f345((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f349(void *instance) { + return w2c_highlights_f349((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f352(void *instance) { + return w2c_highlights_f352((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f354(void *instance) { + return w2c_highlights_f354((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f356(void *instance) { + return w2c_highlights_f356((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f359(void *instance) { + return w2c_highlights_f359((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f364(void *instance) { + return w2c_highlights_f364((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f368(void *instance) { + return w2c_highlights_f368((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f369(void *instance) { + return w2c_highlights_f369((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f371(void *instance) { + return w2c_highlights_f371((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f372(void *instance) { + return w2c_highlights_f372((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f373(void *instance) { + return w2c_highlights_f373((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f375(void *instance) { + return w2c_highlights_f375((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f376(void *instance) { + return w2c_highlights_f376((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f377(void *instance) { + return w2c_highlights_f377((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f379(void *instance) { + return w2c_highlights_f379((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f380(void *instance) { + return w2c_highlights_f380((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f391(void *instance) { + return w2c_highlights_f391((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f396(void *instance) { + return w2c_highlights_f396((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f398(void *instance) { + return w2c_highlights_f398((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f399(void *instance) { + return w2c_highlights_f399((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f405(void *instance) { + return w2c_highlights_f405((struct w2c_highlights*) instance); +} +static void wrap_w2c_highlights_f406(void *instance) { + return w2c_highlights_f406((struct w2c_highlights*) instance); +} + +static void init_globals(w2c_highlights* instance) { + instance->w2c_g0 = 65536u; + instance->w2c_g1 = 65536u; + instance->w2c_g2 = 0u; + instance->w2c_g3 = 0u; + instance->w2c_g4 = 0u; + instance->w2c_g5 = 2147483647u; + instance->w2c_g6 = 0u; + instance->w2c_g7 = 0u; + instance->w2c_g8 = 0u; + instance->w2c_g9 = 0u; + instance->w2c_g10 = 4294967295u; + instance->w2c_g11 = 0ull; + instance->w2c_g12 = 0u; + instance->w2c_g13 = 0u; + instance->w2c_g14 = 0u; + instance->w2c_g15 = 0u; + instance->w2c_g16 = 0u; + instance->w2c_g17 = 0u; + instance->w2c_g18 = 4294967295u; + instance->w2c_g19 = 96u; + instance->w2c_g20 = 0u; + instance->w2c_g21 = 4294967295u; + instance->w2c_g22 = 0u; + instance->w2c_g23 = 0u; + instance->w2c_g24 = 0u; + instance->w2c_g25 = 0u; + instance->w2c_g26 = 0u; + instance->w2c_g27 = 0u; + instance->w2c_g28 = 0u; + instance->w2c_g29 = 0u; + instance->w2c_g30 = 0u; + instance->w2c_g31 = 0u; + instance->w2c_g32 = 0u; + instance->w2c_g33 = 0u; + instance->w2c_g34 = 0u; + instance->w2c_g35 = 4294967295u; + instance->w2c_g36 = 0u; + instance->w2c_g37 = 0u; + instance->w2c_g38 = 0u; + instance->w2c_g39 = 0u; + instance->w2c_g40 = 0u; + instance->w2c_g41 = 0u; + instance->w2c_g42 = 0u; + instance->w2c_g43 = 0u; + instance->w2c_g44 = 0u; + instance->w2c_g45 = 0u; + instance->w2c_g46 = 0u; + instance->w2c_g47 = 3u; + instance->w2c_g48 = 65536u; + instance->w2c_g49 = 0u; + instance->w2c_g50 = 0u; + instance->w2c_g51 = 0u; + instance->w2c_g52 = 0u; + instance->w2c_g53 = 0u; + instance->w2c_g54 = 0u; + instance->w2c_g55 = 0u; + instance->w2c_g56 = 0u; + instance->w2c_g57 = 0u; + instance->w2c_g58 = 0u; + instance->w2c_g59 = 0u; + instance->w2c_g60 = 0u; + instance->w2c_g61 = 0u; + instance->w2c_g62 = 0u; + instance->w2c_g63 = 0u; + instance->w2c_g64 = 0u; + instance->w2c_g65 = 0u; + instance->w2c_g66 = 0u; + instance->w2c_g67 = 0u; + instance->w2c_g68 = 0u; + instance->w2c_g69 = 0u; + instance->w2c_g70 = 0u; + instance->w2c_g71 = 0u; + instance->w2c_g72 = 0u; + instance->w2c_g73 = 0u; + instance->w2c_g74 = 0u; + instance->w2c_g75 = 0u; + instance->w2c_g76 = 0u; + instance->w2c_g77 = 0u; + instance->w2c_g78 = 0u; + instance->w2c_g79 = 0u; + instance->w2c_g80 = 0u; + instance->w2c_g81 = 0u; + instance->w2c_g82 = 0u; + instance->w2c_g83 = 0u; + instance->w2c_g84 = 0u; + instance->w2c_g85 = 0u; + instance->w2c_g86 = 0u; + instance->w2c_g87 = 0u; + instance->w2c_g88 = 0u; + instance->w2c_g89 = 0u; + instance->w2c_g90 = 0u; + instance->w2c_g91 = 0u; + instance->w2c_g92 = 0u; + instance->w2c_g93 = 0u; + instance->w2c_g94 = 0u; + instance->w2c_g95 = 0u; + instance->w2c_g96 = 0u; + instance->w2c_g97 = 0u; + instance->w2c_g98 = 4294967295u; + instance->w2c_g99 = 0u; + instance->w2c_g100 = 0u; + instance->w2c_g101 = 0u; + instance->w2c_g102 = 0u; + instance->w2c_g103 = 0u; + instance->w2c_g104 = 0u; + instance->w2c_g105 = 0u; + instance->w2c_g106 = 0u; + instance->w2c_g107 = 0u; + instance->w2c_g108 = 0u; + instance->w2c_g109 = 0u; + instance->w2c_g110 = 0u; + instance->w2c_g111 = 0u; + instance->w2c_g112 = 0u; + instance->w2c_g113 = 0u; + instance->w2c_g114 = 0u; + instance->w2c_g115 = 0u; + instance->w2c_g116 = 0u; + instance->w2c_g117 = 0u; + instance->w2c_g118 = 0u; + instance->w2c_g119 = 0u; + instance->w2c_g120 = 0u; + instance->w2c_g121 = 0u; + instance->w2c_g122 = 0u; + instance->w2c_g123 = 0u; +} + +static const u8 data_segment_data_w2c_highlights_d0[] = { + 0x38, 0x59, 0x18, 0x18, 0x59, +}; + +static const u8 data_segment_data_w2c_highlights_d1[] = { + 0x38, 0x80, 0x18, 0x80, 0x02, 0x00, 0x02, 0x18, 0x00, 0x00, 0xc6, 0x06, + 0x00, 0x86, 0x00, 0x0c, +}; + +static const u8 data_segment_data_w2c_highlights_d2[] = { + 0x5c, 0x0c, 0x1e, 0x80, 0x80, +}; + +static const u8 data_segment_data_w2c_highlights_d3[] = { + 0x40, 0x40, 0x00, 0x06, 0x40, 0x40, +}; + +static const u8 data_segment_data_w2c_highlights_d4[] = { + 0x42, 0x00, 0x06, +}; + +static const u8 data_segment_data_w2c_highlights_d5[] = { + 0x21, 0x00, 0x00, 0x20, +}; + +static const u8 data_segment_data_w2c_highlights_d6[] = { + 0xa4, 0x21, 0x00, 0x01, 0xa0, 0x86, 0x00, 0x4a, 0x4a, 0x80, 0x80, 0x00, + 0x80, 0x00, 0x80, +}; + +static const u8 data_segment_data_w2c_highlights_d7[] = { + 0x06, 0x86, 0x84, 0x86, 0x00, 0x80, +}; + +static const u8 data_segment_data_w2c_highlights_d8[] = { + 0x08, 0x01, 0x08, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x10, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, + 0x10, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x08, 0x86, 0x08, 0x04, + +}; + +static const u8 data_segment_data_w2c_highlights_d9[] = { + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, + 0x40, 0x40, +}; + +static const u8 data_segment_data_w2c_highlights_d10[] = { + 0x40, 0x34, 0x40, 0x04, 0x00, 0x14, 0x3e, 0x80, 0x42, 0x42, 0x14, 0x3c, + 0x41, 0x3c, 0x00, 0x14, +}; + +static const u8 data_segment_data_w2c_highlights_d11[] = { + 0x01, 0x41, 0x3c, 0x14, 0x3c, 0x34, 0xc0, +}; + +static const u8 data_segment_data_w2c_highlights_d12[] = { + 0x40, 0x40, 0x40, 0xd4, 0x00, 0xc0, +}; + +static const u8 data_segment_data_w2c_highlights_d13[] = { + 0x40, 0x3e, 0x40, 0xd4, +}; + +static const u8 data_segment_data_w2c_highlights_d14[] = { + 0x40, 0x02, 0x00, 0x00, 0x00, 0x70, 0x02, 0x06, 0x0a, 0x40, 0x51, 0x82, + 0x51, 0x83, 0x41, +}; + +static const u8 data_segment_data_w2c_highlights_d15[] = { + 0x83, 0x22, 0x70, 0x60, 0x70, 0x50, +}; + +static const u8 data_segment_data_w2c_highlights_d16[] = { + 0x06, 0x40, 0x0a, 0x40, +}; + +static const u8 data_segment_data_w2c_highlights_d17[] = { + 0x02, 0x70, 0x02, 0x40, +}; + +static const u8 data_segment_data_w2c_highlights_d18[] = { + 0x08, 0x00, 0x00, 0x08, +}; + +static const u8 data_segment_data_w2c_highlights_d19[] = { + 0x0f, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x80, 0x80, 0x07, 0x43, 0x00, + 0x43, 0x00, 0x03, +}; + +static const u8 data_segment_data_w2c_highlights_d20[] = { + 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x10, 0x04, 0x20, 0x20, +}; + +static const u8 data_segment_data_w2c_highlights_d21[] = { + 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x10, 0x04, 0x20, 0x20, +}; + +static const u8 data_segment_data_w2c_highlights_d22[] = { + 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x03, 0x00, 0x01, +}; + +static const u8 data_segment_data_w2c_highlights_d23[] = { + 0x22, 0x14, 0x00, 0x42, 0x23, 0x63, 0x10, 0x14, 0x08, 0x33, 0x23, 0x80, + 0x33, 0x80, 0x23, +}; + +static const u8 data_segment_data_w2c_highlights_d24[] = { + 0x82, 0x80, 0x23, 0x23, 0x23, 0x06, 0x22, +}; + +static const u8 data_segment_data_w2c_highlights_d25[] = { + 0x14, 0x00, 0x08, 0x62, 0x00, 0x04, +}; + +static const u8 data_segment_data_w2c_highlights_d26[] = { + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x22, 0x08, + 0x26, +}; + +static const u8 data_segment_data_w2c_highlights_d27[] = { + 0xaf, 0x50, 0x20, 0xa0, 0xaf, 0xaf, 0x10, 0x00, 0x00, 0xaf, 0xaf, 0x00, + 0xaf, 0x20, 0xaf, +}; + +static const u8 data_segment_data_w2c_highlights_d28[] = { + 0xa8, 0x00, 0xaf, 0xaf, 0xaf, 0xa9, 0x20, +}; + +static const u8 data_segment_data_w2c_highlights_d29[] = { + 0xe1, 0x00, 0xad, +}; + +static const u8 data_segment_data_w2c_highlights_d30[] = { + 0x10, 0xaf, 0x00, 0xa9, +}; + +static const u8 data_segment_data_w2c_highlights_d31[] = { + 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x16, 0x14, + 0x14, 0x16, +}; + +static const u8 data_segment_data_w2c_highlights_d32[] = { + 0x14, 0x21, 0x14, 0x10, 0x12, 0x43, 0x81, 0x14, 0x14, 0x14, 0x41, 0x61, + 0x14, 0x01, 0x00, 0x01, +}; + +static const u8 data_segment_data_w2c_highlights_d33[] = { + 0x10, 0x94, 0xc1, 0x11, 0x81, 0x61, 0x40, 0x00, 0x00, 0x00, 0x08, 0x08, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x12, 0x04, + 0x41, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xd1, 0x06, +}; + +static const u8 data_segment_data_w2c_highlights_d34[] = { + 0x40, 0x00, 0x00, 0x40, +}; + +static const u8 data_segment_data_w2c_highlights_d35[] = { + 0x09, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0x24, 0x04, 0x28, 0x0b, 0x04, + 0x1a, 0x10, 0x18, +}; + +static const u8 data_segment_data_w2c_highlights_d36[] = { + 0x19, 0x00, 0x08, 0x18, 0x08, 0x01, 0x02, +}; + +static const u8 data_segment_data_w2c_highlights_d37[] = { + 0xa0, 0x08, 0x00, 0x08, 0x00, 0x20, +}; + +static const u8 data_segment_data_w2c_highlights_d38[] = { + 0x80, 0x08, 0x00, 0x08, +}; + +static const u8 data_segment_data_w2c_highlights_d39[] = { + 0x04, 0x04, 0x00, 0x00, 0x04, +}; + +static const u8 data_segment_data_w2c_highlights_d40[] = { + 0x04, 0x52, 0x20, 0x00, 0x02, 0x12, 0x52, 0x10, 0x21, 0x00, 0x52, 0x5a, + 0x94, 0x5a, 0x1a, 0x5a, +}; + +static const u8 data_segment_data_w2c_highlights_d41[] = { + 0x56, 0x00, 0x42, 0x52, 0x42, 0xd2, 0x52, +}; + +static const u8 data_segment_data_w2c_highlights_d42[] = { + 0x25, 0x02, 0x00, 0x02, +}; + +static const u8 data_segment_data_w2c_highlights_d43[] = { + 0x21, 0x42, 0x80, 0x12, +}; + +static const u8 data_segment_data_w2c_highlights_d44[] = { + 0xac, 0x00, 0x80, 0x00, 0x8c, 0xac, 0x00, 0x10, 0x10, 0xae, 0xae, 0x00, + 0xae, 0x04, 0xae, +}; + +static const u8 data_segment_data_w2c_highlights_d45[] = { + 0xa0, 0x00, 0xbe, 0xae, 0xbe, 0xac, 0x82, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, + 0xa6, +}; + +static const u8 data_segment_data_w2c_highlights_d46[] = { + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x10, 0xac, 0x10, + 0xa4, +}; + +static const u8 data_segment_data_w2c_highlights_d47[] = { + 0x04, +}; + +static const u8 data_segment_data_w2c_highlights_d48[] = { + 0x04, 0x13, 0x08, 0x04, 0x00, 0x13, 0x13, 0x00, 0x00, 0x00, 0x13, 0x12, + 0x04, 0x12, 0x00, 0x13, +}; + +static const u8 data_segment_data_w2c_highlights_d49[] = { + 0x12, 0x12, 0x12, 0x02, +}; + +static const u8 data_segment_data_w2c_highlights_d50[] = { + 0x08, 0x04, 0x11, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x04, 0x13, +}; + +static const u8 data_segment_data_w2c_highlights_d51[] = { + 0x9b, 0x02, 0x00, 0x9b, 0x02, 0x09, 0x9b, 0x02, 0x0d, 0xa8, 0x02, 0x07, + 0x00, 0x03, 0x07, 0x00, 0x03, 0x0b, 0x0a, 0x03, 0x08, 0x0a, 0x03, 0x10, + 0x1f, 0x03, 0x0b, 0xbd, 0x02, 0x0a, 0xdd, 0x02, 0x09, 0xb6, 0x02, 0x08, + 0xf1, 0x02, 0x08, 0xf1, 0x02, 0x0f, 0x2a, 0x03, 0x08, 0x2a, 0x03, 0x13, + 0x3d, 0x03, 0x0f, 0x4c, 0x03, 0x07, 0x4c, 0x03, 0x0f, 0x6b, 0x03, 0x13, + 0x7e, 0x03, 0x0e, 0x9e, 0x03, 0x10, 0x5a, 0x03, 0x05, 0xae, 0x02, 0x09, + 0x19, 0x03, 0x06, 0xa6, 0x03, 0x08, 0xae, 0x03, 0x0a, 0xbb, 0x03, 0x07, + 0xc2, 0x03, 0x07, 0xc9, 0x03, 0x08, 0xc9, 0x03, 0x11, 0xe4, 0x03, 0x0b, + 0xe4, 0x03, 0x13, 0xe4, 0x03, 0x18, 0x03, 0x04, 0x17, 0x1a, 0x04, 0x15, + 0x1a, 0x04, 0x1a, 0x34, 0x04, 0x19, 0x4d, 0x04, 0x17, 0x64, 0x04, 0x12, + 0x75, 0x04, 0x13, 0xc6, 0x02, 0x08, 0xc6, 0x02, 0x0e, 0xd3, 0x02, 0x0b, + 0xe5, 0x02, 0x06, 0xe5, 0x02, 0x0d, 0x88, 0x04, 0x0c, 0x94, 0x04, 0x0e, + 0x94, 0x04, 0x15, 0x8b, 0x03, 0x03, 0x8b, 0x03, 0x0b, 0xa9, 0x04, 0x07, + 0x63, 0x03, 0x08, 0xb0, 0x04, 0x0c, 0xbc, 0x04, 0x05, 0x92, 0x03, 0x04, + 0x92, 0x03, 0x0c, 0xc1, 0x04, 0x0a, 0xd9, 0x04, 0x08, 0xd9, 0x04, 0x12, + 0xeb, 0x04, 0x10, 0xb7, 0x03, 0x04, 0xfb, 0x04, 0x04, 0xd7, 0x03, 0x0d, + 0x5e, 0x03, 0x09, 0xfb, 0x03, 0x08, 0xca, 0x04, 0x0f, 0xfe, 0x04, 0x11, + 0x0f, 0x05, 0x0a, 0x19, 0x05, 0x0e, 0x27, 0x05, 0x07, 0x2e, 0x05, 0x0a, + 0x38, 0x05, 0x0a, +}; + +static const u8 data_segment_data_w2c_highlights_d52[] = { + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2d, 0x6a, 0x73, + 0x78, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x69, + 0x66, 0x66, 0x2d, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x2d, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x2d, 0x69, 0x64, 0x69, 0x66, 0x66, 0x2d, 0x70, + 0x6c, 0x75, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2d, 0x65, 0x73, 0x63, + 0x61, 0x70, 0x65, 0x6d, 0x70, 0x68, 0x61, 0x73, 0x69, 0x73, 0x2d, 0x73, + 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, + 0x2d, 0x64, 0x6f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x2d, + 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2d, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x6b, 0x65, 0x79, + 0x77, 0x6f, 0x72, 0x64, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x74, 0x65, 0x78, 0x74, + 0x2d, 0x6a, 0x73, 0x78, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x2d, + 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6b, + 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x2d, 0x69, 0x6d, 0x70, 0x6f, 0x72, + 0x74, 0x61, 0x67, 0x2d, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x2d, + 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x6b, 0x65, 0x79, 0x77, 0x6f, + 0x72, 0x64, 0x2d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x70, + 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6e, 0x75, 0x6d, + 0x70, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x63, 0x70, 0x72, 0x69, 0x6d, 0x61, + 0x72, 0x79, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x2d, 0x6a, + 0x73, 0x6f, 0x6e, 0x2d, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x2d, + 0x6a, 0x73, 0x64, 0x6f, 0x63, 0x70, 0x75, 0x6e, 0x63, 0x74, 0x75, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x62, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x2d, 0x68, 0x74, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x75, 0x72, 0x69, + 0x70, 0x75, 0x6e, 0x63, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, + 0x62, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2d, 0x6a, 0x73, 0x78, 0x70, + 0x75, 0x6e, 0x63, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x64, + 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x2d, 0x68, 0x74, 0x6d, + 0x6c, 0x70, 0x75, 0x6e, 0x63, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2d, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x2d, 0x6a, + 0x73, 0x78, 0x70, 0x75, 0x6e, 0x63, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6d, 0x61, 0x72, 0x6b, 0x65, + 0x72, 0x70, 0x75, 0x6e, 0x63, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2d, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x75, 0x6e, 0x63, 0x74, 0x75, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, + 0x6c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2d, 0x72, 0x65, 0x67, 0x65, + 0x78, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x70, 0x65, 0x63, + 0x69, 0x61, 0x6c, 0x2d, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x74, 0x61, + 0x67, 0x2d, 0x6a, 0x73, 0x78, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x6c, 0x69, + 0x74, 0x65, 0x72, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x74, 0x79, + 0x70, 0x65, 0x2d, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x2d, 0x70, 0x73, 0x65, 0x75, 0x64, 0x6f, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x2d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x68, 0x69, 0x6e, 0x74, + 0x61, 0x67, 0x2d, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2d, 0x6a, 0x73, 0x78, 0x74, 0x79, 0x70, 0x65, 0x2d, 0x6a, 0x73, 0x64, + 0x6f, 0x63, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x6a, + 0x73, 0x64, 0x6f, 0x63, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x62, + 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x66, 0x6f, 0x72, + 0x65, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, +}; + +static const u8 data_segment_data_w2c_highlights_d53[] = { + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, + 0x63, 0x64, 0x65, 0x66, 0x3c, 0x70, 0x72, 0x65, 0x20, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x3d, 0x22, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, + 0x74, 0x73, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x3c, + 0x73, 0x70, 0x61, 0x6e, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, + 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x3b, + 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3a, 0x69, + 0x74, 0x61, 0x6c, 0x69, 0x63, 0x3b, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x76, 0x61, 0x72, 0x28, 0x22, 0x3e, + 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, + 0x3e, 0x3c, 0x2f, 0x70, 0x72, 0x65, 0x3e, 0x6c, 0x69, 0x67, 0x68, 0x74, + 0x2d, 0x64, 0x61, 0x72, 0x6b, 0x28, +}; + +static const u8 data_segment_data_w2c_highlights_d54[] = { + 0x68, 0x69, 0x6e, 0x74, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x5f, + 0x72, 0x6f, 0x75, 0x67, 0x68, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, + 0x65, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, + 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, + 0x74, 0x65, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x75, 0x72, 0x69, 0x6e, 0x67, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6c, 0x79, 0x63, 0x6f, 0x68, 0x65, + 0x72, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x72, 0x62, 0x61, 0x74, 0x69, + 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x65, 0x77, 0x61, 0x79, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x45, 0x58, 0x54, 0x45, 0x58, 0x54, 0x55, 0x52, 0x45, 0x5f, + 0x50, 0x49, 0x58, 0x45, 0x4c, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x78, 0x74, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x79, 0x74, 0x65, 0x61, 0x72, 0x72, + 0x61, 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x45, + 0x58, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x32, 0x44, + 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x4d, 0x61, 0x74, 0x68, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x65, 0x6c, 0x73, 0x65, 0x77, 0x68, + 0x65, 0x72, 0x65, 0x6e, 0x65, 0x77, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, + 0x65, 0x52, 0x61, 0x79, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, + 0x5f, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x45, 0x51, 0x55, + 0x41, 0x4c, 0x42, 0x45, 0x44, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x79, + 0x70, 0x65, 0x6f, 0x66, 0x5f, 0x75, 0x6e, 0x71, 0x75, 0x61, 0x6c, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x69, 0x64, 0x65, 0x66, 0x6f, + 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x2d, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x61, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x61, 0x6c, 0x69, + 0x61, 0x73, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, + 0x73, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x6f, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x65, 0x61, 0x72, 0x65, 0x73, + 0x74, 0x5f, 0x6d, 0x69, 0x70, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, + 0x67, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x68, 0x61, 0x64, 0x65, + 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x58, 0x54, 0x52, 0x41, + 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x4f, 0x44, 0x45, 0x4c, 0x5f, 0x4e, + 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x5f, 0x4d, 0x41, 0x54, 0x52, 0x49, 0x58, + 0x68, 0x69, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x45, 0x58, + 0x54, 0x41, 0x4e, 0x47, 0x45, 0x4e, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, + 0x45, 0x53, 0x54, 0x52, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x74, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x63, 0x68, + 0x6e, 0x69, 0x71, 0x75, 0x65, 0x72, 0x79, 0x49, 0x4e, 0x56, 0x5f, 0x50, + 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x41, + 0x54, 0x52, 0x49, 0x58, 0x68, 0x69, 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x75, + 0x67, 0x68, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, + 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x4e, 0x56, + 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x53, 0x53, 0x5f, + 0x45, 0x51, 0x55, 0x41, 0x4c, 0x50, 0x48, 0x41, 0x54, 0x54, 0x45, 0x4e, + 0x55, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x5f, + 0x4d, 0x41, 0x50, 0x5f, 0x44, 0x45, 0x50, 0x54, 0x48, 0x69, 0x67, 0x6e, + 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x58, 0x54, 0x52, 0x55, 0x45, 0x4d, 0x49, 0x53, + 0x53, 0x49, 0x4f, 0x4e, 0x6f, 0x74, 0x49, 0x6d, 0x70, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x75, 0x6c, + 0x6c, 0x5f, 0x75, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, + 0x78, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x61, 0x76, 0x65, 0x2d, 0x65, + 0x78, 0x63, 0x75, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x70, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x75, 0x6c, + 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x74, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x72, 0x69, + 0x66, 0x79, 0x5f, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x66, 0x65, + 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x6e, 0x64, 0x73, 0x75, 0x62, 0x72, 0x6f, + 0x75, 0x74, 0x69, 0x6e, 0x65, 0x78, 0x74, 0x63, 0x61, 0x73, 0x65, 0x6c, + 0x66, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x61, + 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x4e, 0x56, + 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, + 0x49, 0x47, 0x48, 0x54, 0x5f, 0x45, 0x4e, 0x45, 0x52, 0x47, 0x59, 0x45, + 0x53, 0x43, 0x52, 0x45, 0x45, 0x4e, 0x5f, 0x50, 0x49, 0x58, 0x45, 0x4c, + 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x6c, 0x6c, 0x69, 0x70, 0x73, 0x69, 0x73, + 0x75, 0x62, 0x70, 0x61, 0x73, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, + 0x68, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x4e, + 0x56, 0x49, 0x45, 0x57, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x49, 0x5a, + 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, 0x50, 0x45, 0x43, 0x55, 0x4c, 0x41, + 0x52, 0x5f, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x5f, 0x43, 0x4f, 0x4c, 0x4f, + 0x52, 0x4f, 0x55, 0x47, 0x48, 0x4e, 0x45, 0x53, 0x53, 0x75, 0x62, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, + 0x6c, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x69, 0x73, + 0x70, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x78, 0x74, + 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x69, 0x66, 0x79, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x5f, 0x6d, 0x69, 0x70, 0x6d, + 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x6f, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x74, 0x79, 0x70, 0x65, 0x63, 0x61, 0x73, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x75, 0x69, 0x6e, 0x74, 0x31, 0x32, 0x38, 0x69, 0x67, 0x6e, + 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x4e, 0x56, 0x45, 0x4c, 0x4f, 0x43, 0x49, 0x54, 0x59, + 0x5f, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x66, 0x65, 0x6e, 0x63, + 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x61, + 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x61, 0x6c, 0x69, 0x61, + 0x73, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x6f, 0x75, 0x73, 0x75, + 0x62, 0x70, 0x61, 0x73, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x64, 0x61, + 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x76, 0x69, + 0x65, 0x77, 0x69, 0x74, 0x68, 0x2d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x2d, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x7a, 0x65, 0x72, 0x6f, 0x77, 0x5f, 0x6d, 0x61, 0x6a, 0x6f, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, + 0x70, 0x79, 0x5f, 0x5f, 0x75, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x5f, 0x75, + 0x6e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x65, 0x66, 0x65, + 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x2d, 0x6d, + 0x61, 0x63, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x6e, 0x64, 0x66, 0x6f, 0x72, 0x65, 0x61, 0x63, 0x68, 0x5f, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x69, 0x7a, 0x65, + 0x6f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x54, 0x61, 0x72, 0x62, 0x61, 0x6c, + 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x6f, + 0x6e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x75, 0x69, 0x6e, 0x74, + 0x38, 0x5f, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x65, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x78, 0x74, 0x63, 0x69, 0x74, 0x65, 0x70, + 0x73, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x75, 0x62, 0x73, 0x75, 0x62, 0x73, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, + 0x6c, 0x65, 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2d, 0x62, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x65, 0x64, 0x65, 0x66, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x72, 0x64, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x63, 0x61, 0x6c, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x45, 0x58, 0x54, 0x72, + 0x75, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x61, + 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x58, 0x54, 0x79, + 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x68, 0x72, + 0x65, 0x61, 0x64, 0x49, 0x64, 0x78, 0x6f, 0x72, 0x5f, 0x65, 0x71, 0x6e, + 0x61, 0x72, 0x72, 0x61, 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x4e, 0x56, 0x65, 0x72, 0x62, 0x61, 0x74, 0x69, 0x6d, 0x70, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x75, 0x62, 0x5f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x75, 0x62, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x5f, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x5f, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x66, 0x6e, 0x61, 0x6d, 0x65, 0x6c, + 0x69, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, + 0x61, 0x63, 0x6b, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x4e, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x6e, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x76, 0x61, 0x72, 0x61, + 0x72, 0x67, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x6f, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x66, 0x69, 0x6c, 0x65, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x78, 0x74, 0x62, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x31, 0x36, 0x5f, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x61, 0x6c, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x63, + 0x61, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x70, 0x79, 0x68, + 0x69, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, + 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x65, 0x63, 0x63, 0x61, 0x6b, 0x32, 0x35, + 0x36, 0x68, 0x69, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, + 0x71, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x69, 0x6e, 0x6c, 0x69, + 0x6e, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x72, 0x61, 0x76, 0x65, + 0x72, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x63, 0x72, 0x65, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, + 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6e, 0x64, + 0x66, 0x6f, 0x72, 0x61, 0x6c, 0x6c, 0x73, 0x74, 0x6c, 0x69, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x67, 0x64, 0x5f, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x77, 0x74, 0x79, + 0x70, 0x65, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x61, 0x73, 0x6c, 0x65, 0x66, 0x74, 0x79, 0x70, 0x65, 0x66, 0x72, 0x6f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x6f, 0x6e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x6c, 0x64, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x61, 0x64, 0x64, 0x5f, 0x73, 0x75, 0x62, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x5f, 0x62, + 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x64, 0x65, 0x66, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x6e, 0x64, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x6e, 0x64, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x79, 0x70, 0x65, + 0x6e, 0x61, 0x6d, 0x65, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x6e, 0x64, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x2d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x63, 0x6f, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x74, 0x61, 0x67, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x5f, + 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x65, 0x72, 0x61, 0x73, 0x65, 0x74, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x6c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x72, 0x65, 0x6e, + 0x65, 0x77, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x65, 0x71, + 0x75, 0x61, 0x6c, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x78, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x76, 0x61, + 0x6c, 0x2d, 0x77, 0x68, 0x65, 0x6e, 0x2d, 0x66, 0x69, 0x72, 0x73, 0x74, + 0x77, 0x6f, 0x72, 0x64, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x73, + 0x69, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x72, 0x69, 0x64, 0x44, 0x69, + 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x78, 0x74, 0x6e, 0x61, + 0x6d, 0x65, 0x6f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x2d, 0x66, + 0x72, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x6f, 0x6e, 0x63, 0x65, 0x6e, + 0x64, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x69, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x61, 0x72, 0x31, 0x36, 0x5f, 0x74, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x61, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x58, 0x54, 0x41, + 0x55, 0x6e, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x65, 0x69, + 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x6e, 0x64, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, + 0x61, 0x74, 0x65, 0x64, 0x65, 0x66, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x6f, 0x70, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x41, 0x64, 0x64, + 0x65, 0x66, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x5f, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x41, 0x74, 0x74, 0x72, 0x73, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, + 0x69, 0x7a, 0x65, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x6d, 0x61, + 0x74, 0x68, 0x65, 0x6e, 0x64, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6c, 0x65, + 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x65, 0x74, 0x74, 0x65, 0x72, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x61, 0x6c, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x65, 0x6e, 0x64, 0x77, 0x68, 0x65, 0x72, 0x65, 0x61, + 0x64, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, + 0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x73, 0x5f, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x6e, 0x64, 0x77, 0x68, 0x69, + 0x6c, 0x65, 0x76, 0x61, 0x6c, 0x74, 0x79, 0x70, 0x65, 0x69, 0x64, 0x65, + 0x66, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x6f, 0x6d, 0x70, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x31, 0x32, 0x38, + 0x4d, 0x4f, 0x44, 0x45, 0x4c, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x4d, 0x41, + 0x54, 0x52, 0x49, 0x58, 0x68, 0x69, 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x75, + 0x67, 0x68, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x61, 0x73, + 0x74, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x69, 0x73, 0x74, 0x72, 0x69, 0x63, + 0x74, 0x66, 0x70, 0x73, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x65, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x78, 0x70, 0x6f, 0x73, 0x69, 0x6e, 0x67, 0x61, 0x74, 0x68, 0x65, + 0x72, 0x65, 0x61, 0x64, 0x77, 0x72, 0x69, 0x74, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x64, 0x65, 0x64, 0x65, 0x66, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x74, 0x74, 0x65, 0x72, 0x69, 0x70, 0x65, 0x6d, 0x64, 0x31, 0x36, + 0x30, 0x68, 0x69, 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x6e, + 0x65, 0x73, 0x73, 0x5f, 0x62, 0x69, 0x62, 0x6c, 0x69, 0x6f, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x79, 0x64, 0x72, 0x61, 0x74, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6f, 0x66, 0x69, 0x6e, 0x64, + 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x68, 0x69, 0x6e, 0x74, + 0x5f, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x67, + 0x69, 0x76, 0x65, 0x6e, 0x64, 0x74, 0x79, 0x70, 0x65, 0x72, 0x6d, 0x69, + 0x74, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x6f, 0x74, 0x6f, 0x64, 0x6f, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x79, 0x73, 0x70, + 0x65, 0x63, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x78, 0x70, 0x6f, 0x72, + 0x74, 0x73, 0x79, 0x6e, 0x74, 0x68, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x78, + 0x74, 0x65, 0x6e, 0x64, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x6c, 0x73, 0x65, 0x69, 0x66, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x71, 0x72, 0x65, 0x66, 0x69, 0x6e, 0x64, 0x5f, + 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, + 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x65, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x74, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x61, 0x70, 0x74, 0x65, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, + 0x68, 0x69, 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x6e, 0x65, + 0x73, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x70, 0x61, 0x74, 0x68, 0x69, + 0x73, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x6f, 0x66, 0x69, + 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6f, 0x64, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, + 0x73, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x2d, 0x63, 0x61, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x61, 0x66, + 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x6e, 0x67, 0x62, 0x6f, 0x6f, 0x6c, + 0x6f, 0x6e, 0x67, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, + 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x4f, 0x44, 0x45, 0x4c, 0x5f, 0x4d, + 0x41, 0x54, 0x52, 0x49, 0x58, 0x49, 0x4e, 0x56, 0x5f, 0x56, 0x49, 0x45, + 0x57, 0x5f, 0x4d, 0x41, 0x54, 0x52, 0x49, 0x58, 0x5f, 0x5f, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x5f, 0x73, + 0x79, 0x6e, 0x63, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x36, 0x34, 0x68, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x6e, + 0x69, 0x73, 0x6f, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x68, 0x69, 0x74, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x45, 0x58, 0x54, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, + 0x63, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x70, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x69, + 0x6e, 0x74, 0x72, 0x69, 0x6e, 0x73, 0x69, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x61, 0x6c, 0x69, + 0x61, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x77, 0x65, 0x69, + 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x65, 0x66, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x75, 0x6c, 0x74, + 0x6c, 0x69, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x71, 0x76, + 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6c, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x72, + 0x61, 0x69, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x6d, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x61, 0x69, 0x6c, 0x69, 0x6b, 0x65, 0x78, 0x69, 0x73, + 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x78, 0x70, 0x6f, 0x73, + 0x65, 0x61, 0x6c, 0x65, 0x64, 0x65, 0x66, 0x6d, 0x61, 0x63, 0x72, 0x6f, + 0x70, 0x65, 0x6e, 0x41, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x63, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x72, 0x61, + 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x69, + 0x76, 0x69, 0x6e, 0x67, 0x74, 0x72, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x72, 0x75, 0x65, 0x63, 0x68, 0x6f, 0x2e, 0x61, 0x64, 0x64, 0x62, 0x69, + 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6c, 0x73, 0x69, + 0x66, 0x2d, 0x6e, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x68, 0x69, 0x74, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4e, 0x56, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x32, 0x75, 0x6e, 0x77, 0x69, 0x6e, 0x64, 0x2d, + 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x65, 0x66, 0x6d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x65, 0x66, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x6d, 0x62, 0x65, 0x64, 0x65, 0x66, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x78, 0x77, 0x69, 0x74, 0x68, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x2d, + 0x66, 0x69, 0x6c, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x44, 0x49, 0x46, 0x46, + 0x55, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x49, 0x53, 0x5f, + 0x4e, 0x45, 0x57, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x41, 0x5f, + 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x5f, 0x54, 0x68, + 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x72, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x73, 0x70, + 0x72, 0x69, 0x6e, 0x74, 0x66, 0x61, 0x6c, 0x6c, 0x74, 0x68, 0x72, 0x6f, + 0x75, 0x67, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x2d, 0x62, 0x69, + 0x6e, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x6f, 0x74, + 0x6c, 0x69, 0x6b, 0x65, 0x6e, 0x64, 0x64, 0x6f, 0x77, 0x6e, 0x63, 0x61, + 0x73, 0x74, 0x64, 0x63, 0x61, 0x6c, 0x6c, 0x61, 0x6d, 0x62, 0x64, 0x61, + 0x79, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x6e, 0x64, 0x69, 0x66, + 0x6e, 0x64, 0x65, 0x66, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x64, 0x65, 0x66, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x63, 0x61, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x6e, 0x69, 0x63, + 0x6f, 0x64, 0x65, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x53, 0x5f, + 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x5f, 0x63, + 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x5f, 0x5f, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x64, 0x5f, 0x5f, 0x73, 0x68, 0x66, 0x6c, 0x5f, 0x73, + 0x79, 0x6e, 0x63, 0x5f, 0x6c, 0x6f, 0x6e, 0x67, 0x64, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x32, 0x63, 0x6f, 0x6d, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x69, 0x6e, 0x74, 0x32, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x5f, 0x61, 0x73, + 0x73, 0x65, 0x72, 0x74, 0x63, 0x75, 0x64, 0x61, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x2d, + 0x63, 0x61, 0x73, 0x65, 0x74, 0x21, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x5f, 0x6f, 0x6e, 0x63, 0x65, 0x6c, 0x69, 0x66, 0x64, 0x65, 0x66, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x6d, 0x69, 0x74, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, + 0x5f, 0x49, 0x44, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x79, + 0x49, 0x53, 0x5f, 0x41, 0x42, 0x53, 0x4f, 0x4c, 0x55, 0x54, 0x45, 0x59, + 0x45, 0x44, 0x49, 0x52, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x4e, 0x41, + 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x5f, 0x49, 0x6d, 0x61, + 0x67, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, + 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x45, + 0x4e, 0x53, 0x49, 0x54, 0x59, 0x63, 0x5f, 0x75, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x6f, 0x6e, 0x67, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x6f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x6d, 0x70, 0x68, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x63, + 0x61, 0x6c, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x74, 0x6d, 0x75, 0x6c, 0x6d, 0x6f, 0x64, 0x65, + 0x63, 0x6c, 0x74, 0x79, 0x70, 0x65, 0x78, 0x65, 0x63, 0x75, 0x64, 0x61, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x74, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x5f, 0x6c, 0x69, 0x62, 0x61, 0x72, 0x65, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x6f, 0x6e, 0x6c, 0x79, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, + 0x69, 0x7a, 0x65, 0x72, 0x65, 0x69, 0x66, 0x69, 0x65, 0x64, 0x65, 0x66, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6e, 0x2d, 0x70, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x78, 0x6e, 0x6f, 0x74, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, + 0x79, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, + 0x75, 0x73, 0x65, 0x2d, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, + 0x53, 0x5f, 0x53, 0x59, 0x4d, 0x4c, 0x49, 0x4e, 0x4b, 0x50, 0x41, 0x54, + 0x48, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6c, + 0x61, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x72, 0x65, 0x73, 0x68, + 0x61, 0x70, 0x65, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x53, 0x49, 0x5a, + 0x45, 0x4e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x75, 0x6c, 0x6c, 0x70, 0x74, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x51, + 0x75, 0x61, 0x74, 0x65, 0x72, 0x6e, 0x69, 0x6f, 0x6e, 0x6f, 0x63, 0x69, + 0x74, 0x65, 0x53, 0x4b, 0x59, 0x5f, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x53, + 0x43, 0x52, 0x45, 0x45, 0x4e, 0x5f, 0x55, 0x56, 0x32, 0x5f, 0x5f, 0x67, + 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x77, 0x61, 0x72, + 0x70, 0x53, 0x69, 0x7a, 0x65, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x4f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2d, 0x6f, 0x75, 0x74, + 0x72, 0x65, 0x66, 0x69, 0x6e, 0x64, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x62, 0x72, 0x65, 0x61, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x34, 0x63, + 0x5f, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x6f, 0x6e, 0x67, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x78, 0x31, 0x32, 0x38, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x6f, 0x6e, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x65, 0x66, 0x73, + 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x70, 0x61, 0x63, 0x6b, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x66, 0x69, 0x6e, 0x64, 0x5f, 0x66, 0x69, 0x6c, + 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x5f, 0x63, 0x61, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, + 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x74, 0x71, 0x6e, + 0x61, 0x6d, 0x65, 0x6f, 0x66, 0x69, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x69, 0x6e, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x63, 0x6f, + 0x6e, 0x74, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, 0x65, 0x70, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x69, + 0x6e, 0x67, 0x75, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x69, 0x6e, 0x74, + 0x77, 0x69, 0x64, 0x65, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x77, 0x69, + 0x74, 0x68, 0x2d, 0x73, 0x6c, 0x6f, 0x74, 0x73, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x24, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x46, 0x52, + 0x41, 0x47, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x43, + 0x54, 0x49, 0x56, 0x45, 0x52, 0x54, 0x45, 0x58, 0x5f, 0x4e, 0x6f, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x71, 0x5f, 0x4e, + 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x5f, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x5f, 0x5f, 0x6e, 0x6f, 0x6e, 0x6e, 0x75, 0x6c, 0x6c, 0x61, + 0x79, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x65, 0x73, 0x63, 0x75, 0x65, 0x61, 0x64, 0x64, 0x72, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x61, 0x64, 0x64, 0x73, 0x75, 0x66, 0x66, + 0x69, 0x78, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x69, + 0x6e, 0x67, 0x61, 0x6e, 0x79, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x43, 0x41, 0x53, 0x54, 0x52, 0x45, 0x51, + 0x55, 0x41, 0x4c, 0x49, 0x46, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x54, 0x41, + 0x4c, 0x4c, 0x49, 0x43, 0x61, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x62, 0x69, 0x74, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x63, 0x6f, 0x5f, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x6f, 0x74, 0x64, 0x69, 0x72, 0x4f, 0x66, 0x72, 0x6f, 0x7a, + 0x65, 0x6e, 0x73, 0x65, 0x74, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x69, + 0x6f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x36, 0x34, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x65, 0x76, 0x61, 0x6c, 0x61, 0x6e, 0x64, 0x69, 0x73, 0x74, + 0x69, 0x6e, 0x63, 0x74, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x78, 0x70, + 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x6f, 0x74, 0x69, 0x6e, + 0x68, 0x65, 0x72, 0x69, 0x74, 0x65, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, + 0x6c, 0x61, 0x7a, 0x79, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x69, 0x6e, 0x69, + 0x74, 0x63, 0x6f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x68, 0x69, + 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x75, 0x69, 0x6e, 0x74, 0x70, 0x74, 0x72, 0x65, 0x73, 0x75, + 0x6d, 0x65, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x6f, 0x66, 0x61, + 0x69, 0x6c, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x65, + 0x76, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, + 0x74, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x63, 0x68, 0x61, 0x72, 0x38, 0x5f, + 0x74, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x74, 0x65, 0x70, 0x72, + 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x70, 0x72, 0x6f, 0x63, 0x65, + 0x64, 0x75, 0x72, 0x65, 0x77, 0x69, 0x6e, 0x64, 0x65, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x70, 0x75, 0x72, 0x65, 0x74, 0x72, 0x79, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, + 0x70, 0x77, 0x69, 0x64, 0x65, 0x63, 0x68, 0x61, 0x72, 0x61, 0x69, 0x73, + 0x65, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x65, 0x66, + 0x69, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x64, 0x69, + 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x77, 0x61, 0x6e, 0x74, 0x61, + 0x72, 0x72, 0x61, 0x79, 0x77, 0x68, 0x65, 0x6e, 0x2d, 0x73, 0x6f, 0x6d, + 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x74, 0x72, + 0x69, 0x67, 0x68, 0x74, 0x2d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x66, 0x74, 0x79, 0x70, 0x65, 0x42, 0x49, 0x4e, 0x4f, 0x52, 0x4d, 0x41, + 0x4c, 0x69, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x69, 0x6e, 0x74, 0x49, 0x42, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x6f, + 0x6e, 0x65, 0x49, 0x42, 0x4f, 0x75, 0x74, 0x6c, 0x65, 0x74, 0x49, 0x74, + 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x41, 0x5f, 0x72, 0x65, 0x61, + 0x6c, 0x5f, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x61, 0x73, 0x73, 0x65, 0x6d, + 0x62, 0x6c, 0x79, 0x4e, 0x4f, 0x54, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x4e, + 0x6f, 0x64, 0x65, 0x50, 0x61, 0x74, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, + 0x61, 0x6e, 0x79, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x75, 0x6e, 0x65, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, + 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x41, 0x6c, 0x69, 0x67, 0x6e, + 0x6f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x43, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x5f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x5f, 0x75, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x4e, 0x6f, 0x6e, + 0x6e, 0x75, 0x6c, 0x6c, 0x6f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x70, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x5f, 0x68, 0x6f, 0x73, 0x74, + 0x5f, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x6f, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x47, 0x69, 0x74, 0x5f, 0x5f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x61, + 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x61, 0x62, 0x73, 0x74, 0x72, + 0x61, 0x63, 0x74, 0x61, 0x6e, 0x79, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x61, + 0x6e, 0x79, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, 0x61, 0x73, 0x65, 0x6e, + 0x61, 0x6d, 0x65, 0x62, 0x6c, 0x6f, 0x62, 0x68, 0x61, 0x73, 0x68, 0x65, + 0x6c, 0x6c, 0x6f, 0x77, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, + 0x78, 0x6f, 0x72, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x78, 0x62, + 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x62, 0x79, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6c, 0x73, 0x73, 0x6d, 0x6f, + 0x6f, 0x74, 0x68, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x63, 0x61, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x6c, 0x63, 0x6f, 0x5f, 0x61, 0x77, 0x61, 0x69, 0x74, + 0x63, 0x6f, 0x5f, 0x79, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x72, 0x69, 0x76, + 0x65, 0x73, 0x62, 0x79, 0x74, 0x65, 0x73, 0x6c, 0x6f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x6e, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, + 0x75, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x63, 0x72, + 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, + 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x69, 0x73, 0x5f, 0x63, + 0x6f, 0x6e, 0x73, 0x74, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x66, 0x76, 0x61, 0x72, + 0x79, 0x69, 0x6e, 0x67, 0x70, 0x61, 0x74, 0x73, 0x75, 0x62, 0x73, 0x74, + 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x70, 0x73, 0x63, 0x6d, + 0x64, 0x6c, 0x65, 0x74, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, + 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x6f, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x75, 0x70, 0x65, 0x72, 0x77, 0x68, 0x65, 0x6e, 0x2d, 0x6e, 0x6f, 0x74, + 0x77, 0x69, 0x6c, 0x64, 0x63, 0x61, 0x72, 0x64, 0x65, 0x69, 0x6e, 0x69, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x61, 0x72, 0x6e, + 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x69, 0x6c, + 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x46, 0x6c, 0x6f, 0x61, 0x74, + 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x49, 0x4e, 0x5f, + 0x4c, 0x49, 0x53, 0x54, 0x52, 0x4c, 0x45, 0x53, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x6c, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x45, 0x53, 0x79, 0x6d, 0x62, + 0x6f, 0x6c, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x33, 0x56, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x34, 0x5f, 0x41, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x61, 0x62, 0x73, 0x70, 0x61, 0x74, 0x68, 0x69, 0x67, 0x68, 0x70, 0x61, + 0x67, 0x65, 0x72, 0x65, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x61, + 0x74, 0x74, 0x72, 0x64, 0x65, 0x66, 0x6e, 0x2d, 0x61, 0x75, 0x74, 0x6f, + 0x72, 0x65, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x63, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x63, + 0x6f, 0x6e, 0x63, 0x65, 0x70, 0x74, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x6c, + 0x79, 0x66, 0x6c, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x33, 0x32, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x66, 0x6f, + 0x72, 0x53, 0x6f, 0x6d, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, + 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x6f, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6e, 0x67, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x70, 0x61, 0x79, 0x61, 0x62, 0x6c, 0x65, 0x70, + 0x72, 0x65, 0x63, 0x69, 0x73, 0x65, 0x70, 0x72, 0x65, 0x6c, 0x6f, 0x61, + 0x64, 0x64, 0x6d, 0x6f, 0x64, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x70, 0x72, + 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x73, 0x70, 0x69, 0x64, 0x6f, 0x6c, + 0x69, 0x73, 0x74, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x70, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x68, 0x6f, 0x77, 0x63, 0x68, 0x61, 0x72, + 0x5f, 0x74, 0x75, 0x6e, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x6f, 0x77, 0x6e, + 0x74, 0x6f, 0x75, 0x6e, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x75, 0x6e, 0x73, + 0x68, 0x69, 0x66, 0x74, 0x75, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, + 0x66, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x70, 0x6d, 0x64, 0x6f, 0x73, + 0x65, 0x71, 0x76, 0x61, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x76, + 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x77, 0x6f, 0x72, 0x6b, 0x64, 0x69, + 0x72, 0x24, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x24, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x24, 0x66, 0x69, 0x72, 0x73, 0x74, 0x24, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x46, 0x75, 0x74, 0x75, 0x72, 0x65, 0x49, 0x47, 0x4e, 0x4f, 0x52, + 0x45, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x65, 0x63, 0x74, 0x32, 0x69, + 0x6e, 0x66, 0x69, 0x78, 0x6c, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x5f, 0x77, 0x65, 0x61, 0x6b, 0x61, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x62, + 0x69, 0x67, 0x69, 0x6e, 0x74, 0x62, 0x69, 0x74, 0x61, 0x6e, 0x64, 0x77, + 0x6f, 0x72, 0x64, 0x69, 0x63, 0x74, 0x62, 0x79, 0x63, 0x6f, 0x70, 0x79, + 0x63, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x63, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x64, 0x69, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, + 0x63, 0x61, 0x74, 0x63, 0x68, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x64, 0x69, 0x6d, 0x33, 0x63, 0x6f, 0x70, 0x72, 0x6f, 0x63, 0x5f, 0x69, + 0x6e, 0x74, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x66, 0x6c, 0x61, 0x76, + 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x34, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x66, 0x72, 0x69, 0x65, + 0x6e, 0x64, 0x6f, 0x6e, 0x65, 0x69, 0x6e, 0x66, 0x69, 0x78, 0x72, 0x69, + 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x6d, + 0x69, 0x6e, 0x74, 0x65, 0x64, 0x6f, 0x74, 0x6f, 0x6d, 0x6b, 0x6c, 0x69, + 0x6e, 0x6b, 0x70, 0x61, 0x72, 0x66, 0x6f, 0x72, 0x70, 0x61, 0x73, 0x63, + 0x61, 0x6c, 0x70, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x79, 0x62, 0x65, 0x67, + 0x69, 0x6e, 0x2d, 0x6e, 0x73, 0x71, 0x72, 0x74, 0x70, 0x72, 0x6f, 0x6d, + 0x70, 0x74, 0x70, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x69, 0x78, 0x65, 0x64, + 0x69, 0x65, 0x71, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x64, 0x65, 0x63, + 0x6c, 0x69, 0x6b, 0x65, 0x75, 0x66, 0x69, 0x78, 0x65, 0x64, 0x69, 0x76, + 0x61, 0x65, 0x78, 0x70, 0x72, 0x6f, 0x67, 0x31, 0x75, 0x69, 0x6e, 0x74, + 0x31, 0x36, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x75, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x76, 0x61, 0x74, 0x79, 0x70, 0x65, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x24, 0x6c, 0x61, 0x73, 0x74, 0x42, 0x45, 0x47, 0x49, 0x4e, + 0x44, 0x45, 0x58, 0x42, 0x61, 0x73, 0x69, 0x73, 0x69, 0x7a, 0x65, 0x43, + 0x6f, 0x6c, 0x6f, 0x72, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x4c, 0x6f, 0x6e, + 0x67, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, + 0x6e, 0x74, 0x36, 0x34, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x4e, 0x65, 0x76, + 0x65, 0x72, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x5f, 0x42, 0x6f, 0x6f, 0x6c, + 0x61, 0x62, 0x6f, 0x72, 0x74, 0x61, 0x66, 0x74, 0x65, 0x72, 0x62, 0x69, + 0x74, 0x6f, 0x72, 0x62, 0x79, 0x72, 0x65, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x70, 0x61, 0x6e, 0x69, 0x63, 0x72, 0x61, 0x74, 0x65, 0x66, + 0x6c, 0x75, 0x73, 0x68, 0x6c, 0x66, 0x6f, 0x6c, 0x64, 0x6c, 0x66, 0x6f, + 0x6c, 0x64, 0x72, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x61, 0x79, 0x69, 0x66, + 0x6e, 0x65, 0x71, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x69, 0x6e, 0x6f, 0x75, + 0x74, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x69, 0x6e, 0x72, 0x65, 0x66, 0x31, + 0x32, 0x38, 0x69, 0x73, 0x6e, 0x6f, 0x74, 0x69, 0x73, 0x73, 0x65, 0x74, + 0x6d, 0x69, 0x78, 0x69, 0x6e, 0x66, 0x6f, 0x6d, 0x6b, 0x64, 0x69, 0x72, + 0x6d, 0x6c, 0x6f, 0x61, 0x64, 0x70, 0x61, 0x74, 0x63, 0x68, 0x61, 0x6e, + 0x70, 0x61, 0x75, 0x73, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x67, 0x32, 0x70, + 0x72, 0x6f, 0x67, 0x6e, 0x70, 0x75, 0x73, 0x68, 0x64, 0x75, 0x6e, 0x69, + 0x6f, 0x6e, 0x75, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x78, 0x75, 0x6e, 0x73, + 0x65, 0x74, 0x75, 0x73, 0x69, 0x7a, 0x65, 0x76, 0x61, 0x61, 0x72, 0x67, + 0x76, 0x61, 0x72, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x76, 0x70, 0x61, 0x74, + 0x68, 0x61, 0x6c, 0x66, 0x6c, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6b, 0x73, + 0x68, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x70, 0x6f, 0x70, 0x64, 0x24, 0x6f, + 0x64, 0x64, 0x41, 0x41, 0x42, 0x42, 0x4f, 0x4f, 0x4c, 0x42, 0x79, 0x74, + 0x65, 0x43, 0x68, 0x61, 0x72, 0x43, 0x72, 0x65, 0x66, 0x6d, 0x61, 0x70, + 0x6f, 0x77, 0x4e, 0x55, 0x4c, 0x4c, 0x4e, 0x6f, 0x6e, 0x65, 0x53, 0x65, + 0x6c, 0x66, 0x31, 0x36, 0x56, 0x6f, 0x69, 0x64, 0x5f, 0x63, 0x6d, 0x64, + 0x62, 0x61, 0x6e, 0x64, 0x62, 0x6e, 0x6f, 0x74, 0x62, 0x78, 0x6f, 0x72, + 0x63, 0x68, 0x6f, 0x70, 0x77, 0x64, 0x63, 0x72, 0x65, 0x66, 0x33, 0x32, + 0x68, 0x65, 0x61, 0x64, 0x68, 0x69, 0x64, 0x65, 0x68, 0x6f, 0x6d, 0x65, + 0x69, 0x66, 0x65, 0x71, 0x69, 0x6f, 0x74, 0x61, 0x62, 0x69, 0x31, 0x36, + 0x6a, 0x6f, 0x69, 0x6e, 0x75, 0x6e, 0x69, 0x74, 0x75, 0x73, 0x65, 0x73, + 0x76, 0x31, 0x32, 0x38, 0x76, 0x6f, 0x69, 0x64, 0x41, 0x6e, 0x79, 0x49, + 0x4d, 0x50, 0x49, 0x4e, 0x46, 0x49, 0x6e, 0x66, 0x36, 0x34, 0x4d, 0x61, + 0x70, 0x4e, 0x41, 0x4e, 0x61, 0x4e, 0x61, 0x54, 0x4e, 0x69, 0x6c, 0x4f, + 0x46, 0x46, 0x52, 0x49, 0x44, 0x53, 0x65, 0x74, 0x61, 0x73, 0x6d, 0x79, + 0x61, 0x73, 0x72, 0x62, 0x73, 0x6c, 0x62, 0x73, 0x72, 0x63, 0x6c, 0x73, + 0x63, 0x6d, 0x70, 0x63, 0x6e, 0x65, 0x63, 0x6f, 0x73, 0x66, 0x38, 0x30, + 0x69, 0x33, 0x32, 0x69, 0x36, 0x34, 0x69, 0x73, 0x7a, 0x69, 0x70, 0x75, + 0x31, 0x36, 0x75, 0x33, 0x32, 0x75, 0x36, 0x34, 0x75, 0x72, 0x6c, 0x75, + 0x73, 0x7a, 0x41, 0x4f, 0x69, 0x38, 0x75, 0x38, +}; + +static const u8 data_segment_data_w2c_highlights_d55[] = { + 0x02, 0x0b, 0x05, 0x0a, 0x01, 0x06, 0x05, 0x0e, 0x0c, 0x0f, 0x0d, 0x00, + 0x00, 0x3d, 0x00, 0x00, 0x51, 0xc3, 0x20, 0x88, 0x41, 0x18, 0x4b, 0x29, + 0x30, 0x10, 0xc6, 0x48, 0xbb, 0xf8, 0x30, 0xea, 0x20, 0x18, 0xb2, 0x25, + 0x28, 0xea, 0x6b, 0x38, 0x45, 0x22, 0x38, 0x06, 0x6e, 0x28, 0xc1, 0xf8, + 0x30, 0xbb, 0xf8, 0x28, 0xc9, 0xec, 0x20, 0xfd, 0xf2, 0x48, 0x22, 0xfb, + 0x20, 0x81, 0x28, 0x38, 0x3f, 0x6c, 0x28, 0x46, 0x60, 0x10, 0xd1, 0x26, + 0x28, 0x1b, 0x2f, 0x28, 0xeb, 0x23, 0x20, 0x46, 0x61, 0x10, 0xab, 0xae, + 0x20, 0x4f, 0x21, 0x10, 0xcd, 0x8c, 0x50, 0x94, 0x2e, 0x58, 0xb5, 0xf8, + 0x30, 0x94, 0x9b, 0x20, 0xe0, 0x76, 0x40, 0x28, 0x60, 0x10, 0xb6, 0x69, + 0x20, 0x5f, 0xba, 0x28, 0x42, 0x81, 0x30, 0x02, 0x21, 0x20, 0xc7, 0xf8, + 0x30, 0x06, 0xfa, 0x28, 0x01, 0x80, 0x10, 0x00, 0x00, 0x12, 0x00, 0x13, + 0x00, 0x11, 0x00, 0x15, 0x00, 0x03, 0x00, 0x07, 0x00, 0x3c, +}; + +static const u8 data_segment_data_w2c_highlights_d56[] = { + 0x02, +}; + +static const u8 data_segment_data_w2c_highlights_d57[] = { + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x08, 0x41, 0x61, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x10, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x02, 0x82, 0x00, 0x00, 0x00, 0x01, 0x02, 0x84, 0x20, 0x84, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x01, 0x80, 0x41, 0x00, 0x01, 0x82, 0x00, 0x00, + 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x02, 0x00, + 0x41, 0x41, 0x41, 0x41, 0x61, 0x01, 0x61, 0x41, 0x41, 0x41, 0x41, 0x41, + 0x41, 0x51, 0x51, 0x41, 0x41, +}; + +static const u8 data_segment_data_w2c_highlights_d58[] = { + 0x01, 0x05, 0x00, 0x2d, 0x0a, 0x2a, 0x00, 0x12, 0x30, 0x00, 0x09, 0x07, + 0x18, 0x27, 0x0c, 0xc6, 0x06, 0x8e, 0x06, 0x97, 0x0c, 0x6a, 0x13, 0xca, + 0x08, 0x12, 0x0a, 0x24, 0x0b, 0x74, 0x09, 0x38, 0x0c, 0x35, 0x07, 0x30, + 0x09, 0xfb, 0x0e, 0x07, 0x08, 0xda, 0x14, 0x83, 0x14, 0x27, 0x10, 0xbf, + 0x0c, 0x0d, 0x0d, 0x76, 0x04, 0x57, 0x05, 0x6d, 0x10, 0x9e, 0x0a, 0x00, + 0x00, 0x60, 0x13, 0xe5, 0x12, 0x51, 0x0b, 0x39, 0x05, 0x40, 0x11, 0x00, + 0x00, 0x0c, 0x0a, 0x03, 0x13, 0xd5, 0x08, 0x69, 0x06, 0x79, 0x0c, 0x82, + 0x11, 0xef, 0x06, 0x61, 0x0e, 0x1e, 0x10, 0x2a, 0x0b, 0x53, 0x0e, 0x1b, + 0x0b, 0xb0, 0x0a, 0x5a, 0x0b, 0x92, 0x08, 0x79, 0x11, 0x18, 0x0a, 0x42, + 0x08, 0xab, 0x08, 0xa4, 0x0c, 0x49, 0x0f, 0x21, 0x05, 0xbb, 0x06, 0x01, + 0x0a, 0x14, 0x0d, 0x80, 0x04, 0x3f, 0x04, 0x30, 0x0e, 0xcf, 0x0a, 0xf3, + 0x0e, 0x4c, 0x0c, 0x47, 0x08, 0xb6, 0x08, 0x3c, 0x07, 0x5b, 0x0a, 0x49, + 0x62, 0x72, 0x65, 0x61, 0x6b, 0x4a, 0x63, 0x61, 0x73, 0x65, 0x4b, 0x63, + 0x61, 0x74, 0x63, 0x68, 0x4c, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4d, 0x63, + 0x6f, 0x6e, 0x73, 0x74, 0x4e, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, + 0x65, 0x4f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x67, 0x65, 0x72, 0x50, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x51, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x64, 0x6f, 0x53, 0x65, 0x6c, 0x73, 0x65, 0x54, 0x65, 0x6e, + 0x75, 0x6d, 0x55, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x56, 0x65, 0x78, + 0x74, 0x65, 0x6e, 0x64, 0x73, 0x57, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x58, + 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x59, 0x66, 0x6f, 0x72, 0x5a, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5b, 0x69, 0x66, 0x5c, + 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5d, 0x69, 0x6e, 0x5e, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x6f, 0x66, 0x5f, 0x6e, 0x65, 0x77, + 0x60, 0x6e, 0x75, 0x6c, 0x6c, 0x61, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x62, 0x73, 0x75, 0x70, 0x65, 0x72, 0x63, 0x73, 0x77, 0x69, 0x74, 0x63, + 0x68, 0x64, 0x74, 0x68, 0x69, 0x73, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x77, + 0x66, 0x74, 0x72, 0x75, 0x65, 0x67, 0x74, 0x72, 0x79, 0x68, 0x74, 0x79, + 0x70, 0x65, 0x6f, 0x66, 0x69, 0x76, 0x61, 0x72, 0x6a, 0x76, 0x6f, 0x69, + 0x64, 0x6b, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x6c, 0x77, 0x69, 0x74, 0x68, + 0x6d, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x6e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x6f, 0x6c, 0x65, + 0x74, 0x70, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x71, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x73, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x74, 0x73, + 0x74, 0x61, 0x74, 0x69, 0x63, 0x75, 0x79, 0x69, 0x65, 0x6c, 0x64, 0x76, + 0x61, 0x73, 0x77, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x78, 0x61, 0x77, 0x61, + 0x69, 0x74, 0x79, 0x66, 0x72, 0x6f, 0x6d, 0x7a, 0x67, 0x65, 0x74, 0x7b, + 0x6f, 0x66, 0x7c, 0x73, 0x65, 0x74, 0x7d, 0x61, 0x62, 0x73, 0x74, 0x72, + 0x61, 0x63, 0x74, 0x7e, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x7f, + 0x69, 0x6e, 0x66, 0x65, 0x72, 0x80, 0x69, 0x73, 0x81, 0x6b, 0x65, 0x79, + 0x6f, 0x66, 0x82, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x85, 0x73, 0x61, 0x74, 0x69, 0x73, 0x66, 0x69, 0x65, 0x73, 0x86, 0x74, + 0x79, 0x70, 0x65, 0x84, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, + 0x83, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, +}; + +static const u8 data_segment_data_w2c_highlights_d59[] = { + 0xfd, 0xfd, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x01, 0xfd, + 0x19, 0x19, 0x19, 0xfe, 0x23, 0xfd, 0xfd, 0x23, 0x19, 0x19, 0x19, 0x19, + 0xfd, 0x1d, 0xff, 0x20, 0x20, 0x19, 0x19, 0x19, 0x19, 0x20, 0x19, 0x19, + 0x19, 0xfd, 0x19, 0x19, 0x23, 0xfe, 0x18, 0x19, 0x19, 0x19, 0x19, 0x19, + 0x19, 0x19, 0x20, 0x20, 0x19, 0x19, 0x19, 0x19, 0x20, 0x19, 0x2e, 0x23, + 0x19, 0x19, 0x19, 0xfd, 0x19, 0x19, 0x19, 0x19, 0x19, 0x18, 0x19, 0x19, + 0x19, 0x12, 0x12, 0x12, 0x13, 0x13, 0x12, 0x11, 0x12, 0x11, 0x12, 0x12, + 0x13, 0x14, 0x11, 0x03, 0x12, 0x12, 0x13, 0x12, 0x14, 0x11, 0x11, 0x11, + 0x07, 0x12, 0x3c, 0x12, 0x3c, 0x12, 0x03, 0x12, 0x11, 0x13, 0x11, 0x12, + 0x11, 0x11, 0x13, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, +}; + +static const u8 data_segment_data_w2c_highlights_d60[] = { + 0xb0, 0xb5, 0x17, 0x00, 0x02, 0x01, 0x00, 0x74, 0x0f, 0xa5, 0x30, 0xb0, + 0x2a, 0x20, 0x24, 0x52, 0x28, 0x60, 0x21, 0x10, 0x02, 0x21, 0x20, 0xb1, + 0xf4, 0x38, 0x5e, 0xe2, 0x28, 0xf2, 0x04, 0x41, 0xeb, 0xc3, 0x20, 0xa2, + 0x38, 0x28, 0xc8, 0xea, 0x38, 0x01, 0x80, 0x10, 0xac, 0xec, 0x40, 0x50, + 0x41, 0x10, 0x96, 0x25, 0x21, 0x4f, 0x21, 0x10, 0x49, 0x30, 0x20, 0x75, + 0x59, 0x20, 0x86, 0x56, 0x40, 0x48, 0x39, 0x31, 0x90, 0x61, 0x20, 0xd0, + 0x45, 0x30, 0x4f, 0xec, 0x30, 0x19, 0x2b, 0x28, 0xea, 0xa0, 0x18, +}; + +static const u8 data_segment_data_w2c_highlights_d61[] = { + 0x06, 0x0d, 0x7f, 0x05, 0x03, 0x09, 0x25, 0x24, 0x11, 0x00, 0x48, 0x05, + 0x30, 0xb9, 0x0d, 0x2c, 0xd0, 0x99, 0x10, 0xcd, 0x80, 0x10, 0xf0, 0x41, + 0x18, 0x60, 0x22, 0x20, 0xc7, 0x8c, 0x20, 0xe0, 0x9a, 0x28, 0xcc, 0x8b, + 0x10, 0xb8, 0x99, 0x30, 0x7c, 0x69, 0x40, 0xad, 0x89, 0x28, 0x83, 0x98, + 0x28, 0xc9, 0x80, 0x28, 0x42, 0x81, 0x20, 0x60, 0x21, 0x10, 0x56, 0x48, + 0x18, 0xd0, 0x9a, 0x28, 0x12, 0x26, 0x38, 0xf9, 0x24, 0x18, 0xd8, 0x86, + 0x18, 0x01, 0x20, 0x10, 0x2f, 0x2c, 0x20, 0xa4, 0x83, 0x30, 0x3f, 0x56, + 0x18, 0x02, 0x21, 0x20, 0x79, 0x89, 0x28, 0xe6, 0x96, 0x30, 0x92, 0xaa, + 0x18, 0xc3, 0x61, 0x18, 0x2a, 0x99, 0x28, 0xd4, 0x88, 0x28, 0x56, 0x8a, + 0x28, 0x49, 0x93, 0x30, 0x7d, 0x80, 0x18, 0x0d, 0x82, 0x18, 0xea, 0x20, + 0x18, 0x4f, 0x21, 0x10, 0xb2, 0x25, 0x50, 0xc9, 0x9b, 0x18, 0xd8, 0x94, + 0x28, 0x1b, 0x8e, 0x18, 0x1e, 0x9b, 0x20, 0x94, 0x99, 0x30, 0xae, 0x8e, + 0x20, 0xda, 0x85, 0x20, 0xbf, 0x9a, 0x28, 0x1e, 0x31, 0x20, 0xa3, 0x4e, + 0x18, 0x8d, 0x92, 0x28, 0x60, 0x2e, 0x28, 0xae, 0x8e, 0x28, 0x18, 0x4e, + 0x18, 0x94, 0x8a, 0x20, 0x4b, 0x6a, 0x40, 0x7a, 0x4c, 0x18, 0x6c, 0x80, + 0x18, 0x00, 0x00, 0x12, 0x00, 0x15, 0x00, 0x13, 0x00, 0x0e, 0x00, 0x04, + +}; + +static const u8 data_segment_data_w2c_highlights_d62[] = { + 0x79, 0x43, 0x13, 0xfa, 0x30, 0x01, 0x36, 0x05, 0x04, 0x0f, 0x2f, 0x00, + 0x84, 0x0e, 0x06, 0x00, 0xd0, 0x25, 0x30, 0x38, 0x86, 0x30, 0x80, 0x97, + 0x38, 0x1f, 0x6a, 0x20, 0x02, 0x21, 0x20, 0x18, 0x6d, 0x20, 0xfc, 0x93, + 0x48, 0x60, 0x21, 0x10, 0x4e, 0x60, 0x30, 0x5f, 0xba, 0x28, 0x84, 0x8e, + 0x70, 0xe8, 0x4c, 0x40, 0x45, 0x22, 0x38, 0x42, 0x81, 0x68, 0x25, 0x6c, + 0x28, 0xea, 0x20, 0x18, 0x26, 0x65, 0x20, 0x99, 0x75, 0x40, 0xeb, 0x23, + 0x20, 0x47, 0x7a, 0x28, 0x5c, 0x89, 0x28, 0x51, 0x8a, 0x38, 0xe5, 0x7a, + 0x28, 0x55, 0x49, 0x38, 0x2f, 0x2c, 0x20, 0x08, 0x4b, 0x20, 0x45, 0x4f, + 0x68, 0xc4, 0x69, 0x20, 0x4b, 0x29, 0x30, 0xfe, 0x76, 0x30, 0x42, 0x81, + 0x30, 0x1b, 0x8e, 0x40, 0xab, 0xae, 0x20, 0x4f, 0x21, 0x10, 0x29, 0x80, + 0x68, 0xa1, 0x95, 0x40, 0x24, 0x32, 0x28, 0x94, 0x70, 0x50, 0x49, 0x95, + 0x40, 0x57, 0x42, 0x60, 0x60, 0x48, 0x30, 0x2b, 0x8e, 0x40, 0x29, 0x40, + 0x30, 0x04, 0x70, 0x30, 0x8a, 0x95, 0x40, 0xf0, 0x4b, 0x30, 0xb1, 0xd1, + 0x38, 0x01, 0x60, 0x18, 0xde, 0x67, 0x28, 0xfc, 0x76, 0x40, 0x1c, 0x53, + 0x48, 0x19, 0x2b, 0x28, 0xf6, 0x8b, 0x38, 0x94, 0x7b, 0x20, 0x00, 0x00, + 0x12, 0x00, 0x13, 0x00, 0x38, 0x00, 0x11, 0x00, 0x03, 0x00, 0x07, +}; + +static const u8 data_segment_data_w2c_highlights_d63[] = { + 0x01, 0x00, 0x00, 0x10, 0x00, 0x0d, 0x00, 0x06, 0x0a, 0x00, 0x0e, 0x06, + 0xdb, 0x1c, 0x18, 0x0a, 0x15, 0x07, 0x36, 0x47, 0x00, 0x01, 0x56, 0x07, + 0x85, 0x04, 0x7d, 0x1b, 0x01, 0x3d, 0x27, 0x2a, 0xd9, 0x10, 0x31, 0x60, + 0xc8, 0x30, 0xbc, 0x3b, 0x18, 0x55, 0x69, 0x38, 0x25, 0xec, 0x28, 0x05, + 0x02, 0x39, 0x1f, 0xea, 0x20, 0x00, 0x00, 0x00, 0xfd, 0x10, 0x21, 0x26, + 0x26, 0x38, 0xb7, 0xf0, 0x28, 0x42, 0x01, 0x31, 0x7a, 0x47, 0x10, 0x60, + 0x21, 0x10, 0xae, 0x0e, 0x21, 0xab, 0x2e, 0x21, 0xce, 0x15, 0x31, 0x86, + 0x36, 0x40, 0xec, 0x04, 0x31, 0xff, 0x65, 0x40, 0x76, 0xf3, 0x18, 0xfc, + 0xf4, 0x20, 0x29, 0xc0, 0x30, 0x5c, 0xc9, 0x28, 0xeb, 0x23, 0x20, 0x38, + 0xeb, 0x40, 0xab, 0x77, 0x38, 0xba, 0x17, 0x39, 0x23, 0x06, 0x51, 0x36, + 0xe5, 0x38, 0x4f, 0x21, 0x10, 0xdf, 0x19, 0x31, 0x4e, 0x60, 0x30, 0x7c, + 0x61, 0x18, 0xb8, 0x16, 0x41, 0xf3, 0xf5, 0x40, 0xa3, 0x0f, 0x29, 0xef, + 0xfb, 0x18, 0xfb, 0x1a, 0x29, 0x06, 0x00, 0x11, 0xa6, 0xae, 0x30, 0x18, + 0xed, 0x20, 0x7e, 0xc9, 0x30, 0xd1, 0x26, 0x28, 0xac, 0xc7, 0x18, 0xd1, + 0x04, 0x49, 0x12, 0x06, 0x39, 0xe5, 0x7a, 0x28, 0x01, 0xe0, 0x18, 0x6f, + 0x20, 0x18, 0x48, 0x09, 0x49, 0xdf, 0x09, 0x49, 0xea, 0x20, 0x18, 0x38, + 0x39, 0x28, 0xde, 0xfb, 0x18, 0x26, 0x26, 0x48, 0xde, 0xe7, 0x28, 0x38, + 0x06, 0x31, 0x69, 0xe8, 0x20, 0x94, 0xfb, 0x20, 0xdc, 0x88, 0x30, 0x26, + 0x65, 0x20, 0xb1, 0x09, 0x21, 0xa6, 0x12, 0x39, 0x35, 0x19, 0x31, 0x36, + 0xe5, 0x20, 0x00, 0x00, 0x00, 0x47, 0xe2, 0x28, 0x02, 0x21, 0x20, 0x45, + 0x22, 0x38, 0x93, 0x64, 0x48, 0x00, 0x0f, 0x29, 0x23, 0x06, 0x31, 0x1d, + 0x0b, 0x41, 0x00, 0x1b, 0x29, 0xde, 0xe7, 0x38, 0xe2, 0x09, 0x31, 0x21, + 0xeb, 0x30, 0xb2, 0x05, 0x29, 0x30, 0x20, 0x30, 0xe7, 0x23, 0x40, 0xf4, + 0x73, 0x40, 0xa1, 0x61, 0x28, 0x04, 0xf0, 0x30, 0x5f, 0x3a, 0x29, 0x51, + 0x43, 0x21, 0x01, 0x08, 0x19, 0x24, 0x32, 0x28, 0xd0, 0x25, 0x30, 0x4b, + 0x29, 0x30, 0x0b, 0x46, 0x28, 0xc4, 0xe9, 0x20, 0xac, 0x73, 0x48, 0xf0, + 0xcb, 0x30, 0xdd, 0xe7, 0x40, 0x37, 0xe5, 0x30, 0xc0, 0x01, 0x41, 0x9e, + 0x18, 0x39, 0x19, 0x2b, 0x28, 0xaa, 0xf5, 0x30, 0xfa, 0x19, 0x31, 0xf6, + 0x0b, 0x39, 0xd5, 0x08, 0x41, 0x75, 0xf4, 0x28, 0x00, 0x00, 0x12, 0x00, + 0x13, 0x01, 0x13, 0x02, 0x13, 0x03, 0x14, 0x03, 0x13, 0x00, 0x38, 0x00, + 0x11, 0x04, 0x03, 0x00, 0x07, +}; + +static const u8 data_segment_data_w2c_highlights_d64[] = { + 0x02, 0x04, 0x23, 0x03, 0x00, 0x02, 0x16, 0x0e, 0x34, 0x22, 0x04, 0x22, + 0x02, 0x15, 0x0a, 0x0a, 0x75, 0x38, 0xf0, 0x2e, 0x48, 0x9d, 0xa3, 0x28, + 0x64, 0xd1, 0x18, 0x11, 0x2e, 0x48, 0xeb, 0xa3, 0x20, 0xb7, 0xb5, 0x20, + 0xac, 0xc7, 0x18, 0x14, 0xb7, 0x40, 0x90, 0xc0, 0x18, 0x77, 0xc7, 0x28, + 0x5a, 0xc0, 0x38, 0x6f, 0xa0, 0x18, 0x06, 0xe0, 0x10, 0x5f, 0x1a, 0x29, + 0x09, 0xb7, 0x38, 0x04, 0x6f, 0x48, 0x3a, 0xd0, 0x20, 0x01, 0xe8, 0x18, + 0x00, 0x00, 0x00, 0x74, 0x2e, 0x40, 0xb6, 0xa9, 0x50, 0x7c, 0xd8, 0x28, + 0xe8, 0x80, 0x10, 0x3d, 0x37, 0x19, 0x19, 0xab, 0x28, 0xc8, 0xd7, 0x38, + 0x7f, 0x6a, 0x58, 0xef, 0xc1, 0x38, 0xaf, 0x37, 0x28, 0x59, 0xaf, 0x28, + 0xb6, 0xa9, 0x20, 0xd6, 0xb7, 0x38, 0x99, 0xb8, 0x28, 0xb0, 0x99, 0x28, + 0xaf, 0x37, 0x20, 0x38, 0xb9, 0x28, 0x88, 0xc1, 0x18, 0xf9, 0xe4, 0x18, + 0x70, 0xac, 0x38, 0x60, 0xa1, 0x10, 0xea, 0xa0, 0x18, 0xab, 0x0e, 0x21, + 0xa6, 0xce, 0x30, 0xc3, 0xae, 0x30, 0x4f, 0xa1, 0x10, 0x7a, 0xc7, 0x10, + 0x3d, 0x31, 0x40, 0x90, 0xd9, 0x20, 0x18, 0x66, 0x60, 0x7c, 0x41, 0x18, + 0x6e, 0xba, 0x28, 0xff, 0xac, 0x20, 0xec, 0xb4, 0x48, 0x00, 0x00, 0x13, + 0x01, 0x13, 0x02, 0x13, 0x03, 0x13, 0x04, 0x12, 0x00, 0x11, 0x00, 0x15, + 0x00, 0x03, 0x00, 0x07, +}; + +static const u8 data_segment_data_w2c_highlights_d65[] = { + 0x29, 0x00, 0x48, 0x02, 0x00, 0x09, 0x15, 0x09, 0x0c, 0x02, 0x06, 0x73, + 0x3c, 0x12, 0x1f, 0x12, 0x1e, 0xa4, 0x18, 0x2d, 0x8f, 0x68, 0xac, 0x52, + 0x48, 0x07, 0x84, 0x68, 0x35, 0x81, 0x28, 0x23, 0x26, 0x50, 0x7f, 0x4c, + 0x60, 0x87, 0x93, 0x40, 0xd6, 0x4c, 0x60, 0x20, 0xba, 0x28, 0x44, 0x97, + 0x18, 0x86, 0x36, 0x40, 0x00, 0x00, 0x00, 0x16, 0x2b, 0x40, 0x25, 0x81, + 0x78, 0xf3, 0x82, 0x60, 0xef, 0x24, 0x58, 0x2d, 0x81, 0x68, 0x26, 0x26, + 0x38, 0x6c, 0x2c, 0x30, 0xa3, 0x2f, 0x28, 0xc3, 0x61, 0x18, 0x7b, 0x82, + 0x20, 0x66, 0x97, 0x38, 0xec, 0x4d, 0x68, 0x2a, 0xa1, 0x10, 0x00, 0x00, + 0x00, 0xc0, 0x76, 0x30, 0x00, 0x00, 0x00, 0x5a, 0x97, 0x38, 0xfb, 0x82, + 0x20, 0x55, 0x97, 0x38, 0x79, 0x91, 0x50, 0x35, 0xa3, 0x20, 0xf9, 0x48, + 0x80, 0xb2, 0x2a, 0x40, 0xf3, 0x82, 0x90, 0x00, 0x00, 0x00, 0x05, 0x42, + 0x98, 0xe9, 0x98, 0x30, 0x2b, 0x82, 0x10, 0x5c, 0x84, 0x30, 0x00, 0x00, + 0x00, 0xd5, 0x8f, 0x60, 0x12, 0x2a, 0x40, 0x25, 0x81, 0xa8, 0x02, 0x21, + 0x20, 0xf2, 0x24, 0x40, 0x40, 0x97, 0x38, 0x57, 0x95, 0x18, 0x66, 0x25, + 0x28, 0x74, 0x90, 0x58, 0x7c, 0x52, 0x48, 0x2d, 0x81, 0x38, 0xd3, 0xb8, + 0x30, 0x24, 0x32, 0x28, 0x33, 0xa2, 0x10, 0x05, 0x42, 0x38, 0x19, 0x2b, + 0x28, 0x76, 0x82, 0x30, 0xd0, 0x25, 0x30, 0x0b, 0x26, 0x28, 0x7d, 0x82, + 0x50, 0x57, 0xb5, 0x40, 0x4f, 0x21, 0x10, 0xa8, 0x90, 0x38, 0xf1, 0x7a, + 0x28, 0xfc, 0x4b, 0x60, 0xfb, 0x82, 0x50, 0x6f, 0x91, 0x50, 0xb3, 0xbb, + 0x18, +}; + +static const u8 data_segment_data_w2c_highlights_d66[] = { + 0x01, 0x07, 0x1d, 0x1a, 0x04, 0x02, 0x02, 0x13, 0x1e, 0x00, 0x00, 0x00, + 0x20, 0x24, 0x36, 0x02, 0x0a, 0x05, 0x00, 0x3a, 0x08, 0x00, 0x11, 0x06, + 0x00, 0x2d, 0x38, 0x1c, 0x09, 0x1b, 0x90, 0x07, 0xf6, 0x90, 0x41, 0x71, + 0x73, 0x28, 0xa7, 0x98, 0x39, 0xc8, 0x96, 0x41, 0x59, 0x2f, 0x28, 0x38, + 0x86, 0x31, 0xb9, 0x95, 0x41, 0x1b, 0x80, 0x81, 0xcb, 0x99, 0x31, 0x4f, + 0x21, 0x10, 0x8b, 0x8b, 0x41, 0x45, 0x22, 0x38, 0x18, 0xed, 0x20, 0xd9, + 0x89, 0x39, 0x20, 0x94, 0x49, 0xea, 0x20, 0x18, 0xf9, 0x64, 0x19, 0x26, + 0x8e, 0x41, 0x60, 0xa8, 0x30, 0x68, 0x41, 0x28, 0x5f, 0x1a, 0x29, 0xde, + 0xe7, 0x28, 0x24, 0x73, 0x31, 0x01, 0x68, 0x19, 0x1f, 0xea, 0x20, 0x06, + 0x98, 0x31, 0x67, 0xf8, 0x38, 0xe5, 0x5a, 0x28, 0x70, 0x99, 0x31, 0x01, + 0xe0, 0x18, 0xbc, 0x9b, 0x19, 0x6e, 0x81, 0x48, 0x96, 0x69, 0x31, 0xf6, + 0x8b, 0x39, 0x38, 0x39, 0x28, 0x19, 0x67, 0x31, 0xe7, 0x89, 0x29, 0x1f, + 0xea, 0x40, 0x0b, 0x88, 0x61, 0x4e, 0x40, 0x30, 0xa6, 0xce, 0x30, 0xdc, + 0xc8, 0x30, 0x29, 0x80, 0x69, 0x81, 0x87, 0x59, 0x19, 0x2b, 0x28, 0x90, + 0x80, 0x19, 0x06, 0x60, 0x11, 0xe9, 0x93, 0x49, 0x76, 0xf4, 0x38, 0x5c, + 0x89, 0x29, 0xab, 0x0e, 0x21, 0xfc, 0x93, 0x49, 0x26, 0x65, 0x20, 0x55, + 0x69, 0x38, 0x94, 0xfb, 0x20, 0xeb, 0x23, 0x20, 0xcf, 0x77, 0x38, 0xbb, + 0xa3, 0x40, 0xe8, 0x8e, 0x49, 0x2f, 0x2c, 0x20, 0x56, 0x7a, 0x29, 0x04, + 0xf0, 0x30, 0x19, 0x67, 0x19, 0x85, 0x92, 0x51, 0xb5, 0x33, 0x48, 0x6f, + 0x20, 0x18, 0x51, 0x8a, 0x39, 0x08, 0xeb, 0x20, 0x5c, 0x36, 0x40, 0x02, + 0x21, 0x20, 0x00, 0x00, 0x00, 0x60, 0x21, 0x10, 0x00, 0x00, 0x00, 0xd4, + 0x87, 0x39, 0xfe, 0xf6, 0x30, 0x21, 0x8b, 0x31, 0x29, 0xa0, 0x30, 0xb1, + 0x31, 0x39, 0xfc, 0xf6, 0x40, 0x0d, 0x79, 0x31, 0xf0, 0xab, 0x30, 0x24, + 0x32, 0x28, 0xbd, 0x87, 0x41, 0x4b, 0x29, 0x30, 0xd0, 0x25, 0x30, 0x4f, + 0xcc, 0x30, 0x25, 0xec, 0x28, 0x54, 0x36, 0x40, 0x1b, 0x8e, 0x41, 0x38, + 0x89, 0x41, 0xc9, 0x4c, 0x21, 0x1a, 0x67, 0x29, 0xe8, 0xac, 0x40, 0x43, + 0x72, 0x29, 0xc4, 0xe9, 0x20, 0x57, 0x82, 0x61, 0x00, 0x00, 0x12, 0x00, + 0x13, 0x01, 0x13, 0x02, 0x13, 0x03, 0x13, 0x00, 0x14, 0x00, 0x38, 0x00, + 0x03, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x19, 0x00, 0x11, +}; + +static const u8 data_segment_data_w2c_highlights_d67[] = { + 0x4e, 0x2f, 0x00, 0x30, 0x2c, 0x00, 0x06, 0x02, 0x64, 0x79, 0x30, 0x14, + 0x70, 0x20, 0x58, 0x2d, 0x78, 0xf8, 0x72, 0x20, 0xf7, 0x2a, 0x88, 0xd2, + 0x49, 0x38, 0xee, 0x79, 0x28, 0x11, 0x47, 0x48, 0x77, 0x8a, 0x48, 0x2b, + 0x72, 0x20, 0x24, 0x70, 0x60, 0xeb, 0x2f, 0x58, 0xe1, 0x2f, 0x60, 0x33, + 0x33, 0x48, 0x65, 0x8d, 0x68, 0xe5, 0x31, 0x50, 0xf7, 0x91, 0x50, 0xc6, + 0x35, 0x40, 0x7f, 0x93, 0x48, 0x00, 0x00, 0x00, 0x15, 0x4a, 0x40, 0xaa, + 0x83, 0x68, 0x58, 0x85, 0x98, 0x5e, 0x79, 0x30, 0xe4, 0x77, 0x30, 0x04, + 0x70, 0x38, 0xfd, 0x51, 0x40, 0x23, 0x56, 0x40, 0xaa, 0x83, 0xa0, 0x00, + 0x71, 0x58, 0x44, 0x79, 0x20, 0xf4, 0x8f, 0x58, 0x00, 0x00, 0x11, 0x00, + 0x3c, 0x00, 0x38, 0x00, 0x0e, +}; + +static const u8 data_segment_data_w2c_highlights_d68[] = { + 0x01, 0x00, 0x00, 0x4e, 0x31, 0x24, 0x32, 0x01, 0x11, 0x00, 0x0a, 0x01, + 0x25, 0x88, 0x21, 0x10, 0x21, 0x00, 0x04, 0x50, 0x11, 0x02, 0x9d, 0x25, + 0x09, 0x00, 0x36, 0x0c, 0x5f, 0x04, 0x24, 0x09, 0xd1, 0xc0, 0x20, 0x0f, + 0xc5, 0x31, 0xa7, 0xb8, 0x38, 0x69, 0xd6, 0x28, 0x38, 0x46, 0x31, 0xde, + 0xc7, 0x28, 0x02, 0x21, 0x20, 0x60, 0xa0, 0x30, 0xe0, 0xa5, 0x30, 0xc5, + 0x34, 0x48, 0x26, 0x26, 0x38, 0x00, 0x00, 0x00, 0xfe, 0xb2, 0x40, 0x57, + 0xb6, 0x28, 0x5f, 0xfa, 0x28, 0xb3, 0xa8, 0x30, 0x6e, 0x61, 0x48, 0x71, + 0x93, 0x28, 0x86, 0x36, 0x40, 0xd4, 0xa7, 0x38, 0x88, 0xc1, 0x19, 0xaa, + 0xd5, 0x30, 0x04, 0xd0, 0x30, 0x28, 0x40, 0x11, 0x00, 0x00, 0x00, 0x5c, + 0xa9, 0x28, 0xb9, 0xb5, 0x40, 0x00, 0x00, 0x00, 0x4f, 0x21, 0x10, 0xc7, + 0x34, 0x38, 0xc3, 0xe3, 0x21, 0xd4, 0xcd, 0x49, 0x84, 0xdb, 0x21, 0x59, + 0x2f, 0x28, 0xd1, 0xc4, 0x30, 0x40, 0xa9, 0x18, 0x05, 0x32, 0x21, 0x45, + 0x22, 0x38, 0xcb, 0xb9, 0x30, 0xf0, 0xab, 0x30, 0xab, 0xee, 0x20, 0x36, + 0xc5, 0x20, 0x1b, 0xae, 0x40, 0x92, 0xe2, 0x19, 0x8b, 0xab, 0x40, 0xd0, + 0x25, 0x30, 0x4e, 0x40, 0x30, 0xac, 0xa7, 0x18, 0x19, 0x2b, 0x28, 0xc6, + 0xc8, 0x51, 0x68, 0x41, 0x28, 0x41, 0xd4, 0x28, 0x63, 0x72, 0x31, 0xea, + 0x20, 0x18, 0xe2, 0x49, 0x31, 0xcc, 0xc0, 0x39, 0x5f, 0x36, 0x28, 0xc9, + 0x2c, 0x21, 0x60, 0x21, 0x10, 0x29, 0xa0, 0x30, 0x67, 0x25, 0x20, 0x4f, + 0xb1, 0x38, 0xf9, 0xe8, 0x19, 0x94, 0xdb, 0x20, 0x01, 0xc0, 0x18, 0x3a, + 0xae, 0x28, 0x44, 0xae, 0x40, 0x9a, 0xc9, 0x31, 0xe8, 0xae, 0x48, 0x6f, + 0x20, 0x18, 0xe3, 0xa3, 0x18, 0xc8, 0xb6, 0x40, 0xb6, 0x29, 0x20, 0x2f, + 0x2c, 0x20, 0x0b, 0xc8, 0x38, 0xdf, 0xc1, 0x29, 0xb7, 0xd0, 0x28, 0x0a, + 0xae, 0x40, 0x90, 0x40, 0x19, 0xd0, 0x87, 0x21, 0xc3, 0xe1, 0x19, 0xac, + 0xac, 0x40, 0xed, 0xaf, 0x38, 0x28, 0xad, 0x28, 0xd6, 0x37, 0x38, 0x42, + 0x41, 0x31, 0x99, 0xd2, 0x21, 0xd9, 0xa8, 0x21, 0xeb, 0x23, 0x20, 0xc3, + 0xca, 0x30, 0xc4, 0xc9, 0x20, 0x7b, 0xa5, 0x28, 0x51, 0x03, 0x21, 0x16, + 0xd4, 0x38, 0x24, 0x32, 0x28, 0x23, 0xd5, 0x20, 0x4b, 0x29, 0x30, 0x1f, + 0xca, 0x20, 0xeb, 0xb5, 0x40, 0x92, 0xea, 0x31, 0x1a, 0xb8, 0x38, 0x38, + 0x39, 0x28, 0xd8, 0x46, 0x40, 0x6f, 0xae, 0x30, 0x26, 0x45, 0x20, 0x93, + 0x44, 0x48, 0x8a, 0x47, 0x51, 0x18, 0xcd, 0x20, 0x01, 0xa0, 0x10, 0x25, + 0xcc, 0x28, 0xd1, 0xc0, 0x11, 0xbb, 0x41, 0x11, 0x00, 0x00, 0x12, 0x00, + 0x13, 0x01, 0x13, 0x02, 0x14, 0x02, 0x13, 0x00, 0x38, 0x00, 0x03, 0x00, + 0x07, 0x00, 0x3c, 0x00, 0x15, 0x00, 0x13, 0x21, 0x13, 0x20, 0x13, 0x08, + 0x13, 0x04, 0x13, 0x10, +}; + +static const u8 data_segment_data_w2c_highlights_d69[] = { + 0x01, 0x01, 0x09, 0x60, 0x0b, 0x0c, 0x06, 0x0b, 0x0a, 0x00, 0x07, 0x69, + 0x1e, 0x0a, 0x16, 0x06, 0x06, 0x39, 0x23, 0x00, 0x0a, 0x00, 0x02, 0x00, + 0x00, 0x19, 0x00, 0x08, 0x04, 0x00, 0x68, 0x02, 0x29, 0xb4, 0x48, 0x51, + 0x03, 0x21, 0xe8, 0xc7, 0x30, 0x4f, 0x21, 0x10, 0x6c, 0xd7, 0x30, 0x18, + 0xd5, 0x20, 0x00, 0x00, 0x00, 0xb8, 0x5a, 0x28, 0x1a, 0x78, 0x21, 0xbb, + 0x41, 0x11, 0x5c, 0xa9, 0x28, 0x01, 0xc0, 0x18, 0xa4, 0xb7, 0x38, 0x55, + 0x49, 0x38, 0x29, 0xa0, 0x30, 0xbf, 0xa3, 0x20, 0xc9, 0x2c, 0x21, 0x1c, + 0xd5, 0x40, 0xcd, 0xd8, 0x30, 0xe7, 0xa9, 0x28, 0x02, 0x21, 0x20, 0x5f, + 0xfa, 0x28, 0x3d, 0xc1, 0x30, 0x5e, 0xac, 0x38, 0x6f, 0x20, 0x18, 0x64, + 0x78, 0x21, 0x46, 0x80, 0x11, 0xd1, 0x86, 0x40, 0xa6, 0xdb, 0x18, 0x59, + 0x2f, 0x28, 0x7b, 0xa5, 0x28, 0xeb, 0xb5, 0x40, 0x3a, 0xd5, 0x40, 0x70, + 0x7b, 0x21, 0xac, 0xa7, 0x18, 0x28, 0x40, 0x11, 0xab, 0xee, 0x20, 0x7c, + 0x45, 0x21, 0x19, 0x2b, 0x28, 0x38, 0x39, 0x28, 0x3d, 0xda, 0x28, 0x04, + 0xd0, 0x30, 0xea, 0x20, 0x18, 0x6f, 0xae, 0x30, 0x57, 0x36, 0x28, 0x92, + 0x62, 0x18, 0x94, 0xdb, 0x20, 0x57, 0x2f, 0x38, 0x26, 0x45, 0x20, 0xc3, + 0x61, 0x18, 0x86, 0x36, 0x40, 0x68, 0x41, 0x28, 0x33, 0xa7, 0x50, 0xc4, + 0xc9, 0x20, 0xa1, 0xa5, 0x20, 0x4f, 0x8c, 0x30, 0xb9, 0xb5, 0x40, 0x06, + 0xc7, 0x20, 0xd6, 0x37, 0x38, 0x30, 0x20, 0x30, 0xb9, 0xdb, 0x18, 0x60, + 0x21, 0x10, 0x2b, 0xd3, 0x20, 0x0f, 0x37, 0x29, 0x90, 0x40, 0x19, 0x5f, + 0x36, 0x28, 0x27, 0xc5, 0x18, 0x01, 0x8c, 0x38, 0x0a, 0xae, 0x40, 0x24, + 0x32, 0x28, 0x4b, 0x29, 0x30, 0x0b, 0xc8, 0x38, 0xd0, 0x25, 0x30, 0x45, + 0x22, 0x38, 0x28, 0xd0, 0x30, 0x93, 0xa4, 0x48, 0x01, 0x40, 0x11, 0x05, + 0xb2, 0x20, 0x47, 0x47, 0x48, 0xa6, 0x8e, 0x30, 0xf0, 0xab, 0x40, 0xeb, + 0x23, 0x20, +}; + +static const u8 data_segment_data_w2c_highlights_d70[] = { + 0x1a, 0x04, 0x05, 0xc6, 0xd3, 0x90, 0x58, 0x0e, 0x41, 0x18, 0x6b, 0x4e, + 0x30, 0x73, 0x35, 0x18, 0x46, 0x80, 0x38, 0x6a, 0x4a, 0x50, 0x28, 0x60, + 0x10, 0x6d, 0x20, 0x50, 0x51, 0x4f, 0x28, 0xaf, 0x47, 0x18, 0xda, 0x45, + 0x20, 0xf9, 0x48, 0x18, 0x00, 0x5a, 0x30, 0xae, 0x58, 0x38, 0x11, 0x36, + 0x28, 0xd9, 0x48, 0x20, 0xfe, 0x49, 0x50, 0xd2, 0x5a, 0x20, 0xf6, 0x36, + 0x18, +}; + +static const u8 data_segment_data_w2c_highlights_d71[] = { + 0x13, 0x26, 0x02, 0x01, 0x11, 0x1f, 0x06, 0x03, 0x02, 0x4b, 0x2d, 0x0e, + 0x00, 0x53, 0x1b, 0x18, 0x5f, 0x4a, 0x58, 0x01, 0xc0, 0x10, 0x02, 0x21, + 0x20, 0x74, 0x4e, 0x40, 0x4d, 0x50, 0x40, 0xb6, 0xc9, 0x20, 0x3d, 0x17, + 0x19, 0x51, 0x3a, 0x28, 0x52, 0x33, 0x30, 0xf8, 0x6e, 0x48, 0xc4, 0x46, + 0x20, 0x91, 0x38, 0x30, 0x7f, 0x6a, 0x58, 0x64, 0xb1, 0x18, 0xff, 0x2c, + 0x20, 0xa1, 0xa1, 0x28, 0x06, 0xc0, 0x10, 0x7c, 0x38, 0x28, 0x04, 0x8f, + 0x48, 0xb0, 0x2a, 0x20, 0xcd, 0x74, 0x38, 0x01, 0xc8, 0x18, 0x74, 0x4e, + 0x48, 0xef, 0xa1, 0x38, 0x7a, 0x27, 0x10, 0x38, 0x39, 0x28, 0xeb, 0x23, + 0x20, 0x19, 0x89, 0x58, 0xab, 0xee, 0x20, 0xf9, 0xc4, 0x18, 0xa6, 0xae, + 0x30, 0xf0, 0x85, 0x60, 0x59, 0x2f, 0x28, 0x5f, 0xfa, 0x28, 0xa1, 0x25, + 0x20, 0xc0, 0x34, 0x28, 0x6f, 0x20, 0x18, 0x60, 0x21, 0x10, 0xdc, 0x23, + 0x18, 0x4f, 0x21, 0x10, 0xea, 0x20, 0x18, 0x0f, 0x37, 0x29, 0x7a, 0x38, + 0x38, 0x7c, 0x81, 0x70, 0xed, 0x23, 0x21, 0x7c, 0x41, 0x18, +}; + +static const u8 data_segment_data_w2c_highlights_d72[] = { + 0x13, 0x05, 0x07, 0x0a, 0x06, 0xa0, 0x10, 0x16, 0x51, 0xac, 0x20, 0xa1, + 0xa1, 0x28, 0x31, 0xfb, 0x20, 0x37, 0xf7, 0x20, 0xa0, 0x6b, 0x40, 0xb0, + 0x2a, 0x20, 0x02, 0x21, 0x20, 0x27, 0xe3, 0x18, 0xd2, 0xa8, 0x20, 0xef, + 0xf8, 0x30, 0x42, 0x81, 0x20, 0xdc, 0x48, 0x30, 0xe3, 0xb8, 0x28, 0x52, + 0xa6, 0x18, 0x3d, 0xfa, 0x28, 0x47, 0xf7, 0x28, 0x28, 0x60, 0x10, 0x38, + 0xfa, 0x28, 0x4f, 0x21, 0x10, 0xa6, 0x4e, 0x30, 0xff, 0xb4, 0x28, 0xeb, + 0x23, 0x20, 0x18, 0xf5, 0x20, 0xee, 0xc6, 0x20, 0xe8, 0xe7, 0x30, 0x29, + 0xda, 0x28, 0x01, 0x20, 0x10, 0x46, 0x21, 0x10, 0x88, 0x21, 0x18, 0x00, + 0x00, 0x12, 0x00, 0x14, 0x01, 0x14, 0x00, 0x13, 0x02, 0x13, 0x00, 0x03, + 0x00, 0x38, +}; + +static const u8 data_segment_data_w2c_highlights_d73[] = { + 0x0a, 0x96, 0x01, 0x00, 0x66, 0x00, 0x47, 0x00, 0x5c, 0x05, 0x80, 0x29, + 0x00, 0x03, 0x3f, 0x01, 0xab, 0x8e, 0x20, 0x63, 0x12, 0x31, 0x02, 0x21, + 0x20, 0xeb, 0x23, 0x20, 0xca, 0x30, 0x38, 0x92, 0x6a, 0x18, 0x00, 0x61, + 0x30, 0x42, 0x01, 0x21, 0x1c, 0x49, 0x41, 0xf9, 0x64, 0x18, 0xc6, 0x7b, + 0x18, 0xdc, 0xe8, 0x30, 0x5c, 0x7b, 0x20, 0xad, 0x39, 0x28, 0x01, 0x68, + 0x38, 0xaa, 0x39, 0x28, 0xdc, 0x23, 0x18, 0xa6, 0xce, 0x30, 0x46, 0x21, + 0x10, 0x0b, 0xd1, 0x58, 0x51, 0x3a, 0x28, 0x4f, 0x21, 0x10, 0xdd, 0x79, + 0x18, 0x10, 0xa6, 0x48, 0x01, 0x68, 0x18, 0x58, 0x7b, 0x20, 0x60, 0x23, + 0x31, 0x6f, 0x20, 0x18, 0x38, 0x39, 0x28, 0x58, 0x43, 0x21, 0xf2, 0x44, + 0x18, 0x4d, 0x7a, 0x18, 0x54, 0x7b, 0x20, 0x19, 0x67, 0x18, 0x79, 0x13, + 0x31, 0x5f, 0x9a, 0x28, 0xb6, 0x69, 0x20, 0x06, 0x60, 0x10, 0xc3, 0x7b, + 0x18, 0x05, 0xc2, 0x38, 0xff, 0x2c, 0x20, 0x00, 0x00, 0x12, 0x00, 0x11, + 0x00, 0x15, 0x00, 0x03, 0x00, 0x07, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +static const u8 data_segment_data_w2c_highlights_d74[] = { + 0x01, 0x01, 0x02, 0x06, 0x01, 0x19, 0x07, 0x02, 0x00, 0x03, 0x01, 0x02, + 0x09, 0x0e, 0x03, 0x4f, 0x04, 0x05, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x01, + 0x45, 0x00, 0x00, 0x02, 0x11, 0x03, 0x03, 0x04, 0x01, 0x00, 0x01, 0x00, + 0x04, 0x0e, 0x00, 0x08, 0x3c, 0x00, 0x01, 0x14, 0x04, 0x03, 0x09, 0x54, + 0x01, 0x00, 0x14, 0x01, 0x04, 0x07, 0x00, 0x0d, 0x00, 0x16, 0x0d, 0x56, + 0x09, 0x05, 0x1b, 0xf0, 0xeb, 0x40, 0xf9, 0x64, 0x19, 0x64, 0x6c, 0x48, + 0xcb, 0xf9, 0x30, 0x2f, 0x2c, 0x20, 0xe3, 0x35, 0x19, 0x52, 0x31, 0x39, + 0x02, 0x21, 0x48, 0xeb, 0x23, 0x20, 0x58, 0x36, 0x21, 0xa4, 0x36, 0x28, + 0x67, 0x06, 0x31, 0x90, 0x04, 0x61, 0x7b, 0xe5, 0x60, 0x2f, 0xf9, 0x30, + 0x18, 0x6e, 0x21, 0x3a, 0xec, 0x30, 0x69, 0x3a, 0x29, 0xc3, 0xcc, 0x20, + 0xdc, 0x03, 0x19, 0xce, 0x15, 0x21, 0x92, 0x31, 0x29, 0x1a, 0x0c, 0x39, + 0xd4, 0xe7, 0x38, 0x0f, 0x25, 0x30, 0xda, 0xf3, 0x30, 0xe3, 0x03, 0x19, + 0xff, 0x20, 0x10, 0x93, 0xe4, 0x48, 0x28, 0x09, 0x49, 0x86, 0x60, 0x11, + 0x4a, 0x34, 0x19, 0x11, 0x60, 0x11, 0x72, 0xe3, 0x20, 0x11, 0x2b, 0x19, + 0x7b, 0x3a, 0x29, 0x20, 0x29, 0x49, 0xb4, 0x39, 0x21, 0x5e, 0xec, 0x38, + 0xf1, 0xe6, 0x50, 0xa3, 0x2f, 0x28, 0x9d, 0xe3, 0x48, 0x8c, 0xe1, 0x28, + 0xcf, 0xe2, 0x58, 0x72, 0xe0, 0x38, 0x43, 0xd2, 0x38, 0x56, 0x2a, 0x51, + 0xa6, 0xae, 0x30, 0xd0, 0x25, 0x30, 0x05, 0xa2, 0x38, 0xd8, 0x02, 0x19, + 0xa5, 0x24, 0x49, 0xb2, 0x25, 0x28, 0x03, 0xd4, 0x48, 0x91, 0x28, 0x48, + 0x19, 0x2b, 0x28, 0x79, 0xef, 0x48, 0x38, 0x20, 0x19, 0x3c, 0xcf, 0x48, + 0xa2, 0xf4, 0x20, 0x2e, 0xf5, 0x20, 0x92, 0x62, 0x11, 0x57, 0x38, 0x39, + 0xa8, 0x66, 0x38, 0xf0, 0x61, 0x11, 0x5f, 0x2f, 0x29, 0x06, 0x60, 0x11, + 0x5f, 0x5a, 0x29, 0xa5, 0x24, 0x41, 0x26, 0xe5, 0x20, 0x01, 0x00, 0x11, + 0xbe, 0xf2, 0x50, 0xe8, 0xee, 0x48, 0x96, 0x34, 0x31, 0xdc, 0x68, 0x30, + 0x04, 0xd0, 0x30, 0x4d, 0x32, 0x50, 0xdc, 0x03, 0x69, 0xd6, 0xe5, 0x20, + 0xd2, 0x3b, 0x19, 0x87, 0x2f, 0x28, 0xbb, 0xed, 0x48, 0xee, 0x3a, 0x19, + 0xba, 0xe5, 0x48, 0x86, 0x36, 0x40, 0xef, 0x04, 0x59, 0x4f, 0x21, 0x10, + 0x6a, 0x2a, 0x20, 0xdb, 0x62, 0x11, 0x55, 0xee, 0x30, 0x68, 0xe1, 0x28, + 0x8d, 0xd0, 0x38, 0xf3, 0xaa, 0x20, 0xf2, 0x44, 0x40, 0x4b, 0xce, 0x38, + 0x64, 0x91, 0x18, 0x01, 0x68, 0x19, 0x29, 0xeb, 0x38, 0x7b, 0xe7, 0x40, + 0x2f, 0x2c, 0x10, 0x30, 0x29, 0x48, 0xe3, 0x2a, 0x40, 0x60, 0x21, 0x10, + 0x6c, 0x2c, 0x30, 0x86, 0xe4, 0x58, 0xfe, 0xf2, 0x40, 0xee, 0x2a, 0x29, + 0x59, 0x22, 0x21, 0xdf, 0x43, 0x50, 0xee, 0x30, 0x31, 0x8a, 0xe6, 0x48, + 0x9c, 0x1a, 0x29, 0x19, 0x6e, 0x19, 0x1e, 0x31, 0x20, 0x42, 0xe1, 0x20, + 0x6d, 0x40, 0x28, 0xa0, 0xf4, 0x30, 0x5a, 0xe0, 0x20, 0xab, 0x4e, 0x21, + 0xc0, 0xf6, 0x40, 0xb0, 0x2a, 0x20, 0xeb, 0xf5, 0x40, 0xda, 0x2a, 0x51, + 0xc9, 0x61, 0x11, 0xfc, 0x04, 0x41, 0x7b, 0x2e, 0x21, 0x02, 0x21, 0x20, + 0x1b, 0xee, 0x40, 0x94, 0x28, 0x30, 0x66, 0x25, 0x28, 0x90, 0x31, 0x39, + 0xa5, 0x06, 0x51, 0x12, 0x0a, 0x41, 0x38, 0x26, 0x21, 0x56, 0x2a, 0x48, + 0x8f, 0xf4, 0x48, 0x60, 0x22, 0x20, 0xa4, 0x2e, 0x21, 0x00, 0x00, 0x12, + 0x00, 0x13, 0x01, 0x13, 0x02, 0x14, 0x02, 0x14, 0x00, 0x38, 0x00, 0x13, + 0x00, 0x11, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x15, +}; + +static const u8 data_segment_data_w2c_highlights_d75[] = { + 0x02, 0x36, 0xef, 0x01, 0x0a, 0x72, 0xfe, 0x0b, 0x0a, 0x00, 0x06, 0x53, + 0x4c, 0x04, 0x41, 0xf0, 0xab, 0x40, 0x01, 0xe0, 0x18, 0x2d, 0xb1, 0x58, + 0x0f, 0x42, 0x18, 0x40, 0xe9, 0x18, 0xdc, 0x88, 0x30, 0xa1, 0x25, 0x20, + 0x55, 0xcf, 0x18, 0x28, 0xa0, 0x10, 0xf2, 0x24, 0x40, 0x0c, 0x98, 0x38, + 0xc3, 0xaa, 0x30, 0x01, 0x48, 0x18, 0xea, 0x20, 0x18, 0xd4, 0xa7, 0x38, + 0x1f, 0xd6, 0x20, 0x6f, 0x20, 0x18, 0x42, 0x61, 0x20, 0xb0, 0x2a, 0x20, + 0x05, 0x82, 0x38, 0xb6, 0x29, 0x20, 0x19, 0x2b, 0x28, 0x1f, 0xea, 0x20, + 0x4d, 0xf1, 0x18, 0xf3, 0xa5, 0x48, 0x30, 0x20, 0x30, 0x06, 0xc0, 0x10, + 0xa7, 0xb8, 0x38, 0xc4, 0xe9, 0x20, 0xf1, 0xd3, 0x20, 0x4f, 0x21, 0x10, + 0x88, 0xfb, 0x20, 0x00, 0x00, 0x00, 0xa7, 0xa1, 0x30, 0xcb, 0xc0, 0x18, + 0x01, 0xa0, 0x10, 0x00, 0x00, 0x00, 0x74, 0x38, 0x30, 0x68, 0xa1, 0x28, + 0xd5, 0xe0, 0x28, 0x90, 0xa0, 0x18, 0x1c, 0x34, 0x20, 0xff, 0x20, 0x10, + 0xc0, 0xdb, 0x18, 0x60, 0x21, 0x10, 0x6a, 0xf6, 0x28, 0x92, 0xb2, 0x50, + 0xd9, 0xa9, 0x38, 0x7f, 0xe7, 0x20, 0xc0, 0xf6, 0x30, 0x6e, 0x8a, 0x18, + 0x0e, 0xb4, 0x38, 0xab, 0x0e, 0x21, 0x88, 0x41, 0x18, 0xd1, 0xe4, 0x30, + 0xdc, 0xa3, 0x18, 0xf2, 0xa4, 0x18, 0x7b, 0x8e, 0x20, 0xde, 0xe7, 0x28, + 0x46, 0x21, 0x10, 0xdc, 0xc8, 0x18, 0x6a, 0x26, 0x28, 0xad, 0x39, 0x28, + 0x4e, 0x80, 0x30, 0x02, 0x21, 0x20, 0x9e, 0xc9, 0x18, 0x60, 0x52, 0x30, + 0x8c, 0xa1, 0x18, 0x75, 0x39, 0x20, 0x5f, 0x1a, 0x29, 0x00, 0x00, 0x12, + 0x00, 0x13, 0x01, 0x13, 0x02, 0x13, 0x04, 0x13, 0x00, 0x15, 0x00, 0x38, + 0x00, 0x03, +}; + +static const u8 data_segment_data_w2c_highlights_d76[] = { + 0x1d, 0x18, 0x03, 0x16, 0x36, 0x4a, 0x3b, 0x04, 0x02, 0x00, 0x55, 0x00, + 0x6f, 0x17, 0x08, 0x13, 0x04, 0x0f, 0x05, 0x23, 0x0d, 0x00, 0x00, 0xba, + 0x05, 0x52, 0x00, 0x01, 0x6b, 0x0b, 0x10, 0x4b, 0xdc, 0x23, 0x18, 0x05, + 0xd2, 0x20, 0x02, 0x21, 0x20, 0xc4, 0x09, 0x21, 0xff, 0x20, 0x10, 0x60, + 0xc8, 0x30, 0xd6, 0x37, 0x38, 0x6e, 0x81, 0x48, 0x7b, 0x8e, 0x20, 0xea, + 0x20, 0x18, 0xad, 0x39, 0x28, 0xa6, 0x1a, 0x29, 0x01, 0x48, 0x18, 0x68, + 0xc1, 0x28, 0x60, 0xc0, 0x30, 0x28, 0xcd, 0x28, 0x55, 0xef, 0x18, 0x00, + 0x00, 0x00, 0x45, 0xa2, 0x38, 0xdc, 0x88, 0x30, 0xd1, 0x00, 0x21, 0x8c, + 0xc1, 0x18, 0x74, 0x38, 0x30, 0x15, 0x12, 0x31, 0x07, 0x19, 0x31, 0x90, + 0xc0, 0x18, 0x16, 0x14, 0x39, 0x1f, 0x0a, 0x21, 0x5c, 0x06, 0x29, 0xc9, + 0x6c, 0x21, 0xde, 0x07, 0x29, 0xc0, 0x34, 0x28, 0x6a, 0x26, 0x28, 0x1f, + 0xf6, 0x20, 0x46, 0xc1, 0x10, 0x1c, 0x34, 0x20, 0xc0, 0x16, 0x31, 0xb6, + 0x29, 0x20, 0x01, 0x00, 0x19, 0xe9, 0x19, 0x29, 0xc8, 0xb6, 0x40, 0x42, + 0x61, 0x20, 0xd0, 0x25, 0x30, 0x71, 0x08, 0x19, 0x33, 0x16, 0x29, 0x7f, + 0x07, 0x21, 0x4f, 0x21, 0x10, 0x4d, 0xb3, 0x30, 0x9e, 0xe9, 0x18, 0xda, + 0x12, 0x51, 0x19, 0x2b, 0x28, 0xdb, 0x12, 0x49, 0xd1, 0x04, 0x31, 0x44, + 0xce, 0x40, 0x0f, 0x42, 0x18, 0x30, 0x20, 0x30, 0xf1, 0xf3, 0x20, 0x5f, + 0x3a, 0x29, 0x4d, 0x11, 0x19, 0xf2, 0x24, 0x40, 0xe8, 0x19, 0x31, 0x94, + 0xdb, 0x20, 0x64, 0x51, 0x18, 0xf2, 0x24, 0x18, 0x88, 0x1b, 0x21, 0xcb, + 0xd9, 0x30, 0x6f, 0x20, 0x18, 0x51, 0x43, 0x21, 0x4e, 0xc0, 0x30, 0xd8, + 0xc6, 0x40, 0xa1, 0x25, 0x20, 0x11, 0x0b, 0x31, 0xee, 0x19, 0x31, 0x49, + 0x30, 0x20, 0x06, 0xe0, 0x10, 0x5f, 0x36, 0x28, 0x75, 0x39, 0x20, 0xeb, + 0xb5, 0x40, 0x69, 0x16, 0x29, 0x0e, 0xd4, 0x38, 0x60, 0x21, 0x10, 0x88, + 0x41, 0x18, 0xd4, 0xc7, 0x38, 0xaa, 0x63, 0x11, 0xf8, 0x12, 0x29, 0x29, + 0xc0, 0x30, 0x5b, 0x1a, 0x29, 0xf3, 0x65, 0x48, 0xb7, 0xcf, 0x30, 0xcb, + 0xe0, 0x18, 0xf0, 0xcb, 0x30, 0x01, 0x20, 0x10, 0xd5, 0x00, 0x29, 0xdc, + 0xe8, 0x18, 0xe4, 0x17, 0x39, 0x93, 0xc4, 0x48, 0xf4, 0x19, 0x31, 0x8a, + 0xcf, 0x40, 0x04, 0x10, 0x31, 0x5d, 0x06, 0x21, 0xab, 0x2e, 0x21, 0xf9, + 0xe4, 0x18, 0x56, 0x34, 0x40, 0xc0, 0xfb, 0x18, 0x28, 0xc0, 0x10, 0xb0, + 0x2a, 0x20, 0xd9, 0xc9, 0x38, 0xc3, 0x0a, 0x19, 0x00, 0x00, 0x12, 0x00, + 0x13, 0x01, 0x13, 0x02, 0x13, 0x03, 0x13, 0x05, 0x13, 0x00, 0x15, 0x00, + 0x38, 0x00, 0x03, 0x00, 0x07, 0x00, 0x3c, +}; + +static const u8 data_segment_data_w2c_highlights_d77[] = { + 0x0a, 0x05, 0x17, 0x01, 0x09, 0x00, 0x43, 0x23, 0x25, 0x04, 0x04, 0x03, + 0x01, 0x53, 0x07, 0x1e, 0x00, 0x2b, 0x09, 0x0a, 0x02, 0x0a, 0x04, 0x15, + 0x00, 0x00, 0x0a, 0x00, 0x01, 0x04, 0x34, 0x0f, 0xa1, 0x5a, 0x29, 0xb9, + 0x32, 0x29, 0xd8, 0x06, 0x19, 0xe3, 0x55, 0x19, 0xd9, 0x41, 0x19, 0x7f, + 0x27, 0x21, 0x50, 0x48, 0x21, 0x92, 0x42, 0x39, 0x0f, 0x57, 0x29, 0x16, + 0x39, 0x21, 0xd1, 0x20, 0x49, 0x06, 0x48, 0x31, 0xed, 0x63, 0x20, 0x02, + 0x01, 0x21, 0x36, 0x2e, 0x29, 0x98, 0x25, 0x51, 0x42, 0x5b, 0x20, 0x68, + 0xa1, 0x28, 0x6f, 0x00, 0x19, 0x6a, 0x36, 0x29, 0x57, 0x16, 0x29, 0xf3, + 0x05, 0x31, 0x3a, 0x04, 0x21, 0x19, 0x0b, 0x29, 0x96, 0x0f, 0x31, 0x7b, + 0x4e, 0x21, 0x60, 0x42, 0x41, 0xe7, 0x43, 0x21, 0xe0, 0x5b, 0x19, 0x01, + 0x20, 0x19, 0x0e, 0x46, 0x29, 0xa1, 0x05, 0x21, 0x86, 0x16, 0x41, 0xea, + 0x00, 0x19, 0x38, 0x40, 0x19, 0x42, 0x21, 0x21, 0x06, 0xe0, 0x10, 0xd9, + 0xc8, 0x20, 0x7b, 0x05, 0x29, 0x4a, 0x54, 0x19, 0x3b, 0x5b, 0x19, 0x60, + 0x00, 0x31, 0x29, 0x3a, 0x28, 0x9f, 0x29, 0x29, 0xc4, 0x33, 0x49, 0xa3, + 0x49, 0x49, 0xee, 0x5a, 0x19, 0xc3, 0x2a, 0x31, 0x4f, 0x01, 0x11, 0x5f, + 0x16, 0x29, 0xc9, 0x7b, 0x18, 0xea, 0x08, 0x41, 0x3f, 0x43, 0x70, 0x49, + 0x10, 0x21, 0x01, 0xe8, 0x18, 0x4e, 0x20, 0x19, 0x76, 0x53, 0x19, 0x24, + 0x12, 0x29, 0xcb, 0x4c, 0x51, 0xc3, 0x21, 0x19, 0xf9, 0xe4, 0x18, 0xd8, + 0x42, 0x19, 0xa6, 0xce, 0x30, 0x43, 0x32, 0x39, 0xee, 0x26, 0x20, 0xd6, + 0x17, 0x39, 0xd0, 0x05, 0x31, 0xc4, 0x29, 0x21, 0xc7, 0x41, 0x31, 0x01, + 0xe0, 0x10, 0x30, 0x44, 0x40, 0xab, 0x4d, 0x21, 0x5f, 0x4f, 0x29, 0x7c, + 0x81, 0x18, 0x30, 0x00, 0x31, 0x64, 0x40, 0x19, 0xde, 0x27, 0x29, 0xbb, + 0xe1, 0x10, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x13, 0x01, + 0x13, 0x02, 0x14, 0x00, 0x15, 0x00, 0x12, 0x00, 0x38, 0x00, 0x0e, +}; + +static const u8 data_segment_data_w2c_highlights_d78[] = { + 0x08, 0x01, 0x35, 0x01, 0x02, 0x0e, 0x18, 0xf3, 0xc4, 0x29, 0x20, 0x13, + 0x3a, 0x28, 0xda, 0x2e, 0x38, 0x9b, 0x33, 0x40, 0x3d, 0x21, 0x30, 0xe8, + 0x27, 0x30, 0xde, 0x38, 0x30, 0x72, 0x37, 0x38, 0xe8, 0x27, 0x50, 0xde, + 0x27, 0x28, 0x00, 0x00, 0x00, 0x1b, 0x3a, 0x28, 0x26, 0x3b, 0x20, 0xa0, + 0x27, 0x38, 0x7f, 0x2e, 0x28, 0x79, 0x37, 0x38, 0xde, 0x38, 0x28, 0xe5, + 0x20, 0x58, 0x42, 0x3a, 0x28, 0x01, 0x20, 0x18, 0x60, 0x37, 0x30, 0xc3, + 0x31, 0x50, 0x94, 0x3b, 0x20, 0x6a, 0x30, 0x50, 0x5f, 0x35, 0x40, 0xb6, + 0x3b, 0x18, 0xa8, 0x31, 0x50, 0x00, 0x00, 0x38, +}; + +static const u8 data_segment_data_w2c_highlights_d79[] = { + 0x02, 0x05, 0x06, 0x0d, 0x2d, 0x3b, 0x20, 0x4e, 0x37, 0x38, 0x1b, 0x3a, + 0x28, 0x79, 0x37, 0x38, 0xe8, 0x27, 0x30, 0x2e, 0x3a, 0x28, 0xda, 0x2e, + 0x38, 0x33, 0x3a, 0x28, 0x47, 0x37, 0x38, 0x72, 0x37, 0x38, 0x00, 0x00, + 0x38, +}; + +static const u8 data_segment_data_w2c_highlights_d80[] = { + 0x03, 0x02, 0x00, 0x02, 0x08, 0x0f, 0x05, 0x24, 0x06, 0x07, 0x00, 0x3c, + 0x06, 0x03, 0x01, 0xab, 0x2e, 0x20, 0x3a, 0xa4, 0x20, 0xed, 0x63, 0x20, + 0x36, 0x58, 0x39, 0xb6, 0xa9, 0x20, 0xac, 0xc7, 0x18, 0x02, 0xa1, 0x20, + 0x28, 0x80, 0x10, 0x6e, 0xea, 0x30, 0x68, 0x01, 0x51, 0x5e, 0x2c, 0x39, + 0xea, 0xa0, 0x18, 0x9e, 0x5b, 0x18, 0x19, 0xab, 0x28, 0x06, 0x80, 0x10, + 0xf9, 0x84, 0x18, 0x51, 0x43, 0x20, 0xf2, 0xe4, 0x20, 0xbb, 0x81, 0x10, + 0x5f, 0x3a, 0x28, 0x86, 0xb6, 0x40, 0x36, 0x4a, 0x18, 0x24, 0xb2, 0x50, + 0xa9, 0x5b, 0x18, 0x0f, 0x77, 0x28, 0x4f, 0xa1, 0x10, 0x68, 0x01, 0x29, + 0x49, 0xb0, 0x20, 0x01, 0x88, 0x18, 0x24, 0xb2, 0x28, 0xb4, 0x40, 0x10, + 0x29, 0x20, 0x31, 0x57, 0xb6, 0x28, 0x26, 0x05, 0x21, 0xd0, 0xa5, 0x30, + 0x6a, 0xa6, 0x28, 0x5c, 0xc9, 0x28, 0x01, 0x80, 0x10, 0x30, 0x40, 0x31, + 0x5f, 0xb6, 0x28, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x15, + 0x00, 0x12, 0x00, 0x13, 0x00, 0x13, 0x01, 0x13, 0x02, 0x11, 0x00, 0x0e, + +}; + +static const u8 data_segment_data_w2c_highlights_d81[] = { + 0x1b, 0x14, 0x3c, 0x01, 0xab, 0x2e, 0x20, 0xe3, 0x58, 0x18, 0xfb, 0x85, + 0x20, 0xb9, 0x88, 0x40, 0x7c, 0x64, 0x58, 0xbd, 0x60, 0x58, 0x5f, 0x3a, + 0x28, 0xc0, 0x60, 0x40, 0x52, 0x81, 0x40, 0x00, 0x00, 0x00, 0xc9, 0x84, + 0x40, 0x87, 0x88, 0x58, 0x57, 0x92, 0x50, 0x3c, 0x87, 0x60, 0x51, 0x43, + 0x20, 0x6b, 0x55, 0x18, 0x3d, 0x57, 0x18, 0xc5, 0x84, 0x60, 0x00, 0x00, + 0x03, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x31, +}; + +static const u8 data_segment_data_w2c_highlights_d82[] = { + 0x01, 0x09, 0x17, 0x36, 0x20, 0x00, 0x0d, 0x00, 0x07, 0x00, 0x00, 0x01, + 0x21, 0x0b, 0x06, 0x08, 0x00, 0x39, 0x08, 0x16, 0x02, 0x06, 0x01, 0x04, + 0x11, 0x00, 0x0d, 0x05, 0x15, 0x0a, 0x37, 0x06, 0x3d, 0x45, 0xa0, 0xd1, + 0xb6, 0x38, 0x88, 0xad, 0x78, 0x85, 0x85, 0x68, 0xdf, 0xa3, 0x50, 0x22, + 0xa7, 0x60, 0x60, 0x41, 0x10, 0xeb, 0x43, 0x20, 0xe5, 0xba, 0x28, 0xab, + 0x2e, 0x20, 0x15, 0xb6, 0x20, 0xd0, 0xa3, 0x68, 0xc4, 0x89, 0x20, 0x2f, + 0xb8, 0x38, 0x02, 0x41, 0x20, 0x68, 0xb4, 0x48, 0xe3, 0xa3, 0x18, 0x86, + 0x56, 0x40, 0x17, 0xa2, 0x78, 0xe5, 0xa1, 0x38, 0x93, 0xa7, 0x70, 0x1d, + 0xa5, 0x38, 0xea, 0x40, 0x18, 0x42, 0xb3, 0x30, 0xcd, 0xae, 0x70, 0x5c, + 0xa9, 0x28, 0xae, 0xa5, 0x30, 0x2c, 0x8a, 0x58, 0x55, 0x86, 0x58, 0x19, + 0x4b, 0x28, 0x2b, 0xae, 0x40, 0x03, 0xb4, 0x48, 0x5f, 0x3a, 0x28, 0xfa, + 0xa6, 0x68, 0xee, 0xaa, 0x48, 0x04, 0xbb, 0x20, 0x26, 0xa5, 0x20, 0x4e, + 0x60, 0x30, 0x37, 0x84, 0x60, 0x60, 0xa2, 0x88, 0x5d, 0x86, 0x30, 0x01, + 0xa0, 0x10, 0x95, 0x80, 0xc0, 0x5c, 0x86, 0x38, 0xe0, 0xa6, 0x78, 0xad, + 0xa1, 0x30, 0x94, 0x9b, 0x20, 0xde, 0x87, 0x28, 0x95, 0xa2, 0x48, 0x41, + 0xb6, 0x30, 0x68, 0xa0, 0x40, 0x4f, 0x41, 0x10, 0x73, 0xa7, 0x30, 0x40, + 0x58, 0x30, 0x01, 0x80, 0x18, 0xc9, 0xba, 0x28, 0xe4, 0xa2, 0x80, 0x9a, + 0xb7, 0x28, 0x18, 0x41, 0x70, 0x43, 0xa4, 0x70, 0xac, 0xac, 0x40, 0xfa, + 0xa3, 0x70, 0xa7, 0xa8, 0x30, 0x45, 0x42, 0x38, 0x04, 0x90, 0x30, 0x9c, + 0xba, 0x28, 0xd7, 0xa0, 0x78, 0x1b, 0xae, 0x40, 0x24, 0x52, 0x28, 0xd0, + 0x45, 0x30, 0x4b, 0x49, 0x30, 0x36, 0x84, 0x68, 0x30, 0xb7, 0x20, 0x03, + 0x57, 0x38, 0x35, 0x40, 0x98, 0x55, 0xa9, 0x38, 0xef, 0xa1, 0x38, 0x21, + 0x43, 0xa8, 0x75, 0xa1, 0x40, 0x36, 0x85, 0x20, 0xf0, 0xa7, 0x38, 0x00, + 0x00, 0x03, 0x00, 0x12, 0x00, 0x13, 0x00, 0x38, 0x00, 0x11, +}; + +static const u8 data_segment_data_w2c_highlights_d83[] = { + 0x8d, 0x26, 0x0b, 0x03, 0x0f, 0x00, 0x04, 0x0d, 0x1d, 0x16, 0x0c, 0x00, + 0x18, 0x02, 0x0c, 0x03, 0x01, 0x03, 0x74, 0x12, 0x1f, 0x1e, 0x01, 0x00, + 0x64, 0x06, 0x11, 0x20, 0x5f, 0x04, 0x12, 0x40, 0x38, 0x81, 0x30, 0x36, + 0xaa, 0x18, 0x50, 0x84, 0x68, 0xd1, 0x56, 0x38, 0x70, 0x84, 0x28, 0x00, + 0x00, 0x00, 0x74, 0x84, 0x48, 0x97, 0x91, 0x50, 0x04, 0x5b, 0x20, 0x1c, + 0x83, 0x28, 0xd1, 0x2a, 0x58, 0x3d, 0x8d, 0x60, 0xe3, 0x43, 0x18, 0x00, + 0x60, 0x58, 0x11, 0x83, 0x50, 0x50, 0x6b, 0x80, 0xd1, 0x6b, 0x80, 0xc7, + 0x61, 0xa8, 0x83, 0x90, 0x38, 0xda, 0x64, 0xa0, 0x32, 0x74, 0x48, 0xac, + 0x80, 0x38, 0xbc, 0x62, 0xa8, 0xe5, 0x41, 0x38, 0x49, 0x8d, 0x78, 0x94, + 0x93, 0x40, 0x16, 0x65, 0x70, 0x08, 0x6c, 0x80, 0xb4, 0x6c, 0x80, 0x13, + 0x84, 0x60, 0x9a, 0x57, 0x28, 0x45, 0x8b, 0x58, 0x5c, 0x49, 0x28, 0x01, + 0x45, 0x40, 0x7e, 0x90, 0x30, 0x13, 0x84, 0x28, 0x9c, 0x5a, 0x28, 0x40, + 0x62, 0xc0, 0x11, 0x83, 0x80, 0x06, 0x93, 0x48, 0x7c, 0x95, 0x40, 0xc2, + 0x60, 0x60, 0xae, 0x90, 0x38, 0x70, 0x82, 0x38, 0x5b, 0x67, 0x98, 0x27, + 0x68, 0x90, 0x60, 0x40, 0x30, 0xb4, 0x72, 0x50, 0x92, 0x93, 0x20, 0xdf, + 0x41, 0x70, 0x9e, 0x90, 0x58, 0x6a, 0x84, 0x58, 0xc7, 0x61, 0x70, 0x2d, + 0x82, 0x98, 0xb4, 0xa0, 0x10, 0xd2, 0x91, 0x50, 0x20, 0x84, 0x88, 0x0e, + 0x9a, 0x28, 0x20, 0x8f, 0x68, 0x11, 0x95, 0x40, 0x2f, 0x8d, 0x78, 0x79, + 0x6d, 0x78, 0x01, 0x40, 0x10, 0xf0, 0x47, 0x38, 0x33, 0x82, 0x30, 0x0e, + 0x93, 0x28, 0x41, 0x68, 0x90, 0x61, 0x84, 0x70, 0x40, 0x8b, 0x80, 0xe2, + 0x91, 0x10, 0x41, 0x56, 0x30, 0xda, 0x64, 0x68, 0x6c, 0x67, 0x68, 0x50, + 0x85, 0x40, 0x25, 0x82, 0x48, 0x00, 0x60, 0xe8, 0x38, 0x8d, 0x30, 0x03, + 0x83, 0x28, 0xac, 0x80, 0x90, 0x6d, 0x25, 0x58, 0x61, 0x84, 0x40, 0xd9, + 0x98, 0x30, 0x00, 0x00, 0x00, 0x38, 0x83, 0x40, 0xab, 0x82, 0x88, 0x60, + 0x90, 0x58, 0x15, 0x56, 0x20, 0xe2, 0x91, 0x18, 0x12, 0x93, 0x30, 0x16, + 0x93, 0x30, 0x07, 0x83, 0x58, 0x8e, 0x93, 0x40, 0xdb, 0x91, 0x48, 0xa7, + 0x82, 0xa8, 0xf2, 0x9b, 0x10, 0x00, 0x00, 0x11, 0x01, 0x11, 0x00, 0x01, + 0x00, 0x3c, 0x00, 0x07, +}; + +static const u8 data_segment_data_w2c_highlights_d84[] = { + 0x04, 0x09, 0x00, 0x05, 0x03, 0x0d, 0xa6, 0x57, 0xd8, 0x86, 0x40, 0xa9, + 0x94, 0x18, 0x29, 0xda, 0x28, 0x63, 0x96, 0x30, 0x7a, 0x47, 0x10, 0xeb, + 0x23, 0x20, 0xa6, 0xae, 0x30, 0x5c, 0x89, 0x28, 0x28, 0xa0, 0x10, 0xae, + 0x2e, 0x20, 0x02, 0x21, 0x20, 0x08, 0x8b, 0x20, 0xee, 0xc6, 0x20, 0x30, + 0x20, 0x30, 0x31, 0x2c, 0x20, 0x4f, 0x21, 0x10, 0xb0, 0xfb, 0x18, 0x64, + 0x31, 0x18, 0x88, 0x81, 0x18, 0x72, 0x3a, 0x28, 0x83, 0x80, 0x48, 0x79, + 0x93, 0x30, 0x68, 0x8a, 0x20, 0x42, 0x61, 0x20, 0x0b, 0x86, 0x28, 0x00, + 0x00, 0x12, 0x00, 0x13, 0x01, 0x13, 0x02, 0x13, 0x00, 0x14, 0x00, 0x03, + 0x00, 0x07, +}; + +static const u8 data_segment_data_w2c_highlights_d85[] = { + 0x16, 0x04, 0x55, 0x14, 0x03, 0x0e, 0x07, 0x00, 0x13, 0x4b, 0xf5, 0x01, + 0x15, 0x01, 0x00, 0x00, 0x4b, 0x29, 0x30, 0x2f, 0x2c, 0x20, 0xe4, 0xf7, + 0x38, 0x3d, 0x37, 0x19, 0x39, 0xf2, 0x50, 0x36, 0xe5, 0x20, 0x64, 0x2f, + 0x58, 0xf2, 0x44, 0x20, 0xc4, 0xe9, 0x20, 0xb2, 0xe5, 0x28, 0xd1, 0x26, + 0x28, 0x45, 0x22, 0x38, 0xee, 0xf9, 0x30, 0xea, 0x20, 0x18, 0xb9, 0x32, + 0x28, 0xe0, 0xf3, 0x48, 0x5d, 0xe6, 0x20, 0x73, 0xf5, 0x20, 0xd0, 0x25, + 0x30, 0xcc, 0xba, 0x20, 0xac, 0xa7, 0x18, 0x4f, 0x21, 0x10, 0x02, 0x21, + 0x20, 0xf8, 0xf2, 0x28, 0xeb, 0x23, 0x20, 0x76, 0xf3, 0x18, 0xeb, 0xf7, + 0x38, 0xd1, 0xe4, 0x30, 0xf4, 0xf9, 0x30, 0x5f, 0x1a, 0x29, 0xab, 0x0e, + 0x21, 0xd1, 0xe0, 0x20, 0x42, 0x61, 0x20, 0x93, 0xa4, 0x48, 0xe8, 0xf9, + 0x30, 0x5c, 0xe6, 0x28, 0xbe, 0x8b, 0x38, 0x2f, 0x2c, 0x10, 0xa6, 0xce, + 0x30, 0x43, 0xf2, 0x50, 0x0f, 0x25, 0x30, 0x5c, 0xa9, 0x28, 0x42, 0xf4, + 0x38, 0x7c, 0x3b, 0x21, 0x01, 0xe0, 0x18, 0x4e, 0xa0, 0x30, 0x24, 0x32, + 0x28, 0xe9, 0xf9, 0x28, 0x33, 0xf6, 0x28, 0x86, 0x36, 0x40, 0xd9, 0xa1, + 0x18, 0x00, 0x00, 0x12, 0x00, 0x13, 0x01, 0x13, 0x02, 0x13, 0x03, 0x13, + 0x00, 0x14, 0x00, 0x38, 0x00, 0x03, 0x00, 0x07, +}; + +static const u8 data_segment_data_w2c_highlights_d86[] = { + 0x01, 0x07, 0x01, 0x1d, 0x03, 0x0f, 0x00, 0x05, 0x3a, 0x54, 0x40, 0xb0, + 0x56, 0x40, 0xb4, 0x6b, 0x30, 0x93, 0x24, 0x48, 0x26, 0x25, 0x20, 0x51, + 0xa3, 0x20, 0x47, 0xd7, 0x28, 0xa2, 0x42, 0x28, 0xea, 0x70, 0x30, 0xa1, + 0x3a, 0x28, 0xe8, 0xc7, 0x30, 0x42, 0x21, 0x20, 0x5f, 0x9a, 0x28, 0xb2, + 0x47, 0x60, 0x46, 0x20, 0x10, 0x37, 0xd7, 0x38, 0xab, 0x8e, 0x20, 0xde, + 0x30, 0x30, 0x97, 0x6b, 0x50, 0xe5, 0x3a, 0x28, 0x33, 0x27, 0x50, 0x69, + 0xd0, 0x10, 0x54, 0x70, 0x48, 0x27, 0xc3, 0x18, 0x00, 0x00, 0x11, 0x01, + 0x11, 0x02, 0x11, 0x00, 0x03, 0x00, 0x07, 0x00, 0x38, +}; + +static const u8 data_segment_data_w2c_highlights_d87[] = { + 0x08, 0x5e, 0x69, 0x06, 0x07, 0x38, 0x0d, 0x24, 0x1a, 0x03, 0x03, 0x13, + 0x1f, 0x1b, 0x01, 0x29, 0x80, 0x30, 0xab, 0x2e, 0x21, 0x4f, 0x21, 0x10, + 0x93, 0x64, 0x48, 0x00, 0x00, 0x00, 0x68, 0x61, 0x28, 0x0f, 0x77, 0x29, + 0xd6, 0x37, 0x38, 0xac, 0x87, 0x18, 0x9c, 0x8a, 0x60, 0x45, 0x22, 0x38, + 0x28, 0xe0, 0x10, 0x02, 0x21, 0x20, 0x6f, 0x20, 0x18, 0xc4, 0x87, 0x48, + 0x30, 0x85, 0x30, 0x33, 0x87, 0x50, 0x32, 0x6e, 0x28, 0xe8, 0x8e, 0x48, + 0x25, 0x0c, 0x29, 0x30, 0x20, 0x30, 0x54, 0x61, 0x11, 0xcd, 0xec, 0x50, + 0x94, 0x1b, 0x21, 0x18, 0x0d, 0x21, 0x51, 0x43, 0x21, 0xde, 0x07, 0x29, + 0xc4, 0x09, 0x39, 0x60, 0x21, 0x10, 0x90, 0xc0, 0x18, 0x01, 0x00, 0x19, + 0x59, 0x2f, 0x28, 0x01, 0xe0, 0x10, 0x59, 0x2f, 0x30, 0xd1, 0x00, 0x21, + 0xc9, 0x6c, 0x21, 0xbe, 0xab, 0x38, 0x1b, 0x8e, 0x40, 0xe7, 0x89, 0x28, + 0x04, 0x10, 0x31, 0x4b, 0x29, 0x30, 0xeb, 0x95, 0x40, 0x38, 0x39, 0x28, + 0x5e, 0x8c, 0x38, 0x24, 0x32, 0x28, 0xcb, 0x99, 0x30, 0x86, 0x36, 0x40, + 0xeb, 0x23, 0x20, 0xa6, 0xae, 0x30, 0x77, 0x8b, 0x40, 0x26, 0x65, 0x20, + 0x19, 0x2b, 0x28, 0xd0, 0x25, 0x30, 0x1f, 0x0a, 0x21, 0x5f, 0x3a, 0x29, + 0xea, 0x20, 0x18, 0x7c, 0x41, 0x18, 0x5f, 0x36, 0x28, 0x63, 0x72, 0x30, + 0xd4, 0x87, 0x38, 0x00, 0x00, 0x12, 0x00, 0x13, 0x01, 0x13, 0x02, 0x13, + 0x00, 0x14, 0x00, 0x11, 0x00, 0x15, 0x00, 0x38, 0x00, 0x03, 0x00, 0x07, + 0x00, 0x3c, +}; + +static const u8 data_segment_data_w2c_highlights_d88[] = { + 0x2a, 0x00, 0x00, 0x01, 0x10, 0x04, 0x17, 0x69, 0x0a, 0x07, 0x00, 0x3e, + 0x27, 0x5c, 0x2f, 0x1e, 0x46, 0xa1, 0x10, 0xe3, 0xd8, 0x30, 0x38, 0xfb, + 0x20, 0xeb, 0xa3, 0x20, 0x52, 0xd9, 0x30, 0x9c, 0xae, 0x40, 0x29, 0x3a, + 0x28, 0x21, 0xd8, 0x38, 0xd8, 0xe2, 0x30, 0x71, 0xe8, 0x40, 0xf4, 0xad, + 0x28, 0x4b, 0x41, 0x48, 0x86, 0xfa, 0x28, 0x5c, 0xe9, 0x28, 0xe0, 0xfb, + 0x18, 0x46, 0x56, 0x30, 0xb2, 0xe5, 0x28, 0x60, 0xa1, 0x10, 0xb0, 0xaa, + 0x20, 0x7b, 0xe1, 0x10, 0x64, 0xf8, 0x20, 0x6b, 0xe8, 0x40, 0x4f, 0xa1, + 0x10, 0x06, 0x81, 0x28, 0xd6, 0x65, 0x20, 0x28, 0xc0, 0x10, 0x81, 0xfa, + 0x28, 0x98, 0xb8, 0x18, 0x00, 0x00, 0x00, 0x35, 0xf9, 0x30, 0x01, 0xa0, + 0x10, 0xf9, 0xd7, 0x38, 0x45, 0xc2, 0x38, 0x6c, 0xfb, 0x20, 0x10, 0xe6, + 0x48, 0x59, 0xe2, 0x20, 0xe3, 0xd8, 0x28, 0xa2, 0xf4, 0x20, 0x42, 0x61, + 0x20, 0x01, 0x65, 0x40, 0xc7, 0xe1, 0x30, 0x1b, 0xfb, 0x20, 0xb8, 0xca, + 0x20, 0x00, 0x00, 0x00, 0x88, 0x81, 0x18, 0x5f, 0xef, 0x28, 0x00, 0x00, + 0x00, 0x02, 0xa1, 0x20, 0x51, 0xe3, 0x20, 0xee, 0x26, 0x20, 0xbf, 0x68, + 0x38, 0xdc, 0x48, 0x30, 0x79, 0xd9, 0x30, 0xd0, 0xe5, 0x30, 0x5a, 0xee, + 0x20, 0x94, 0xc8, 0x30, 0x68, 0x61, 0x28, 0xa6, 0x4e, 0x30, 0xd9, 0xe1, + 0x18, 0x00, 0x00, 0x03, 0x00, 0x14, 0x00, 0x13, 0x00, 0x12, 0x01, 0x12, + 0x00, 0x11, 0x00, 0x0e, +}; + +static const u8 data_segment_data_w2c_highlights_d89[] = { + 0x01, 0x57, 0x03, 0x0d, 0x06, 0x04, 0x2e, 0x04, 0xa3, 0xc1, 0x07, 0x01, + 0x0c, 0x0f, 0x13, 0x02, 0x93, 0x64, 0x48, 0x4f, 0xcc, 0x30, 0x72, 0xd2, + 0x50, 0xad, 0xc1, 0x30, 0xeb, 0x43, 0x20, 0x00, 0x00, 0x00, 0xea, 0x40, + 0x18, 0x45, 0x42, 0x38, 0x9c, 0xc2, 0x48, 0x01, 0xa0, 0x18, 0x00, 0x00, + 0x00, 0x2f, 0xd8, 0x38, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x30, 0x02, 0x41, + 0x20, 0x6e, 0x81, 0x48, 0xe1, 0xc4, 0x30, 0x5f, 0x3a, 0x28, 0xc9, 0xec, + 0x20, 0x77, 0xd6, 0x28, 0x60, 0x41, 0x10, 0x4e, 0x60, 0x30, 0x5c, 0xc9, + 0x28, 0xf0, 0xcb, 0x30, 0xc8, 0xc5, 0x48, 0x86, 0x56, 0x40, 0x19, 0x4b, + 0x28, 0x60, 0xc0, 0x80, 0x4f, 0x41, 0x10, 0xab, 0x2e, 0x20, 0xd0, 0xc3, + 0x68, 0xd1, 0xa4, 0x30, 0x70, 0xa6, 0x68, 0x85, 0xb9, 0x30, 0x12, 0xb9, + 0x28, 0x29, 0xc0, 0x30, 0x26, 0x6a, 0x38, 0xe8, 0xcc, 0x40, 0x94, 0xbb, + 0x20, 0xde, 0xa7, 0x28, 0x36, 0xa5, 0x20, 0xad, 0xa1, 0x38, 0xfd, 0xa1, + 0x30, 0x75, 0xc1, 0x40, 0x3a, 0xc4, 0x20, 0xc4, 0xa9, 0x20, 0x55, 0x69, + 0x38, 0xea, 0xda, 0x28, 0x00, 0x00, 0x00, 0x87, 0xca, 0x60, 0x04, 0xb0, + 0x30, 0x1b, 0xce, 0x40, 0xc1, 0x77, 0x38, 0xa2, 0xc8, 0x58, 0xe5, 0xc1, + 0x38, 0x0c, 0xbb, 0x20, 0x24, 0x52, 0x28, 0x4b, 0x49, 0x30, 0xd0, 0x45, + 0x30, 0xde, 0xa7, 0x48, 0xa7, 0xc8, 0x30, 0x03, 0x57, 0x38, 0x01, 0xc0, + 0x10, 0x68, 0x61, 0x28, 0xe3, 0xc3, 0x18, 0x9c, 0xda, 0x28, 0x7f, 0xc3, + 0x78, 0x00, 0x00, 0x03, 0x00, 0x12, 0x00, 0x13, 0x01, 0x13, 0x02, 0x38, + 0x00, 0x11, 0x00, 0x3c, +}; + +static const u8 data_segment_data_w2c_highlights_d90[] = { + 0x03, 0x00, 0x2a, 0x35, 0x12, 0x01, 0x42, 0x12, 0x19, 0x00, 0x00, 0x16, + 0x81, 0x4c, 0x9e, 0x73, 0x29, 0xa0, 0x30, 0xde, 0xc7, 0x28, 0x24, 0x32, + 0x28, 0x1f, 0xca, 0x20, 0x68, 0x41, 0x28, 0xd1, 0xc0, 0x20, 0x04, 0xd0, + 0x30, 0x9c, 0xaa, 0x60, 0x60, 0x21, 0x10, 0x38, 0x39, 0x28, 0x86, 0x36, + 0x40, 0x6f, 0xae, 0x30, 0x0f, 0x37, 0x29, 0xe8, 0xae, 0x48, 0x5c, 0xa9, + 0x28, 0x4b, 0x29, 0x30, 0x6f, 0x20, 0x18, 0x4f, 0x21, 0x10, 0x26, 0x45, + 0x20, 0x02, 0x21, 0x20, 0xeb, 0x23, 0x20, 0xcb, 0xb9, 0x30, 0x59, 0xaf, + 0x30, 0x77, 0xab, 0x40, 0x5f, 0x36, 0x28, 0x1f, 0xac, 0x38, 0x59, 0x2f, + 0x28, 0x90, 0x40, 0x19, 0x93, 0x44, 0x48, 0x30, 0x20, 0x30, 0x00, 0x00, + 0x00, 0xc9, 0x2c, 0x21, 0x5f, 0xfa, 0x28, 0xe7, 0xa9, 0x28, 0xeb, 0xb5, + 0x40, 0x33, 0xa7, 0x50, 0xc4, 0xa7, 0x48, 0x63, 0x72, 0x31, 0xab, 0xee, + 0x20, 0x2f, 0x2c, 0x20, 0xcd, 0x4c, 0x51, 0x01, 0xc0, 0x18, 0x1b, 0xae, + 0x40, 0xd4, 0xa7, 0x38, 0xbe, 0x6b, 0x38, 0xc4, 0xc9, 0x38, 0xd6, 0x37, + 0x38, 0x00, 0x00, 0x00, 0x5e, 0xac, 0x38, 0x45, 0x22, 0x38, 0x51, 0x03, + 0x21, 0x18, 0xcd, 0x20, 0x00, 0x00, 0x00, 0x25, 0xcc, 0x28, 0xa6, 0x8e, + 0x30, 0xd0, 0x25, 0x30, 0x94, 0xdb, 0x20, 0x19, 0x2b, 0x28, 0xea, 0x20, + 0x18, 0x30, 0xa5, 0x30, 0xac, 0xa7, 0x18, 0x00, 0x00, 0x12, 0x00, 0x13, + 0x01, 0x13, 0x02, 0x14, 0x00, 0x13, 0x00, 0x38, 0x00, 0x03, 0x00, 0x07, + 0x00, 0x3c, 0x00, 0x15, 0x00, 0x13, 0x05, +}; + +static const u8 data_segment_data_w2c_highlights_d91[] = { + 0x0c, 0x00, 0x00, 0x1e, 0x00, 0x02, 0x33, 0x00, 0x00, 0x00, 0x05, 0x03, + 0x2b, 0x30, 0x00, 0x05, 0xa1, 0x3b, 0x19, 0x4f, 0x21, 0x10, 0x4e, 0x60, + 0x30, 0x10, 0x26, 0x29, 0xf2, 0x44, 0x40, 0xdc, 0x21, 0x11, 0xa6, 0xce, + 0x30, 0x86, 0x36, 0x40, 0x6c, 0x2c, 0x30, 0x86, 0xb4, 0x48, 0x5c, 0xa9, + 0x28, 0x01, 0xe0, 0x10, 0xea, 0x20, 0x18, 0x4f, 0xcc, 0x30, 0x83, 0x20, + 0x11, 0x1e, 0xe5, 0x18, 0xcb, 0xd9, 0x30, 0x6f, 0x20, 0x18, 0xdc, 0x23, + 0x18, 0x13, 0x38, 0x39, 0x19, 0x2b, 0x28, 0xad, 0x39, 0x28, 0x45, 0xb3, + 0x28, 0xd9, 0xa9, 0x38, 0x60, 0x21, 0x10, 0x7c, 0x38, 0x28, 0x42, 0x61, + 0x20, 0x5f, 0x1a, 0x29, 0x71, 0xd3, 0x28, 0x88, 0x21, 0x18, 0x02, 0x21, + 0x20, 0x00, 0x00, 0x00, 0xab, 0x0e, 0x21, 0xc6, 0x2e, 0x39, 0x5e, 0xa2, + 0x28, 0xd6, 0x37, 0x38, 0xdc, 0x88, 0x30, 0x38, 0x39, 0x28, 0xab, 0x3b, + 0x19, 0xd0, 0x25, 0x30, 0x0b, 0x46, 0x28, 0xeb, 0xb5, 0x40, 0x00, 0x00, + 0x00, 0x24, 0x32, 0x28, 0x00, 0x00, 0x00, 0x15, 0x91, 0x50, 0x60, 0xa0, + 0x30, 0x00, 0x00, 0x12, 0x00, 0x13, 0x01, 0x13, 0x02, 0x13, 0x03, 0x13, + 0x00, 0x14, 0x00, 0x15, 0x00, 0x03, 0x00, 0x07, +}; + +static const u8 data_segment_data_w2c_highlights_d92[] = { + 0x15, 0x00, 0x36, 0x12, 0x20, 0x00, 0x0b, 0x14, 0x65, 0x54, 0x7d, 0x00, + 0x00, 0x02, 0x15, 0x22, 0x00, 0x00, 0x00, 0xb9, 0xf5, 0x40, 0x5f, 0x3a, + 0x29, 0xc9, 0x6c, 0x21, 0xa2, 0x11, 0x31, 0x98, 0x1b, 0x19, 0xa1, 0xe6, + 0x38, 0xc0, 0x90, 0x58, 0xac, 0x87, 0x18, 0xd1, 0xe0, 0x10, 0x74, 0x65, + 0x48, 0x86, 0x36, 0x40, 0x8c, 0x81, 0x18, 0x2d, 0x1b, 0x21, 0xcd, 0xf3, + 0x48, 0x37, 0xf1, 0x38, 0x5c, 0xe9, 0x28, 0x25, 0x1a, 0x21, 0x00, 0x00, + 0x00, 0xc3, 0x83, 0x20, 0x83, 0x15, 0x39, 0xb6, 0x29, 0x20, 0x38, 0x39, + 0x28, 0x31, 0x1b, 0x21, 0x00, 0x00, 0x00, 0xcb, 0xf9, 0x30, 0xea, 0x20, + 0x18, 0x97, 0xfa, 0x28, 0xa6, 0xae, 0x30, 0x00, 0x00, 0x00, 0xd6, 0xe5, + 0x20, 0x27, 0x03, 0x19, 0x60, 0xe8, 0x30, 0x19, 0x2b, 0x28, 0x6f, 0x20, + 0x18, 0x37, 0x17, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0xe9, + 0x28, 0xbf, 0xe3, 0x40, 0xbb, 0xc1, 0x10, 0xbe, 0xab, 0x38, 0x28, 0xc0, + 0x10, 0xe8, 0x07, 0x31, 0x0f, 0x77, 0x29, 0x4f, 0x21, 0x10, 0x01, 0xc0, + 0x10, 0x44, 0xee, 0x40, 0x93, 0x64, 0x48, 0xc8, 0xf6, 0x40, 0xac, 0xe7, + 0x30, 0xe8, 0xee, 0x48, 0x68, 0x61, 0x28, 0x60, 0x21, 0x10, 0xd6, 0x37, + 0x38, 0xd4, 0xe7, 0x38, 0xe3, 0xf8, 0x28, 0xab, 0x2e, 0x21, 0x24, 0x32, + 0x28, 0x51, 0x43, 0x21, 0xc3, 0x6a, 0x30, 0xe3, 0xe3, 0x18, 0x7b, 0xee, + 0x20, 0x47, 0x17, 0x29, 0xeb, 0xf5, 0x40, 0x6f, 0xee, 0x30, 0x26, 0x85, + 0x20, 0x02, 0x21, 0x20, 0xd0, 0x25, 0x30, 0x38, 0x0a, 0x21, 0xf2, 0x44, + 0x18, 0x59, 0x2f, 0x28, 0x00, 0x00, 0x12, 0x00, 0x13, 0x01, 0x13, 0x02, + 0x13, 0x00, 0x14, 0x00, 0x15, 0x00, 0x11, 0x04, 0x38, 0x00, 0x03, 0x00, + 0x07, 0x00, 0x3c, +}; + +static const u8 data_segment_data_w2c_highlights_d93[] = { + 0x51, 0x00, 0x08, 0x19, 0x75, 0x04, 0x1c, 0x08, 0x03, 0x03, 0x11, 0x01, + 0x00, 0x2a, 0x0c, 0x16, 0x0b, 0x03, 0x00, 0x03, 0x17, 0x00, 0x01, 0x04, + 0x0b, 0x00, 0x00, 0x06, 0x00, 0x04, 0x96, 0x26, 0x50, 0x18, 0x9b, 0x20, + 0x82, 0x51, 0x48, 0x8d, 0xe9, 0x60, 0xa7, 0x6b, 0x31, 0x35, 0x7b, 0x20, + 0x7b, 0x6c, 0x28, 0x7f, 0x66, 0x28, 0xf6, 0xe7, 0x70, 0x8f, 0xe9, 0x50, + 0xc8, 0x17, 0x3a, 0x50, 0x27, 0x60, 0xa1, 0x5a, 0x28, 0x2c, 0x23, 0x38, + 0xe0, 0x4b, 0x60, 0x51, 0x6a, 0x29, 0x53, 0x27, 0x48, 0x05, 0x42, 0x38, + 0x99, 0xc8, 0x51, 0x3c, 0x69, 0x38, 0xec, 0x9b, 0x18, 0x7d, 0x74, 0x48, + 0x2d, 0xa7, 0x41, 0x00, 0x6e, 0x41, 0x7d, 0x40, 0x21, 0xdc, 0x23, 0x19, + 0xef, 0xe0, 0x98, 0x51, 0x6f, 0x28, 0x22, 0x51, 0x58, 0x8b, 0xf9, 0x31, + 0xd9, 0xa7, 0x30, 0x97, 0x4d, 0x78, 0xae, 0x6a, 0x21, 0xb3, 0x4e, 0x70, + 0xa7, 0x6a, 0x59, 0x72, 0x6a, 0x39, 0xdd, 0x77, 0x39, 0xa6, 0x2c, 0x38, + 0xad, 0x39, 0x29, 0x1d, 0x67, 0x41, 0xc0, 0x19, 0x21, 0xc6, 0x52, 0x50, + 0x09, 0xe1, 0x80, 0x88, 0xe1, 0x18, 0x7f, 0x66, 0x20, 0x90, 0x6b, 0x28, + 0xb4, 0x77, 0x38, 0x1a, 0x38, 0x20, 0x93, 0x26, 0x68, 0x01, 0x39, 0x30, + 0x7b, 0x66, 0x40, 0xad, 0x29, 0x28, 0x86, 0x42, 0x70, 0x40, 0x69, 0x18, + 0x9e, 0x77, 0x38, 0x7c, 0xe1, 0x18, 0x66, 0x7b, 0x20, 0x57, 0x68, 0x41, + 0x7d, 0x80, 0x41, 0xcc, 0x71, 0x30, 0x60, 0x41, 0x68, 0xd0, 0xd0, 0x20, + 0xaa, 0xc9, 0x30, 0x0b, 0xe1, 0x70, 0x00, 0x00, 0x36, 0x01, 0x2c, 0x02, + 0x06, 0x00, 0x41, 0x00, 0x0d, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x00, 0x03, + 0x37, 0x04, 0x00, 0x05, 0x00, 0x06, 0x35, 0x07, 0x35, 0x08, 0x35, 0x09, + 0x35, 0x0a, 0x04, 0x0b, +}; + +static const u8 data_segment_data_w2c_highlights_d94[] = { + 0x31, 0x03, 0x09, 0x00, 0x70, 0x00, 0x24, 0x2c, 0x46, 0x0e, 0x00, 0x0b, + 0x09, 0x0d, 0x01, 0x0d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x04, 0x12, 0x00, + 0x14, 0x06, 0x7c, 0x02, 0x23, 0x07, 0x0d, 0x06, 0x09, 0x85, 0x40, 0x51, + 0x0f, 0x31, 0xef, 0x81, 0x38, 0xb2, 0x85, 0x28, 0x0e, 0x8f, 0x70, 0x79, + 0x92, 0x20, 0xbb, 0x6b, 0x50, 0x5f, 0xba, 0x28, 0xeb, 0x83, 0x20, 0xab, + 0xae, 0x20, 0x68, 0x32, 0x40, 0x44, 0x91, 0x50, 0x66, 0x85, 0x28, 0x2f, + 0x8c, 0x10, 0x91, 0x98, 0x30, 0xae, 0xc6, 0x98, 0x7a, 0x87, 0x10, 0x4f, + 0x89, 0x50, 0x3d, 0xb7, 0x18, 0x4f, 0x81, 0x10, 0xf6, 0x87, 0x38, 0xdf, + 0x8d, 0x68, 0xa3, 0x92, 0x20, 0x26, 0x2b, 0x50, 0xf2, 0x84, 0x40, 0x60, + 0x81, 0x10, 0xb0, 0x8a, 0x18, 0x7c, 0x81, 0x18, 0x4f, 0x8c, 0x30, 0xd6, + 0x9a, 0x28, 0x59, 0x8f, 0x28, 0xad, 0x99, 0x28, 0x9a, 0xe3, 0x30, 0xa6, + 0x8e, 0x30, 0x88, 0xe1, 0x18, 0xe8, 0x80, 0x10, 0xe1, 0x8e, 0x70, 0x00, + 0x00, 0x00, 0x0a, 0x75, 0x38, 0x88, 0x81, 0x50, 0xdb, 0x9a, 0x28, 0x06, + 0x80, 0x10, 0x30, 0x90, 0x60, 0x9b, 0x94, 0x38, 0xee, 0x92, 0x50, 0x01, + 0x88, 0x18, 0x8e, 0x38, 0x28, 0xb7, 0x95, 0x20, 0x0f, 0x1b, 0x21, 0xc4, + 0x46, 0x60, 0x38, 0x99, 0x28, 0xff, 0x8c, 0x20, 0x04, 0x26, 0x60, 0x0c, + 0x85, 0x28, 0x04, 0x6f, 0x48, 0xff, 0x8c, 0x70, 0x60, 0x23, 0x30, 0x7c, + 0x98, 0x28, 0x74, 0x2e, 0x40, 0x08, 0x85, 0x48, 0xa1, 0x85, 0x98, 0x09, + 0x97, 0x38, 0x63, 0x89, 0x38, 0xaf, 0x97, 0x20, 0xb6, 0x89, 0x20, 0xf4, + 0x89, 0x58, 0x30, 0x80, 0x30, 0x60, 0x23, 0x68, 0xf0, 0x2e, 0x48, 0xb1, + 0x6f, 0x40, 0xce, 0x56, 0x30, 0xa9, 0x6f, 0x40, 0x74, 0x80, 0x58, 0xd0, + 0x85, 0x30, 0xf8, 0x4d, 0x48, 0x96, 0xcf, 0x30, 0x4c, 0xc0, 0x90, 0xb1, + 0x89, 0x48, 0xe3, 0x99, 0x28, 0x64, 0x91, 0x58, 0x6e, 0x8f, 0x60, 0x72, + 0x83, 0x70, 0x67, 0x83, 0x60, 0x51, 0x98, 0x30, 0x7f, 0x6a, 0x58, 0x59, + 0x49, 0x58, 0x00, 0x00, 0x13, 0x01, 0x13, 0x02, 0x13, 0x03, 0x11, 0x00, + 0x07, 0x00, 0x11, 0x04, 0x11, 0x08, 0x11, 0x0c, +}; + +static const u8 data_segment_data_w2c_highlights_d95[] = { + 0x27, 0x33, 0x02, 0x00, 0x02, 0x00, 0x00, 0x1b, 0xdc, 0x83, 0x18, 0x3d, + 0x57, 0x18, 0xa2, 0x98, 0x28, 0x02, 0x81, 0x20, 0x01, 0x60, 0x10, 0x5e, + 0xa2, 0x28, 0xf2, 0xc4, 0x40, 0x16, 0x85, 0x30, 0x06, 0x60, 0x10, 0xb0, + 0x8a, 0x20, 0x19, 0x8b, 0x28, 0x5f, 0x3a, 0x28, 0x24, 0x92, 0x28, 0x4f, + 0x81, 0x10, 0xf9, 0x64, 0x18, 0x01, 0x68, 0x18, 0x60, 0x81, 0x10, 0xea, + 0x80, 0x18, 0xd0, 0xe5, 0x30, 0xab, 0x2e, 0x20, 0x6c, 0x8c, 0x30, 0x2f, + 0xec, 0x20, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 0x15, 0x00, 0x12, 0x00, + 0x13, 0x00, 0x13, 0x01, 0x11, +}; + +static const u8 data_segment_data_w2c_highlights_d96[] = { + 0x18, 0x13, 0x19, 0x01, 0x00, 0x06, 0x01, 0x0e, 0x09, 0x04, 0x05, 0x03, + 0x01, 0x05, 0x10, 0x09, 0x11, 0xb6, 0x28, 0x4f, 0xa1, 0x10, 0x61, 0xb3, + 0x48, 0xbd, 0xb3, 0x30, 0x00, 0x00, 0x00, 0xc3, 0xac, 0x40, 0x94, 0xb7, + 0x38, 0x04, 0x55, 0x40, 0x06, 0xa8, 0x20, 0x74, 0x95, 0x40, 0xc7, 0xa1, + 0x30, 0xeb, 0x4d, 0x40, 0xb2, 0xa5, 0x28, 0x92, 0x3a, 0x28, 0x4f, 0x8c, + 0x30, 0xa6, 0x2f, 0x30, 0x71, 0xab, 0x40, 0x8c, 0xa1, 0x28, 0x08, 0x9b, + 0x28, 0x0e, 0xb2, 0x50, 0xc8, 0x96, 0x40, 0xd8, 0xb6, 0x40, 0x23, 0xad, + 0x28, 0x6e, 0xb2, 0x28, 0x01, 0xa2, 0x30, 0x84, 0xbb, 0x20, 0x60, 0x63, + 0x30, 0x0d, 0xa2, 0x18, 0x06, 0xa0, 0x10, 0x6b, 0xb2, 0x28, 0xc0, 0xa9, + 0x20, 0x26, 0xa6, 0x38, 0x1a, 0xb2, 0x50, 0x88, 0xa1, 0x18, 0x02, 0x21, + 0x20, 0xbb, 0xba, 0x20, 0x4b, 0x30, 0x28, 0x1c, 0xb7, 0x40, 0x05, 0x42, + 0x38, 0x10, 0x86, 0x40, 0x30, 0xb7, 0x38, 0xa3, 0x2f, 0x28, 0x64, 0xb3, + 0x30, 0xbb, 0xa9, 0x48, 0x78, 0x3b, 0x20, 0x6d, 0xab, 0x40, 0x58, 0xb9, + 0x30, 0x60, 0xa2, 0x20, 0x03, 0xb6, 0x40, 0x01, 0xa8, 0x18, 0xd0, 0xa7, + 0x20, 0xb1, 0xa9, 0x20, 0xd4, 0x87, 0x38, +}; + +static const u8 data_segment_data_w2c_highlights_d97[] = { + 0x3b, 0x23, 0x70, 0x05, 0x02, 0x09, 0x6f, 0x02, 0xa1, 0xfb, 0x18, 0xab, + 0xfb, 0x18, 0xe3, 0xf8, 0x18, 0xac, 0x6f, 0x40, 0xa6, 0xae, 0x30, 0x08, + 0x87, 0x50, 0x02, 0x21, 0x20, 0x00, 0x00, 0x00, 0xad, 0x8d, 0x50, 0xeb, + 0x23, 0x20, 0x6b, 0xf5, 0x18, 0x4b, 0x29, 0x30, 0x9c, 0x32, 0x48, 0x82, + 0xe6, 0x18, 0x5f, 0xda, 0x28, 0x00, 0x00, 0x00, 0xab, 0xce, 0x20, 0x38, + 0x39, 0x28, 0x9a, 0x39, 0x30, 0x6c, 0x2c, 0x30, 0x24, 0x32, 0x28, 0x6f, + 0x20, 0x18, 0xad, 0xfb, 0x18, 0x4f, 0x21, 0x10, 0xdc, 0x23, 0x18, 0xea, + 0x20, 0x18, 0x26, 0x85, 0x58, 0xf2, 0x44, 0x40, 0x96, 0x38, 0x20, 0xe2, + 0x90, 0x48, 0x19, 0x2b, 0x28, 0xd0, 0x25, 0x30, 0x3a, 0x8e, 0x30, 0xdc, + 0xe1, 0x10, 0x86, 0x36, 0x40, 0xa7, 0x81, 0x38, 0x60, 0x80, 0x30, 0x00, + 0x00, 0x12, 0x00, 0x13, 0x01, 0x13, 0x02, 0x13, 0x00, 0x14, 0x00, 0x03, + 0x00, 0x07, +}; + +static const u8 data_segment_data_w2c_highlights_d98[] = { + 0x01, 0x03, 0x1a, 0x9c, 0x00, 0x00, 0x31, 0x00, 0x1b, 0x19, 0x56, 0x16, + 0x8a, 0x29, 0x3f, 0x05, 0x2a, 0x06, 0x3d, 0x00, 0x00, 0x01, 0x25, 0x04, + 0x0a, 0x06, 0x05, 0x03, 0x01, 0x03, 0x16, 0x06, 0x29, 0xc0, 0x30, 0x46, + 0xe0, 0x10, 0xda, 0x33, 0x31, 0x4f, 0x81, 0x10, 0x28, 0xa0, 0x10, 0x05, + 0x62, 0x38, 0x1f, 0x4a, 0x21, 0x71, 0x48, 0x19, 0x00, 0x00, 0x00, 0xeb, + 0x83, 0x20, 0xd1, 0x44, 0x31, 0xab, 0xee, 0x20, 0xeb, 0x57, 0x39, 0x00, + 0x00, 0x00, 0x60, 0xc1, 0x10, 0x36, 0x45, 0x21, 0xcf, 0xd7, 0x38, 0x36, + 0xce, 0x28, 0x42, 0x41, 0x20, 0xd1, 0x40, 0x21, 0x01, 0xa0, 0x10, 0xe3, + 0xc3, 0x18, 0x58, 0xd3, 0x20, 0xc2, 0x48, 0x29, 0x88, 0x58, 0x39, 0x3d, + 0x17, 0x19, 0x66, 0xc5, 0x28, 0x5f, 0x96, 0x28, 0xea, 0x80, 0x18, 0xd6, + 0x97, 0x38, 0xdd, 0xb9, 0x18, 0xc3, 0x41, 0x19, 0x85, 0x29, 0x48, 0x5d, + 0x46, 0x21, 0xa4, 0x4d, 0x39, 0x7e, 0xba, 0x18, 0xf4, 0x59, 0x31, 0x17, + 0xbb, 0x18, 0xee, 0x59, 0x31, 0x5a, 0xc0, 0x20, 0xd9, 0x68, 0x20, 0xf9, + 0xa4, 0x18, 0x26, 0xc5, 0x20, 0xd1, 0xc6, 0x28, 0xac, 0x47, 0x18, 0xdc, + 0xa8, 0x18, 0x8f, 0x34, 0x20, 0x05, 0x62, 0x19, 0xbb, 0xa1, 0x10, 0x06, + 0xa0, 0x10, 0x27, 0xa0, 0x20, 0x5f, 0xfa, 0x28, 0xc4, 0x49, 0x21, 0xac, + 0x47, 0x39, 0x86, 0x96, 0x40, 0x08, 0x4b, 0x21, 0xf8, 0x52, 0x29, 0x19, + 0xa7, 0x18, 0x33, 0x56, 0x29, 0x94, 0x5b, 0x21, 0xbc, 0xdb, 0x18, 0xde, + 0x47, 0x29, 0xe4, 0x57, 0x39, 0xfb, 0x67, 0x19, 0x71, 0xd3, 0x28, 0x72, + 0x40, 0x39, 0x88, 0x41, 0x18, 0x40, 0xc9, 0x18, 0x02, 0x81, 0x20, 0xe9, + 0x59, 0x29, 0x01, 0x40, 0x19, 0xc3, 0xc7, 0x18, 0x5c, 0x46, 0x29, 0xc2, + 0x48, 0x41, 0xc3, 0xca, 0x30, 0x6f, 0x80, 0x18, 0xd5, 0x40, 0x29, 0xb6, + 0x89, 0x20, 0x49, 0x90, 0x20, 0xae, 0x6e, 0x21, 0x30, 0x60, 0x31, 0xf3, + 0x85, 0x30, 0xbb, 0x23, 0x40, 0x3a, 0x2a, 0x40, 0xc0, 0xe1, 0x18, 0xb8, + 0xda, 0x28, 0xb9, 0x52, 0x29, 0x0b, 0xb4, 0x28, 0x24, 0x92, 0x28, 0xd0, + 0x85, 0x30, 0x0b, 0x26, 0x28, 0x00, 0x00, 0x00, 0x33, 0x6c, 0x41, 0xa7, + 0x21, 0x30, 0x7b, 0x4e, 0x49, 0x03, 0xd7, 0x38, 0x5c, 0x49, 0x28, 0xe8, + 0x59, 0x31, 0x01, 0xa8, 0x18, 0x19, 0x8b, 0x28, 0xf2, 0x24, 0x20, 0xf4, + 0xd3, 0x40, 0xa6, 0x6e, 0x30, 0x46, 0xa1, 0x10, 0xae, 0xba, 0x28, 0x00, + 0x00, 0x13, 0x01, 0x13, 0x00, 0x14, 0x02, 0x12, 0x00, 0x15, 0x00, 0x11, + 0x00, 0x03, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x38, 0x00, 0x0e, +}; + +static const u8 data_segment_data_w2c_highlights_d99[] = { + 0x21, 0x43, 0x03, 0x60, 0xe6, 0xe7, 0x40, 0x97, 0xec, 0x50, 0x00, 0x00, + 0x00, 0x5f, 0x7a, 0x28, 0xd9, 0xe1, 0x18, 0x02, 0x41, 0x20, 0x51, 0x83, + 0x20, 0x00, 0x00, 0x00, 0x88, 0x21, 0x18, 0x0f, 0x22, 0x18, 0xa1, 0x25, + 0x20, 0x00, 0x00, 0x00, 0x30, 0x20, 0x30, 0x59, 0xef, 0x28, 0x92, 0xea, + 0x58, 0x01, 0x20, 0x10, 0xc0, 0xf3, 0x28, 0x7f, 0xf9, 0x30, 0x0e, 0x34, + 0x38, 0x4f, 0x41, 0x10, 0xab, 0x6e, 0x20, 0xa6, 0xee, 0x30, 0x4c, 0xfa, + 0x28, 0x06, 0xa0, 0x10, 0x2b, 0xd6, 0x40, 0x05, 0xf2, 0x50, 0xd3, 0xf5, + 0x40, 0x3d, 0xe6, 0x60, 0xb0, 0x4a, 0x20, 0x00, 0x00, 0x11, 0x00, 0x12, + 0x00, 0x03, 0x00, 0x07, 0x00, 0x15, 0x00, 0x17, 0x00, 0x0e, +}; + +static const u8 data_segment_data_w2c_highlights_d100[] = { + 0x5a, 0x03, 0x01, 0x31, 0x00, 0x06, 0x02, 0x00, 0x00, 0x57, 0x00, 0x00, + 0x10, 0x07, 0x00, 0x0e, 0x09, 0x03, 0x04, 0x1d, 0x11, 0x01, 0x3b, 0x05, + 0x18, 0x10, 0x0f, 0x03, 0x09, 0x01, 0x06, 0x06, 0xdc, 0x23, 0x18, 0xd6, + 0x37, 0x38, 0x23, 0x5a, 0x18, 0x9b, 0x5b, 0x18, 0xa6, 0x2e, 0x30, 0x6a, + 0xa9, 0x88, 0xfb, 0xd8, 0x30, 0x86, 0x51, 0x28, 0x9c, 0x2a, 0x60, 0xc0, + 0x36, 0x40, 0xc3, 0xcb, 0x30, 0x01, 0x45, 0x60, 0xbe, 0x2b, 0x38, 0x0a, + 0x2e, 0x40, 0xe0, 0xc5, 0x88, 0xe3, 0xa3, 0x18, 0x50, 0x9b, 0x20, 0x7b, + 0x41, 0x10, 0x1a, 0xb9, 0x30, 0xf7, 0xd8, 0x20, 0x59, 0x2f, 0x28, 0x51, + 0xa3, 0x80, 0x9c, 0xba, 0x28, 0xef, 0xb1, 0x40, 0x29, 0x5b, 0x20, 0x6f, + 0x20, 0x18, 0xec, 0x36, 0x40, 0x0b, 0x28, 0x38, 0xcb, 0x39, 0x30, 0xf5, + 0xb8, 0x30, 0xe9, 0xc5, 0x30, 0x5f, 0x2b, 0x78, 0x8a, 0x2c, 0x30, 0xdd, + 0xd5, 0x30, 0xed, 0x83, 0x20, 0xcc, 0xb5, 0x40, 0x3c, 0xb3, 0x38, 0x32, + 0xb5, 0x40, 0x09, 0xa9, 0x40, 0x01, 0xa0, 0x10, 0x83, 0x20, 0x70, 0x09, + 0xa9, 0x88, 0x06, 0xab, 0x78, 0x0f, 0x25, 0x40, 0x38, 0x39, 0x28, 0x52, + 0xc6, 0x48, 0x0f, 0x97, 0x28, 0xac, 0xcb, 0x48, 0xcc, 0xca, 0x30, 0x33, + 0x62, 0x10, 0xa3, 0x33, 0x48, 0xb0, 0x7b, 0x18, 0x1e, 0x64, 0x18, 0x8d, + 0xa3, 0x78, 0x82, 0x2a, 0x40, 0x55, 0x2c, 0x50, 0xac, 0xcc, 0x40, 0x3d, + 0x77, 0x18, 0xd4, 0x27, 0x38, 0xdb, 0xb5, 0x40, 0xe8, 0x2e, 0x48, 0xde, + 0xa5, 0x98, 0xed, 0xb1, 0x50, 0xb0, 0xb5, 0x40, 0x27, 0xb5, 0x40, 0x55, + 0xc6, 0x30, 0xda, 0xc5, 0x20, 0x8d, 0xb7, 0x38, 0x93, 0x21, 0x98, 0x04, + 0x2f, 0x20, 0x5b, 0xba, 0x28, 0x93, 0x24, 0x48, 0x3a, 0xb3, 0x48, 0x8f, + 0xa0, 0x30, 0x68, 0x21, 0x28, 0x2a, 0xb3, 0x48, 0x00, 0x00, 0x11, 0x01, + 0x38, 0x02, 0x07, 0x03, 0x3c, 0x04, 0x11, 0x05, 0x11, 0x06, +}; + +static const u8 data_segment_data_w2c_highlights_d101[] = { + 0x01, 0x06, 0x04, 0x00, 0x0c, 0x04, 0x5d, 0x0a, 0x0b, 0x00, 0x0a, 0x1c, + 0x04, 0x01, 0x1a, 0x10, 0x06, 0x18, 0x04, 0x09, 0x00, 0x0a, 0x61, 0x69, + 0x20, 0x00, 0x1b, 0x29, 0x00, 0x0b, 0x1f, 0x35, 0x15, 0x01, 0x00, 0x02, + 0x27, 0x0f, 0x04, 0x00, 0x03, 0x07, 0x39, 0x01, 0x0d, 0x0b, 0x0b, 0x01, + 0x04, 0x14, 0x02, 0x00, 0x05, 0x58, 0x03, 0x01, 0x02, 0x00, 0x09, 0x0b, + 0x03, 0x11, 0xfb, 0x85, 0x49, 0x00, 0xb8, 0x38, 0xc0, 0x34, 0x28, 0x9b, + 0xa4, 0x60, 0x6f, 0x20, 0x18, 0x72, 0x60, 0x39, 0xc0, 0x50, 0x58, 0xe7, + 0xa9, 0x28, 0xdb, 0x72, 0x49, 0xc3, 0x6c, 0x21, 0x93, 0x61, 0x21, 0x3d, + 0x37, 0x19, 0x5b, 0x81, 0x31, 0xea, 0x20, 0x18, 0xee, 0x8a, 0x49, 0xe3, + 0xa3, 0x18, 0xc8, 0x6f, 0x69, 0xa2, 0x38, 0x28, 0x28, 0xe0, 0x10, 0x41, + 0xaa, 0x58, 0xf0, 0xab, 0x40, 0xac, 0xa7, 0x18, 0x8d, 0x70, 0x39, 0xb9, + 0x74, 0x41, 0x2f, 0x2c, 0x20, 0x86, 0x36, 0x40, 0x45, 0x82, 0x39, 0xd6, + 0x37, 0x38, 0xc4, 0x69, 0x39, 0xcc, 0x67, 0x41, 0xab, 0x0e, 0x21, 0x91, + 0x65, 0x49, 0xee, 0x8a, 0x29, 0x71, 0x74, 0x49, 0xc3, 0xa1, 0x18, 0x5c, + 0xa9, 0x28, 0xbb, 0xe1, 0x10, 0x60, 0x21, 0x10, 0x06, 0xe0, 0x10, 0xa1, + 0x25, 0x20, 0x7e, 0xfa, 0x18, 0x46, 0x21, 0x10, 0xd0, 0xb9, 0x28, 0xbe, + 0x6b, 0x38, 0xdc, 0xe8, 0x18, 0x88, 0x7b, 0x20, 0x4c, 0x76, 0x41, 0xb9, + 0x6a, 0x51, 0xf9, 0xe4, 0x18, 0x0b, 0xa8, 0x38, 0xac, 0x8c, 0x41, 0xad, + 0xd9, 0x28, 0x16, 0x25, 0x30, 0xcb, 0xb9, 0x30, 0xa8, 0x66, 0x38, 0xa6, + 0xa7, 0x48, 0x46, 0xac, 0x50, 0x11, 0x6b, 0x31, 0x42, 0xa1, 0x20, 0xa7, + 0xb8, 0x38, 0x72, 0x74, 0x41, 0x8e, 0xac, 0x50, 0x33, 0x76, 0x29, 0x9e, + 0x76, 0x41, 0xb6, 0x6d, 0x41, 0xbe, 0x86, 0x29, 0xec, 0xb6, 0x40, 0x7d, + 0xa8, 0x40, 0xf2, 0x44, 0x40, 0xbc, 0x6a, 0x39, 0x25, 0x6c, 0x59, 0x19, + 0x2b, 0x28, 0x18, 0x6d, 0x41, 0xe8, 0xac, 0x40, 0xd1, 0x64, 0x31, 0x5d, + 0xb4, 0x30, 0xc0, 0x69, 0x21, 0xd2, 0xb4, 0x40, 0x1f, 0x6a, 0x21, 0x51, + 0xaf, 0x28, 0x3f, 0x6e, 0x41, 0xff, 0x20, 0x10, 0x5f, 0x1a, 0x29, 0x01, + 0xe0, 0x10, 0x04, 0x70, 0x31, 0xc9, 0x69, 0x51, 0xc9, 0xa4, 0x70, 0x11, + 0xad, 0x40, 0xeb, 0x23, 0x20, 0x68, 0xa1, 0x28, 0xd0, 0xa7, 0x20, 0xdd, + 0xf9, 0x18, 0x19, 0xe7, 0x18, 0xd4, 0xa7, 0x38, 0x75, 0xac, 0x38, 0x4f, + 0x21, 0x10, 0x77, 0xab, 0x30, 0x90, 0xaf, 0x38, 0x33, 0x87, 0x51, 0x3f, + 0xb9, 0x30, 0xc2, 0x6a, 0x39, 0xe3, 0xb5, 0x40, 0x40, 0xa9, 0x48, 0x46, + 0x20, 0x10, 0x6f, 0xae, 0x30, 0x02, 0x21, 0x20, 0x83, 0xa0, 0x70, 0x01, + 0xe8, 0x18, 0x59, 0x82, 0x21, 0xc3, 0xaa, 0x30, 0xeb, 0xb5, 0x40, 0x8c, + 0x9b, 0x20, 0x63, 0xb2, 0x30, 0xe7, 0xa9, 0x60, 0x24, 0x32, 0x28, 0xbc, + 0xbb, 0x18, 0x74, 0x38, 0x30, 0xc3, 0xa3, 0x70, 0xe8, 0xae, 0x48, 0x0e, + 0xb4, 0x48, 0x38, 0x76, 0x41, 0x29, 0xa0, 0x30, 0xf1, 0x43, 0x50, 0xf3, + 0x25, 0x30, 0xb8, 0x74, 0x49, 0x4f, 0xac, 0x38, 0x1f, 0x6d, 0x41, 0x51, + 0x6e, 0x39, 0xa9, 0xb4, 0x48, 0xa0, 0xb9, 0x30, 0xb4, 0x6b, 0x41, 0xd5, + 0xa0, 0x28, 0x1e, 0x31, 0x20, 0xb0, 0x2a, 0x20, 0xf4, 0x79, 0x31, 0xe4, + 0x72, 0x51, 0x01, 0x6c, 0x38, 0xd1, 0x60, 0x21, 0xed, 0x43, 0x21, 0xb9, + 0xa4, 0x68, 0xc0, 0x69, 0x41, 0xdc, 0xc3, 0x18, 0x17, 0xfb, 0x18, 0x29, + 0xab, 0x38, 0x93, 0xa4, 0x48, 0x30, 0x65, 0x51, 0xc8, 0xb6, 0x40, 0xb9, + 0x55, 0x40, 0x60, 0xa8, 0x30, 0x8f, 0x54, 0x48, 0x4c, 0x98, 0x31, 0x88, + 0xb1, 0x48, 0xc1, 0x75, 0x29, 0x00, 0x00, 0x12, 0x00, 0x13, 0x01, 0x13, + 0x02, 0x14, 0x03, 0x13, 0x00, 0x11, 0x00, 0x15, 0x00, 0x03, 0x00, 0x07, + 0x00, 0x3c, 0x00, 0x38, 0x00, 0x11, 0x10, +}; + +static const u8 data_segment_data_w2c_highlights_d102[] = { + 0x30, 0x02, 0x03, 0x04, 0x22, 0x6a, 0x01, 0x00, 0x03, 0x0a, 0x16, 0x15, + 0x03, 0x04, 0x1d, 0x12, 0x00, 0x06, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x04, 0x1a, 0x03, 0x45, 0x1e, 0x16, 0x0b, 0x1e, 0xf1, 0x20, 0x5f, + 0xef, 0x28, 0x4f, 0x21, 0x10, 0x60, 0xee, 0x30, 0xdb, 0xc2, 0x10, 0xb1, + 0xe9, 0x20, 0xd8, 0xe2, 0x30, 0x06, 0xf8, 0x30, 0xa2, 0x38, 0x28, 0x69, + 0xfa, 0x28, 0x12, 0xe6, 0x38, 0xbe, 0xe6, 0x28, 0x64, 0xb1, 0x18, 0xc9, + 0xc1, 0x10, 0x57, 0xe1, 0x28, 0x2f, 0x2c, 0x20, 0x6d, 0x2b, 0x20, 0x11, + 0xc0, 0x10, 0x86, 0xc0, 0x10, 0xea, 0x20, 0x18, 0x83, 0xf8, 0x28, 0xef, + 0xa1, 0x38, 0x29, 0xe6, 0x20, 0x81, 0xf6, 0x28, 0xc3, 0x80, 0x18, 0x78, + 0x86, 0x28, 0x51, 0xe0, 0x10, 0xc7, 0xf9, 0x18, 0xc0, 0x2e, 0x28, 0x8c, + 0xe1, 0x30, 0x40, 0xe9, 0x18, 0x26, 0x26, 0x38, 0xbe, 0x6b, 0x38, 0x19, + 0x2b, 0x28, 0x5e, 0xef, 0x38, 0x06, 0xc0, 0x10, 0xbe, 0x9b, 0x10, 0x84, + 0xfb, 0x20, 0x91, 0x38, 0x30, 0x5e, 0x21, 0x20, 0x06, 0xe8, 0x20, 0x8f, + 0x3a, 0x19, 0xaa, 0xed, 0x20, 0x19, 0xc7, 0x18, 0x60, 0xfb, 0x20, 0xdf, + 0x43, 0x18, 0x00, 0x00, 0x00, 0x02, 0x21, 0x20, 0x84, 0xe9, 0x10, 0xde, + 0xf0, 0x30, 0x7b, 0xee, 0x20, 0xf9, 0xc4, 0x18, 0xcc, 0xdb, 0x18, 0x5e, + 0x82, 0x28, 0x60, 0x21, 0x10, 0xe0, 0xfa, 0x20, 0x5f, 0xef, 0x30, 0x1e, + 0xfb, 0x18, 0xe3, 0xf4, 0x48, 0xe7, 0x23, 0x20, 0x3b, 0xf9, 0x28, 0xd0, + 0x25, 0x30, 0x81, 0xf8, 0x38, 0x6b, 0xf2, 0x30, 0xa0, 0x11, 0x19, 0x30, + 0xf7, 0x20, 0xf0, 0xc1, 0x10, 0x05, 0xa0, 0x10, 0x01, 0xc8, 0x18, 0x92, + 0xc2, 0x10, 0xd9, 0xe1, 0x18, 0x43, 0xec, 0x20, 0x0b, 0x1a, 0x29, +}; + +static const u8 data_segment_data_w2c_highlights_d103[] = { + 0x02, 0xd8, 0x52, 0x6a, 0x04, 0x10, 0x11, 0x00, 0x14, 0x6d, 0x0e, 0x02, + 0x37, 0x08, 0x0d, 0x38, 0x39, 0x28, 0x5c, 0xa9, 0x28, 0x32, 0xae, 0x28, + 0x86, 0x36, 0x40, 0x93, 0xa4, 0x48, 0x29, 0x40, 0x30, 0x68, 0xa1, 0x28, + 0xf1, 0x3a, 0x28, 0xb1, 0x54, 0x38, 0xf2, 0xa4, 0x40, 0xd0, 0x25, 0x30, + 0x5f, 0x56, 0x28, 0x60, 0x62, 0x40, 0x6c, 0x2c, 0x30, 0x05, 0x42, 0x38, + 0xe8, 0x4e, 0x48, 0x06, 0x6e, 0x28, 0xd5, 0x60, 0x28, 0x5f, 0x9a, 0x28, + 0xe7, 0x49, 0x28, 0x19, 0x2b, 0x28, 0xcd, 0x4c, 0x50, 0x33, 0xa7, 0x50, + 0xd4, 0x47, 0x38, 0x5f, 0x2f, 0x28, 0x45, 0x22, 0x38, 0x07, 0x4a, 0x60, + 0xc3, 0x79, 0x28, 0x4e, 0x54, 0x48, 0x26, 0x26, 0x38, 0xd6, 0x37, 0x38, + 0xc3, 0x6a, 0x30, 0xef, 0x41, 0x38, 0x59, 0x2f, 0x28, 0x4b, 0x29, 0x30, + 0xcb, 0x59, 0x30, 0xde, 0x67, 0x28, 0x60, 0x40, 0x30, 0x24, 0x32, 0x28, + 0x5e, 0xac, 0x38, 0x00, 0x00, 0x00, 0x6e, 0xa1, 0x48, 0x3e, 0x50, 0x60, + 0xb3, 0x3a, 0x28, 0x50, 0x68, 0x40, 0x6a, 0x26, 0x28, 0xd1, 0x64, 0x30, + 0x1b, 0x2f, 0x28, 0xeb, 0x55, 0x40, 0x64, 0x5a, 0x28, 0xac, 0x4c, 0x40, + 0x00, 0x00, 0x12, 0x00, 0x11, 0x00, 0x38, 0x00, 0x03, 0x00, 0x13, +}; + +static const u8 data_segment_data_w2c_highlights_d104[] = { + 0x0a, 0x2e, 0x00, 0x0c, 0x2d, 0x07, 0x24, 0x06, 0x30, 0x00, 0x36, 0xa5, + 0x01, 0x12, 0x01, 0x00, 0x02, 0x00, 0x4c, 0x04, 0x13, 0x1a, 0x00, 0x00, + 0x02, 0x03, 0x25, 0x03, 0x0b, 0x0e, 0xdc, 0x23, 0x18, 0x66, 0x95, 0x30, + 0x74, 0x3b, 0x21, 0x4f, 0x21, 0x10, 0xc3, 0x4d, 0x68, 0xcf, 0xdb, 0x18, + 0x81, 0xcf, 0x38, 0x01, 0xc0, 0x10, 0x91, 0x2e, 0x20, 0x54, 0xdb, 0x20, + 0xd0, 0x25, 0x30, 0xa2, 0x38, 0x28, 0x85, 0xc4, 0x18, 0xa6, 0x36, 0x28, + 0xac, 0x87, 0x18, 0x71, 0x88, 0x40, 0x86, 0x36, 0x40, 0x81, 0xd6, 0x28, + 0x86, 0xc0, 0x10, 0x28, 0xc0, 0x10, 0xf2, 0x44, 0x40, 0x92, 0xc2, 0x10, + 0x45, 0x22, 0x38, 0x58, 0xdb, 0x20, 0xad, 0x39, 0x28, 0x00, 0x00, 0x00, + 0x18, 0x96, 0x40, 0x00, 0x00, 0x00, 0xaf, 0x27, 0x21, 0xc8, 0x35, 0x21, + 0x60, 0x21, 0x10, 0x7e, 0x2b, 0x71, 0xf9, 0xc4, 0x18, 0x60, 0x83, 0x30, + 0x02, 0x21, 0x20, 0x17, 0xdb, 0x18, 0x06, 0xc0, 0x10, 0x7e, 0xda, 0x18, + 0x29, 0x57, 0x40, 0x5d, 0xce, 0x20, 0x19, 0x2b, 0x28, 0x63, 0xc3, 0x18, + 0xd6, 0x85, 0x20, 0x00, 0x00, 0x00, 0xd3, 0xd9, 0x28, 0xab, 0xee, 0x20, + 0x5c, 0xdb, 0x20, 0xf4, 0x36, 0x41, 0x4f, 0x38, 0x19, 0x6a, 0x26, 0x39, + 0x4d, 0xda, 0x18, 0x5c, 0xce, 0x28, 0xc9, 0x2c, 0x21, 0x11, 0xc0, 0x10, + 0x19, 0xc7, 0x18, 0xdc, 0xd4, 0x38, 0x84, 0xdb, 0x20, 0x00, 0x00, 0x00, + 0x6f, 0x20, 0x18, 0xbe, 0x39, 0x31, 0xa1, 0x3a, 0x29, 0xac, 0x28, 0x60, + 0xa0, 0xcc, 0x40, 0xfc, 0xc4, 0x40, 0x1b, 0xca, 0x30, 0xc8, 0xd9, 0x18, + 0xf9, 0xc4, 0x58, 0x4b, 0x29, 0x30, 0x26, 0xd9, 0x30, 0xdb, 0xd4, 0x40, + 0x59, 0x2f, 0x28, 0xea, 0x20, 0x18, 0x83, 0x26, 0x89, 0xae, 0xda, 0x28, + 0x6a, 0xc6, 0x28, 0x24, 0x32, 0x28, 0xd6, 0x37, 0x38, 0xc9, 0xc1, 0x10, + 0x96, 0xd6, 0x40, 0x38, 0x39, 0x28, 0x29, 0x80, 0x30, 0x00, 0x00, 0x00, + 0x1e, 0x31, 0x20, 0x51, 0x03, 0x21, 0x26, 0x65, 0x20, 0x63, 0x3b, 0x19, + 0x5e, 0x38, 0x38, 0x68, 0x61, 0x28, 0xc7, 0x41, 0x30, 0x71, 0xb3, 0x28, + 0x26, 0x26, 0x38, 0xf0, 0xc1, 0x10, 0xb2, 0x25, 0x29, 0x6c, 0x2c, 0x30, + 0x01, 0xc8, 0x18, 0x5f, 0xfa, 0x28, 0xdb, 0xc2, 0x10, 0x0b, 0xd4, 0x28, + 0x8a, 0x86, 0x28, 0x60, 0x88, 0x60, 0xbb, 0xc1, 0x10, +}; + +static const u8 data_segment_data_w2c_highlights_d105[] = { + 0x07, 0x00, 0x74, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x1a, 0x04, 0x00, + 0x18, 0x02, 0x21, 0xc0, 0x55, 0x18, 0xb4, 0x2b, 0x30, 0x27, 0xcd, 0x40, + 0xcb, 0xb9, 0x30, 0xb7, 0xb1, 0x38, 0x72, 0xcd, 0x38, 0xef, 0xac, 0x40, + 0x04, 0xd0, 0x30, 0xde, 0xc7, 0x28, 0x32, 0xd6, 0x30, 0x26, 0x25, 0x20, + 0x6a, 0xd6, 0x28, 0xee, 0xba, 0x18, 0xbb, 0xaf, 0x30, 0x67, 0xa3, 0x30, + 0xab, 0xee, 0x20, 0xf7, 0xb8, 0x20, 0xd9, 0xa1, 0x18, 0xd1, 0xc4, 0x30, + 0xf7, 0xd2, 0x30, 0x5f, 0xfa, 0x28, 0x4b, 0xa3, 0x38, 0xff, 0xa0, 0x10, + 0xf8, 0xd2, 0x28, 0xc0, 0xb6, 0x40, 0xf4, 0xd9, 0x30, 0xdf, 0xa1, 0x28, + 0xc4, 0xc9, 0x20, 0xbe, 0x6b, 0x38, 0xc0, 0xb6, 0x30, 0x28, 0xcd, 0x38, + 0xa6, 0x8e, 0x30, 0x75, 0x2c, 0x38, 0x33, 0xd6, 0x28, 0xbd, 0xa1, 0x28, + 0x71, 0xcd, 0x40, 0x47, 0xa7, 0x50, 0x65, 0x2e, 0x38, 0xee, 0xd9, 0x30, + 0x00, 0x00, 0x13, 0x01, 0x13, 0x02, 0x13, 0x03, 0x14, 0x00, 0x11, 0x00, + 0x38, 0x00, 0x03, +}; + +static const u8 data_segment_data_w2c_highlights_d106[] = { + 0x14, 0x0c, 0x00, 0x01, 0x00, 0xd6, 0x06, 0x3e, 0x9b, 0x20, 0x8a, 0x90, + 0x58, 0x39, 0x8f, 0x68, 0x16, 0x25, 0x30, 0xab, 0x9b, 0x18, 0xf2, 0x44, + 0x40, 0x35, 0x63, 0x20, 0xd0, 0x25, 0x30, 0xe7, 0x23, 0x20, 0x19, 0x2b, + 0x28, 0xea, 0x20, 0x18, 0xa1, 0x9b, 0x18, 0x4f, 0x21, 0x10, 0x01, 0xa0, + 0x10, 0x24, 0x32, 0x28, 0x00, 0x00, 0x00, 0x42, 0x95, 0x40, 0x20, 0x7a, + 0x28, 0x02, 0x21, 0x20, 0x39, 0x8f, 0x10, +}; + +static const u8 data_segment_data_w2c_highlights_d107[] = { + 0x03, 0x22, 0x05, 0x97, 0x03, 0x04, 0x06, 0x0a, 0x37, 0x3b, 0x0a, 0x00, + 0xe6, 0x0d, 0x0a, 0x00, 0xdc, 0x23, 0x18, 0xc0, 0x34, 0x28, 0x24, 0x32, + 0x28, 0x91, 0x38, 0x30, 0xb0, 0x2a, 0x20, 0x6a, 0x39, 0x31, 0xa2, 0x38, + 0x28, 0xdc, 0x68, 0x30, 0xdb, 0x21, 0x11, 0x59, 0x2f, 0x29, 0xa1, 0x21, + 0x61, 0xef, 0x21, 0x81, 0xe8, 0x2e, 0x49, 0xad, 0x24, 0x69, 0x5e, 0x21, + 0x20, 0x71, 0x33, 0x29, 0x60, 0x21, 0x10, 0xea, 0x20, 0x18, 0x0b, 0x3a, + 0x28, 0x96, 0x2f, 0x31, 0xd0, 0x25, 0x30, 0xcb, 0x39, 0x31, 0x19, 0x2b, + 0x28, 0x7c, 0x41, 0x18, 0xa0, 0x31, 0x18, 0xed, 0x03, 0x21, 0xb7, 0x35, + 0x21, 0x40, 0x24, 0x21, 0xdc, 0x28, 0x79, 0x5f, 0x2f, 0x29, 0xc0, 0x2e, + 0x28, 0xef, 0x21, 0x39, 0x05, 0x22, 0x39, 0xab, 0xce, 0x20, 0x0f, 0x17, + 0x29, 0x4f, 0x21, 0x10, 0xa1, 0x81, 0x28, 0xe7, 0x23, 0x20, 0x06, 0xa0, + 0x10, 0x01, 0xa8, 0x18, 0x5f, 0xda, 0x28, 0x52, 0x33, 0x30, 0xd4, 0x27, + 0x39, 0xa4, 0x34, 0x28, 0x5f, 0x36, 0x28, 0xb6, 0x29, 0x20, 0xb4, 0x2b, + 0x31, 0xad, 0x39, 0x28, 0xf9, 0xa4, 0x18, 0x3d, 0xf7, 0x18, 0x68, 0x61, + 0x28, 0x38, 0x39, 0x29, 0x8f, 0x34, 0x21, 0x22, 0x2e, 0x30, 0x01, 0x20, + 0x10, 0x46, 0x38, 0x39, +}; + +static const u8 data_segment_data_w2c_highlights_d108[] = { + 0x04, 0x2b, 0x3c, 0x49, 0x10, 0x10, 0x59, 0x11, 0x01, 0x00, 0x00, 0x03, + 0x10, 0x04, 0x00, 0x0c, 0x29, 0xa0, 0x30, 0x4f, 0x81, 0x10, 0x00, 0x00, + 0x00, 0x40, 0xc9, 0x18, 0x69, 0x1b, 0x19, 0x0f, 0x77, 0x28, 0x7a, 0x27, + 0x10, 0x24, 0x92, 0x28, 0x1f, 0x0a, 0x21, 0x26, 0x45, 0x20, 0xa9, 0xd4, + 0x18, 0x19, 0x8b, 0x28, 0xdb, 0x1b, 0x19, 0x16, 0x1a, 0x29, 0xb7, 0x95, + 0x20, 0x28, 0xe0, 0x10, 0x6a, 0x86, 0x28, 0xd9, 0xc9, 0x18, 0x7b, 0xc5, + 0x28, 0xc4, 0x09, 0x21, 0xf0, 0x6b, 0x30, 0xf6, 0x1b, 0x11, 0x5f, 0x3a, + 0x29, 0x4e, 0x40, 0x30, 0xa3, 0x1b, 0x19, 0x42, 0x41, 0x20, 0x76, 0x7a, + 0x28, 0xed, 0x43, 0x21, 0x01, 0xe0, 0x10, 0x46, 0x5b, 0x21, 0x86, 0x96, + 0x40, 0xe6, 0x1b, 0x19, 0x4e, 0x00, 0x19, 0x0b, 0xc8, 0x18, 0xab, 0x2e, + 0x21, 0xe3, 0x1b, 0x19, 0xe9, 0x1b, 0x19, 0x57, 0x96, 0x28, 0xd8, 0x1b, + 0x19, 0xf4, 0x1b, 0x11, 0x64, 0x71, 0x18, 0xea, 0x80, 0x18, 0x88, 0xa1, + 0x18, 0xe5, 0x5a, 0x28, 0x02, 0x81, 0x20, 0x94, 0xca, 0x20, 0x5c, 0xa9, + 0x28, 0x81, 0x1b, 0x19, 0xdc, 0x48, 0x18, 0x83, 0xa0, 0x20, 0xd0, 0x85, + 0x30, 0x00, 0x00, 0x00, 0xf6, 0x1a, 0x29, 0xe0, 0xc5, 0x30, 0x32, 0x4e, + 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x01, 0x13, 0x02, 0x14, 0x00, + 0x12, 0x00, 0x13, 0x00, 0x11, 0x00, 0x15, 0x00, 0x38, 0x00, 0x03, 0x00, + 0x3c, +}; + +static const u8 data_segment_data_w2c_highlights_d109[] = { + 0x0e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x66, 0x0c, 0x08, 0x00, 0x04, 0x0d, + 0x0b, 0x38, 0x02, 0x71, 0xd3, 0x28, 0x00, 0x00, 0x00, 0x5f, 0x36, 0x28, + 0xc3, 0x6a, 0x30, 0xe7, 0xc9, 0x28, 0xeb, 0x23, 0x20, 0xea, 0x20, 0x18, + 0xac, 0x87, 0x18, 0x59, 0x2f, 0x28, 0x63, 0xd6, 0x38, 0x60, 0xc8, 0x30, + 0x1c, 0x94, 0x20, 0x6f, 0x20, 0x18, 0x0b, 0xc6, 0x28, 0x0f, 0x37, 0x29, + 0x6f, 0xce, 0x30, 0xe8, 0xce, 0x48, 0xa1, 0xc5, 0x20, 0x47, 0x87, 0x48, + 0xd0, 0x25, 0x30, 0x42, 0x61, 0x20, 0xd4, 0xc7, 0x38, 0x4f, 0xac, 0x30, + 0x90, 0xc0, 0x18, 0xab, 0xee, 0x20, 0x19, 0x2b, 0x28, 0x38, 0x39, 0x28, + 0xfe, 0xd2, 0x40, 0x7b, 0xce, 0x20, 0xdc, 0x23, 0x18, 0x17, 0x8c, 0x28, + 0x4d, 0xc2, 0x58, 0x5f, 0xfa, 0x28, 0xc9, 0x2c, 0x21, 0x51, 0x03, 0x21, + 0xd6, 0x37, 0x38, 0x5e, 0xcc, 0x38, 0xf2, 0xd7, 0x38, 0x26, 0x65, 0x20, + 0xbe, 0xab, 0x38, 0x60, 0x21, 0x10, 0x79, 0xd3, 0x30, 0x00, 0x00, 0x00, + 0xe3, 0xd8, 0x28, 0xa6, 0xae, 0x30, 0xeb, 0xd5, 0x40, 0x4f, 0x21, 0x10, + 0xb0, 0x2a, 0x20, 0x6a, 0x26, 0x28, 0xc8, 0xd6, 0x40, 0x02, 0x21, 0x20, + 0x7c, 0x41, 0x18, 0x32, 0x6e, 0x28, 0x8c, 0x81, 0x18, 0x68, 0x61, 0x28, + 0x00, 0x00, 0x12, 0x00, 0x13, 0x01, 0x13, 0x02, 0x13, 0x00, 0x14, 0x00, + 0x11, 0x00, 0x03, 0x00, 0x07, 0x00, 0x3c, +}; + +static const u8 data_segment_data_w2c_highlights_d110[] = { + 0x42, 0x41, 0x2d, 0xa6, 0x11, 0x0d, 0x0e, 0x02, 0x58, 0x69, 0x06, 0x02, + 0x0c, 0x04, 0x00, 0x07, 0x20, 0x02, 0x19, 0x00, 0x00, 0x11, 0x10, 0x06, + 0x2d, 0x0b, 0x13, 0x1d, 0x35, 0x00, 0x05, 0x3a, 0x2e, 0x28, 0xbb, 0xc1, + 0x10, 0x62, 0x94, 0x30, 0xc4, 0xe9, 0x20, 0x01, 0xe0, 0x18, 0xcb, 0xd9, + 0x30, 0x9e, 0xc5, 0x20, 0xd1, 0xe4, 0x30, 0x93, 0x44, 0x48, 0x60, 0xc0, + 0x30, 0xcf, 0x68, 0x39, 0x78, 0x68, 0x49, 0x71, 0xf6, 0x38, 0x90, 0xc0, + 0x18, 0xea, 0x80, 0x18, 0x2e, 0x66, 0x71, 0xca, 0x70, 0x38, 0xd9, 0xe1, + 0x38, 0xc8, 0xd6, 0x40, 0x38, 0x68, 0x49, 0xb2, 0x25, 0x28, 0xeb, 0x83, + 0x20, 0xd4, 0xc7, 0x38, 0x26, 0x45, 0x20, 0x5f, 0x1a, 0x29, 0x45, 0x82, + 0x38, 0xc4, 0xc7, 0x48, 0x6a, 0xd3, 0x48, 0xc4, 0x7a, 0x29, 0xeb, 0x61, + 0x31, 0x71, 0xb3, 0x28, 0x1b, 0xc8, 0x40, 0xeb, 0xd5, 0x40, 0x7f, 0x3b, + 0x19, 0xdd, 0x4d, 0x19, 0xd0, 0x65, 0x71, 0xa6, 0xae, 0x30, 0x13, 0x5b, + 0x29, 0x0c, 0x2f, 0x11, 0x06, 0xd8, 0x30, 0xbd, 0x71, 0x31, 0x4f, 0xd5, + 0x40, 0xa7, 0xd8, 0x38, 0x6e, 0x76, 0x29, 0xed, 0x63, 0x61, 0x1b, 0x68, + 0x61, 0x91, 0x75, 0x40, 0x93, 0x4b, 0x29, 0x5a, 0x61, 0x31, 0x0b, 0x4d, + 0x39, 0xa2, 0xd4, 0x20, 0x19, 0x8b, 0x28, 0xc0, 0x70, 0x58, 0x7b, 0x56, + 0x39, 0xd7, 0xc9, 0x48, 0xef, 0x68, 0x61, 0xf2, 0x24, 0x40, 0x36, 0xe5, + 0x20, 0xa6, 0xd9, 0x30, 0x0b, 0x76, 0x41, 0x9a, 0x4f, 0x21, 0xd9, 0xa8, + 0x20, 0x22, 0x85, 0x28, 0xc5, 0xd4, 0x48, 0xd8, 0x66, 0x61, 0x0f, 0x37, + 0x29, 0xf1, 0x70, 0x31, 0x8e, 0x56, 0x40, 0xd8, 0xf9, 0x30, 0x66, 0x25, + 0x29, 0x8b, 0x5a, 0x29, 0x6f, 0x80, 0x18, 0x02, 0x81, 0x20, 0x4b, 0x89, + 0x30, 0x88, 0x61, 0x18, 0x98, 0xc5, 0x30, 0xab, 0x0e, 0x21, 0xe1, 0x2c, + 0x40, 0x15, 0x68, 0x51, 0x28, 0xed, 0x28, 0xbe, 0xc6, 0x38, 0x60, 0x81, + 0x10, 0x24, 0x92, 0x28, 0x3b, 0x78, 0x31, 0x30, 0x60, 0x31, 0xf0, 0xcb, + 0x40, 0x66, 0x65, 0x49, 0x00, 0x00, 0x00, 0x38, 0x99, 0x28, 0x9d, 0xcf, + 0x38, 0x5c, 0x90, 0x20, 0xb7, 0x91, 0x38, 0x44, 0xce, 0x40, 0xd0, 0x85, + 0x30, 0xc8, 0x6b, 0x49, 0x59, 0x8f, 0x28, 0x4f, 0x81, 0x10, 0xb7, 0x28, + 0x19, 0x01, 0x4c, 0x38, 0xd1, 0xe0, 0x20, 0x86, 0x96, 0x40, 0x4e, 0x40, + 0x30, 0x42, 0x41, 0x20, 0x00, 0x00, 0x00, 0xc9, 0x2c, 0x21, 0x6a, 0xf6, + 0x28, 0x28, 0xa0, 0x10, 0xdc, 0x4d, 0x21, 0x00, 0x00, 0x00, 0x28, 0xd8, + 0x38, 0x00, 0x00, 0x13, 0x01, 0x13, 0x02, 0x13, 0x00, 0x12, 0x00, 0x14, + 0x00, 0x11, 0x00, 0x38, 0x00, 0x03, 0x00, 0x3c, 0x00, 0x07, 0x00, 0x0e, + +}; + +static const u8 data_segment_data_w2c_highlights_d111[] = { + 0x02, 0x14, 0xf5, 0x09, 0x28, 0x00, 0x5e, 0x10, 0x11, 0x15, 0x6e, 0x00, + 0x22, 0x32, 0x14, 0x1c, 0x02, 0x21, 0x20, 0x74, 0x65, 0x48, 0xe7, 0x69, + 0x29, 0x4b, 0x89, 0x31, 0xb2, 0x87, 0x48, 0x73, 0xac, 0x21, 0xeb, 0x23, + 0x20, 0x44, 0x6e, 0x41, 0xbb, 0xc1, 0x10, 0xa5, 0x77, 0x28, 0x82, 0x6a, + 0x40, 0x86, 0x36, 0x40, 0xd1, 0x26, 0x28, 0x28, 0xc0, 0x10, 0xf7, 0xb8, + 0x21, 0xc0, 0x6f, 0x41, 0xed, 0x43, 0x21, 0x37, 0xf7, 0x20, 0xd0, 0x67, + 0x59, 0xab, 0x0e, 0x21, 0x1c, 0xb4, 0x21, 0xa2, 0xf1, 0x30, 0x47, 0x67, + 0x48, 0x57, 0x36, 0x28, 0x16, 0x25, 0x30, 0x4e, 0x60, 0x30, 0x57, 0x6f, + 0x41, 0xc8, 0x76, 0x41, 0x27, 0xe3, 0x18, 0x19, 0x8b, 0x29, 0x01, 0xc0, + 0x10, 0x7b, 0x25, 0x28, 0xf4, 0x8d, 0x29, 0xa6, 0xae, 0x30, 0xea, 0x80, + 0x19, 0x7b, 0xae, 0x21, 0xf2, 0x44, 0x20, 0x9c, 0x7a, 0x29, 0x59, 0x6f, + 0x31, 0x0f, 0x57, 0x29, 0x4f, 0x81, 0x11, 0x38, 0x99, 0x29, 0x45, 0x22, + 0x38, 0x3d, 0x37, 0x19, 0x76, 0xb3, 0x19, 0xac, 0x87, 0x18, 0x5f, 0x1a, + 0x29, 0x60, 0x21, 0x10, 0x23, 0x97, 0x30, 0xd4, 0x67, 0x39, 0x29, 0x60, + 0x31, 0x00, 0x00, 0x00, 0x6e, 0x78, 0x39, 0x68, 0x61, 0x28, 0xe8, 0xe7, + 0x30, 0x59, 0x2f, 0x28, 0x47, 0xf7, 0x28, 0xcb, 0x79, 0x31, 0x6f, 0x20, + 0x18, 0x26, 0x65, 0x20, 0x24, 0x32, 0x28, 0x88, 0x81, 0x18, 0xd0, 0x25, + 0x30, 0x4c, 0xfb, 0x20, 0x00, 0x00, 0x12, 0x00, 0x13, 0x01, 0x13, 0x02, + 0x13, 0x00, 0x14, 0x00, 0x15, 0x00, 0x38, 0x00, 0x03, 0x00, 0x07, 0x00, + 0x3c, 0x00, 0x11, 0x00, 0x12, 0x04, 0x11, 0x08, +}; + +static const u8 data_segment_data_w2c_highlights_d112[] = { + 0x24, 0x03, 0x17, 0x11, 0x08, 0x0e, 0x00, 0x7f, 0xc4, 0x89, 0x20, 0x76, + 0x93, 0x18, 0x36, 0x8e, 0x28, 0xc0, 0x96, 0x40, 0xc3, 0x81, 0x18, 0xc7, + 0xac, 0x20, 0xea, 0x20, 0x18, 0x4f, 0x21, 0x10, 0x7f, 0x87, 0x20, 0x62, + 0xa6, 0x48, 0xac, 0xa7, 0x18, 0x51, 0x63, 0x20, 0x01, 0x20, 0x10, 0xd1, + 0x84, 0x30, 0xed, 0xa3, 0x20, 0x5f, 0x5a, 0x28, 0xdc, 0xa8, 0x30, 0xd5, + 0x93, 0x30, 0xab, 0x4e, 0x20, 0xc3, 0x8a, 0x30, 0x02, 0x21, 0x20, 0xd6, + 0xa5, 0x20, 0x29, 0xa6, 0x20, 0x5e, 0xa2, 0x28, 0xa3, 0x2f, 0x28, 0xa0, + 0xb8, 0x28, 0x23, 0x26, 0x30, 0xd9, 0x81, 0x18, +}; + +static const u8 data_segment_data_w2c_highlights_d113[] = { + 0x0f, 0x03, 0x14, 0x1c, 0x05, 0x37, 0x02, 0x01, 0x69, 0x3b, 0x18, 0x5e, + 0x62, 0x28, 0x4f, 0x41, 0x10, 0xe1, 0x43, 0x10, 0xdb, 0x3b, 0x18, 0x8a, + 0x66, 0x28, 0xa6, 0x6e, 0x30, 0x98, 0x65, 0x30, 0xba, 0x65, 0x20, 0x00, + 0x00, 0x00, 0xf2, 0x64, 0x20, 0xb0, 0x4a, 0x20, 0xdc, 0x68, 0x30, 0x42, + 0x61, 0x20, 0xd0, 0x63, 0x18, 0x4f, 0x6c, 0x30, 0xa3, 0x3b, 0x18, 0x66, + 0x45, 0x28, 0xd8, 0x3b, 0x18, 0x55, 0x61, 0x28, 0xd9, 0x69, 0x18, 0xd6, + 0x65, 0x20, 0xda, 0x73, 0x30, 0x60, 0x60, 0x30, 0xb7, 0x55, 0x20, 0x8d, + 0x72, 0x28, 0x02, 0x41, 0x20, 0x90, 0x3b, 0x20, +}; + +static const u8 data_segment_data_w2c_highlights_d114[] = { + 0x07, 0x13, 0x7a, 0x03, 0x00, 0x0c, 0x00, 0x03, 0x1f, 0x24, 0x00, 0x06, + 0x3a, 0x33, 0x00, 0xd0, 0x32, 0x50, 0x88, 0x81, 0x18, 0xad, 0xc1, 0x90, + 0x49, 0xdb, 0x18, 0xeb, 0x23, 0x20, 0xb7, 0x35, 0x20, 0xac, 0x87, 0x18, + 0xee, 0xaa, 0x28, 0xe9, 0xaa, 0x50, 0x26, 0x8e, 0x40, 0x45, 0x22, 0x38, + 0x73, 0x87, 0x30, 0xea, 0x20, 0x18, 0xf5, 0xb4, 0x48, 0x86, 0x36, 0x40, + 0xd0, 0x25, 0x30, 0xad, 0xc1, 0x38, 0x55, 0xc6, 0x30, 0xf6, 0x8c, 0x50, + 0x02, 0x21, 0x20, 0x19, 0x2b, 0x28, 0x18, 0x90, 0x60, 0x5c, 0x89, 0x28, + 0xa1, 0x61, 0x28, 0xc3, 0xc7, 0x18, 0xc8, 0x96, 0x40, 0xab, 0xee, 0x20, + 0x4f, 0x21, 0x10, 0x69, 0xdb, 0x18, 0x4b, 0x29, 0x30, 0xc4, 0xc9, 0x20, + 0x59, 0xa2, 0x20, 0x24, 0x32, 0x28, 0xd4, 0xa7, 0x38, 0x4e, 0x60, 0x30, + 0xd8, 0xdb, 0x18, 0x7a, 0x47, 0x10, 0xd5, 0xc0, 0x28, 0x03, 0x37, 0x38, + 0x5f, 0xfa, 0x28, 0xe5, 0xa1, 0x38, 0xf2, 0xa4, 0x40, 0xe6, 0xdb, 0x18, + 0x9d, 0xaf, 0x38, 0x00, 0x00, 0x12, 0x00, 0x13, 0x01, 0x13, 0x02, 0x13, + 0x00, 0x11, 0x00, 0x38, 0x00, 0x03, +}; + +static const u8 data_segment_data_w2c_highlights_d115[] = { + 0x01, 0x23, 0x10, 0x0e, 0x04, 0x19, 0x02, 0x02, 0x05, 0x1b, 0x00, 0x0d, + 0x0a, 0x00, 0x11, 0x00, 0x05, 0x0a, 0x02, 0x0a, 0x0c, 0x04, 0x05, 0x50, + 0x13, 0x1e, 0x00, 0x06, 0x00, 0x02, 0x09, 0x01, 0x79, 0x73, 0x30, 0xab, + 0xae, 0x21, 0xa8, 0x95, 0x41, 0x5e, 0x08, 0x42, 0xd1, 0x26, 0x29, 0x4e, + 0x60, 0x30, 0x20, 0x99, 0x31, 0xa9, 0x14, 0x1a, 0x86, 0x97, 0x39, 0xfe, + 0x8f, 0x61, 0x69, 0x9b, 0x19, 0x1b, 0x0e, 0x42, 0x01, 0x68, 0x19, 0x48, + 0x34, 0x31, 0x5a, 0x86, 0x31, 0xcf, 0x0d, 0x3a, 0x68, 0x0a, 0x22, 0x16, + 0x9a, 0x29, 0x2f, 0x92, 0x51, 0xa3, 0x9b, 0x19, 0x58, 0x13, 0x4a, 0xe5, + 0x7a, 0x28, 0xa9, 0x96, 0x39, 0xbc, 0x1b, 0x1a, 0xfe, 0x8f, 0x31, 0xc4, + 0x89, 0x21, 0x26, 0x65, 0x20, 0x06, 0x60, 0x11, 0x9f, 0x26, 0x49, 0x19, + 0xab, 0x28, 0x2f, 0x8b, 0x71, 0xac, 0x47, 0x18, 0x4f, 0x81, 0x10, 0x0b, + 0x90, 0x61, 0xf0, 0x0b, 0x32, 0x49, 0x9b, 0x19, 0x6c, 0x95, 0x41, 0xa1, + 0x26, 0x39, 0x7a, 0x27, 0x10, 0xd5, 0x9b, 0x19, 0x76, 0x93, 0x49, 0xce, + 0x06, 0x41, 0x94, 0x9b, 0x21, 0x10, 0xc6, 0x49, 0x4f, 0x4c, 0x31, 0x51, + 0x0a, 0x2a, 0xdc, 0x02, 0x5a, 0x81, 0x09, 0x42, 0x5c, 0x49, 0x28, 0x4d, + 0x99, 0x29, 0xea, 0xa0, 0x18, 0x38, 0x19, 0x29, 0xfb, 0x95, 0x41, 0xaa, + 0x9a, 0x21, 0x59, 0xd1, 0x59, 0x60, 0xe8, 0x31, 0x02, 0x01, 0x21, 0xb2, + 0x05, 0x2a, 0xf2, 0x89, 0x41, 0xb5, 0x90, 0x39, 0x00, 0x61, 0x31, 0x51, + 0xc3, 0x21, 0x24, 0xf2, 0x28, 0x5f, 0xba, 0x29, 0x4b, 0xc9, 0x30, 0xd0, + 0x25, 0x31, 0x42, 0x81, 0x21, 0x3f, 0x19, 0x32, 0xf6, 0x9a, 0x29, 0x86, + 0xf6, 0x40, 0x6f, 0x20, 0x19, 0x48, 0x06, 0x5a, 0xb5, 0x90, 0x59, 0xc1, + 0x05, 0x4a, 0x00, 0x00, 0x13, 0x01, 0x13, 0x02, 0x13, 0x03, 0x12, 0x04, + 0x12, 0x05, 0x12, 0x06, 0x12, 0x07, 0x12, 0x08, 0x12, 0x09, 0x14, 0x00, + 0x15, 0x00, 0x38, 0x00, 0x03, 0x00, 0x07, 0x00, 0x11, 0x0f, 0x11, 0x10, + +}; + +static const u8 data_segment_data_w2c_highlights_d116[] = { + 0x28, 0x00, 0x28, 0x00, 0x34, 0x00, 0x97, 0x00, 0x93, 0x01, 0x3d, 0x02, + 0x9d, 0x02, 0x1b, 0x03, 0x43, 0x03, 0x82, 0x03, 0x96, 0x03, 0x04, 0x04, + 0x28, 0x04, 0x5c, 0x04, 0x86, 0x04, 0x95, 0x04, 0x95, 0x04, 0x95, 0x04, + 0xa7, 0x04, 0xba, 0x04, 0x06, 0x63, 0x3c, 0x72, 0x15, 0x66, 0x06, 0x68, + 0x34, 0x6d, 0x02, 0x73, 0x07, 0x63, 0x33, 0x1c, 0x67, 0x6f, 0x23, 0x6a, + 0x73, 0x48, 0x74, 0x73, 0x0b, 0x63, 0x23, 0x0a, 0x63, 0x63, 0x2c, 0x63, + 0x6c, 0x0b, 0x63, 0x73, 0x0d, 0x63, 0x75, 0x2c, 0x65, 0x6c, 0x11, 0x65, + 0x78, 0x16, 0x66, 0x23, 0x16, 0x66, 0x73, 0x18, 0x67, 0x64, 0x1e, 0x67, + 0x79, 0x0a, 0x68, 0x68, 0x1f, 0x68, 0x73, 0x28, 0x6a, 0x6c, 0x29, 0x6b, + 0x74, 0x2f, 0x6d, 0x64, 0x2e, 0x6d, 0x6b, 0x35, 0x6d, 0x6c, 0x34, 0x6d, + 0x6d, 0x37, 0x70, 0x6c, 0x37, 0x70, 0x6d, 0x36, 0x70, 0x70, 0x39, 0x70, + 0x73, 0x3b, 0x70, 0x79, 0x3d, 0x72, 0x62, 0x3e, 0x72, 0x73, 0x40, 0x73, + 0x63, 0x04, 0x73, 0x68, 0x46, 0x74, 0x66, 0x02, 0x61, 0x73, 0x6d, 0x0a, + 0x63, 0x70, 0x70, 0x0c, 0x63, 0x73, 0x73, 0x12, 0x65, 0x6c, 0x6d, 0x27, + 0x6a, 0x73, 0x78, 0x2d, 0x6c, 0x75, 0x61, 0x31, 0x6d, 0x64, 0x78, 0x32, + 0x6e, 0x69, 0x6d, 0x33, 0x6e, 0x69, 0x78, 0x38, 0x70, 0x68, 0x70, 0x43, + 0x73, 0x71, 0x6c, 0x4a, 0x74, 0x73, 0x78, 0x4b, 0x76, 0x75, 0x65, 0x4c, + 0x77, 0x61, 0x74, 0x4e, 0x78, 0x6d, 0x6c, 0x50, 0x7a, 0x69, 0x67, 0x05, + 0x62, 0x61, 0x74, 0x0a, 0x63, 0x2b, 0x2b, 0x23, 0x63, 0x6a, 0x73, 0x08, + 0x63, 0x6c, 0x6a, 0x05, 0x63, 0x6d, 0x64, 0x48, 0x63, 0x74, 0x73, 0x0d, + 0x63, 0x75, 0x68, 0x0a, 0x63, 0x78, 0x78, 0x05, 0x64, 0x6f, 0x73, 0x36, + 0x64, 0x70, 0x6b, 0x36, 0x64, 0x70, 0x72, 0x08, 0x65, 0x64, 0x6e, 0x13, + 0x65, 0x72, 0x6c, 0x11, 0x65, 0x78, 0x73, 0x14, 0x66, 0x30, 0x33, 0x14, + 0x66, 0x30, 0x38, 0x15, 0x66, 0x37, 0x37, 0x14, 0x66, 0x39, 0x30, 0x14, + 0x66, 0x39, 0x35, 0x15, 0x66, 0x6f, 0x72, 0x16, 0x66, 0x73, 0x69, 0x16, + 0x66, 0x73, 0x78, 0x1d, 0x67, 0x71, 0x6c, 0x1e, 0x67, 0x73, 0x68, 0x1e, + 0x67, 0x76, 0x79, 0x46, 0x68, 0x63, 0x6c, 0x0a, 0x68, 0x70, 0x70, 0x13, + 0x68, 0x72, 0x6c, 0x21, 0x68, 0x74, 0x6d, 0x0a, 0x68, 0x78, 0x78, 0x29, + 0x6b, 0x74, 0x73, 0x36, 0x6c, 0x70, 0x72, 0x2c, 0x6c, 0x73, 0x70, 0x23, + 0x6d, 0x6a, 0x73, 0x35, 0x6d, 0x6c, 0x69, 0x48, 0x6d, 0x74, 0x73, 0x36, + 0x70, 0x61, 0x73, 0x39, 0x70, 0x73, 0x31, 0x40, 0x73, 0x62, 0x74, 0x2c, + 0x73, 0x63, 0x6d, 0x42, 0x73, 0x6f, 0x6c, 0x4e, 0x73, 0x76, 0x67, 0x2a, + 0x74, 0x65, 0x78, 0x4e, 0x78, 0x73, 0x64, 0x4f, 0x79, 0x6d, 0x6c, 0x50, + 0x7a, 0x6f, 0x6e, 0x04, 0x7a, 0x73, 0x68, 0x04, 0x62, 0x61, 0x73, 0x68, + 0x0d, 0x63, 0x75, 0x64, 0x61, 0x0e, 0x64, 0x61, 0x72, 0x74, 0x0f, 0x64, + 0x69, 0x66, 0x66, 0x1b, 0x67, 0x6c, 0x73, 0x6c, 0x20, 0x68, 0x6c, 0x73, + 0x6c, 0x21, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x6a, 0x61, 0x76, 0x61, 0x24, + 0x6a, 0x73, 0x6f, 0x6e, 0x2b, 0x6c, 0x65, 0x73, 0x73, 0x2c, 0x6c, 0x69, + 0x73, 0x70, 0x34, 0x6f, 0x62, 0x6a, 0x63, 0x37, 0x70, 0x65, 0x72, 0x6c, + 0x3d, 0x72, 0x75, 0x62, 0x79, 0x3e, 0x72, 0x75, 0x73, 0x74, 0x3f, 0x73, + 0x61, 0x73, 0x73, 0x41, 0x73, 0x63, 0x73, 0x73, 0x47, 0x74, 0x6f, 0x6d, + 0x6c, 0x49, 0x74, 0x73, 0x72, 0x78, 0x4d, 0x77, 0x67, 0x73, 0x6c, 0x4f, + 0x79, 0x61, 0x6d, 0x6c, 0x08, 0x63, 0x6c, 0x6a, 0x63, 0x08, 0x63, 0x6c, + 0x6a, 0x73, 0x1b, 0x63, 0x6f, 0x6d, 0x70, 0x1b, 0x66, 0x72, 0x61, 0x67, + 0x1b, 0x67, 0x65, 0x6f, 0x6d, 0x2e, 0x6d, 0x61, 0x6b, 0x65, 0x39, 0x70, + 0x73, 0x64, 0x31, 0x39, 0x70, 0x73, 0x6d, 0x31, 0x39, 0x70, 0x77, 0x73, + 0x68, 0x17, 0x74, 0x72, 0x65, 0x73, 0x17, 0x74, 0x73, 0x63, 0x6e, 0x1b, + 0x76, 0x65, 0x72, 0x74, 0x4c, 0x77, 0x61, 0x73, 0x6d, 0x03, 0x61, 0x73, + 0x74, 0x72, 0x6f, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x09, 0x63, 0x6d, + 0x61, 0x6b, 0x65, 0x1a, 0x67, 0x6c, 0x65, 0x61, 0x6d, 0x25, 0x6a, 0x73, + 0x6f, 0x6e, 0x35, 0x26, 0x6a, 0x73, 0x6f, 0x6e, 0x6c, 0x28, 0x6a, 0x75, + 0x6c, 0x69, 0x61, 0x2a, 0x6c, 0x61, 0x74, 0x65, 0x78, 0x35, 0x6f, 0x63, + 0x61, 0x6d, 0x6c, 0x3a, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x40, 0x73, 0x63, + 0x61, 0x6c, 0x61, 0x45, 0x73, 0x77, 0x69, 0x66, 0x74, 0x2c, 0x65, 0x6c, + 0x69, 0x73, 0x70, 0x24, 0x6a, 0x73, 0x6f, 0x6e, 0x63, 0x0f, 0x70, 0x61, + 0x74, 0x63, 0x68, 0x04, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x0b, 0x63, 0x73, + 0x68, 0x61, 0x72, 0x70, 0x11, 0x65, 0x6c, 0x69, 0x78, 0x69, 0x72, 0x13, + 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x67, 0x16, 0x66, 0x73, 0x68, 0x61, 0x72, + 0x70, 0x1e, 0x67, 0x72, 0x6f, 0x6f, 0x76, 0x79, 0x29, 0x6b, 0x6f, 0x74, + 0x6c, 0x69, 0x6e, 0x30, 0x6d, 0x61, 0x74, 0x6c, 0x61, 0x62, 0x36, 0x70, + 0x61, 0x73, 0x63, 0x61, 0x6c, 0x3b, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, + 0x44, 0x73, 0x76, 0x65, 0x6c, 0x74, 0x65, 0x36, 0x64, 0x65, 0x6c, 0x70, + 0x68, 0x69, 0x10, 0x64, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x1c, 0x67, 0x6f, + 0x6c, 0x61, 0x6e, 0x67, 0x1e, 0x67, 0x72, 0x61, 0x64, 0x6c, 0x65, 0x34, + 0x6f, 0x62, 0x6a, 0x63, 0x70, 0x70, 0x30, 0x6f, 0x63, 0x74, 0x61, 0x76, + 0x65, 0x2c, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x46, 0x74, 0x66, 0x76, + 0x61, 0x72, 0x73, 0x08, 0x63, 0x6c, 0x6f, 0x6a, 0x75, 0x72, 0x65, 0x14, + 0x66, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x6e, 0x1d, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x71, 0x6c, 0x1f, 0x68, 0x61, 0x73, 0x6b, 0x65, 0x6c, 0x6c, 0x3c, + 0x72, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x67, 0x64, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x19, 0x67, 0x64, 0x73, 0x68, 0x61, 0x64, 0x65, + 0x72, 0x2e, 0x6d, 0x61, 0x6b, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x6d, + 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x42, 0x73, 0x6f, 0x6c, 0x69, + 0x64, 0x69, 0x74, 0x79, 0x02, 0x61, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, + 0x79, 0x3a, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x46, 0x74, + 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x05, 0x62, 0x61, 0x74, + 0x63, 0x68, 0x66, 0x69, 0x6c, 0x65, 0x10, 0x64, 0x6f, 0x63, 0x6b, 0x65, + 0x72, 0x66, 0x69, 0x6c, 0x65, 0x17, 0x67, 0x64, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x39, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x73, 0x68, + 0x65, 0x6c, 0x6c, 0x48, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x2d, + 0x74, 0x73, 0x2c, 0x65, 0x6d, 0x61, 0x63, 0x73, 0x2d, 0x6c, 0x69, 0x73, + 0x70, 0x0f, 0x67, 0x69, 0x74, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x0f, 0x67, 0x69, 0x74, 0x2d, 0x72, 0x65, 0x62, 0x61, 0x73, 0x65, 0x23, + 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x34, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x63, 0x48, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x19, 0x67, 0x64, 0x73, + 0x68, 0x61, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x63, 0x34, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x63, 0x04, 0x73, 0x68, 0x65, + 0x6c, 0x6c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x01, 0x61, 0x6e, 0x67, + 0x75, 0x6c, 0x61, 0x72, 0x2d, 0x68, 0x74, 0x6d, 0x6c, 0x19, 0x67, 0x6f, + 0x64, 0x6f, 0x74, 0x2d, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x36, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x70, 0x61, 0x73, 0x63, 0x61, 0x6c, 0x04, + 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x66, 0x69, + 0x6c, 0x65, 0x36, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2d, 0x70, 0x61, + 0x73, 0x63, 0x61, 0x6c, 0x34, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x63, 0x70, 0x70, 0x17, 0x67, 0x6f, 0x64, 0x6f, 0x74, + 0x2d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x14, 0x66, 0x6f, + 0x72, 0x74, 0x72, 0x61, 0x6e, 0x2d, 0x66, 0x72, 0x65, 0x65, 0x2d, 0x66, + 0x6f, 0x72, 0x6d, 0x15, 0x66, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x6e, 0x2d, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x2d, 0x66, 0x6f, 0x72, 0x6d, +}; + +static void init_memories(w2c_highlights* instance) { + wasm_rt_allocate_memory(&instance->w2c_memory, 3, 65536, 0, 65536); + LOAD_DATA(instance->w2c_memory, 3481u, data_segment_data_w2c_highlights_d0, 5); + LOAD_DATA(instance->w2c_memory, 3504u, data_segment_data_w2c_highlights_d1, 16); + LOAD_DATA(instance->w2c_memory, 3532u, data_segment_data_w2c_highlights_d2, 5); + LOAD_DATA(instance->w2c_memory, 3563u, data_segment_data_w2c_highlights_d3, 6); + LOAD_DATA(instance->w2c_memory, 3596u, data_segment_data_w2c_highlights_d4, 3); + LOAD_DATA(instance->w2c_memory, 3738u, data_segment_data_w2c_highlights_d5, 4); + LOAD_DATA(instance->w2c_memory, 3761u, data_segment_data_w2c_highlights_d6, 15); + LOAD_DATA(instance->w2c_memory, 3787u, data_segment_data_w2c_highlights_d7, 6); + LOAD_DATA(instance->w2c_memory, 3819u, data_segment_data_w2c_highlights_d8, 36); + LOAD_DATA(instance->w2c_memory, 3984u, data_segment_data_w2c_highlights_d9, 14); + LOAD_DATA(instance->w2c_memory, 4016u, data_segment_data_w2c_highlights_d10, 16); + LOAD_DATA(instance->w2c_memory, 4042u, data_segment_data_w2c_highlights_d11, 7); + LOAD_DATA(instance->w2c_memory, 4075u, data_segment_data_w2c_highlights_d12, 6); + LOAD_DATA(instance->w2c_memory, 4107u, data_segment_data_w2c_highlights_d13, 4); + LOAD_DATA(instance->w2c_memory, 4273u, data_segment_data_w2c_highlights_d14, 15); + LOAD_DATA(instance->w2c_memory, 4298u, data_segment_data_w2c_highlights_d15, 6); + LOAD_DATA(instance->w2c_memory, 4331u, data_segment_data_w2c_highlights_d16, 4); + LOAD_DATA(instance->w2c_memory, 4363u, data_segment_data_w2c_highlights_d17, 4); + LOAD_DATA(instance->w2c_memory, 4506u, data_segment_data_w2c_highlights_d18, 4); + LOAD_DATA(instance->w2c_memory, 4529u, data_segment_data_w2c_highlights_d19, 15); + LOAD_DATA(instance->w2c_memory, 4556u, data_segment_data_w2c_highlights_d20, 10); + LOAD_DATA(instance->w2c_memory, 4575u, data_segment_data_w2c_highlights_d21, 23); + LOAD_DATA(instance->w2c_memory, 4607u, data_segment_data_w2c_highlights_d22, 16); + LOAD_DATA(instance->w2c_memory, 4785u, data_segment_data_w2c_highlights_d23, 15); + LOAD_DATA(instance->w2c_memory, 4810u, data_segment_data_w2c_highlights_d24, 7); + LOAD_DATA(instance->w2c_memory, 4843u, data_segment_data_w2c_highlights_d25, 6); + LOAD_DATA(instance->w2c_memory, 4866u, data_segment_data_w2c_highlights_d26, 13); + LOAD_DATA(instance->w2c_memory, 5041u, data_segment_data_w2c_highlights_d27, 15); + LOAD_DATA(instance->w2c_memory, 5066u, data_segment_data_w2c_highlights_d28, 7); + LOAD_DATA(instance->w2c_memory, 5100u, data_segment_data_w2c_highlights_d29, 3); + LOAD_DATA(instance->w2c_memory, 5131u, data_segment_data_w2c_highlights_d30, 4); + LOAD_DATA(instance->w2c_memory, 5264u, data_segment_data_w2c_highlights_d31, 14); + LOAD_DATA(instance->w2c_memory, 5296u, data_segment_data_w2c_highlights_d32, 16); + LOAD_DATA(instance->w2c_memory, 5322u, data_segment_data_w2c_highlights_d33, 68); + LOAD_DATA(instance->w2c_memory, 5530u, data_segment_data_w2c_highlights_d34, 4); + LOAD_DATA(instance->w2c_memory, 5553u, data_segment_data_w2c_highlights_d35, 15); + LOAD_DATA(instance->w2c_memory, 5578u, data_segment_data_w2c_highlights_d36, 7); + LOAD_DATA(instance->w2c_memory, 5611u, data_segment_data_w2c_highlights_d37, 6); + LOAD_DATA(instance->w2c_memory, 5643u, data_segment_data_w2c_highlights_d38, 4); + LOAD_DATA(instance->w2c_memory, 5785u, data_segment_data_w2c_highlights_d39, 5); + LOAD_DATA(instance->w2c_memory, 5808u, data_segment_data_w2c_highlights_d40, 16); + LOAD_DATA(instance->w2c_memory, 5834u, data_segment_data_w2c_highlights_d41, 7); + LOAD_DATA(instance->w2c_memory, 5867u, data_segment_data_w2c_highlights_d42, 4); + LOAD_DATA(instance->w2c_memory, 5899u, data_segment_data_w2c_highlights_d43, 4); + LOAD_DATA(instance->w2c_memory, 6065u, data_segment_data_w2c_highlights_d44, 15); + LOAD_DATA(instance->w2c_memory, 6090u, data_segment_data_w2c_highlights_d45, 37); + LOAD_DATA(instance->w2c_memory, 6146u, data_segment_data_w2c_highlights_d46, 13); + LOAD_DATA(instance->w2c_memory, 6301u, data_segment_data_w2c_highlights_d47, 1); + LOAD_DATA(instance->w2c_memory, 6320u, data_segment_data_w2c_highlights_d48, 16); + LOAD_DATA(instance->w2c_memory, 6348u, data_segment_data_w2c_highlights_d49, 4); + LOAD_DATA(instance->w2c_memory, 6380u, data_segment_data_w2c_highlights_d50, 35); + LOAD_DATA(instance->w2c_memory, 448u, data_segment_data_w2c_highlights_d51, 219); + LOAD_DATA(instance->w2c_memory, 667u, data_segment_data_w2c_highlights_d52, 679); + LOAD_DATA(instance->w2c_memory, 7056u, data_segment_data_w2c_highlights_d53, 150); + LOAD_DATA(instance->w2c_memory, 28352u, data_segment_data_w2c_highlights_d54, 7160); + LOAD_DATA(instance->w2c_memory, 13984u, data_segment_data_w2c_highlights_d55, 142); + LOAD_DATA(instance->w2c_memory, 38592u, data_segment_data_w2c_highlights_d56, 1); + LOAD_DATA(instance->w2c_memory, 38602u, data_segment_data_w2c_highlights_d57, 125); + LOAD_DATA(instance->w2c_memory, 27233u, data_segment_data_w2c_highlights_d58, 537); + LOAD_DATA(instance->w2c_memory, 38736u, data_segment_data_w2c_highlights_d59, 135); + LOAD_DATA(instance->w2c_memory, 14144u, data_segment_data_w2c_highlights_d60, 83); + LOAD_DATA(instance->w2c_memory, 14240u, data_segment_data_w2c_highlights_d61, 192); + LOAD_DATA(instance->w2c_memory, 14496u, data_segment_data_w2c_highlights_d62, 191); + LOAD_DATA(instance->w2c_memory, 14688u, data_segment_data_w2c_highlights_d63, 365); + LOAD_DATA(instance->w2c_memory, 15073u, data_segment_data_w2c_highlights_d64, 196); + LOAD_DATA(instance->w2c_memory, 15296u, data_segment_data_w2c_highlights_d65, 229); + LOAD_DATA(instance->w2c_memory, 15552u, data_segment_data_w2c_highlights_d66, 345); + LOAD_DATA(instance->w2c_memory, 16320u, data_segment_data_w2c_highlights_d67, 113); + LOAD_DATA(instance->w2c_memory, 15904u, data_segment_data_w2c_highlights_d68, 400); + LOAD_DATA(instance->w2c_memory, 16512u, data_segment_data_w2c_highlights_d69, 278); + LOAD_DATA(instance->w2c_memory, 16800u, data_segment_data_w2c_highlights_d70, 61); + LOAD_DATA(instance->w2c_memory, 16864u, data_segment_data_w2c_highlights_d71, 154); + LOAD_DATA(instance->w2c_memory, 17024u, data_segment_data_w2c_highlights_d72, 110); + LOAD_DATA(instance->w2c_memory, 17152u, data_segment_data_w2c_highlights_d73, 161); + LOAD_DATA(instance->w2c_memory, 17345u, data_segment_data_w2c_highlights_d74, 500); + LOAD_DATA(instance->w2c_memory, 23553u, data_segment_data_w2c_highlights_d75, 242); + LOAD_DATA(instance->w2c_memory, 17856u, data_segment_data_w2c_highlights_d76, 379); + LOAD_DATA(instance->w2c_memory, 25408u, data_segment_data_w2c_highlights_d77, 287); + LOAD_DATA(instance->w2c_memory, 18240u, data_segment_data_w2c_highlights_d78, 92); + LOAD_DATA(instance->w2c_memory, 18400u, data_segment_data_w2c_highlights_d79, 37); + LOAD_DATA(instance->w2c_memory, 18465u, data_segment_data_w2c_highlights_d80, 156); + LOAD_DATA(instance->w2c_memory, 19488u, data_segment_data_w2c_highlights_d81, 67); + LOAD_DATA(instance->w2c_memory, 19744u, data_segment_data_w2c_highlights_d82, 286); + LOAD_DATA(instance->w2c_memory, 18656u, data_segment_data_w2c_highlights_d83, 328); + LOAD_DATA(instance->w2c_memory, 19616u, data_segment_data_w2c_highlights_d84, 98); + LOAD_DATA(instance->w2c_memory, 20032u, data_segment_data_w2c_highlights_d85, 188); + LOAD_DATA(instance->w2c_memory, 20224u, data_segment_data_w2c_highlights_d86, 93); + LOAD_DATA(instance->w2c_memory, 20321u, data_segment_data_w2c_highlights_d87, 218); + LOAD_DATA(instance->w2c_memory, 20544u, data_segment_data_w2c_highlights_d88, 208); + LOAD_DATA(instance->w2c_memory, 20768u, data_segment_data_w2c_highlights_d89, 232); + LOAD_DATA(instance->w2c_memory, 21024u, data_segment_data_w2c_highlights_d90, 223); + LOAD_DATA(instance->w2c_memory, 21248u, data_segment_data_w2c_highlights_d91, 176); + LOAD_DATA(instance->w2c_memory, 21440u, data_segment_data_w2c_highlights_d92, 255); + LOAD_DATA(instance->w2c_memory, 21698u, data_segment_data_w2c_highlights_d93, 256); + LOAD_DATA(instance->w2c_memory, 21984u, data_segment_data_w2c_highlights_d94, 308); + LOAD_DATA(instance->w2c_memory, 22304u, data_segment_data_w2c_highlights_d95, 89); + LOAD_DATA(instance->w2c_memory, 22400u, data_segment_data_w2c_highlights_d96, 175); + LOAD_DATA(instance->w2c_memory, 22592u, data_segment_data_w2c_highlights_d97, 134); + LOAD_DATA(instance->w2c_memory, 22752u, data_segment_data_w2c_highlights_d98, 370); + LOAD_DATA(instance->w2c_memory, 23136u, data_segment_data_w2c_highlights_d99, 106); + LOAD_DATA(instance->w2c_memory, 23264u, data_segment_data_w2c_highlights_d100, 274); + LOAD_DATA(instance->w2c_memory, 23810u, data_segment_data_w2c_highlights_d101, 547); + LOAD_DATA(instance->w2c_memory, 24384u, data_segment_data_w2c_highlights_d102, 251); + LOAD_DATA(instance->w2c_memory, 24641u, data_segment_data_w2c_highlights_d103, 179); + LOAD_DATA(instance->w2c_memory, 24898u, data_segment_data_w2c_highlights_d104, 333); + LOAD_DATA(instance->w2c_memory, 25249u, data_segment_data_w2c_highlights_d105, 147); + LOAD_DATA(instance->w2c_memory, 25697u, data_segment_data_w2c_highlights_d106, 67); + LOAD_DATA(instance->w2c_memory, 25792u, data_segment_data_w2c_highlights_d107, 184); + LOAD_DATA(instance->w2c_memory, 25984u, data_segment_data_w2c_highlights_d108, 205); + LOAD_DATA(instance->w2c_memory, 26209u, data_segment_data_w2c_highlights_d109, 199); + LOAD_DATA(instance->w2c_memory, 26433u, data_segment_data_w2c_highlights_d110, 384); + LOAD_DATA(instance->w2c_memory, 26880u, data_segment_data_w2c_highlights_d111, 236); + LOAD_DATA(instance->w2c_memory, 27136u, data_segment_data_w2c_highlights_d112, 92); + LOAD_DATA(instance->w2c_memory, 27776u, data_segment_data_w2c_highlights_d113, 92); + LOAD_DATA(instance->w2c_memory, 27873u, data_segment_data_w2c_highlights_d114, 162); + LOAD_DATA(instance->w2c_memory, 28064u, data_segment_data_w2c_highlights_d115, 288); + LOAD_DATA(instance->w2c_memory, 1360u, data_segment_data_w2c_highlights_d116, 1210); +} + +static void init_data_instances(w2c_highlights *instance) { +} + +static const wasm_elem_segment_expr_t elem_segment_exprs_w2c_highlights_e0[] = { + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f406, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f128, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f232, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f209, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f238, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f239, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f242, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f245, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f249, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f256, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f258, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f260, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f91, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f261, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f262, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f265, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f271, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f274, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f275, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f277, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f280, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f281, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f292, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f298, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f297, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f301, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f303, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f299, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f305, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f306, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f308, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f310, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f311, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f118, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f312, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f151, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f313, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f314, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f315, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f173, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f322, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f324, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f327, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f92, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f330, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f332, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f338, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f229, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f341, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f345, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f349, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f352, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f354, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f285, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f356, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f359, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f364, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f368, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f369, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f295, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f371, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f372, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f373, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f94, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f375, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f93, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f376, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f377, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f203, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f379, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f380, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f391, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f180, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f188, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f193, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f396, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f398, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f399, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f102, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f202, {NULL}, 0}, + {RefFunc, w2c_highlights_t1, (wasm_rt_function_ptr_t)wrap_w2c_highlights_f405, {NULL}, 0}, +}; + +static void init_tables(w2c_highlights* instance) { + wasm_rt_allocate_funcref_table(&instance->w2c_T0, 81, 81); + funcref_table_init(&instance->w2c_T0, elem_segment_exprs_w2c_highlights_e0, 81, 0u, 0, 81, instance); +} + +static void init_elem_instances(w2c_highlights *instance) { +} + +/* export: 'memory' */ +wasm_rt_memory_t* w2c_highlights_memory(w2c_highlights* instance) { + return &instance->w2c_memory; +} + +/* export: 'liveStage' */ +u32 w2c_highlights_liveStage(w2c_highlights* instance, u32 var_p0) { +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + u32 ret = w2c_highlights_liveStage_0(instance, var_p0); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif + return ret; +} + +/* export: 'liveInitDoc' */ +void w2c_highlights_liveInitDoc(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + w2c_highlights_liveInitDoc_0(instance, var_p0, var_p1, var_p2); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif +} + +/* export: 'liveApplyEdits' */ +void w2c_highlights_liveApplyEdits(w2c_highlights* instance, u32 var_p0, u32 var_p1) { +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + w2c_highlights_liveApplyEdits_0(instance, var_p0, var_p1); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif +} + +/* export: 'liveRun' */ +u32 w2c_highlights_liveRun(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + u32 ret = w2c_highlights_liveRun_0(instance, var_p0, var_p1, var_p2); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif + return ret; +} + +/* export: 'liveLineCount' */ +u32 w2c_highlights_liveLineCount(w2c_highlights* instance) { +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + u32 ret = w2c_highlights_liveLineCount_0(instance); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif + return ret; +} + +/* export: 'liveLineLen' */ +u32 w2c_highlights_liveLineLen(w2c_highlights* instance, u32 var_p0) { +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + u32 ret = w2c_highlights_liveLineLen_0(instance, var_p0); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif + return ret; +} + +/* export: 'liveLineByteLen' */ +u32 w2c_highlights_liveLineByteLen(w2c_highlights* instance, u32 var_p0) { +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + u32 ret = w2c_highlights_liveLineByteLen_0(instance, var_p0); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif + return ret; +} + +/* export: 'liveLineTextPtr' */ +u32 w2c_highlights_liveLineTextPtr(w2c_highlights* instance, u32 var_p0) { +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + u32 ret = w2c_highlights_liveLineTextPtr_0(instance, var_p0); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif + return ret; +} + +/* export: 'liveLineFlags' */ +u32 w2c_highlights_liveLineFlags(w2c_highlights* instance, u32 var_p0) { +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + u32 ret = w2c_highlights_liveLineFlags_0(instance, var_p0); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif + return ret; +} + +/* export: 'liveLineTokPtr' */ +u32 w2c_highlights_liveLineTokPtr(w2c_highlights* instance, u32 var_p0) { +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + u32 ret = w2c_highlights_liveLineTokPtr_0(instance, var_p0); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif + return ret; +} + +/* export: 'liveLineTokCount' */ +u32 w2c_highlights_liveLineTokCount(w2c_highlights* instance, u32 var_p0) { +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + u32 ret = w2c_highlights_liveLineTokCount_0(instance, var_p0); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif + return ret; +} + +/* export: 'liveChangesPtr' */ +u32 w2c_highlights_liveChangesPtr(w2c_highlights* instance) { +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + u32 ret = w2c_highlights_liveChangesPtr_0(instance); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif + return ret; +} + +/* export: 'liveStats' */ +u32 w2c_highlights_liveStats(w2c_highlights* instance, u32 var_p0) { +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + u32 ret = w2c_highlights_liveStats_0(instance, var_p0); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif + return ret; +} + +/* export: 'highlight' */ +void w2c_highlights_highlight(w2c_highlights* instance) { +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + w2c_highlights_highlight_0(instance); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif +} + +/* export: 'highlightStream' */ +void w2c_highlights_highlightStream(w2c_highlights* instance, u32 var_p0) { +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + w2c_highlights_highlightStream_0(instance, var_p0); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif +} + +/* handler for missing tail-call on import: 'env' 'is_id_continue' */ +WEAK_FUNC_DECL(wasm_tailcall_w2c_env_is_id_continue, wasm_fallback_highlights_w2c_env_is_id_continue) +{ + next->fn = NULL; + struct wasm_multi_ii params; + wasm_rt_memcpy(¶ms, tail_call_stack, sizeof(params)); + u32 result = w2c_env_is_id_continue(*instance_ptr, params.i0, params.i1); + wasm_rt_memcpy(tail_call_stack, &result, sizeof(result)); +} + +/* handler for missing tail-call on import: 'env' 'is_id_start' */ +WEAK_FUNC_DECL(wasm_tailcall_w2c_env_is_id_start, wasm_fallback_highlights_w2c_env_is_id_start) +{ + next->fn = NULL; + struct wasm_multi_ii params; + wasm_rt_memcpy(¶ms, tail_call_stack, sizeof(params)); + u32 result = w2c_env_is_id_start(*instance_ptr, params.i0, params.i1); + wasm_rt_memcpy(tail_call_stack, &result, sizeof(result)); +} + +static void init_instance_import(w2c_highlights* instance, struct w2c_env* w2c_env_instance) { + instance->w2c_env_instance = w2c_env_instance; +} + +void wasm2c_highlights_instantiate(w2c_highlights* instance, struct w2c_env* w2c_env_instance) { + assert(wasm_rt_is_initialized()); + init_instance_import(instance, w2c_env_instance); + init_globals(instance); + init_tables(instance); + init_memories(instance); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE +#if !WASM_RT_SEGUE_FREE_SEGMENT + void* segue_saved_base = wasm_rt_segue_read_base(); +#endif + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + init_elem_instances(instance); + init_data_instances(instance); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE && !WASM_RT_SEGUE_FREE_SEGMENT + wasm_rt_segue_write_base(segue_saved_base); +#endif +} + +void wasm2c_highlights_free(w2c_highlights* instance) { + wasm_rt_free_funcref_table(&instance->w2c_T0); + wasm_rt_free_memory(&instance->w2c_memory); +} + +wasm_rt_func_type_t wasm2c_highlights_get_func_type(uint32_t param_count, uint32_t result_count, ...) { + va_list args; + + if (param_count == 1 && result_count == 1) { + va_start(args, result_count); + if (true && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32) { + va_end(args); + return w2c_highlights_t0; + } + va_end(args); + } + + if (param_count == 0 && result_count == 0) { + va_start(args, result_count); + if (true) { + va_end(args); + return w2c_highlights_t1; + } + va_end(args); + } + + if (param_count == 2 && result_count == 1) { + va_start(args, result_count); + if (true && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32) { + va_end(args); + return w2c_highlights_t2; + } + va_end(args); + } + + if (param_count == 1 && result_count == 0) { + va_start(args, result_count); + if (true && va_arg(args, int) == WASM_RT_I32) { + va_end(args); + return w2c_highlights_t3; + } + va_end(args); + } + + if (param_count == 2 && result_count == 0) { + va_start(args, result_count); + if (true && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32) { + va_end(args); + return w2c_highlights_t4; + } + va_end(args); + } + + if (param_count == 0 && result_count == 1) { + va_start(args, result_count); + if (true && va_arg(args, int) == WASM_RT_I32) { + va_end(args); + return w2c_highlights_t5; + } + va_end(args); + } + + if (param_count == 3 && result_count == 0) { + va_start(args, result_count); + if (true && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32) { + va_end(args); + return w2c_highlights_t6; + } + va_end(args); + } + + if (param_count == 3 && result_count == 1) { + va_start(args, result_count); + if (true && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32) { + va_end(args); + return w2c_highlights_t7; + } + va_end(args); + } + + if (param_count == 4 && result_count == 1) { + va_start(args, result_count); + if (true && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32) { + va_end(args); + return w2c_highlights_t8; + } + va_end(args); + } + + if (param_count == 5 && result_count == 1) { + va_start(args, result_count); + if (true && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32) { + va_end(args); + return w2c_highlights_t9; + } + va_end(args); + } + + if (param_count == 4 && result_count == 0) { + va_start(args, result_count); + if (true && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32) { + va_end(args); + return w2c_highlights_t10; + } + va_end(args); + } + + if (param_count == 5 && result_count == 0) { + va_start(args, result_count); + if (true && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32) { + va_end(args); + return w2c_highlights_t11; + } + va_end(args); + } + + if (param_count == 2 && result_count == 1) { + va_start(args, result_count); + if (true && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I64) { + va_end(args); + return w2c_highlights_t12; + } + va_end(args); + } + + if (param_count == 8 && result_count == 1) { + va_start(args, result_count); + if (true && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32 && va_arg(args, int) == WASM_RT_I32) { + va_end(args); + return w2c_highlights_t13; + } + va_end(args); + } + + return NULL; +} + +u32 w2c_highlights_f2(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i1 = 2u; + var_i0 <<= (var_i1 & 31); + var_i1 = var_p0; + var_i0 += var_i1; + var_i1 = 4294967232u; + var_i0 -= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f3(w2c_highlights* instance) { + u32 var_l1 = 0; + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + v128 var_o0, var_o1, var_o2; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_o0; + var_i1 = 10u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_o1 = var_l0; + var_i2 = 13u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_l1 = var_i0; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 16u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + } + } + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f4(w2c_highlights* instance) { + u32 var_l1 = 0; + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + v128 var_o0, var_o1, var_o2; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 42u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_l0 = var_o0; + var_i0 = simde_wasm_v128_any_true(var_o0); + if (var_i0) { + var_o0 = var_l0; + var_i1 = instance->w2c_g4; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 47u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o0 = simde_wasm_v128_and(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_l1 = var_i0; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i1 = I32_CTZ(var_i1); + var_i2 = 2u; + var_i1 += var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_B1; + } + } + var_i0 = instance->w2c_g4; + var_i1 = 16u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + var_B1:; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f5(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3, u32 var_p4) { + v128 var_l5 = simde_wasm_i64x2_make(0, 0), var_l6 = simde_wasm_i64x2_make(0, 0), var_l7 = simde_wasm_i64x2_make(0, 0), var_l8 = simde_wasm_i64x2_make(0, 0), var_l9 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + v128 var_o0, var_o1, var_o2, var_o3; + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_p0; + goto var_Bfunc; + } + var_i0 = var_p2; + var_o0 = simde_wasm_i8x16_splat(var_i0); + var_l6 = var_o0; + var_i0 = 92u; + var_i1 = var_p2; + var_i2 = var_p3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_o0 = simde_wasm_i8x16_splat(var_i0); + var_l7 = var_o0; + var_i0 = 10u; + var_i1 = var_p2; + var_i2 = var_p4; + var_i0 = var_i2 ? var_i0 : var_i1; + var_o0 = simde_wasm_i8x16_splat(var_i0); + var_l8 = var_o0; + var_i0 = 13u; + var_i1 = var_p2; + var_i2 = var_p4; + var_i0 = var_i2 ? var_i0 : var_i1; + var_o0 = simde_wasm_i8x16_splat(var_i0); + var_l9 = var_o0; + var_L1: + var_i0 = var_p0; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_o0; + var_o1 = var_l6; + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_o1 = var_l5; + var_o2 = var_l7; + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_o1 = var_l5; + var_o2 = var_l8; + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o2 = var_l5; + var_o3 = var_l9; + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_p2 = var_i0; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_p2; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + var_p0 = var_i0; + goto var_B2; + } + var_i0 = var_p1; + var_i1 = var_p0; + var_i2 = 16u; + var_i1 += var_i2; + var_p0 = var_i1; + var_i0 = var_i0 > var_i1; + if (var_i0) {goto var_L1;} + var_B2:; + var_i0 = var_p1; + var_i1 = var_p0; + var_i2 = var_p0; + var_i3 = var_p1; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f6(w2c_highlights* instance) { + u32 var_l0 = 0; + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + v128 var_o0, var_o1, var_o2; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 9u; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 9u; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + goto var_Bfunc; + } + var_L4: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_o0; + var_i1 = 32u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_o1 = var_l1; + var_i2 = 9u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_sub(var_o1, var_o2); + var_i2 = 4u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_u8x16_le(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_i1 = 65535u; + var_i0 ^= var_i1; + var_l0 = var_i0; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 16u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L4; + } + } + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f7(w2c_highlights* instance, u32 var_p0) { + u32 var_l2 = 0; + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + v128 var_o0, var_o1, var_o2, var_o3, var_o4; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_L1: + var_i0 = instance->w2c_g4; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_o0; + var_i1 = 32u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i1 = 97u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_sub(var_o0, var_o1); + var_i1 = 25u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_u8x16_le(var_o0, var_o1); + var_o1 = var_l1; + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_o1 = var_l1; + var_i2 = 48u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_sub(var_o1, var_o2); + var_i2 = 9u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_u8x16_le(var_o1, var_o2); + var_o2 = var_l1; + var_i3 = 95u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o3 = var_l1; + var_i4 = var_p0; + var_o4 = simde_wasm_i8x16_splat(var_i4); + var_o3 = simde_wasm_i8x16_eq(var_o3, var_o4); + var_o2 = simde_wasm_v128_or(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_i1 = 65535u; + var_i0 ^= var_i1; + var_l2 = var_i0; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_B2; + } + var_i0 = instance->w2c_g4; + var_i1 = 16u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L1;} + var_B2:; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f8(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + u32 var_l5 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + v128 var_o0, var_o1, var_o2; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + goto var_Bfunc; + } + var_L1: + var_i0 = var_p0; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_o0; + var_i1 = var_p1; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_o1 = var_l4; + var_i2 = var_p2; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_o1 = var_l4; + var_i2 = var_p3; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_l5 = var_i0; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_l5; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + var_p0 = var_i0; + goto var_B2; + } + var_i0 = var_p0; + var_i1 = 16u; + var_i0 += var_i1; + var_p0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L1;} + var_B2:; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f9(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p1; + var_i1 = var_p0; + var_i2 = var_p0; + var_i3 = var_p1; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p0 = var_i0; + var_L0: + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 192u; + var_i0 &= var_i1; + var_i1 = 128u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f10(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 += var_i1; + var_p1 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + var_p1 = var_i0; + } + var_L1: + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B2;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 48u; + var_i0 -= var_i1; + var_i1 = 9u; + var_i0 = var_i0 > var_i1; + var_i1 = var_l2; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 5u; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B2;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L1; + var_B2:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f11(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g8; + var_i1 = var_p0; + var_i2 = 4u; + var_i1 >>= (var_i2 & 31); + var_i2 = 7056u; + var_i1 += var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = var_p0; + var_i2 = 15u; + var_i1 &= var_i2; + var_i2 = 7056u; + var_i1 += var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u, var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + FUNC_EPILOGUE; +} + +void w2c_highlights_f12(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = instance->w2c_g8; + var_i1 = 35u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = var_p0; + var_i1 = 255u; + var_i0 &= var_i1; + w2c_highlights_f11(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_i1 = 255u; + var_i0 &= var_i1; + w2c_highlights_f11(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + var_i1 = 16u; + var_i0 >>= (var_i1 & 31); + var_i1 = 255u; + var_i0 &= var_i1; + w2c_highlights_f11(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + var_i1 = 24u; + var_i0 >>= (var_i1 & 31); + var_p0 = var_i0; + var_i1 = 255u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_p0; + w2c_highlights_f11(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f13(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = var_p0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + w2c_highlights_f12(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f14(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g8; + var_i1 = 7170u; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 4u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = instance->w2c_g8; + var_i1 = 14u; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = var_p1; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = var_p1; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = var_p0; + var_i1 = 3u; + var_i0 *= var_i1; + var_i1 = 448u; + var_i0 += var_i1; + var_p1 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 2u); + var_p0 = var_i0; + var_i0 = instance->w2c_g8; + var_i1 = var_p1; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = var_p0; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = var_p0; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = instance->w2c_g8; + var_i1 = 41u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + FUNC_EPILOGUE; +} + +void w2c_highlights_f15(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g9; + var_i1 = instance->w2c_g8; + var_i2 = var_p0; + var_i1 += var_i2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g8; + var_i1 = var_p0; + var_i0 += var_i1; + var_i1 = 65551u; + var_i0 += var_i1; + var_i1 = instance->w2c_memory.pages; + var_i2 = 16u; + var_i1 <<= (var_i2 & 31); + var_i0 -= var_i1; + var_i1 = 16u; + var_i0 >>= (var_i1 & 31); + var_i1 = 4u; + var_i0 += var_i1; + var_i0 = wasm_rt_grow_memory(&instance->w2c_memory, var_i0); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 4294967295u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + UNREACHABLE; + } + var_i0 = instance->w2c_memory.pages; + var_i1 = 16u; + var_i0 <<= (var_i1 & 31); + var_i1 = 16u; + var_i0 -= var_i1; + instance->w2c_g9 = var_i0; + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f16(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g8; + var_i1 = 4u; + var_i0 -= var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p0; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g8; + var_i2 = 6u; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_i1 = 8u; + var_i0 -= var_i1; + var_i1 = var_p1; + var_i2 = instance->w2c_g0; + var_i1 -= var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + goto var_Bfunc; + } + var_i0 = 16u; + w2c_highlights_f15(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = var_p1; + var_i2 = instance->w2c_g0; + var_i1 -= var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 8u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f17(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + if (var_i0) { + var_i0 = 4294967295u; + instance->w2c_g21 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g21; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = 16u; + w2c_highlights_f15(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = 0u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = instance->w2c_g21; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 8u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f18(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = instance->w2c_g8; + var_i1 = 6u; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_i1 = 4u; + var_i0 -= var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + instance->w2c_g21 = var_i0; + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f19(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p1; + var_i1 = instance->w2c_g34; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = var_p1; + instance->w2c_g34 = var_i0; + var_i0 = var_p0; + var_i1 = instance->w2c_g35; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 4294967295u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_i1 = 8u; + var_i0 -= var_i1; + var_i1 = var_p1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + goto var_Bfunc; + } + var_i0 = var_p0; + instance->w2c_g35 = var_i0; + var_i0 = 16u; + w2c_highlights_f15(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = var_p1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 8u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f20(w2c_highlights* instance, u32 var_p0) { + u32 var_l2 = 0; + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + v128 var_o0, var_o1, var_o2; + var_L0: + var_i0 = instance->w2c_g2; + var_i1 = var_p0; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_p0; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_o0; + var_o1 = var_l1; + var_i2 = 10u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_l2 = var_i0; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_l2; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + } else { + var_i0 = var_p0; + var_i1 = 16u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + } + } else { + var_i0 = var_p0; + } + var_p0 = var_i0; + var_i1 = instance->w2c_g2; + var_i2 = var_p0; + var_i3 = instance->w2c_g2; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f21(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, var_l8 = 0, var_l9 = 0; + u64 var_l10 = 0, var_l11 = 0; + v128 var_l12 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + u64 var_j0, var_j1, var_j2, var_j3; + v128 var_o0, var_o1, var_o2; + var_i0 = var_p1; + var_i1 = var_p2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g20; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_p2; + w2c_highlights_f16(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = instance->w2c_g19; + var_i1 = 4096u; + var_i2 = var_p2; + var_i3 = var_p1; + var_i2 -= var_i3; + var_l9 = var_i2; + var_l3 = var_i2; + var_i3 = var_l3; + var_i4 = 4096u; + var_i3 = var_i3 >= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = 5u; + var_i1 *= var_i2; + var_i0 += var_i1; + w2c_highlights_f15(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + var_i1 = instance->w2c_g10; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_B2;} + var_i0 = var_p0; + instance->w2c_g10 = var_i0; + var_i0 = instance->w2c_g14; + if (var_i0) { + var_i0 = instance->w2c_g13; + if (var_i0) { + var_j0 = instance->w2c_g11; + var_j1 = 0ull; + var_i0 = var_j0 != var_j1; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_j1 = 17572813333540668ull; + i64_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_j1); + var_i0 = instance->w2c_g8; + var_i1 = 7u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_i0 = var_p0; + var_j0 = (u64)(var_i0); + instance->w2c_g11 = var_j0; + var_i0 = var_p0; + if (var_i0) { + var_i0 = var_p0; + w2c_highlights_f34(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } else { + var_j0 = instance->w2c_g11; + var_i0 = (u32)(var_j0); + var_l3 = var_i0; + var_i0 = 1u; + var_l4 = var_i0; + var_L8: + var_j0 = var_l10; + var_i1 = var_l5; + var_i2 = var_p0; + var_i1 = w2c_highlights_f24(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 1099511627775ull; + var_j1 &= var_j2; + var_l11 = var_j1; + var_j0 |= var_j1; + var_l10 = var_j0; + var_i0 = var_l3; + if (var_i0) { + var_i0 = var_l4; + var_j1 = var_l11; + var_i2 = var_l5; + var_i3 = var_l3; + var_i2 = w2c_highlights_f24(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 1099511627775ull; + var_j2 &= var_j3; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + var_l4 = var_i0; + } + var_i0 = var_l5; + var_i1 = 1u; + var_i0 += var_i1; + var_l5 = var_i0; + var_i1 = instance->w2c_g16; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L8;} + var_i0 = var_l3; + if (var_i0) { + var_i0 = var_l4; + var_j1 = var_l10; + var_j2 = 0ull; + var_i1 = var_j1 != var_j2; + var_i0 &= var_i1; + if (var_i0) {goto var_B7;} + var_i0 = instance->w2c_g8; + var_j1 = 17572813333540668ull; + i64_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_j1); + var_i0 = instance->w2c_g8; + var_i1 = 7u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_j0 = var_l10; + var_i0 = !(var_j0); + if (var_i0) { + var_j0 = 0ull; + instance->w2c_g11 = var_j0; + goto var_B7; + } + var_i0 = var_p0; + var_j0 = (u64)(var_i0); + instance->w2c_g11 = var_j0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 <<= (var_i1 & 31); + var_l3 = var_i0; + var_i1 = 7216u; + var_i0 += var_i1; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 7362u; + var_i0 += var_i1; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 7512u; + var_i0 += var_i1; + var_i1 = var_l4; + w2c_highlights_f31(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B12; + } + var_i0 = 7212u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 7512u; + var_i0 += var_i1; + var_l4 = var_i0; + var_i0 = instance->w2c_g19; + var_i1 = 7212u; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 += var_i1; + var_i1 = 4520u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_l5 = var_i0; + var_i0 = var_l4; + instance->w2c_g8 = var_i0; + } + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = instance->w2c_g8; + var_i1 = 7103u; + var_i2 = 13u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = 13u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = instance->w2c_g15; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + if (var_i0) { + var_i0 = 0u; + var_i1 = var_p0; + var_i0 = w2c_highlights_f24(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i0; + var_i0 = 1u; + var_i1 = var_p0; + var_i0 = w2c_highlights_f24(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l8 = var_i0; + var_i0 = var_l7; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i1 = var_l8; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l6 = var_i1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + var_i1 = 72u; + var_i0 = w2c_highlights_f24(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + } + var_i0 = var_l6; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 1u; + var_i1 = 72u; + var_i0 = w2c_highlights_f24(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + } + var_i0 = instance->w2c_g8; + var_i1 = 7116u; + var_i2 = 6u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = 6u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = var_l3; + var_i1 = var_l6; + var_i2 = 0u; + w2c_highlights_f30(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = 59u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_i0 = var_l7; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l6 = var_i0; + var_i1 = var_l8; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_l7 = var_i1; + var_i0 &= var_i1; + var_i1 = 16u; + var_i0 &= var_i1; + var_l3 = var_i0; + var_i0 = var_l6; + var_i1 = 15u; + var_i0 &= var_i1; + var_l8 = var_i0; + var_i1 = var_l7; + var_i2 = 15u; + var_i1 &= var_i2; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = var_l8; + var_i0 |= var_i1; + var_l3 = var_i0; + } + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = 0u; + w2c_highlights_f28(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_i1 = var_l6; + var_i2 = var_l3; + var_i3 = 4294967295u; + var_i2 ^= var_i3; + var_l3 = var_i2; + var_i1 &= var_i2; + var_i2 = 1u; + w2c_highlights_f28(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l3; + var_i2 = var_l7; + var_i1 &= var_i2; + var_i2 = 1u; + w2c_highlights_f28(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_L20: + var_i0 = var_l3; + var_i1 = var_l3; + var_i2 = var_p0; + var_i1 = w2c_highlights_f24(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i1; + w2c_highlights_f27(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i1 = var_l6; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i2 = var_l3; + var_i2 = w2c_highlights_f25(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 8u); + var_i2 = !(var_i2); + w2c_highlights_f28(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_i1 = instance->w2c_g16; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L20;} + } + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = 15906u; + i32_store16_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = var_l5; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 <<= (var_i1 & 31); + var_l3 = var_i0; + var_i1 = 7216u; + var_i0 += var_i1; + var_i1 = instance->w2c_g8; + var_i2 = var_l4; + var_i1 -= var_i2; + var_p0 = var_i1; + i32_store16_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l3; + var_i1 = 7362u; + var_i0 += var_i1; + var_i1 = var_l4; + var_i2 = 7512u; + var_i1 -= var_i2; + i32_store16_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 7212u; + var_i1 = 7212u; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = var_p0; + var_i1 += var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l5; + instance->w2c_g8 = var_i0; + var_i0 = var_l4; + var_i1 = var_p0; + w2c_highlights_f31(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_B12:; + var_B7:; + } + goto var_B2; + } + var_i0 = instance->w2c_g12; + if (var_i0) { + var_i0 = var_p0; + var_j0 = (u64)(var_i0); + } else { + var_i0 = var_p0; + var_i0 = w2c_highlights_f2(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 1099511627775ull; + var_j0 &= var_j1; + } + var_l10 = var_j0; + var_j0 = var_l10; + var_j1 = instance->w2c_g11; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B2;} + var_j0 = instance->w2c_g11; + var_j1 = 0ull; + var_i0 = var_j0 != var_j1; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_j1 = 17572813333540668ull; + i64_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_j1); + var_i0 = instance->w2c_g8; + var_i1 = 7u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_j0 = var_l10; + instance->w2c_g11 = var_j0; + var_j0 = var_l10; + var_j1 = 0ull; + var_i0 = var_j0 != var_j1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 66u; + var_i0 *= var_i1; + var_i1 = 7208u; + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g8; + var_i1 = var_l3; + var_i2 = 1u; + var_i1 += var_i2; + instance->w2c_g8 = var_i1; + var_i1 = instance->w2c_g8; + var_i2 = 7103u; + var_i3 = 19u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i1, var_i2, var_i3); + var_i1 = instance->w2c_g8; + var_i2 = 19u; + var_i1 += var_i2; + instance->w2c_g8 = var_i1; + var_i1 = instance->w2c_g12; + if (var_i1) { + var_i1 = var_p0; + var_i2 = 0u; + w2c_highlights_f14(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i1 = var_p0; + var_i1 = w2c_highlights_f2(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + if (var_i1) { + var_i1 = var_p0; + w2c_highlights_f13(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i1 = instance->w2c_g8; + var_j2 = 32767037346967145ull; + i64_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1), var_j2); + var_i1 = instance->w2c_g8; + var_i2 = 7u; + var_i1 += var_i2; + instance->w2c_g8 = var_i1; + } + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_p0 = var_i1; + var_i2 = 16u; + var_i1 &= var_i2; + if (var_i1) { + var_i1 = instance->w2c_g8; + var_i2 = 7139u; + var_i3 = 18u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i1, var_i2, var_i3); + var_i1 = instance->w2c_g8; + var_i2 = 18u; + var_i1 += var_i2; + instance->w2c_g8 = var_i1; + } + var_i1 = var_p0; + var_i2 = 15u; + var_i1 &= var_i2; + var_p0 = var_i1; + if (var_i1) { + var_i1 = instance->w2c_g8; + var_i2 = 7157u; + var_i3 = 13u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i1, var_i2, var_i3); + var_i1 = instance->w2c_g8; + var_i2 = 13u; + var_i1 += var_i2; + instance->w2c_g8 = var_i1; + var_i1 = instance->w2c_g8; + var_i2 = var_p0; + var_i3 = 48u; + var_i2 += var_i3; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1), var_i2); + var_i1 = instance->w2c_g8; + var_i2 = 12336u; + i32_store16_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u, var_i2); + var_i1 = instance->w2c_g8; + var_i2 = 3u; + var_i1 += var_i2; + instance->w2c_g8 = var_i1; + } + } + var_i1 = instance->w2c_g8; + var_i2 = 15906u; + i32_store16_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1), var_i2); + var_i1 = instance->w2c_g8; + var_i2 = 2u; + var_i1 += var_i2; + instance->w2c_g8 = var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g8; + var_i3 = var_l3; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 -= var_i3; + var_l4 = var_i2; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1), var_i2); + instance->w2c_g8 = var_i0; + } + var_i0 = instance->w2c_g12; + if (var_i0) { + var_i0 = 18u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i0 = instance->w2c_g8; + var_i1 = var_l3; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = 23u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = 23u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = instance->w2c_g8; + var_i1 = 14u; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = var_p0; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = var_p0; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = instance->w2c_g8; + var_i1 = var_l3; + var_i2 = 24u; + var_i1 += var_i2; + var_i2 = var_l4; + var_i3 = 23u; + var_i2 -= var_i3; + var_p0 = var_i2; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_p0; + var_i1 = instance->w2c_g8; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + goto var_B25; + } + var_i0 = instance->w2c_g8; + var_i1 = var_l3; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + v128_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_o1); + var_i0 = instance->w2c_g8; + var_i1 = var_l3; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 17u); + v128_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u, var_o1); + var_i0 = instance->w2c_g8; + var_i1 = var_l3; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 33u); + v128_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 32u, var_o1); + var_i0 = instance->w2c_g8; + var_i1 = var_l3; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 49u); + v128_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 48u, var_o1); + var_i0 = instance->w2c_g8; + var_i1 = var_l4; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_B25:; + } + var_B2:; + var_i0 = instance->w2c_g8; + var_l3 = var_i0; + var_i0 = var_p2; + var_i1 = var_p1; + var_i2 = 4096u; + var_i1 += var_i2; + var_i2 = var_l9; + var_i3 = 4096u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p0 = var_i0; + var_L32: + var_i0 = var_p1; + var_i1 = var_p2; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = var_l3; + instance->w2c_g8 = var_i0; + var_i0 = var_p2; + var_i1 = var_p1; + var_i2 = 4096u; + var_i1 += var_i2; + var_i2 = var_p2; + var_i3 = var_p1; + var_i2 -= var_i3; + var_i3 = 4096u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p0 = var_i0; + var_i1 = var_p1; + var_i0 -= var_i1; + var_i1 = 5u; + var_i0 *= var_i1; + var_i1 = 16u; + var_i0 += var_i1; + w2c_highlights_f15(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_L35: + var_i0 = var_l3; + var_i1 = var_p1; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l12 = var_o1; + v128_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_o1); + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 -= var_i1; + var_l4 = var_i0; + var_o0 = var_l12; + var_i1 = 4294967293u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_v128_and(var_o0, var_o1); + var_i1 = 60u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_o1 = var_l12; + var_i2 = 38u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_l5 = var_i0; + if (var_i0) { + var_i0 = var_l4; + var_i1 = var_l5; + var_i1 = I32_CTZ(var_i1); + var_l5 = var_i1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = var_l5; + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = var_p1; + var_i1 = var_l5; + var_i0 += var_i1; + var_p1 = var_i0; + goto var_B36; + } + } + var_i0 = var_l4; + var_i1 = 16u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = var_l4; + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = var_p0; + var_p1 = var_i0; + goto var_L32; + } else { + var_i0 = var_l3; + var_i1 = 16u; + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = var_p1; + var_i1 = 16u; + var_i0 += var_i1; + var_p1 = var_i0; + goto var_L35; + } + UNREACHABLE; + var_B36:; + var_i0 = var_p1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i1 = 38u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_j1 = 255289286950ull; + i64_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_j1); + var_i0 = var_l3; + var_i1 = 5u; + var_i0 += var_i1; + } else { + var_i0 = var_l4; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 997485606u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } else { + var_i0 = var_l3; + var_i1 = 997484326u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } + var_i0 = var_l3; + var_i1 = 4u; + var_i0 += var_i1; + } + var_l3 = var_i0; + var_i0 = var_p1; + var_i1 = 1u; + var_i0 += var_i1; + var_p1 = var_i0; + goto var_L32; + } + var_i0 = var_l3; + instance->w2c_g8 = var_i0; + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f22(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + v128 var_o1; + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g20; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_i1 = 6u; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_i1 = 8u; + var_i0 -= var_i1; + var_i1 = var_p1; + var_i2 = instance->w2c_g0; + var_i1 -= var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } else { + var_i0 = 0u; + var_i1 = var_p1; + w2c_highlights_f16(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_Bfunc; + } + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 -= var_i1; + var_p1 = var_i0; + var_i1 = 16u; + var_i0 += var_i1; + w2c_highlights_f15(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p1; + var_i1 = 16u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_i1 = var_p0; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + v128_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_o1); + } else { + var_i0 = instance->w2c_g8; + var_i1 = var_p0; + var_i2 = var_p1; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + } + var_i0 = instance->w2c_g8; + var_i1 = var_p1; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f23(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = w2c_highlights_f9(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i1; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f24(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g17; + var_i1 = var_p0; + var_i2 = 384u; + var_i1 *= var_i2; + var_i0 += var_i1; + var_i1 = var_p1; + var_i2 = 5u; + var_i1 *= var_i2; + var_i0 += var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f25(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g15; + var_i1 = var_p0; + var_i2 = 4u; + var_i1 <<= (var_i2 & 31); + var_i2 = 32u; + var_i1 += var_i2; + var_i0 += var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f26(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i0 = w2c_highlights_f25(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_p0 = var_i0; + var_i0 = instance->w2c_g8; + var_i1 = instance->w2c_g15; + var_i2 = var_l1; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i1 += var_i2; + var_i2 = var_p0; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = var_p0; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + FUNC_EPILOGUE; +} + +void w2c_highlights_f27(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p1 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = w2c_highlights_f25(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + if (var_i0) { + var_i0 = instance->w2c_g8; + var_i1 = 7116u; + var_i2 = 6u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = 6u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } else { + var_i0 = var_p0; + w2c_highlights_f26(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = 58u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_i0 = var_p1; + w2c_highlights_f12(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = 59u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f28(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p1; + var_i1 = 16u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p2; + if (var_i0) { + var_i0 = var_p0; + w2c_highlights_f26(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = 45u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_i0 = instance->w2c_g8; + var_i1 = 7140u; + var_i2 = 17u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = 59u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 17u, var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 18u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_i0 = var_p1; + var_i1 = 15u; + var_i0 &= var_i1; + var_p1 = var_i0; + if (var_i0) { + var_i0 = var_p2; + if (var_i0) { + var_i0 = var_p0; + w2c_highlights_f26(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = 45u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_i0 = instance->w2c_g8; + var_i1 = 7158u; + var_i2 = 12u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = var_p1; + var_i2 = 48u; + var_i1 += var_i2; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u, var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 12336u; + i32_store16_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 13u, var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 59u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 15u, var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 16u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f29(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + u64 var_j1; + var_i0 = var_p0; + if (var_i0) { + var_i0 = var_p0; + w2c_highlights_f12(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = var_p1; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_j1 = 8241992434140148340ull; + i64_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_j1); + var_i0 = instance->w2c_g8; + var_i1 = 7630437u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u, var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 11u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } else { + var_i0 = instance->w2c_g8; + var_j1 = 7166474289044157795ull; + i64_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_j1); + var_i0 = instance->w2c_g8; + var_i1 = 1919904879u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u, var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 12u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f30(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + w2c_highlights_f12(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = instance->w2c_g8; + var_i1 = 7195u; + var_i2 = 11u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = 11u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = var_p0; + var_i1 = var_p2; + w2c_highlights_f29(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = 8236u; + i32_store16_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = var_p1; + var_i1 = var_p2; + w2c_highlights_f29(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = 41u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f31(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + v128 var_o1; + var_L0: + var_i0 = instance->w2c_g8; + var_i1 = var_l2; + var_i0 += var_i1; + var_i1 = var_p0; + var_i2 = var_l2; + var_i1 += var_i2; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + v128_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_o1); + var_i0 = var_l2; + var_i1 = 16u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i1 = var_p1; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L0;} + var_i0 = instance->w2c_g8; + var_i1 = var_p1; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + FUNC_EPILOGUE; +} + +void w2c_highlights_f32(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = var_p0; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 71u; + var_i0 = w2c_highlights_f24(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + if (var_i0) { + var_i0 = var_l1; + var_i0 = w2c_highlights_f25(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + if (var_i0) { + var_i0 = instance->w2c_g8; + var_i1 = 7122u; + var_i2 = 17u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = 17u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } else { + var_i0 = var_l1; + w2c_highlights_f26(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = 979853869u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 4u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_i0 = var_l2; + w2c_highlights_f13(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = 59u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + } else { + var_i0 = var_l1; + var_i1 = var_l1; + var_i2 = 72u; + var_i1 = w2c_highlights_f24(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f27(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + var_i1 = instance->w2c_g16; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L0;} + FUNC_EPILOGUE; +} + +void w2c_highlights_f33(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + u64 var_j0, var_j1; + v128 var_o0, var_o1, var_o2, var_o3; + var_i0 = 1u; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + instance->w2c_g12 = var_i0; + var_i0 = 1u; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + instance->w2c_g20 = var_i0; + var_i0 = 14u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 0u; + var_i2 = 1u; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g13 = var_i0; + var_i0 = instance->w2c_g13; + var_i1 = 1u; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 2u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + instance->w2c_g14 = var_i0; + var_i0 = instance->w2c_g0; + var_i1 = 2u; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 += var_i1; + instance->w2c_g2 = var_i0; + var_i0 = instance->w2c_g2; + instance->w2c_g3 = var_i0; + var_i0 = instance->w2c_g0; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g2; + var_i1 = 47u; + var_i0 += var_i1; + var_i1 = 4294967280u; + var_i0 &= var_i1; + instance->w2c_g8 = var_i0; + var_i0 = instance->w2c_g12; + var_i1 = instance->w2c_g14; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_i1 = 18u; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_i0 = 6u; + var_i1 = instance->w2c_g8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_memory.pages; + var_i1 = 16u; + var_i0 <<= (var_i1 & 31); + var_i1 = 16u; + var_i0 -= var_i1; + instance->w2c_g9 = var_i0; + var_i0 = 4294967295u; + instance->w2c_g10 = var_i0; + var_j0 = 0ull; + instance->w2c_g11 = var_j0; + var_i0 = 18u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 0u; + var_i2 = instance->w2c_g12; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 96u; + var_i0 += var_i1; + instance->w2c_g19 = var_i0; + var_i0 = instance->w2c_g13; + if (var_i0) { + var_i0 = instance->w2c_g13; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + instance->w2c_g19 = var_i0; + var_i0 = instance->w2c_g13; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + w2c_highlights_f15(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + w2c_highlights_f34(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = instance->w2c_g14; + if (var_i0) { + var_i0 = 14u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + instance->w2c_g15 = var_i0; + var_i0 = instance->w2c_g15; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + instance->w2c_g16 = var_i0; + var_i0 = instance->w2c_g15; + var_i1 = instance->w2c_g15; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i0 += var_i1; + instance->w2c_g17 = var_i0; + var_i0 = instance->w2c_g15; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + instance->w2c_g19 = var_i0; + var_i0 = 2u; + instance->w2c_g18 = var_i0; + var_i0 = 7208u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = instance->w2c_g15; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 16u); + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 7208u; + var_i1 = 0u; + var_i2 = 304u; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 7208u; + var_i1 = instance->w2c_g15; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 16u); + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } + var_i0 = instance->w2c_g15; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + w2c_highlights_f15(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = 7072u; + var_i2 = 31u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = 31u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = instance->w2c_g15; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + if (var_i0) { + var_i0 = 0u; + var_i1 = 71u; + var_i0 = w2c_highlights_f24(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 1u; + var_i2 = 71u; + var_i1 = w2c_highlights_f24(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l1 = var_i1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_i1 = 7122u; + var_i2 = 17u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = 17u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = var_l0; + var_i1 = var_l1; + var_i2 = 1u; + w2c_highlights_f30(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = 59u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_i0 = 0u; + var_i1 = 72u; + var_i0 = w2c_highlights_f24(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 1u; + var_i2 = 72u; + var_i1 = w2c_highlights_f24(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l1 = var_i1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_i1 = 7116u; + var_i2 = 6u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = 6u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = var_l0; + var_i1 = var_l1; + var_i2 = 0u; + w2c_highlights_f30(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = 59u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + } else { + var_i0 = 0u; + var_i0 = w2c_highlights_f25(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + if (var_i0) { + var_i0 = 1u; + w2c_highlights_f32(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + w2c_highlights_f32(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + w2c_highlights_f32(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + w2c_highlights_f32(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 -= var_i1; + var_l0 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + instance->w2c_g8 = var_i0; + } + var_i0 = instance->w2c_g8; + var_i1 = 7174u; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + i64_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_j1); + var_i0 = instance->w2c_g8; + var_i1 = 8u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g20; + var_i0 = !(var_i0); + if (var_i0) { + var_L10: + var_o0 = var_l3; + var_i1 = var_l0; + var_i2 = 4294967232u; + var_i1 -= var_i2; + var_l1 = var_i1; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = var_l0; + var_i3 = 12032u; + var_i2 += var_i3; + var_l2 = var_i2; + var_o2 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_o1 = simde_wasm_v128_xor(var_o1, var_o2); + var_i2 = var_l1; + var_o2 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 16u); + var_i3 = var_l2; + var_o3 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 16u); + var_o2 = simde_wasm_v128_xor(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_l3 = var_o0; + var_i0 = var_l0; + var_i1 = 32u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i1 = 384u; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L10;} + var_o0 = var_l3; + var_i0 = simde_wasm_v128_any_true(var_o0); + var_i1 = instance->w2c_g18; + var_i2 = instance->w2c_g12; + var_i1 = var_i1 != var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 7208u; + var_i1 = 0u; + var_i2 = 4818u; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 12032u; + var_i1 = 64u; + var_i2 = 384u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g12; + instance->w2c_g18 = var_i0; + } + var_i0 = 128u; + w2c_highlights_f15(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g12; + if (var_i0) { + var_i0 = 18u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 1u; + var_i0 <<= (var_i1 & 31); + var_i1 = 128u; + var_i0 += var_i1; + w2c_highlights_f15(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g8; + var_i1 = 7072u; + var_i2 = 31u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = 31u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = 71u; + var_i0 = w2c_highlights_f2(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = instance->w2c_g12; + var_i1 = var_l0; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_i1 = 7122u; + var_i2 = 17u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = 17u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = instance->w2c_g12; + if (var_i0) { + var_i0 = 71u; + var_i1 = 18u; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + w2c_highlights_f14(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l0; + w2c_highlights_f13(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g8; + var_i1 = 59u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_i0 = 72u; + var_i0 = w2c_highlights_f2(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = instance->w2c_g12; + var_i1 = var_l0; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_j1 = 64263170060131ull; + i64_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_j1); + var_i0 = instance->w2c_g8; + var_i1 = 6u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = instance->w2c_g12; + if (var_i0) { + var_i0 = 72u; + var_i1 = 18u; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + w2c_highlights_f14(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = 59u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } else { + var_i0 = var_l0; + w2c_highlights_f13(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + var_i0 = instance->w2c_g8; + var_i1 = 7174u; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + i64_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_j1); + var_i0 = instance->w2c_g8; + var_i1 = 8u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f34(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g13; + var_i1 = var_p0; + var_i2 = 3u; + var_i1 <<= (var_i2 & 31); + var_i2 = 4u; + var_i1 += var_i2; + var_i0 += var_i1; + var_l1 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_p0 = var_i0; + var_i0 = instance->w2c_g8; + var_i1 = instance->w2c_g13; + var_i2 = var_l1; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i1 += var_i2; + var_i2 = var_p0; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = var_p0; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + FUNC_EPILOGUE; +} + +void w2c_highlights_f35(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0; + v128 var_l10 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + u64 var_j0, var_j1; + v128 var_o0, var_o1, var_o2, var_o3, var_o4; + var_i0 = instance->w2c_g20; + var_i0 = !(var_i0); + if (var_i0) { + var_j0 = instance->w2c_g11; + var_j1 = 0ull; + var_i0 = var_j0 != var_j1; + if (var_i0) { + var_i0 = 16u; + w2c_highlights_f15(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_j1 = 17572813333540668ull; + i64_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_j1); + var_i0 = instance->w2c_g8; + var_i1 = 7u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_j0 = 0ull; + instance->w2c_g11 = var_j0; + var_i0 = 4294967295u; + instance->w2c_g10 = var_i0; + var_i0 = 32u; + w2c_highlights_f15(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = 7182u; + var_i2 = 13u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g8; + var_i1 = 13u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + } + var_i0 = instance->w2c_g20; + if (var_i0) { + var_i0 = 6u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = instance->w2c_g8; + var_l9 = var_i0; + var_i1 = 15u; + var_i0 += var_i1; + var_i1 = 4294967280u; + var_i0 &= var_i1; + instance->w2c_g8 = var_i0; + var_i0 = 6u; + var_i1 = instance->w2c_g8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 4294967295u; + var_l3 = var_i0; + var_i0 = instance->w2c_g0; + var_l1 = var_i0; + var_i0 = w2c_highlights_f20(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_L3: + var_i0 = var_l6; + var_i1 = var_l9; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g0; + var_i1 = var_l6; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 += var_i1; + var_l5 = var_i0; + var_i0 = var_l6; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l7 = var_i0; + var_i0 = var_l6; + var_i1 = 8u; + var_i0 += var_i1; + var_l6 = var_i0; + var_i0 = var_l1; + var_i1 = var_l5; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_L3;} + var_L5: + var_i0 = var_l1; + var_i1 = var_l5; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B6;} + var_i0 = var_l0; + var_i1 = var_l5; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = var_l5; + var_i2 = var_l1; + var_i1 -= var_i2; + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = var_l5; + var_l1 = var_i0; + goto var_B6; + } + var_i0 = var_l2; + var_i1 = var_l0; + var_i2 = var_l1; + var_i1 -= var_i2; + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = var_l0; + var_l1 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + instance->w2c_g34 = var_i0; + var_i0 = var_l3; + instance->w2c_g35 = var_i0; + var_i0 = var_l2; + var_l3 = var_i0; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 13u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g0; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = instance->w2c_g35; + var_i1 = 4294967295u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 1u; + var_i1 -= var_i2; + var_l3 = var_i1; + var_i2 = instance->w2c_g34; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = instance->w2c_g8; + var_i1 = 8u; + var_i0 -= var_i1; + var_l0 = var_i0; + var_i1 = 6u; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 8u; + var_i0 -= var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + } + var_i0 = var_l3; + var_i1 = var_l4; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = var_l0; + instance->w2c_g8 = var_i0; + var_i0 = var_l4; + instance->w2c_g34 = var_i0; + var_i0 = 4294967295u; + instance->w2c_g35 = var_i0; + var_i0 = var_l0; + var_i1 = 6u; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 4u; + var_i0 -= var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + instance->w2c_g35 = var_i0; + } + } else { + var_i0 = var_l0; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l3; + instance->w2c_g34 = var_i0; + } + var_B10:; + } + var_i0 = var_l7; + var_i1 = var_l3; + w2c_highlights_f19(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + var_i0 = 4294967295u; + var_i1 = var_l2; + var_i2 = 1u; + var_i1 += var_i2; + var_l2 = var_i1; + w2c_highlights_f19(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g34; + var_l4 = var_i0; + var_i0 = instance->w2c_g35; + var_l3 = var_i0; + } else { + var_L14: + var_i0 = var_l1; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_o0; + var_i1 = 10u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_i1 = 65536u; + var_i0 |= var_i1; + var_i0 = I32_CTZ(var_i0); + var_l0 = var_i0; + var_i1 = var_l5; + var_i2 = var_l1; + var_i1 -= var_i2; + var_l8 = var_i1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l8; + var_l0 = var_i0; + } + var_i0 = var_l2; + var_i1 = 1u; + var_i2 = var_l0; + var_i1 <<= (var_i2 & 31); + var_i2 = 1u; + var_i1 -= var_i2; + var_l8 = var_i1; + var_o2 = var_l10; + var_i3 = 4294967231u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_gt(var_o2, var_o3); + var_i2 = v128_i8x16_bitmask(var_o2); + var_i1 &= var_i2; + var_i1 = I32_POPCNT(var_i1); + var_i2 = var_l8; + var_o3 = var_l10; + var_i4 = 4294967280u; + var_o4 = simde_wasm_i8x16_splat(var_i4); + var_o3 = simde_wasm_u8x16_ge(var_o3, var_o4); + var_i3 = v128_i8x16_bitmask(var_o3); + var_i2 &= var_i3; + var_i2 = I32_POPCNT(var_i2); + var_i1 += var_i2; + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = var_l0; + var_i1 = var_l1; + var_i0 += var_i1; + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = 16u; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_L14;} + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f20(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + goto var_L5; + var_B6:; + var_i0 = var_l2; + var_i1 = var_l4; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = var_l7; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g8; + var_i1 = 8u; + var_i0 -= var_i1; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } else { + var_i0 = 16u; + w2c_highlights_f15(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g8; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g8; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = instance->w2c_g8; + var_i1 = 8u; + var_i0 += var_i1; + instance->w2c_g8 = var_i0; + var_i0 = var_l7; + var_l3 = var_i0; + } + var_i0 = var_l2; + var_l4 = var_i0; + } + goto var_L3; + } + } + var_i0 = 10u; + var_i1 = instance->w2c_g8; + var_i2 = 6u; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i1 -= var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + FUNC_EPILOGUE; +} + +void w2c_highlights_f36(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 0u; + instance->w2c_g36 = var_i0; + var_i0 = 0u; + instance->w2c_g37 = var_i0; + var_i0 = 0u; + instance->w2c_g38 = var_i0; + var_i0 = 0u; + instance->w2c_g39 = var_i0; + var_i0 = 0u; + instance->w2c_g40 = var_i0; + var_i0 = 0u; + instance->w2c_g41 = var_i0; + var_i0 = 0u; + instance->w2c_g42 = var_i0; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f37(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = instance->w2c_g36; + var_i1 = 32u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = instance->w2c_g37; + var_i1 = instance->w2c_g36; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f38(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g36; + var_i1 = 32u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g37; + var_i1 = 1u; + var_i2 = instance->w2c_g36; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + instance->w2c_g37 = var_i0; + } + var_i0 = 0u; + instance->w2c_g38 = var_i0; + var_i0 = 0u; + instance->w2c_g39 = var_i0; + var_i0 = 0u; + instance->w2c_g40 = var_i0; + FUNC_EPILOGUE; +} + +void w2c_highlights_f39(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g36; + var_i1 = 32u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g37; + var_i1 = 4294967294u; + var_i2 = instance->w2c_g36; + var_i1 = I32_ROTL(var_i1, var_i2); + var_i0 &= var_i1; + instance->w2c_g37 = var_i0; + } + var_i0 = 0u; + instance->w2c_g38 = var_i0; + var_i0 = 0u; + instance->w2c_g39 = var_i0; + var_i0 = 0u; + instance->w2c_g40 = var_i0; + FUNC_EPILOGUE; +} + +void w2c_highlights_f40(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g40; + var_i1 = var_p0; + var_i0 -= var_i1; + var_i1 = 0u; + var_i2 = instance->w2c_g40; + var_i3 = var_p0; + var_i2 = var_i2 >= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g40 = var_i0; + FUNC_EPILOGUE; +} + +void w2c_highlights_f41(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g42; + var_i1 = var_p0; + var_i0 -= var_i1; + var_i1 = 0u; + var_i2 = instance->w2c_g42; + var_i3 = var_p0; + var_i2 = var_i2 >= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g42 = var_i0; + FUNC_EPILOGUE; +} + +void w2c_highlights_f42(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_L0: + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g42; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g42 = var_i0; + } else { + var_i0 = var_l2; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + w2c_highlights_f41(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g42; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + instance->w2c_g41 = var_i0; + } + } + } + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f43(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 9u; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f44(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i1 = 48u; + var_i0 -= var_i1; + var_i1 = 9u; + var_i0 = var_i0 <= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f45(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 5u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f46(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 95u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 128u; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f47(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f48(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 8192u; + var_i0 |= var_i1; + var_i1 = 30768u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + w2c_highlights_f49(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f49(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l1; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + } + var_i0 = var_l1; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 0u; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B1;} + var_i0 = var_l1; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + } + var_i0 = var_l1; + var_i1 = 43u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i1 = !(var_i1); + var_i2 = var_l2; + var_i3 = 32u; + var_i2 |= var_i3; + var_l2 = var_i2; + var_i3 = 101u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l2; + var_i3 = 112u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + } + var_B1:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f50(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 48u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 120u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g3; + var_i2 = var_l1; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 0u; + var_i3 = instance->w2c_g3; + var_i4 = instance->w2c_g4; + var_i5 = 1u; + var_i4 += var_i5; + var_i3 = var_i3 > var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l1 = var_i1; + var_i1 = w2c_highlights_f45(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 32u; + var_i2 |= var_i3; + var_i3 = 112u; + var_i2 = var_i2 == var_i3; + var_l1 = var_i2; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_l1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + var_L3: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = w2c_highlights_f45(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 95u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B4;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 112u; + var_i0 = var_i0 != var_i1; + var_i1 = var_p0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_p0; + var_i2 = var_p0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_p0 = var_i2; + var_i3 = 43u; + var_i2 = var_i2 == var_i3; + var_i3 = var_p0; + var_i4 = 45u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p0 = var_i0; + } + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + var_i0 |= var_i1; + if (var_i0) { + goto var_Bfunc; + } + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + w2c_highlights_f49(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f51(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 2u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = var_l2; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + } else { + var_i0 = var_l1; + } + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f52(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + u32 var_l4 = 0, var_l5 = 0; + v128 var_l6 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i3 = 1u; + var_i4 = var_p1; + var_i4 = !(var_i4); + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i1 = var_p0; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l4 = var_i0; + goto var_B1; + } + var_i0 = var_l5; + var_i1 = 92u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p2; + var_i1 = var_p3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_l5; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l5; + instance->w2c_g4 = var_i0; + var_i0 = 2u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 -= var_i3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l4 = var_i2; + var_i3 = 10u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l4; + var_i4 = 13u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = instance->w2c_g4; + var_i4 = var_p3; + var_i3 = var_i3 > var_i4; + var_i2 &= var_i3; + var_i3 = instance->w2c_g4; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_p3 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p2; + var_i1 = var_p3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l4; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f53(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = var_p2; + var_i3 = var_l3; + var_i0 = w2c_highlights_f52(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = instance->w2c_g22; + var_i1 = var_p1; + var_i2 = var_l3; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l3; + var_i3 = 1u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g2; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + instance->w2c_g25 = var_i0; + var_i0 = var_p0; + instance->w2c_g26 = var_i0; + var_i0 = var_p1; + instance->w2c_g27 = var_i0; + var_i0 = var_p2; + instance->w2c_g29 = var_i0; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f54(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i3 = 0u; + var_i4 = var_p1; + var_i4 = !(var_i4); + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p0; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p2; + var_i1 = var_p3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p2; + var_i1 = var_p3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f55(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = var_p2; + var_i3 = var_l3; + var_i0 = w2c_highlights_f54(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = instance->w2c_g22; + var_i1 = var_p1; + var_i2 = var_l3; + var_i2 = !(var_i2); + var_i3 = instance->w2c_g4; + var_i4 = instance->w2c_g2; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 3u; + instance->w2c_g25 = var_i0; + var_i0 = var_p0; + instance->w2c_g26 = var_i0; + var_i0 = var_p1; + instance->w2c_g27 = var_i0; + var_i0 = var_p2; + instance->w2c_g29 = var_i0; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f56(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + u32 var_l4 = 0, var_l5 = 0, var_l6 = 0; + v128 var_l7 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i3 = 1u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i1 = var_p0; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p3; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + var_i0 = 1u; + var_l6 = var_i0; + goto var_B1; + } + var_i0 = var_l4; + var_i1 = 92u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p1; + var_i1 = var_p2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i1 = 2u; + var_i0 += var_i1; + var_p2 = var_i0; + var_i0 = var_l4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 0u; + var_i2 = instance->w2c_g3; + var_i3 = var_l4; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i1 = 117u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p2; + var_i1 = 4u; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p2 = var_i0; + goto var_B5; + } + var_i0 = var_l5; + var_i1 = 85u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p2; + var_i1 = 8u; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p2 = var_i0; + goto var_B5; + } + var_i0 = var_l5; + var_i1 = 120u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p2; + var_i1 = 64u; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p2 = var_i0; + goto var_B5; + } + var_i0 = var_p2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p2; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_i1 = var_l5; + var_i2 = 78u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p2; + var_i1 = 1u; + var_i0 += var_i1; + var_p2 = var_i0; + var_L10: + var_i0 = var_p2; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B5;} + var_i0 = var_p2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l4; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l4; + var_i3 = 92u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l4; + var_i3 = 34u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B5;} + var_i0 = var_p2; + var_i1 = 1u; + var_i0 += var_i1; + var_p2 = var_i0; + var_i0 = var_l4; + var_i1 = 125u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_L10;} + goto var_B5; + } + var_i0 = var_l5; + var_i1 = 48u; + var_i0 -= var_i1; + var_i1 = 7u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_L12: + var_i0 = var_p2; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + var_i1 = var_p2; + var_i2 = var_l4; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B5;} + var_i0 = var_p2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 48u; + var_i0 -= var_i1; + var_i1 = 7u; + var_i0 = var_i0 > var_i1; + if (var_i0) {goto var_B5;} + var_i0 = var_p2; + var_i1 = 1u; + var_i0 += var_i1; + var_p2 = var_i0; + goto var_L12; + UNREACHABLE; + } + var_i0 = var_l4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p2 = var_i0; + var_B5:; + var_i0 = var_p2; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p2 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_p2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p2; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_L0;} + var_i0 = 2u; + var_l6 = var_i0; + var_B1:; + var_i0 = var_p1; + var_i1 = var_p2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l6; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f57(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0; + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i1 = 0u; + var_i2 = var_l1; + var_i3 = 44u; + var_i4 = var_l0; + var_i5 = 0u; + var_i2 = w2c_highlights_f56(instance, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f58(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = var_p0; + var_i1 = instance->w2c_g0; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 -= var_i1; + var_p0 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_l1; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 9u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_L0;} + var_i0 = var_l1; + goto var_Bfunc; + var_B1:; + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f59(w2c_highlights* instance, u32 var_p0) { + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = var_p0; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 0u; + var_i2 = var_p0; + var_i3 = 44u; + var_i4 = instance->w2c_g4; + var_i5 = 0u; + var_i2 = w2c_highlights_f56(instance, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 0u; + } + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f60(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_p0; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f61(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_p0; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + w2c_highlights_f4(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 -= var_i2; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 12074u; + var_i1 = var_i1 != var_i2; + var_i2 = instance->w2c_g4; + var_i3 = var_l2; + var_i2 -= var_i3; + var_i3 = 2u; + var_i2 = var_i2 < var_i3; + var_i1 |= var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g2; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g25 = var_i0; + var_i0 = var_p1; + instance->w2c_g29 = var_i0; + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f62(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g2; + var_i1 = var_i1 == var_i2; + var_i2 = var_p1; + var_i3 = 32u; + var_i2 = var_i2 <= var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12416u; + var_i1 = var_p0; + var_i2 = var_p1; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 20u; + instance->w2c_g25 = var_i0; + var_i0 = var_p1; + instance->w2c_g26 = var_i0; + var_i0 = 0u; + instance->w2c_g27 = var_i0; + var_i0 = var_p2; + instance->w2c_g29 = var_i0; + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f63(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = 12416u; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12416u; + var_i1 = var_p1; + var_i2 = var_p2; + w2c_highlights_f62(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f64(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g2; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_i3 = 0u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 21u; + instance->w2c_g25 = var_i0; + var_i0 = var_p0; + instance->w2c_g26 = var_i0; + var_i0 = var_p1; + instance->w2c_g27 = var_i0; + var_i0 = var_p2; + instance->w2c_g28 = var_i0; + var_i0 = var_p3; + instance->w2c_g29 = var_i0; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f65(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_L1: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B2;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B2;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L1; + var_B2:; + var_i0 = var_p0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_i3 = 44u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_p0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i3 = var_p0; + var_i4 = 35u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_p0; + var_i4 = 41u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f66(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p1; + var_i1 = 4u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 9u; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + goto var_Bfunc; + } + var_i0 = var_p1; + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 97u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 > var_i1; + goto var_Bfunc; + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f67(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g2; + var_i1 = var_i1 == var_i2; + var_i2 = var_p1; + var_i3 = 32u; + var_i2 = var_i2 <= var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12416u; + var_i1 = var_p0; + var_i2 = var_p1; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 22u; + instance->w2c_g25 = var_i0; + var_i0 = var_p1; + instance->w2c_g26 = var_i0; + var_i0 = var_p2; + instance->w2c_g27 = var_i0; + var_i0 = var_p3; + instance->w2c_g29 = var_i0; + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f68(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g2; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + instance->w2c_g30 = var_i0; + var_i0 = 0u; + instance->w2c_g31 = var_i0; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f69(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_L0: + var_i0 = var_l0; + var_i1 = 12416u; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = instance->w2c_g3; + var_i1 = var_l0; + var_i2 = instance->w2c_g26; + var_i1 += var_i2; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_B1;} + var_i0 = 1u; + var_l1 = var_i0; + var_i0 = 0u; + var_L2: + var_i1 = instance->w2c_g26; + var_i2 = var_l1; + var_i1 = var_i1 > var_i2; + if (var_i1) { + var_i1 = var_l0; + var_i2 = var_l1; + var_i1 += var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = var_l1; + var_i3 = 12416u; + var_i2 += var_i3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i1 = var_i1 != var_i2; + if (var_i1) { + var_i1 = 0u; + } else { + var_i1 = var_l1; + var_i2 = 1u; + var_i1 += var_i2; + var_l1 = var_i1; + goto var_L2; + } + } else { + var_i1 = 1u; + } + var_i2 = instance->w2c_g27; + var_i3 = 0u; + var_i2 = var_i2 != var_i3; + var_i3 = var_l0; + var_i4 = var_l2; + var_i3 = var_i3 > var_i4; + var_i2 &= var_i3; + var_i3 = instance->w2c_g27; + var_i4 = var_l0; + var_i5 = 1u; + var_i4 -= var_i5; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = instance->w2c_g26; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g29; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + instance->w2c_g25 = var_i0; + var_i0 = 0u; + goto var_Bfunc; + } else { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L0; + } + UNREACHABLE; + var_B1:; + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g29; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f70(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + v128 var_l3 = simde_wasm_i64x2_make(0, 0), var_l4 = simde_wasm_i64x2_make(0, 0), var_l5 = simde_wasm_i64x2_make(0, 0), var_l6 = simde_wasm_i64x2_make(0, 0), var_l7 = simde_wasm_i64x2_make(0, 0), var_l8 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + v128 var_o0, var_o1, var_o2, var_o3; + var_i0 = var_p1; + var_o0 = simde_wasm_i8x16_splat(var_i0); + var_l3 = var_o0; + var_i0 = var_p1; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_o0 = simde_wasm_i8x16_splat(var_i0); + var_l4 = var_o0; + var_i0 = var_p2; + var_o0 = simde_wasm_i8x16_splat(var_i0); + var_l5 = var_o0; + var_i0 = var_p2; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_o0 = simde_wasm_i8x16_splat(var_i0); + var_l6 = var_o0; + var_L0: + var_L2: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_o0; + var_o1 = var_l3; + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_i1 = instance->w2c_g4; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_l8 = var_o1; + var_o2 = var_l4; + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o0 = simde_wasm_v128_and(var_o0, var_o1); + var_o1 = var_l7; + var_o2 = var_l5; + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o2 = var_l8; + var_o3 = var_l6; + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o1 = simde_wasm_v128_and(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_p2 = var_i0; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_p2; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 16u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L2; + } + } + var_i0 = instance->w2c_g3; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + goto var_B1; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p1; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + } + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 -= var_i1; + var_p0 = var_i0; + if (var_i0) {goto var_L0;} + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f71(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + var_i0 = 1u; + var_i1 = var_p0; + var_i2 = var_p1; + var_i0 = w2c_highlights_f70(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p2; + var_i2 = var_l3; + var_i3 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i2 = var_p1; + var_i3 = var_p2; + w2c_highlights_f64(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f72(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0; + v128 var_l5 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g25; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + w2c_highlights_f4(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g29; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 -= var_i1; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 12074u; + var_i0 = var_i0 != var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + var_i1 -= var_i2; + var_i2 = 2u; + var_i1 = var_i1 < var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = 0u; + instance->w2c_g25 = var_i0; + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = instance->w2c_g25; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g26; + var_i1 = instance->w2c_g27; + var_i2 = instance->w2c_g29; + var_i3 = var_l0; + var_i0 = w2c_highlights_f52(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = 0u; + instance->w2c_g25 = var_i0; + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = instance->w2c_g25; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g26; + var_i1 = instance->w2c_g27; + var_i2 = instance->w2c_g29; + var_i3 = var_l0; + var_i0 = w2c_highlights_f54(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = 0u; + instance->w2c_g25 = var_i0; + } + var_i0 = instance->w2c_g25; + var_i1 = 20u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f69(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = instance->w2c_g25; + var_i1 = 21u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g26; + var_i1 = instance->w2c_g27; + var_i2 = instance->w2c_g28; + var_i0 = w2c_highlights_f70(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g26 = var_i0; + var_i0 = instance->w2c_g29; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g26; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + instance->w2c_g25 = var_i0; + var_i0 = 0u; + goto var_B8; + } + var_i0 = 1u; + var_B8:; + goto var_Bfunc; + } + var_i0 = instance->w2c_g25; + var_i1 = 22u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_L12: + var_i0 = instance->w2c_g3; + var_i1 = var_l1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l1; + var_l0 = var_i0; + var_i0 = instance->w2c_g27; + var_i1 = 3u; + var_i0 &= var_i1; + if (var_i0) { + var_L15: + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B16;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g27; + var_i2 = 3u; + var_i1 &= var_i2; + var_i2 = 2u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l2; + var_i2 = 9u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B16;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L15; + var_B16:; + } + var_i0 = instance->w2c_g3; + var_i1 = var_l0; + var_i2 = instance->w2c_g26; + var_i1 += var_i2; + var_i0 = var_i0 >= var_i1; + var_l2 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + var_L17: + var_i0 = var_l2; + var_i0 = !(var_i0); + var_i1 = var_l3; + var_i2 = instance->w2c_g26; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l2; + } else { + var_i0 = var_l0; + var_i1 = var_l3; + var_i0 += var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_l3; + var_i2 = 12416u; + var_i1 += var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + goto var_L17; + } + } + var_l2 = var_i0; + if (var_i0) { + var_i0 = var_l0; + var_i1 = instance->w2c_g26; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_i1 = 0u; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g27; + var_i2 = w2c_highlights_f66(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = instance->w2c_g27; + var_i1 = 12u; + var_i0 &= var_i1; + if (var_i0) { + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = instance->w2c_g29; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + instance->w2c_g25 = var_i0; + var_i0 = 0u; + goto var_B11; + } + } + var_L25: + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B26;} + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_B26;} + var_i0 = var_l0; + var_i1 = 13u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_L25;} + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l1; + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 10u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_B26:; + goto var_L12; + } + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g29; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_B11:; + goto var_Bfunc; + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f73(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 32u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l1; + var_i2 = 9u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f74(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0, var_l4 = 0; + v128 var_l5 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + u64 var_j0, var_j1; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + var_L0: + var_i0 = var_p1; + var_i1 = var_l2; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 32u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 9u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_l2; + var_i1 = 6u; + var_i0 += var_i1; + var_i1 = var_p1; + var_i0 = var_i0 > var_i1; + if (var_i0) {goto var_B2;} + var_i0 = var_l2; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 28539428140183145ull; + var_j0 ^= var_j1; + var_j1 = 8ull; + var_j0 <<= (var_j1 & 63); + var_i0 = !(var_j0); + if (var_i0) { + var_i0 = var_l2; + var_i1 = 7u; + var_i0 += var_i1; + } else { + var_i0 = var_l2; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 128034844732777ull; + var_j0 ^= var_j1; + var_j1 = 16ull; + var_j0 <<= (var_j1 & 63); + var_i0 = !(var_j0); + var_i0 = !(var_i0); + if (var_i0) {goto var_B2;} + var_i0 = var_l2; + var_i1 = 6u; + var_i0 += var_i1; + } + var_l2 = var_i0; + var_i1 = var_p1; + var_i0 = var_i0 > var_i1; + if (var_i0) {goto var_B2;} + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p1; + var_i2 = var_l2; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B2;} + var_L4: + var_i0 = var_p1; + var_i1 = var_l2; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B5;} + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 32u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 9u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B5;} + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + goto var_L4; + var_B5:; + var_i0 = var_p1; + var_i1 = var_l2; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B2;} + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 62u; + } else { + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 34u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B2;} + var_i0 = 34u; + } + var_l4 = var_i0; + var_i0 = var_l2; + var_l3 = var_i0; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + var_L7: + var_i0 = var_p1; + var_i1 = var_l2; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_l4; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + } else { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + goto var_L7; + } + } else { + var_i0 = var_l2; + } + var_l2 = var_i0; + var_i0 = 27u; + var_i1 = var_p0; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 27u; + var_i1 = var_l2; + var_i2 = var_p1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + goto var_Bfunc; + var_B2:; + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f75(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3, u32 var_p4) { + u32 var_l5 = 0, var_l6 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + u64 var_j2, var_j3; + v128 var_o0, var_o1; + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 -= var_i1; + var_l6 = var_i0; + var_i1 = 2u; + var_i0 -= var_i1; + var_i1 = 29u; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_l6; + var_i1 = var_p2; + var_i2 = var_p3; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 += var_i2; + var_i2 = var_p2; + var_i3 = var_p3; + var_i4 = var_p0; + var_i4 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_i5 = var_p1; + var_i6 = 1u; + var_i5 -= var_i6; + var_i5 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i5)); + var_i6 = 16u; + var_i5 <<= (var_i6 & 31); + var_i4 |= var_i5; + var_i5 = var_l6; + var_i6 = 24u; + var_i5 <<= (var_i6 & 31); + var_i4 |= var_i5; + var_l5 = var_i4; + var_i5 = 16u; + var_i4 >>= (var_i5 & 31); + var_i5 = var_l5; + var_i4 ^= var_i5; + var_i5 = 3844058249u; + var_i4 *= var_i5; + var_l5 = var_i4; + var_i5 = 24u; + var_i4 >>= (var_i5 & 31); + var_i5 = var_l5; + var_i4 ^= var_i5; + var_l5 = var_i4; + var_i3 &= var_i4; + var_i2 += var_i3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = var_l5; + var_i4 = 12u; + var_i3 >>= (var_i4 & 31); + var_i4 = 1u; + var_i3 |= var_i4; + var_i2 *= var_i3; + var_i3 = var_l5; + var_i2 += var_i3; + var_i3 = 16u; + var_i2 = I32_ROTL(var_i2, var_i3); + var_j2 = (u64)(var_i2); + var_i3 = var_p4; + var_j3 = (u64)(var_i3); + var_j2 *= var_j3; + var_j3 = 32ull; + var_j2 >>= (var_j3 & 63); + var_i2 = (u32)(var_j2); + var_i3 = 3u; + var_i2 *= var_i3; + var_i1 += var_i2; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 16777215u; + var_i1 &= var_i2; + var_p2 = var_i1; + var_i2 = 19u; + var_i1 >>= (var_i2 & 31); + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p2; + var_i2 = 8191u; + var_i1 &= var_i2; + var_i2 = 28352u; + var_i1 += var_i2; + var_p0 = var_i1; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_o0 = simde_wasm_i8x16_ne(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_i0 = I32_CTZ(var_i0); + var_i1 = var_l6; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_l6; + var_i1 = 16u; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_p1; + var_i1 = 16u; + var_i0 -= var_i1; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p0; + var_i2 = var_l6; + var_i3 = 16u; + var_i2 -= var_i3; + var_i1 += var_i2; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_o0 = simde_wasm_v128_xor(var_o0, var_o1); + var_i0 = simde_wasm_v128_any_true(var_o0); + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + } + var_i0 = var_p2; + var_i1 = 13u; + var_i0 >>= (var_i1 & 31); + var_i1 = 63u; + var_i0 &= var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f76(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3, u32 var_p4) { + v128 var_l5 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = var_p2; + var_i3 = var_p3; + var_i4 = var_p4; + var_i0 = w2c_highlights_f75(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 4294967295u; + goto var_Bfunc; + } + var_i0 = var_p2; + var_i1 = var_p3; + var_i2 = 1u; + var_i1 += var_i2; + var_i0 += var_i1; + var_i1 = var_p4; + var_i2 = 3u; + var_i1 *= var_i2; + var_i2 = var_p0; + var_i3 = 1u; + var_i2 <<= (var_i3 & 31); + var_i1 += var_i2; + var_i0 += var_i1; + var_i0 = i32_load16_s_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f77(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + v128 var_o1, var_o2, var_o3; + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 -= var_i1; + var_p1 = var_i0; + var_i1 = 31u; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_L1: + var_i0 = var_p1; + var_i1 = var_l2; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 3408u; + var_i0 += var_i1; + var_i1 = var_p0; + var_i2 = var_l2; + var_i1 += var_i2; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l3 = var_o1; + var_o2 = var_l3; + var_i3 = 65u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_sub(var_o2, var_o3); + var_i3 = 25u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_u8x16_le(var_o2, var_o3); + var_i3 = 32u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_v128_and(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + v128_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_o1); + var_i0 = var_l2; + var_i1 = 16u; + var_i0 += var_i1; + var_l2 = var_i0; + goto var_L1; + } + var_i0 = var_p1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f78(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l4 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + v128 var_o0, var_o1, var_o2; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + goto var_Bfunc; + } + var_L1: + var_i0 = var_p0; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_o0; + var_i1 = var_p1; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_o1 = var_l3; + var_i2 = var_p2; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_l4 = var_i0; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_l4; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + var_p0 = var_i0; + goto var_B2; + } + var_i0 = var_p0; + var_i1 = 16u; + var_i0 += var_i1; + var_p0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L1;} + var_B2:; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f79(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + v128 var_o0, var_o1; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + goto var_Bfunc; + } + var_L1: + var_i0 = var_p0; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p1; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_l2 = var_i0; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_l2; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + var_p0 = var_i0; + goto var_B2; + } + var_i0 = var_p0; + var_i1 = 16u; + var_i0 += var_i1; + var_p0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L1;} + var_B2:; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f80(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 62u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l2; + var_i2 = 63u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l2; + var_i2 = 60u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } else { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + } + UNREACHABLE; + } + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f81(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } else { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + } + UNREACHABLE; + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f82(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 -= var_i1; + var_i1 = 2u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_L1: + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l3 = var_i0; + } else { + var_i0 = var_l2; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = 95u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + } + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L1; + } + var_i0 = var_l3; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f83(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 0u; + var_i2 = var_p0; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f84(w2c_highlights* instance, u32 var_p0) { + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_p0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f85(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = var_p2; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p2 = var_i1; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 4294967295u; + goto var_Bfunc; + } + var_i0 = var_p2; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p1; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p1; + var_i1 = 16u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p0; + goto var_Bfunc; + } + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 45u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + goto var_Bfunc; + } + var_i0 = var_p2; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p2; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L4: + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 36u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + var_i1 = var_p1; + var_i2 = 16u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L4; + } + var_i0 = 58u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p0; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f86(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 95u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 128u; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f87(w2c_highlights* instance) { + u32 var_l0 = 0; + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_L0: + var_i0 = 45u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 92u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 10u; + var_i0 -= var_i1; + var_i1 = 3u; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_l0; + var_i1 = 6u; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l0; + var_i2 = var_l0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 32u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 9u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l0; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + instance->w2c_g4 = var_i0; + goto var_L0; + var_B1:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f88(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0; + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = 9u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 43u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l1; + var_i3 = 32u; + var_i2 |= var_i3; + var_i3 = 101u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l0; + var_i3 = 32u; + var_i2 |= var_i3; + var_i3 = 101u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B1;} + var_i0 = var_l0; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + var_B1:; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } else { + var_i0 = var_l1; + var_i0 = w2c_highlights_f86(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f87(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f89(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = 1u; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_p1; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i3 = 1u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p1 = var_i0; + var_i1 = var_p0; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + goto var_B1; + } + var_i0 = var_p1; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p1; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = 6u; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p1 = var_i0; + var_i0 = var_p1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_p1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_p1 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_p1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 -= var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_p1 = var_i1; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p1; + var_i3 = 13u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + instance->w2c_g25 = var_i0; + var_i0 = var_p0; + instance->w2c_g26 = var_i0; + var_i0 = 0u; + instance->w2c_g27 = var_i0; + var_i0 = 44u; + instance->w2c_g29 = var_i0; + } + goto var_L0; + } + var_l2 = var_i0; + var_B1:; + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f90(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + u64 var_j0, var_j1; + var_i0 = var_p0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 -= var_i1; + var_p1 = var_i0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 65535u; + var_i0 &= var_i1; + var_p0 = var_i0; + var_i1 = 26217u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 28265u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 28532u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g43; + var_i2 = 2u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + var_i1 = var_p0; + var_i2 = 29295u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + goto var_Bfunc; + } + var_i0 = var_p1; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 16777215u; + var_i0 &= var_i1; + var_p0 = var_i0; + var_i1 = 6581857u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 7630702u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + goto var_Bfunc; + } + var_i0 = var_p1; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1836020326u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g43; + var_i2 = 2u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + var_i1 = var_l2; + var_i2 = 2037149295u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + goto var_Bfunc; + } + var_i0 = var_p1; + var_i1 = 7u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g43; + var_i2 = 2u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 29387151656511604ull; + var_j0 ^= var_j1; + var_j1 = 8ull; + var_j0 <<= (var_j1 & 63); + var_i0 = !(var_j0); + goto var_Bfunc; + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f91(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 0u; + instance->w2c_g43 = var_i0; + var_i0 = 0u; + var_i0 = w2c_highlights_f95(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f92(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 1u; + instance->w2c_g43 = var_i0; + var_i0 = 0u; + var_i0 = w2c_highlights_f95(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f93(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 2u; + instance->w2c_g43 = var_i0; + var_i0 = 0u; + var_i0 = w2c_highlights_f95(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f94(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 3u; + instance->w2c_g43 = var_i0; + var_i0 = 0u; + var_i0 = w2c_highlights_f95(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f95(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, var_l8 = 0, + var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, var_l16 = 0, + var_l17 = 0, var_l18 = 0, var_l19 = 0, var_l20 = 0; + v128 var_l21 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7; + u64 var_j1, var_j2, var_j3, var_j4; + v128 var_o0, var_o1, var_o2, var_o3, var_o4, var_o5, var_o6; + var_i0 = instance->w2c_g7; + var_l19 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l18 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62340u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l14 = var_i0; + var_i0 = 62344u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + var_i0 = 1u; + var_l7 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12448u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l18 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l12 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + var_l14 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 32u); + var_l13 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } + var_l4 = var_i0; + } + var_i0 = var_p0; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 2u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_l7 = var_i0; + var_i0 = var_p0; + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 3u; + var_i0 &= var_i1; + var_l8 = var_i0; + var_i0 = var_p0; + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_l12 = var_i0; + var_i0 = var_p0; + var_i1 = 6u; + var_i0 >>= (var_i1 & 31); + var_i1 = 3u; + var_i0 &= var_i1; + var_l9 = var_i0; + var_i0 = var_p0; + var_i1 = 9u; + var_i0 >>= (var_i1 & 31); + var_l10 = var_i0; + var_i0 = var_p0; + var_i1 = 3u; + var_i0 &= var_i1; + } else { + var_i0 = var_l4; + } + } + var_l4 = var_i0; + var_L4: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l19; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l18; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62340u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62344u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_l9; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = 0u; + var_i1 = 4u; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 -= var_i1; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 12074u; + var_i0 = var_i0 != var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_l1; + var_i1 -= var_i2; + var_i2 = 2u; + var_i1 = var_i1 < var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B5;} + } else { + var_i0 = 34u; + var_i1 = 39u; + var_i2 = var_l9; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 0u; + var_i0 = w2c_highlights_f89(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) {goto var_B5;} + } + var_i0 = 0u; + var_l9 = var_i0; + } + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g43; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l7; + var_i2 = var_l1; + var_i3 = instance->w2c_g4; + var_i4 = 10u; + var_i5 = 0u; + var_i6 = 1u; + var_i2 = w2c_highlights_f5(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = instance->w2c_g4; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + } + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B5;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 0u; + var_i3 = instance->w2c_g3; + var_i4 = instance->w2c_g4; + var_i5 = 1u; + var_i4 += var_i5; + var_i3 = var_i3 > var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l6 = var_i1; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 -= var_i1; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 12074u; + var_i0 = var_i0 != var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_l2; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 < var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l9 = var_i0; + goto var_B5; + } + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g43; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l7; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + var_l12 = var_i0; + var_i0 = 0u; + var_l13 = var_i0; + var_i0 = instance->w2c_g43; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_l4 = var_i0; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 -= var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l1 = var_i1; + var_i2 = 32u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 9u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g0; + var_i2 = var_i2 > var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + var_l5 = var_i0; + var_i0 = var_l6; + var_i0 = w2c_highlights_f86(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = 43u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + var_i1 = var_l4; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 17u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l4 = var_i0; + var_i0 = 1u; + var_l13 = var_i0; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 123u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f87(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g43; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 10536u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 58u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + var_l4 = var_i0; + goto var_L4; + } + } + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 9u); + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 101u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_j2 = 2314885530818453536ull; + var_j1 |= var_j2; + var_j2 = 7161128523421016430ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_l2; + var_i1 -= var_i2; + var_l1 = var_i1; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_l12 = var_i0; + var_i0 = instance->w2c_g43; + var_i1 = 2u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 9u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_j2 = 7957695015192261990ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 8u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 7306093603886885184ull; + var_i2 = var_j2 == var_j3; + var_i1 &= var_i2; + var_i2 = var_l1; + var_i3 = 6u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 121399270796608ull; + var_j3 ^= var_j4; + var_j4 = 16ull; + var_j3 <<= (var_j4 & 63); + var_i3 = !(var_j3); + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_l13 = var_i0; + var_i0 = var_l1; + var_i1 = 7u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 28268879695865152ull; + var_j1 ^= var_j2; + var_j2 = 8ull; + var_j1 <<= (var_j2 & 63); + var_i1 = !(var_j1); + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_l4 = var_i0; + } + var_i0 = 17u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } else { + var_i0 = 0u; + var_i1 = 2u; + var_i2 = var_l3; + var_i3 = 38u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = 1u; + } else { + var_i2 = 0u; + var_l15 = var_i2; + var_i2 = 0u; + var_l16 = var_i2; + var_i2 = instance->w2c_g4; + var_l1 = var_i2; + var_i2 = instance->w2c_g3; + var_l4 = var_i2; + var_i2 = var_l5; + var_i3 = var_l10; + var_i2 |= var_i3; + var_l20 = var_i2; + if (var_i2) { + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l5 = var_i2; + var_i2 = w2c_highlights_f86(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l5; + var_i4 = 45u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + if (var_i2) { + var_i2 = instance->w2c_g4; + var_i3 = 45u; + w2c_highlights_f7(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = instance->w2c_g4; + var_l1 = var_i3; + instance->w2c_g4 = var_i2; + var_i2 = 0u; + var_i3 = var_l1; + var_i3 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 8250u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l1; + var_i5 = 1u; + var_i4 += var_i5; + var_i5 = var_l4; + var_i4 = var_i4 < var_i5; + var_i3 &= var_i4; + if (var_i3) {goto var_B20;} + var_i2 = instance->w2c_g4; + var_l1 = var_i2; + } + } + var_L23: + var_i2 = var_l1; + var_i3 = var_l4; + var_i2 = var_i2 >= var_i3; + if (var_i2) {goto var_B24;} + var_L25: + var_i2 = var_l1; + var_o2 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l21 = var_o2; + var_i3 = 10u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o3 = var_l21; + var_i4 = 13u; + var_o4 = simde_wasm_i8x16_splat(var_i4); + var_o3 = simde_wasm_i8x16_eq(var_o3, var_o4); + var_o2 = simde_wasm_v128_or(var_o2, var_o3); + var_o3 = var_l21; + var_i4 = 123u; + var_o4 = simde_wasm_i8x16_splat(var_i4); + var_o3 = simde_wasm_i8x16_eq(var_o3, var_o4); + var_o4 = var_l21; + var_i5 = 125u; + var_o5 = simde_wasm_i8x16_splat(var_i5); + var_o4 = simde_wasm_i8x16_eq(var_o4, var_o5); + var_o3 = simde_wasm_v128_or(var_o3, var_o4); + var_o4 = var_l21; + var_i5 = 59u; + var_o5 = simde_wasm_i8x16_splat(var_i5); + var_o4 = simde_wasm_i8x16_eq(var_o4, var_o5); + var_o5 = var_l21; + var_i6 = 47u; + var_o6 = simde_wasm_i8x16_splat(var_i6); + var_o5 = simde_wasm_i8x16_eq(var_o5, var_o6); + var_o4 = simde_wasm_v128_or(var_o4, var_o5); + var_o3 = simde_wasm_v128_or(var_o3, var_o4); + var_o4 = var_l21; + var_i5 = 34u; + var_o5 = simde_wasm_i8x16_splat(var_i5); + var_o4 = simde_wasm_i8x16_eq(var_o4, var_o5); + var_o5 = var_l21; + var_i6 = 39u; + var_o6 = simde_wasm_i8x16_splat(var_i6); + var_o5 = simde_wasm_i8x16_eq(var_o5, var_o6); + var_o4 = simde_wasm_v128_or(var_o4, var_o5); + var_o5 = var_l21; + var_i6 = 58u; + var_o6 = simde_wasm_i8x16_splat(var_i6); + var_o5 = simde_wasm_i8x16_eq(var_o5, var_o6); + var_o4 = simde_wasm_v128_or(var_o4, var_o5); + var_o3 = simde_wasm_v128_or(var_o3, var_o4); + var_o2 = simde_wasm_v128_or(var_o2, var_o3); + var_i2 = v128_i8x16_bitmask(var_o2); + var_l5 = var_i2; + var_i2 = var_l4; + var_i3 = var_l1; + var_i2 -= var_i3; + var_l17 = var_i2; + var_i3 = 16u; + var_i2 = var_i2 < var_i3; + if (var_i2) { + var_i2 = var_l5; + var_i3 = 1u; + var_i4 = var_l17; + var_i3 <<= (var_i4 & 31); + var_i4 = 1u; + var_i3 -= var_i4; + var_i2 &= var_i3; + var_l5 = var_i2; + } + var_i2 = var_l5; + if (var_i2) { + var_i2 = var_l1; + var_i3 = var_l5; + var_i3 = I32_CTZ(var_i3); + var_i2 += var_i3; + var_l1 = var_i2; + goto var_B26; + } + var_i2 = var_l17; + var_i3 = 16u; + var_i2 = var_i2 <= var_i3; + if (var_i2) {goto var_B24;} + var_i2 = var_l1; + var_i3 = 16u; + var_i2 += var_i3; + var_l1 = var_i2; + goto var_L25; + var_B26:; + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l5 = var_i2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 3472u); + var_i3 = 1u; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = var_l1; + var_l4 = var_i2; + goto var_B24; + } + var_i2 = var_l5; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_l1; + var_i3 = 1u; + var_i2 -= var_i3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l5 = var_i2; + var_i3 = 35u; + var_i2 = var_i2 == var_i3; + var_i3 = instance->w2c_g43; + var_i4 = 2u; + var_i3 = var_i3 >= var_i4; + var_i2 &= var_i3; + var_i3 = var_l5; + var_i4 = 64u; + var_i3 = var_i3 == var_i4; + var_i4 = instance->w2c_g43; + var_i5 = 1u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i2 |= var_i3; + var_i3 = var_l1; + var_i4 = instance->w2c_g4; + var_i3 = var_i3 > var_i4; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = var_l15; + var_i3 = 1u; + var_i2 += var_i3; + var_l15 = var_i2; + var_i2 = var_l1; + var_i3 = 1u; + var_i2 += var_i3; + var_l1 = var_i2; + goto var_L23; + } + var_i2 = 1u; + goto var_B20; + } + var_i2 = var_l5; + var_i3 = 125u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l15; + var_i4 = 0u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = var_l15; + var_i3 = 1u; + var_i2 -= var_i3; + var_l15 = var_i2; + var_i2 = var_l1; + var_i3 = 1u; + var_i2 += var_i3; + var_l1 = var_i2; + goto var_L23; + } + var_i2 = 0u; + var_i3 = var_l5; + var_i4 = 125u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l5; + var_i5 = 59u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + if (var_i3) {goto var_B20;} + var_i2 = var_l5; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_l16; + var_i2 = !(var_i2); + if (var_i2) { + var_i2 = 1u; + var_i3 = 2u; + var_i4 = 32u; + var_i5 = var_l1; + var_i5 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i5) + 1u); + var_i6 = var_l1; + var_i7 = 1u; + var_i6 += var_i7; + var_i7 = var_l4; + var_i6 = var_i6 >= var_i7; + var_i4 = var_i6 ? var_i4 : var_i5; + var_i4 = w2c_highlights_f43(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_i4 ? var_i2 : var_i3; + var_l16 = var_i2; + } + var_i2 = var_l1; + var_i3 = 1u; + var_i2 += var_i3; + var_l1 = var_i2; + goto var_L23; + } + var_i2 = var_l5; + var_i3 = 47u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 1u); + var_i3 = 42u; + var_i2 = var_i2 == var_i3; + var_i3 = instance->w2c_g3; + var_i4 = var_l1; + var_i5 = 1u; + var_i4 += var_i5; + var_i3 = var_i3 > var_i4; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = var_l1; + var_i3 = 2u; + var_i2 += var_i3; + var_l1 = var_i2; + var_L37: + var_i2 = var_l1; + var_i3 = var_l4; + var_i4 = 42u; + var_i5 = 0u; + var_i6 = 1u; + var_i2 = w2c_highlights_f5(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i2; + var_i3 = var_l4; + var_i2 = var_i2 < var_i3; + if (var_i2) { + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 3472u); + var_i3 = 1u; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = var_l1; + var_l4 = var_i2; + goto var_B24; + } + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 1u); + var_i3 = 47u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 1u; + var_i3 += var_i4; + var_i4 = var_l4; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = var_l1; + var_i3 = 2u; + var_i2 += var_i3; + } else { + var_i2 = var_l1; + var_i3 = 1u; + var_i2 += var_i3; + var_l1 = var_i2; + goto var_L37; + } + } else { + var_i2 = var_l1; + } + } else { + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 1u); + var_i3 = 47u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 1u; + var_i3 += var_i4; + var_i4 = var_l4; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i3 = instance->w2c_g43; + var_i4 = 0u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = var_l1; + var_i3 = var_l4; + var_i4 = 10u; + var_i5 = 0u; + var_i6 = 1u; + var_i2 = w2c_highlights_f5(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i2 = var_l1; + var_i3 = 1u; + var_i2 += var_i3; + } + } + var_l1 = var_i2; + } else { + var_i2 = var_l1; + var_i3 = 1u; + var_i2 += var_i3; + var_l1 = var_i2; + var_L42: + var_i2 = var_l4; + var_i3 = var_l1; + var_i4 = var_l4; + var_i5 = var_l5; + var_i6 = 1u; + var_i7 = 1u; + var_i3 = w2c_highlights_f5(instance, var_i3, var_i4, var_i5, var_i6, var_i7); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i3; + var_i2 = var_i2 <= var_i3; + if (var_i2) {goto var_B43;} + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l17 = var_i2; + var_i3 = var_l5; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_l1; + var_i3 = 1u; + var_i2 += var_i3; + var_l1 = var_i2; + goto var_B43; + } + var_i2 = var_l17; + var_i3 = 10u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l17; + var_i4 = 13u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + if (var_i2) {goto var_B43;} + var_i2 = var_l1; + var_i3 = 2u; + var_i2 += var_i3; + var_l1 = var_i2; + goto var_L42; + var_B43:; + } + goto var_L23; + var_B24:; + var_i2 = 1u; + var_i3 = var_l16; + var_i3 = !(var_i3); + if (var_i3) {goto var_B45;} + var_i2 = 0u; + var_i3 = var_l16; + var_i4 = 1u; + var_i3 = var_i3 == var_i4; + if (var_i3) {goto var_B45;} + var_i2 = 1u; + var_i3 = var_l20; + var_i3 = !(var_i3); + if (var_i3) {goto var_B45;} + var_i2 = instance->w2c_g4; + var_l1 = var_i2; + var_L46: + var_i2 = var_l1; + var_i3 = var_l4; + var_i2 = var_i2 >= var_i3; + if (var_i2) {goto var_B47;} + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l5 = var_i2; + var_i2 = w2c_highlights_f86(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l5; + var_i4 = 45u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l5; + var_i4 = 48u; + var_i3 -= var_i4; + var_i4 = 9u; + var_i3 = var_i3 <= var_i4; + var_i2 |= var_i3; + var_i2 = I32_CLZ(var_i2); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + if (var_i2) {goto var_B47;} + var_i2 = var_l1; + var_i3 = 1u; + var_i2 += var_i3; + var_l1 = var_i2; + goto var_L46; + var_B47:; + var_L48: + var_i2 = var_l1; + var_i3 = var_l4; + var_i2 = var_i2 >= var_i3; + if (var_i2) {goto var_B49;} + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l5 = var_i2; + var_i3 = 10u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l5; + var_i4 = 13u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + if (var_i2) {goto var_B49;} + var_i2 = var_l5; + var_i2 = w2c_highlights_f43(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = !(var_i2); + if (var_i2) {goto var_B49;} + var_i2 = var_l1; + var_i3 = 1u; + var_i2 += var_i3; + var_l1 = var_i2; + goto var_L48; + var_B49:; + var_i2 = 1u; + var_i3 = var_l1; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 58u; + var_i3 = var_i3 != var_i4; + if (var_i3) {goto var_B45;} + var_i2 = var_l1; + var_i3 = var_l4; + var_i4 = 44u; + var_i5 = 0u; + var_i6 = 0u; + var_i2 = w2c_highlights_f5(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l1; + var_i4 = var_l4; + var_i5 = 40u; + var_i6 = 0u; + var_i7 = 0u; + var_i3 = w2c_highlights_f5(instance, var_i3, var_i4, var_i5, var_i6, var_i7); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_i2 < var_i3; + var_B45:; + var_B20:; + } + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l4 = var_i0; + } + var_i0 = var_l11; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l11; + var_i1 = 1u; + var_i0 += var_i1; + var_l11 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l11; + var_i1 = 1u; + var_i0 -= var_i1; + var_l11 = var_i0; + if (var_i0) { + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l14; + var_l4 = var_i0; + } + goto var_L4; + } + } + var_i0 = var_l3; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g43; + var_i2 = 2u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g43; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + var_i1 = var_l6; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l14; + var_i1 = var_l4; + var_i2 = var_l11; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l14 = var_i0; + var_i0 = var_l11; + var_i1 = 1u; + var_i0 += var_i1; + var_l11 = var_i0; + var_i0 = 3u; + var_l4 = var_i0; + goto var_L4; + } + var_i0 = instance->w2c_g43; + var_i1 = 2u; + var_i0 = var_i0 >= var_i1; + var_i1 = var_l6; + var_i1 = w2c_highlights_f86(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g43; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l6; + var_i2 = w2c_highlights_f86(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l6; + var_i4 = 64u; + var_i3 = var_i3 == var_i4; + var_l1 = var_i3; + var_i2 |= var_i3; + var_i1 &= var_i2; + var_i2 = var_l3; + var_i3 = 64u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l1; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f87(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 58u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l6; + var_i0 = w2c_highlights_f86(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 37u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l4; + var_i2 = 1u; + var_i1 = var_i1 <= var_i2; + var_i2 = instance->w2c_g43; + var_i3 = 2u; + var_i2 = var_i2 >= var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f87(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 42u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l7 = var_i0; + var_i0 = var_l10; + var_i1 = 1u; + var_i0 += var_i1; + var_l10 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l7 = var_i0; + var_i0 = var_l10; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_l10; + var_i2 = var_l10; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l10 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l7 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i1 = var_l3; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 = w2c_highlights_f89(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 3u; + var_i2 = var_l1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + goto var_B5; + } + goto var_L4; + } + var_i0 = var_l4; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g43; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l6; + var_i1 = w2c_highlights_f86(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l6; + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l3; + var_i3 = 38u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f87(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 42u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f86(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f87(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 -= var_i1; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 1852139639u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g43; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 21u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = 1u; + var_i1 = 44u; + var_i2 = var_l8; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 23u; + var_i2 = 49u; + var_i3 = instance->w2c_g4; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 124u; + var_i3 = var_i3 == var_i4; + var_i4 = instance->w2c_g4; + var_i5 = instance->w2c_g3; + var_i4 = var_i4 < var_i5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l8; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f87(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 42u; + var_i1 = 35u; + var_i2 = instance->w2c_g4; + var_i3 = var_l2; + var_i2 -= var_i3; + var_i3 = 1u; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f87(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 43u; + var_i1 = 0u; + var_i2 = instance->w2c_g4; + var_i3 = var_l2; + var_i2 -= var_i3; + var_i3 = 1u; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + w2c_highlights_f87(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 66u; + var_i1 = 35u; + var_i2 = instance->w2c_g4; + var_i3 = var_l1; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 48u; + var_i0 -= var_i1; + var_i1 = 9u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f88(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l8 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 93u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 41u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = var_l8; + var_i2 = var_l8; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3472u); + var_i1 = 2u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + goto var_B62; + } + var_i0 = var_l4; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g43; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i1 = w2c_highlights_f86(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l3; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_l1 = var_i2; + var_i3 = var_l3; + var_i4 = 35u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f87(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 42u; + var_i1 = 43u; + var_i2 = var_l1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f86(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_l1 = var_i1; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f87(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 58u; + var_i1 = 29u; + var_i2 = var_l6; + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 3u; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f86(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_l1 = var_i1; + var_i2 = var_l6; + var_i2 = w2c_highlights_f86(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l6; + var_i4 = 45u; + var_i3 = var_i3 == var_i4; + var_l5 = var_i3; + var_i2 |= var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f87(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = var_l5; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 58u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f90(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 21u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l4; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l13; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l13 = var_i0; + var_i0 = 14u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 -= var_i1; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 538976288u; + var_i1 |= var_i2; + var_i2 = 678195829u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 14u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_L88: + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B89;} + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 9u; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B89;} + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L88; + var_B89:; + var_i0 = var_l6; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l6; + var_i2 = 41u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = var_l1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_L91: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B92;} + var_i0 = instance->w2c_g4; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l21 = var_o0; + var_i1 = 9u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_sub(var_o0, var_o1); + var_i1 = 4u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_u8x16_le(var_o0, var_o1); + var_o1 = var_l21; + var_i2 = 32u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_o1 = var_l21; + var_i2 = 34u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o2 = var_l21; + var_i3 = 39u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o2 = var_l21; + var_i3 = 41u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_l2 = var_i0; + var_i0 = instance->w2c_g3; + var_i1 = instance->w2c_g4; + var_i0 -= var_i1; + var_l3 = var_i0; + var_i1 = 16u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i2 = var_l3; + var_i1 <<= (var_i2 & 31); + var_i2 = 1u; + var_i1 -= var_i2; + var_i0 &= var_i1; + var_l2 = var_i0; + } + var_i0 = var_l2; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_B92; + } + var_i0 = var_l3; + var_i1 = 16u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 16u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L91; + } + var_B92:; + var_i0 = 7u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L4; + } + var_i0 = 14u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l4; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l12; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l12 = var_i0; + var_i0 = 23u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l4; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_L98: + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B99;} + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 9u; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B99;} + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L98; + var_B99:; + var_i0 = var_l6; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 29u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f90(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 21u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + } + var_i0 = 7u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 48u; + var_i0 -= var_i1; + var_i1 = 9u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f88(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = 9u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f88(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 43u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 2u); + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = 9u; + var_i1 = var_i1 <= var_i2; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 2u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i1 &= var_i2; + var_i2 = var_l6; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l6; + var_i3 = 48u; + var_i2 -= var_i3; + var_i3 = 9u; + var_i2 = var_i2 <= var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f88(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f87(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 47u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 33u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + w2c_highlights_f87(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 17u; + var_i1 = 25u; + var_i2 = instance->w2c_g4; + var_i3 = var_l1; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 41u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 91u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = 93u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3472u); + var_i1 = 4u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_B62:; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + var_B5:; + var_i0 = var_l18; + if (var_i0) { + var_i0 = 12448u; + instance->w2c_g32 = var_i0; + var_i0 = 12448u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12452u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12456u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12460u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12464u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12468u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12472u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12476u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12480u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_i0 = var_p0; + if (var_i0) { + var_i0 = var_l4; + var_i1 = var_l9; + var_i2 = 6u; + var_i1 <<= (var_i2 & 31); + var_i2 = var_l10; + var_i3 = 9u; + var_i2 <<= (var_i3 & 31); + var_i1 |= var_i2; + var_i2 = var_l12; + var_i3 = 5u; + var_i2 <<= (var_i3 & 31); + var_i1 |= var_i2; + var_i2 = var_l8; + var_i3 = 3u; + var_i2 <<= (var_i3 & 31); + var_i1 |= var_i2; + var_i2 = var_l7; + var_i3 = 2u; + var_i2 <<= (var_i3 & 31); + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i1 = 256u; + var_i0 |= var_i1; + } else { + var_i0 = 0u; + } + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f96(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 95u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 128u; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f97(w2c_highlights* instance) { + u32 var_l0 = 0; + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = 45u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 46u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l0; + var_i2 = 58u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + var_B1:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f98(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g4; + var_i1 = var_p0; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = var_l2; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_p0 = var_i0; + } else { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + var_i0 = 44u; + var_i1 = var_p1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f99(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + u32 var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, var_l8 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + v128 var_o0, var_o1; + var_i0 = var_p2; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 65535u; + var_l5 = var_i0; + var_i0 = 1u; + var_l4 = var_i0; + var_i0 = 15935u; + } else { + var_i0 = 16777215u; + var_l5 = var_i0; + var_i0 = 2u; + var_l4 = var_i0; + var_i0 = 4074797u; + var_i1 = 4087133u; + var_i2 = var_p2; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_p2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_p1; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + var_L2: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + goto var_B3; + } + var_i0 = instance->w2c_g4; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 62u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_p1 = var_i0; + var_i0 = instance->w2c_g3; + var_i1 = instance->w2c_g4; + var_i0 -= var_i1; + var_l6 = var_i0; + var_i1 = 16u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p1; + var_i1 = 1u; + var_i2 = var_l6; + var_i1 <<= (var_i2 & 31); + var_i2 = 1u; + var_i1 -= var_i2; + var_i0 &= var_i1; + var_p1 = var_i0; + } + var_L6: + var_i0 = var_p1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_p1; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + var_l7 = var_i0; + var_i1 = var_l4; + var_i0 -= var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_l5; + var_i0 &= var_i1; + var_i1 = var_p2; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l7; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l8 = var_i0; + goto var_B3; + } else { + var_i0 = var_p1; + var_i1 = var_p1; + var_i2 = 1u; + var_i1 -= var_i2; + var_i0 &= var_i1; + var_p1 = var_i0; + goto var_L6; + } + UNREACHABLE; + } + var_i0 = var_l6; + var_i1 = 16u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 16u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L2; + } + var_B3:; + var_i0 = var_p3; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l8; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_p2; + var_i1 = var_l4; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_p3; + w2c_highlights_f63(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f100(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0; + v128 var_l8 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_L0: + var_i0 = var_l3; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p2; + if (var_i0) { + var_i0 = var_l3; + var_i1 = var_p2; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = var_l3; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = 0u; + var_p2 = var_i0; + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + goto var_L0; + } + var_i0 = var_l3; + var_i1 = var_l5; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 91u; + var_i2 = 93u; + var_i3 = 62u; + var_i0 = w2c_highlights_f8(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + } + var_i0 = var_l3; + var_i1 = var_l6; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 34u; + var_i2 = 39u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + } + var_i0 = var_l5; + var_i1 = var_l6; + var_i2 = var_l5; + var_i3 = var_l6; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = var_l4; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_p2 = var_i0; + goto var_L0; + } + var_i0 = var_l4; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p1; + var_i1 = 1u; + var_i0 += var_i1; + var_p1 = var_i0; + goto var_L0; + } + var_i0 = var_l4; + var_i1 = 93u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p1; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_p1; + var_i2 = var_p1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p1 = var_i0; + goto var_L0; + } + var_i0 = var_p1; + if (var_i0) {goto var_L0;} + var_i0 = 1u; + var_l7 = var_i0; + var_B1:; + var_i0 = var_l3; + var_i1 = instance->w2c_g3; + var_i2 = var_l3; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 50u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l7; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g22; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g2; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 10u; + w2c_highlights_f68(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p1; + instance->w2c_g26 = var_i0; + var_i0 = var_p2; + instance->w2c_g27 = var_i0; + var_i0 = 1u; + instance->w2c_g28 = var_i0; + } + var_i0 = var_l7; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f101(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + if (var_i0) { + var_i0 = var_p0; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f98(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + } + var_L1: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g2; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 10u; + w2c_highlights_f68(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + instance->w2c_g26 = var_i0; + var_i0 = var_p0; + instance->w2c_g27 = var_i0; + var_i0 = 0u; + instance->w2c_g28 = var_i0; + } + var_i0 = 0u; + goto var_B2; + } + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L1; + } + var_i0 = var_l1; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 33u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + goto var_B2; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 33u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + goto var_B2; + } + var_i0 = var_l1; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L1; + } + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i1 = var_l2; + var_i0 = w2c_highlights_f98(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + goto var_L1; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f96(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f97(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L1; + } + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B2;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L11: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B12;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 60u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B12;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L11; + var_B12:; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L1; + var_B2:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f102(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0; + v128 var_l5 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + u64 var_j1, var_j2; + var_i0 = instance->w2c_g7; + var_l4 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12488u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l2 = var_i0; + instance->w2c_g24 = var_i0; + } + } + var_L2: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B3;} + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 60u; + var_i2 = 38u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B3;} + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 38u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L7: + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i0 -= var_i1; + var_i1 = 32u; + var_i0 = var_i0 > var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B8;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i2 = 1u; + var_i1 += var_i2; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_B8;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 47u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + goto var_B6; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B8;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L7; + var_B8:; + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_B6:; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L2; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 757932348u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 4u; + var_i2 += var_i3; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 4u; + var_i2 = 1u; + var_i3 = 4u; + w2c_highlights_f99(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 4707459271952638268ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 9u; + var_i2 += var_i3; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 9u; + var_i2 = 2u; + var_i3 = 53u; + w2c_highlights_f99(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 65535u; + var_i0 &= var_i1; + var_i1 = 16188u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 2u; + var_i2 = 3u; + var_i3 = 27u; + w2c_highlights_f99(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_i1 = 69u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 5789751444030890300ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 9u; + var_i2 += var_i3; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 0u; + var_i2 = 0u; + var_i0 = w2c_highlights_f100(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f96(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 33u; + var_i1 = var_l0; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f97(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 49u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_i0 = w2c_highlights_f101(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L2; + var_B3:; + var_i0 = var_l2; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f103(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + u64 var_j0, var_j1; + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 -= var_i1; + var_p1 = var_i0; + var_i1 = 6u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 281474976710655ull; + var_j0 &= var_j1; + var_j1 = 35322350018592ull; + var_j0 |= var_j1; + var_j1 = 128026154263411ull; + var_i0 = var_j0 == var_j1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + } + var_i0 = var_p1; + var_i1 = 5u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 1099511627775ull; + var_j0 &= var_j1; + var_j1 = 137977929760ull; + var_j0 |= var_j1; + var_j1 = 435611595891ull; + var_i0 = var_j0 == var_j1; + if (var_i0) { + var_i0 = 2u; + goto var_Bfunc; + } + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f104(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + u64 var_j0, var_j1; + var_i0 = var_p1; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + var_i1 = var_p0; + var_i2 = 8u; + var_i1 += var_i2; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_j1 = 72057594037927935ull; + var_j0 &= var_j1; + var_j1 = 9042521604759552ull; + var_j0 |= var_j1; + var_j1 = 32774695491433263ull; + var_i0 = var_j0 != var_j1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 8u; + var_i0 += var_i1; + } else { + var_i0 = instance->w2c_g3; + var_i1 = var_p0; + var_i2 = 7u; + var_i1 += var_i2; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_j1 = 281474976710655ull; + var_j0 &= var_j1; + var_j1 = 35322350018560ull; + var_j0 |= var_j1; + var_j1 = 111516568548143ull; + var_i0 = var_j0 != var_j1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 7u; + var_i0 += var_i1; + } + var_p0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 32u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_i3 = 9u; + var_i2 -= var_i3; + var_i3 = 4u; + var_i2 = var_i2 <= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f105(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0; + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + } + var_L1: + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i0 -= var_i1; + var_i1 = 32u; + var_i0 = var_i0 > var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B2;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 48u; + var_i0 -= var_i1; + var_i1 = 9u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l1; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B2;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L1; + var_B2:; + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 59u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + var_i1 -= var_i2; + var_i2 = 2u; + var_i3 = 1u; + var_i4 = instance->w2c_g4; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4) + 1u); + var_i5 = 35u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = 47u; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_l0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f106(w2c_highlights* instance, u32 var_p0) { + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + var_i1 = 4u; + var_i2 = 1u; + var_i3 = 4u; + w2c_highlights_f99(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f107(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_l3 = var_i0; + var_L0: + var_i0 = var_l3; + var_i1 = 62u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = var_l3; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p1; + var_i0 = !(var_i0); + var_i1 = var_l3; + var_i2 = 1u; + var_i1 -= var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 63u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_l3; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p2; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + var_i0 = var_p2; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g2; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 15935u; + var_i1 = 62u; + var_i2 = var_p1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_p1; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_p2; + w2c_highlights_f63(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f108(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_L0: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3472u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f109(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_L0: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3472u); + var_i1 = 16u; + var_i0 &= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f110(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p2; + var_i1 = var_p1; + var_i0 -= var_i1; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 538976288u; + var_i1 |= var_i2; + var_i2 = 1735287148u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_p0; + var_i2 = 63u; + var_i1 &= var_i2; + var_p0 = var_i1; + var_i2 = 1u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 64u; + var_i0 |= var_i1; + } else { + var_i0 = var_p0; + } + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f111(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i1 = 64u; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_p0; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 63u; + var_i0 &= var_i1; + var_p0 = var_i0; + var_i0 = var_p2; + var_i1 = var_p1; + var_i0 -= var_i1; + var_i1 = 4u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_p0; + goto var_Bfunc; + } + var_i0 = var_p1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 538976288u; + var_i0 |= var_i1; + var_p1 = var_i0; + var_i1 = 1936942444u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 14u; + goto var_Bfunc; + } + var_i0 = var_p1; + var_i1 = 1936941939u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 15u; + goto var_Bfunc; + } + var_i0 = var_p1; + var_i1 = 1936941427u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 16u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f112(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + u32 var_l4 = 0, var_l5 = 0; + v128 var_l6 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = var_p1; + if (var_i0) { + var_i0 = var_p1; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f98(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p1 = var_i0; + } + var_L1: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g2; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p3; + w2c_highlights_f68(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p2; + instance->w2c_g26 = var_i0; + var_i0 = var_p0; + instance->w2c_g27 = var_i0; + var_i0 = var_p1; + instance->w2c_g28 = var_i0; + } else { + var_i0 = var_p3; + var_i1 = 12u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 <<= (var_i1 & 31); + var_i1 = 1u; + var_i0 |= var_i1; + var_i1 = var_p1; + var_i2 = 8u; + var_i1 <<= (var_i2 & 31); + var_i2 = var_p2; + var_i3 = 16u; + var_i2 <<= (var_i3 & 31); + var_i1 |= var_i2; + var_i0 |= var_i1; + instance->w2c_g44 = var_i0; + } + } + var_i0 = 0u; + goto var_B2; + } + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 9u; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l4; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L1; + } + var_i0 = var_l5; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 33u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p2; + var_i1 = 63u; + var_i0 &= var_i1; + var_i1 = 8u; + var_i0 <<= (var_i1 & 31); + var_i1 = 1u; + var_i0 |= var_i1; + goto var_B2; + } + var_i0 = var_p0; + if (var_i0) { + var_i0 = 0u; + var_p0 = var_i0; + var_i0 = var_l5; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l5; + var_i1 = var_l4; + var_i0 = w2c_highlights_f98(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p1 = var_i0; + var_i0 = var_p2; + var_i1 = 64u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p2; + var_i1 = var_l4; + var_i2 = 1u; + var_i1 += var_i2; + var_p2 = var_i1; + var_i2 = var_p2; + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 -= var_i4; + var_i4 = var_p1; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i0 = w2c_highlights_f111(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p2 = var_i0; + } + goto var_L1; + } + var_i0 = 0u; + var_i1 = var_l5; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B2;} + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f109(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p2; + var_i1 = 64u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p2; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + var_i0 = w2c_highlights_f111(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p2 = var_i0; + } + goto var_L1; + } + var_i0 = var_l5; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 33u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p2; + var_i1 = 63u; + var_i0 &= var_i1; + var_i1 = 8u; + var_i0 <<= (var_i1 & 31); + var_i1 = 2u; + var_i0 |= var_i1; + goto var_B2; + } + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L1; + } + var_i0 = var_l5; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_p0 = var_i0; + goto var_L1; + } + var_i0 = var_l5; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l5; + var_i1 = var_l4; + var_i0 = w2c_highlights_f98(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p1 = var_i0; + goto var_L1; + } + var_i0 = 0u; + var_i1 = var_l5; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B2;} + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f108(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p2; + if (var_i0) { + var_i0 = var_p2; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + var_i0 = w2c_highlights_f110(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p2 = var_i0; + } + goto var_L1; + var_B2:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f113(w2c_highlights* instance, u32 var_p0) { + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i1 = 14u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + w2c_highlights_f92(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 15u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + w2c_highlights_f93(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 16u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + w2c_highlights_f94(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + w2c_highlights_f91(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f114(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0; + v128 var_l5 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_L0: + var_i1 = instance->w2c_g4; + var_i2 = 60u; + var_i1 = w2c_highlights_f79(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + if (var_i1) {goto var_B1;} + var_i1 = instance->w2c_g4; + var_i2 = var_p0; + var_i1 = w2c_highlights_f104(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i1) {goto var_B1;} + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + instance->w2c_g4 = var_i1; + goto var_L0; + var_B1:; + var_i1 = instance->w2c_g22; + var_i2 = instance->w2c_g4; + var_l2 = var_i2; + var_i3 = instance->w2c_g3; + var_l4 = var_i3; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_l1 = var_i1; + if (var_i1) { + var_i1 = var_p0; + w2c_highlights_f68(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i1 = var_l2; + instance->w2c_g3 = var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + if (var_i0) { + var_i0 = 1u; + w2c_highlights_f152(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + w2c_highlights_f191(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f189(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } else { + var_i0 = var_l1; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g24 = var_i0; + var_i0 = 1u; + instance->w2c_g23 = var_i0; + } + var_i0 = var_p0; + w2c_highlights_f113(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g24 = var_i0; + var_i0 = 0u; + instance->w2c_g23 = var_i0; + } + } + var_i0 = var_l4; + instance->w2c_g3 = var_i0; + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g31 = var_i0; + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f115(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 33u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f108(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i0 = w2c_highlights_f103(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = 49u; + var_i1 = instance->w2c_g4; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = var_p0; + var_i0 = w2c_highlights_f112(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f116(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f116(w2c_highlights* instance, u32 var_p0) { + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 3u; + var_i0 &= var_i1; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + var_i1 = var_p0; + var_i2 = 255u; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + w2c_highlights_f114(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f117(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 60u; + var_i2 = 38u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 38u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f105(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L0; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 0u; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i1 = 33u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 757932348u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 4u; + var_i2 += var_i3; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + w2c_highlights_f106(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l1; + var_i1 = 0u; + var_i2 = 50u; + w2c_highlights_f107(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L0; + } + var_i0 = var_l2; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i2 = 4u; + w2c_highlights_f107(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L0; + } + var_i0 = var_l2; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 33u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f108(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = 49u; + var_i1 = instance->w2c_g4; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = 0u; + var_i2 = 0u; + var_i3 = var_p0; + var_i0 = w2c_highlights_f112(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L0; + } + var_i0 = var_l2; + var_i1 = 95u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 128u; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_p0; + w2c_highlights_f115(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L0; + var_B1:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f118(w2c_highlights* instance) { + u32 var_l0 = 0; + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12488u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l0 = var_i0; + instance->w2c_g24 = var_i0; + } + var_i0 = 9u; + w2c_highlights_f117(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f119(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g2; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g24 = var_i0; + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = 0u; + instance->w2c_g30 = var_i0; + var_i0 = 0u; + instance->w2c_g25 = var_i0; + var_i0 = var_p0; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + var_i1 = var_p1; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p1; + w2c_highlights_f114(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + instance->w2c_g24 = var_i0; + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f120(w2c_highlights* instance, u32 var_p0) { + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = 1u; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g27; + var_i1 = instance->w2c_g28; + var_i2 = instance->w2c_g26; + var_i3 = var_p0; + var_i0 = w2c_highlights_f112(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i1 = 3u; + var_i0 &= var_i1; + var_i1 = var_p0; + var_i2 = 8u; + var_i1 >>= (var_i2 & 31); + var_i0 = w2c_highlights_f119(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f121(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = instance->w2c_g3; + var_i1 = var_p0; + var_i2 = 1u; + var_i1 += var_i2; + var_p0 = var_i1; + var_i2 = 6u; + var_i1 += var_i2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_p0; + var_i2 = 6u; + var_i1 += var_i2; + var_i0 = w2c_highlights_f103(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + } + var_i0 = var_l1; + var_i0 = !(var_i0); + var_i1 = var_p0; + var_i2 = 5u; + var_i1 += var_i2; + var_l2 = var_i1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_l2; + var_i0 = w2c_highlights_f103(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + } + var_i0 = var_l1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 6u; + var_i2 = 5u; + var_i3 = var_l1; + var_i4 = 1u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + var_p0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f43(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_p0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 62u; + var_i2 = var_i2 == var_i3; + var_i3 = var_p0; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + } + var_i0 = var_l1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f122(w2c_highlights* instance, u32 var_p0) { + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_L0: + var_i0 = var_p0; + var_i1 = 123u; + var_i2 = 60u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = w2c_highlights_f121(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 757932348u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i3 = 4u; + var_i2 += var_i3; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f123(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p2; + if (var_i0) { + var_i0 = var_p0; + } else { + var_i0 = 40u; + var_i1 = var_p0; + var_i2 = var_p0; + var_i3 = 1u; + var_i2 += var_i3; + var_p0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_L3: + var_i0 = var_l3; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 97u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 > var_i1; + if (var_i0) {goto var_B4;} + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + goto var_L3; + var_B4:; + var_i0 = 18u; + var_i1 = var_p0; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + } else { + var_i0 = var_p0; + } + } else { + var_i0 = var_p0; + } + } + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_i1 = var_p2; + var_i2 = var_p2; + var_i3 = 7u; + var_i2 += var_i3; + var_i3 = var_p1; + var_i0 = w2c_highlights_f195(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 32u; + var_i1 = 40u; + var_i2 = var_p2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f124(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_L0: + var_i0 = instance->w2c_g3; + var_i1 = instance->w2c_g4; + var_i2 = var_p1; + var_i3 = var_p0; + var_i4 = 8u; + var_i3 >>= (var_i4 & 31); + var_i4 = 255u; + var_i3 &= var_i4; + var_l3 = var_i3; + var_i4 = 0u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i1 += var_i2; + var_i1 = w2c_highlights_f122(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g3 = var_i1; + var_i1 = 0u; + instance->w2c_g44 = var_i1; + var_i1 = 0u; + var_i2 = var_l3; + var_i3 = var_p0; + var_i4 = 16u; + var_i3 >>= (var_i4 & 31); + var_i4 = var_p1; + var_i5 = 12u; + var_i4 += var_i5; + var_i1 = w2c_highlights_f112(instance, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i1; + instance->w2c_g3 = var_i0; + var_i0 = var_p0; + w2c_highlights_f116(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g44; + var_p0 = var_i0; + var_i0 = 0u; + instance->w2c_g44 = var_i0; + var_i0 = var_p0; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 123u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p1; + var_i1 = var_p0; + var_i2 = 65280u; + var_i1 &= var_i2; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_p0; + var_i2 = var_p1; + var_i0 = w2c_highlights_f123(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B1;} + } + goto var_L0; + var_B1:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f125(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p1; + var_i1 = var_p0; + var_i2 = 65280u; + var_i1 &= var_i2; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_p1; + w2c_highlights_f124(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = var_p0; + var_i2 = var_p1; + var_i0 = w2c_highlights_f123(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 0u; + var_i2 = var_p0; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_p1; + w2c_highlights_f124(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f126(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_L0: + var_i0 = var_l2; + var_i0 = w2c_highlights_f122(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = 0u; + instance->w2c_g44 = var_i0; + var_i0 = var_l1; + var_i1 = var_l2; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + var_i1 = var_l1; + instance->w2c_g3 = var_i1; + var_i1 = var_l2; + instance->w2c_g4 = var_i1; + var_i1 = var_p0; + var_i2 = 12u; + var_i1 += var_i2; + w2c_highlights_f117(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g3 = var_i0; + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g44; + var_l2 = var_i0; + var_i0 = 0u; + instance->w2c_g44 = var_i0; + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_i1 = var_p0; + w2c_highlights_f125(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + goto var_L0; + } + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i0 = w2c_highlights_f121(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 12u; + var_i0 += var_i1; + w2c_highlights_f115(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l1; + w2c_highlights_f106(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + goto var_L0; + var_B1:; + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f127(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = 58u; + var_i1 = var_p0; + var_i2 = var_p1; + var_i3 = 13984u; + var_i4 = 15u; + var_i5 = 37u; + var_i1 = w2c_highlights_f76(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i1; + var_i2 = var_p0; + var_i3 = 0u; + var_i2 = (u32)((s32)var_i2 < (s32)var_i3); + var_i0 = var_i2 ? var_i0 : var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f128(w2c_highlights* instance) { + u32 var_l0 = 0; + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g26; + var_i1 = 1u; + var_i2 = instance->w2c_g22; + var_i3 = instance->w2c_g23; + var_i3 = !(var_i3); + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 1u; + var_i0 = w2c_highlights_f129(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = instance->w2c_g22; + if (var_i0) { + var_i0 = var_l0; + instance->w2c_g26 = var_i0; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f129(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, var_l8 = 0, var_l9 = 0; + v128 var_l10 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g4; + var_l9 = var_i0; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = var_p1; + var_i1 = var_p0; + var_i2 = 896u; + var_i1 &= var_i2; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 63u; + var_i0 &= var_i1; + var_l8 = var_i0; + var_i0 = var_p0; + var_i1 = 7u; + var_i0 >>= (var_i1 & 31); + var_i1 = 7u; + var_i0 &= var_i1; + var_l7 = var_i0; + var_i0 = var_p0; + var_i1 = 10u; + var_i0 >>= (var_i1 & 31); + var_i1 = 127u; + var_i0 &= var_i1; + var_l3 = var_i0; + var_i0 = var_p0; + var_i1 = 17u; + var_i0 >>= (var_i1 & 31); + var_i1 = 4095u; + var_i0 &= var_i1; + var_l5 = var_i0; + var_i0 = var_p0; + var_i1 = 29u; + var_i0 >>= (var_i1 & 31); + var_l4 = var_i0; + var_L4: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i0 = var_l3; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = var_l3; + var_i3 = 1u; + var_i4 = 44u; + var_i5 = var_l2; + var_i2 = w2c_highlights_f52(instance, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + goto var_L4; + } + var_i0 = var_l7; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_l8; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 3u; + goto var_B3; + } + var_i0 = 3u; + var_i1 = var_p0; + var_i1 = w2c_highlights_f43(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_p0; + var_i3 = 62u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l8; + var_i3 = 5u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B3;} + } + var_i0 = var_p0; + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l7; + var_i1 = 5u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f127(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_p0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 3u; + var_l7 = var_i0; + goto var_L4; + } + var_i0 = var_p0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 1u; + goto var_B3; + } + var_i0 = var_l5; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_p0; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 125u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l7; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l8; + goto var_B3; + } + var_i0 = var_l7; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_l6 = var_i0; + var_i1 = var_p0; + var_i2 = 41u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l7; + var_i2 = 4u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_i3 = 59u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = 35u; + var_i2 = var_l6; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + goto var_B3; + } + } + var_i0 = var_p0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 96u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p0; + var_l3 = var_i0; + var_i1 = 1u; + var_i2 = 44u; + var_i3 = var_l2; + var_i0 = w2c_highlights_f52(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l3 = var_i0; + } + goto var_L4; + } + var_i0 = var_p0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = 16u; + var_i1 = 14u; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 29u; + var_i2 = 14u; + var_i3 = var_l4; + var_i4 = 1u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l2; + var_i3 = instance->w2c_g4; + var_i2 = w2c_highlights_f127(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i2; + var_i3 = 18u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = 58u; + } else { + var_i2 = var_l6; + } + var_i3 = var_l4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_p0; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l4; + var_i4 = 2u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L4; + } + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = var_p0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_p0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_l6 = var_i0; + var_i0 = var_p0; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 40u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 32u; + var_l6 = var_i0; + var_i0 = var_l5; + var_i1 = var_l5; + var_i2 = 4095u; + var_i1 = var_i1 < var_i2; + var_i0 += var_i1; + var_l5 = var_i0; + } + var_i0 = 35u; + var_i1 = var_p0; + var_i2 = 93u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_i3 = 125u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_p0; + var_i3 = 41u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) { + var_i1 = var_l5; + var_i2 = var_l5; + var_i3 = 0u; + var_i2 = var_i2 != var_i3; + var_i1 -= var_i2; + var_l5 = var_i1; + var_i1 = 32u; + } else { + var_i1 = var_l6; + } + var_i2 = var_p0; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i3 = var_p0; + var_i4 = 44u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_p0; + var_i4 = 59u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = var_p0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 35u; + var_l6 = var_i0; + var_i0 = 1u; + var_l4 = var_i0; + } + var_i0 = var_p0; + var_i1 = 124u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 124u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } else { + var_i0 = 2u; + var_l4 = var_i0; + } + } + var_i0 = var_l6; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l8; + var_i1 = var_l5; + var_i2 = 17u; + var_i1 <<= (var_i2 & 31); + var_i2 = var_l4; + var_i3 = 29u; + var_i2 <<= (var_i3 & 31); + var_i1 |= var_i2; + var_i2 = var_l3; + var_i3 = 10u; + var_i2 <<= (var_i3 & 31); + var_i1 |= var_i2; + var_i2 = var_l7; + var_i3 = 7u; + var_i2 <<= (var_i3 & 31); + var_i1 |= var_i2; + var_i0 |= var_i1; + var_B3:; + var_p0 = var_i0; + goto var_L0; + } + var_i0 = var_p0; + var_i1 = 63u; + var_i0 &= var_i1; + var_l4 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_p1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l4; + var_i2 = 123u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f145(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 128u; + var_i0 |= var_i1; + var_p0 = var_i0; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L0; + } + } else { + var_i0 = instance->w2c_g4; + var_i1 = var_l4; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 3u; + var_p0 = var_i0; + } + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f145(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L0; + } + var_i0 = var_l4; + var_i1 = 6u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_L33: + var_i0 = instance->w2c_g4; + var_i1 = 62u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B34;} + var_i0 = 1u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 -= var_i3; + var_i2 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 11565u; + var_i2 = var_i2 == var_i3; + var_i3 = instance->w2c_g4; + var_i4 = var_l9; + var_i3 -= var_i4; + var_i4 = 2u; + var_i3 = var_i3 >= var_i4; + var_i2 &= var_i3; + var_i3 = var_l4; + var_i4 = 6u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 -= var_i4; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 63u; + var_i3 = var_i3 == var_i4; + var_i4 = instance->w2c_g4; + var_i5 = var_l9; + var_i4 = var_i4 > var_i5; + var_i3 &= var_i4; + var_i4 = var_l4; + var_i5 = 8u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i2 |= var_i3; + var_i3 = var_l4; + var_i4 = 7u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_L33;} + var_B34:; + var_i0 = 50u; + var_i1 = 4u; + var_i2 = var_l4; + var_i3 = 7u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L0; + } + var_i0 = var_l4; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 129u; + var_p0 = var_i0; + goto var_L0; + } + var_i0 = var_l2; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l4 = var_i0; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l4; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f127(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i1 = 18u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 19u; + var_i1 = var_i1 == var_i2; + var_l5 = var_i1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 513u; + var_i1 = 641u; + var_i2 = var_l5; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p0 = var_i0; + goto var_L0; + } + var_i0 = var_l3; + instance->w2c_g4 = var_i0; + } + var_i0 = var_l2; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 125u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L0; + } + } + var_i0 = var_l2; + var_i1 = 38u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f105(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) {goto var_L0;} + } + var_i0 = var_l2; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i1 = 33u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 63u; + var_i1 = var_i1 == var_i2; + var_l4 = var_i1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 6u; + var_i1 = 8u; + var_i2 = 7u; + var_i3 = var_l4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l3; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 757932348u; + var_i2 = var_i2 == var_i3; + var_i3 = instance->w2c_g3; + var_i4 = var_l3; + var_i5 = 4u; + var_i4 += var_i5; + var_i3 = var_i3 >= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p0 = var_i0; + goto var_L0; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f96(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_l2 = var_i1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l2; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 33u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + var_p0 = var_i0; + goto var_L0; + } + } + var_i0 = var_p1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L46: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B47;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 38u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_i3 = 125u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l2; + var_i3 = 64u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B47;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L46; + var_B47:; + } else { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = 60u; + var_i2 = 38u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + } + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f145(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L0; + } + var_i0 = var_l2; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 9u; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 3u; + var_i1 = var_p0; + var_i2 = var_l4; + var_i3 = 5u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p0 = var_i0; + goto var_L0; + } + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 33u; + var_l5 = var_i0; + var_i0 = var_l2; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = var_l2; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_p0 = var_i0; + goto var_L0; + } + var_i0 = var_l2; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 256u; + var_i2 = 0u; + var_i3 = var_p0; + var_i4 = 64u; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 |= var_i1; + var_p0 = var_i0; + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L0; + } + var_i0 = var_l4; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 64u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l3; + instance->w2c_g4 = var_i0; + var_i0 = 261u; + var_p0 = var_i0; + goto var_L0; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f109(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 5u; + var_p0 = var_i0; + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f145(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L0; + } + var_i0 = var_l2; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 36u; + var_l5 = var_i0; + var_i0 = var_p0; + var_i1 = 64u; + var_i0 &= var_i1; + var_i1 = 4u; + var_i0 |= var_i1; + } else { + var_i0 = var_l2; + var_i1 = 47u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i0 = w2c_highlights_f108(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 49u; + var_i1 = 1u; + var_i2 = var_l4; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i0 = 67u; + var_i1 = 3u; + var_i2 = var_p1; + var_i3 = var_l2; + var_i4 = 40u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l2; + var_i5 = 42u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l2; + var_i5 = 91u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l4; + var_i5 = 2u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_p0; + } + } + } + var_p0 = var_i0; + var_i0 = var_l5; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L0; + } + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f130(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = instance->w2c_g47; + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f131(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = instance->w2c_g47; + var_i1 = 4u; + var_i0 &= var_i1; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f132(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = instance->w2c_g57; + var_i1 = 1024u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g57; + var_i1 = 37568u; + var_i0 += var_i1; + var_i1 = var_p0; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } + var_i0 = instance->w2c_g57; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g57 = var_i0; + FUNC_EPILOGUE; +} + +void w2c_highlights_f133(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = 0u; + instance->w2c_g58 = var_i0; + var_i0 = instance->w2c_g57; + var_i0 = !(var_i0); + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g57; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g57 = var_i0; + var_i0 = instance->w2c_g57; + var_i1 = 1024u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g57; + var_i1 = 37568u; + var_i0 += var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + instance->w2c_g58 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f134(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i1 = 194u; + var_i0 -= var_i1; + var_i1 = 50u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 4294967295u; + var_i0 ^= var_i1; + var_i1 = 24u; + var_i0 <<= (var_i1 & 31); + var_i0 = I32_CLZ(var_i0); + goto var_Bfunc; + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f135(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + u64 var_j0, var_j1; + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 -= var_i1; + var_l2 = var_i0; + var_i1 = 2u; + var_i0 -= var_i1; + var_i1 = 8u; + var_i0 = var_i0 > var_i1; + if (var_i0) {goto var_B0;} + var_i0 = var_p0; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p1; + var_i2 = 1u; + var_i1 -= var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 16u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = 24u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + var_p1 = var_i0; + var_i1 = 16u; + var_i0 >>= (var_i1 & 31); + var_i1 = var_p1; + var_i0 ^= var_i1; + var_i1 = 3844058249u; + var_i0 *= var_i1; + var_p1 = var_i0; + var_i1 = 24u; + var_i0 >>= (var_i1 & 31); + var_i1 = var_p1; + var_i0 ^= var_i1; + var_p1 = var_i0; + var_i1 = 15u; + var_i0 &= var_i1; + var_i1 = 27232u; + var_i0 += var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p1; + var_i2 = 4u; + var_i1 >>= (var_i2 & 31); + var_i2 = 63u; + var_i1 &= var_i2; + var_i0 += var_i1; + var_i1 = 63u; + var_i0 &= var_i1; + var_i1 = 1u; + var_i0 <<= (var_i1 & 31); + var_i1 = 27232u; + var_i0 += var_i1; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_p1 = var_i0; + var_i0 = !(var_i0); + var_i1 = var_l2; + var_i2 = var_p1; + var_i3 = 9u; + var_i2 >>= (var_i3 & 31); + var_i1 = var_i1 != var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B0;} + var_i0 = var_p1; + var_i1 = 511u; + var_i0 &= var_i1; + var_i1 = 27375u; + var_i0 += var_i1; + var_p1 = var_i0; + var_i0 = var_l2; + var_i1 = 8u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p1; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_j0 ^= var_j1; + var_i1 = 8u; + var_i2 = var_l2; + var_i1 -= var_i2; + var_i2 = 3u; + var_i1 <<= (var_i2 & 31); + var_j1 = (u64)(var_i1); + var_j0 <<= (var_j1 & 63); + var_j1 = 0ull; + var_i0 = var_j0 != var_j1; + if (var_i0) {goto var_B0;} + } else { + var_i0 = var_p0; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p1; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i0 = var_j0 != var_j1; + if (var_i0) {goto var_B0;} + var_i0 = var_p0; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_i1 = var_p1; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 9u); + var_i0 ^= var_i1; + var_i1 = 12u; + var_i2 = var_l2; + var_i1 -= var_i2; + var_i2 = 3u; + var_i1 <<= (var_i2 & 31); + var_i0 <<= (var_i1 & 31); + if (var_i0) {goto var_B0;} + } + var_i0 = var_p1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + goto var_Bfunc; + var_B0:; + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f136(w2c_highlights* instance) { + u32 var_l0 = 0; + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + v128 var_o0, var_o1, var_o2, var_o3, var_o4; + var_L0: + var_L2: + var_i0 = instance->w2c_g4; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_o0; + var_i1 = 32u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i1 = 97u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_sub(var_o0, var_o1); + var_i1 = 25u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_u8x16_le(var_o0, var_o1); + var_o1 = var_l1; + var_i2 = 48u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_sub(var_o1, var_o2); + var_i2 = 9u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_u8x16_le(var_o1, var_o2); + var_o2 = var_l1; + var_i3 = 95u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o3 = var_l1; + var_i4 = 36u; + var_o4 = simde_wasm_i8x16_splat(var_i4); + var_o3 = simde_wasm_i8x16_eq(var_o3, var_o4); + var_o2 = simde_wasm_v128_or(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_i1 = 65535u; + var_i0 ^= var_i1; + var_l0 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 16u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L2; + } + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 128u; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_l0; + var_i0 = w2c_highlights_f134(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = !(var_i0); + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i0 = w2c_env_is_id_continue(instance->w2c_env_instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + var_B1:; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f137(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = instance->w2c_g49; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 48u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g49; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 120u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_l2 = var_i0; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 48u; + var_i0 -= var_i1; + var_i1 = 9u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l1; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i1 = !(var_i1); + var_i2 = var_l3; + var_i3 = 32u; + var_i2 |= var_i3; + var_i3 = 101u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l1; + var_i3 = 43u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 45u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 &= var_i2; + var_i2 = var_l1; + var_i3 = 95u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B2;} + var_i0 = var_p0; + var_i0 = !(var_i0); + var_i1 = var_l1; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_p0 = var_i0; + goto var_B2; + } + goto var_B1; + var_B2:; + var_i0 = var_l1; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + var_B1:; + var_i0 = 42u; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f138(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i3 = 1u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = var_p0; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 63u; + goto var_Bfunc; + } + var_i0 = var_l1; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 13u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + goto var_L0; + var_B1:; + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f139(w2c_highlights* instance, u32 var_p0) { + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p0; + var_i0 = w2c_highlights_f138(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f140(w2c_highlights* instance) { + u32 var_l0 = 0; + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = 96u; + var_i2 = 36u; + var_i3 = 92u; + var_i0 = w2c_highlights_f8(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 11u; + goto var_Bfunc; + } + var_i0 = var_l0; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g55; + var_i1 = 256u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + } + var_i0 = instance->w2c_g55; + var_i1 = 2u; + var_i0 <<= (var_i1 & 31); + var_i1 = 38880u; + var_i0 += var_i1; + var_i1 = instance->w2c_g54; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g55; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g55 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 18u; + goto var_Bfunc; + } + var_i0 = var_l0; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L0; + var_B1:; + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f141(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g53; + var_i1 = instance->w2c_g52; + var_p0 = var_i1; + var_i2 = 92u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_i3 = 85u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_p0; + var_i3 = 121u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 56u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g58; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 50u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g58; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 134u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_p0; + var_i2 = 118u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 120u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 38592u); + var_i1 = 1u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f142(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = w2c_highlights_f141(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f143(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + u64 var_j0, var_j1, var_j2; + var_i0 = 0u; + instance->w2c_g53 = var_i0; + var_i0 = instance->w2c_g61; + if (var_i0) { + var_i0 = instance->w2c_g63; + instance->w2c_g53 = var_i0; + var_i0 = 0u; + instance->w2c_g63 = var_i0; + } + var_L2: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B3;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 33u; + var_i0 -= var_i1; + var_i1 = 93u; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B3;} + var_i0 = var_l0; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 9u; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g53 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L6: + var_i0 = instance->w2c_g4; + var_i1 = 8u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) {goto var_B7;} + var_i0 = instance->w2c_g4; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 2314885530818453536ull; + var_i0 = var_j0 != var_j1; + if (var_i0) {goto var_B7;} + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + goto var_L6; + var_B7:; + goto var_L2; + } + var_i0 = var_l0; + var_i1 = 194u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 160u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L2; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 16711679u; + var_i0 &= var_i1; + var_i1 = 11043042u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 3u; + var_i1 += var_i2; + var_l0 = var_i1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g53 = var_i0; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + goto var_L2; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 12565487u; + var_i0 ^= var_i1; + var_i1 = 8u; + var_i0 <<= (var_i1 & 31); + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = 3u; + var_i1 += var_i2; + var_l0 = var_i1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + goto var_L2; + } + var_B3:; + var_i0 = instance->w2c_g4; + instance->w2c_g49 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g61; + if (var_i0) { + var_i0 = instance->w2c_g53; + instance->w2c_g63 = var_i0; + } + var_i0 = 0u; + goto var_B0; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 95u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f136(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 26u; + var_i1 = instance->w2c_g51; + var_i2 = 19u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g51; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B0;} + var_i0 = instance->w2c_g49; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f135(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f131(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i1 = instance->w2c_g49; + var_l0 = var_i1; + var_i0 -= var_i1; + var_l1 = var_i0; + var_i1 = 8u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 26u; + var_i1 = var_l0; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 8389754676398092902ull; + var_i1 = var_j1 != var_j2; + if (var_i1) {goto var_B16;} + } else { + var_i0 = 26u; + var_i1 = var_l1; + var_i2 = 6u; + var_i1 = var_i1 != var_i2; + if (var_i1) {goto var_B16;} + var_i0 = 26u; + var_i1 = var_l0; + var_i2 = 6u; + var_j1 = w2c_highlights_f181(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_j2 = 111516500389741ull; + var_i1 = var_j1 != var_j2; + if (var_i1) {goto var_B16;} + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f166(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l1; + var_i1 = 8u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 90u; + var_i1 = var_l0; + var_i1 = w2c_highlights_f163(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 60u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B16;} + var_i0 = 26u; + goto var_B16; + } + var_i0 = 130u; + var_i1 = var_l0; + var_i1 = w2c_highlights_f163(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i1) {goto var_B16;} + var_i0 = 26u; + var_B16:; + goto var_B0; + } + var_i0 = 26u; + goto var_B0; + } + var_i0 = 26u; + var_i1 = w2c_highlights_f130(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + var_i2 = var_l0; + var_i3 = 125u; + var_i2 = var_i2 >= var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B0;} + var_i0 = var_l0; + goto var_B0; + } + var_i0 = var_l1; + var_i1 = 48u; + var_i0 -= var_i1; + var_i1 = 9u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i0 = w2c_highlights_f137(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l1; + var_i1 = 33u; + var_i0 -= var_i1; + switch (var_i0) { + case 0: goto var_B40; + case 1: goto var_B35; + case 2: goto var_B24; + case 3: goto var_B23; + case 4: goto var_B28; + case 5: goto var_B41; + case 6: goto var_B34; + case 7: goto var_B51; + case 8: goto var_B50; + case 9: goto var_B29; + case 10: goto var_B31; + case 11: goto var_B47; + case 12: goto var_B30; + case 13: goto var_B49; + case 14: goto var_B42; + case 15: goto var_B23; + case 16: goto var_B23; + case 17: goto var_B23; + case 18: goto var_B23; + case 19: goto var_B23; + case 20: goto var_B23; + case 21: goto var_B23; + case 22: goto var_B23; + case 23: goto var_B23; + case 24: goto var_B23; + case 25: goto var_B46; + case 26: goto var_B48; + case 27: goto var_B33; + case 28: goto var_B43; + case 29: goto var_B32; + case 30: goto var_B38; + case 31: goto var_B25; + case 32: goto var_B23; + case 33: goto var_B23; + case 34: goto var_B23; + case 35: goto var_B23; + case 36: goto var_B23; + case 37: goto var_B23; + case 38: goto var_B23; + case 39: goto var_B23; + case 40: goto var_B23; + case 41: goto var_B23; + case 42: goto var_B23; + case 43: goto var_B23; + case 44: goto var_B23; + case 45: goto var_B23; + case 46: goto var_B23; + case 47: goto var_B23; + case 48: goto var_B23; + case 49: goto var_B23; + case 50: goto var_B23; + case 51: goto var_B23; + case 52: goto var_B23; + case 53: goto var_B23; + case 54: goto var_B23; + case 55: goto var_B23; + case 56: goto var_B23; + case 57: goto var_B23; + case 58: goto var_B37; + case 59: goto var_B23; + case 60: goto var_B36; + case 61: goto var_B27; + case 62: goto var_B23; + case 63: goto var_B20; + case 64: goto var_B23; + case 65: goto var_B23; + case 66: goto var_B23; + case 67: goto var_B23; + case 68: goto var_B23; + case 69: goto var_B23; + case 70: goto var_B23; + case 71: goto var_B23; + case 72: goto var_B23; + case 73: goto var_B23; + case 74: goto var_B23; + case 75: goto var_B23; + case 76: goto var_B23; + case 77: goto var_B23; + case 78: goto var_B23; + case 79: goto var_B23; + case 80: goto var_B23; + case 81: goto var_B23; + case 82: goto var_B23; + case 83: goto var_B23; + case 84: goto var_B23; + case 85: goto var_B23; + case 86: goto var_B23; + case 87: goto var_B23; + case 88: goto var_B23; + case 89: goto var_B23; + case 90: goto var_B45; + case 91: goto var_B39; + case 92: goto var_B44; + case 93: goto var_B26; + default: goto var_B23; + } + var_B51:; + var_i0 = instance->w2c_g51; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 38592u); + var_i1 = 4u; + var_i0 &= var_i1; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + w2c_highlights_f132(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 265u; + goto var_B21; + var_B50:; + w2c_highlights_f133(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 449u; + goto var_B21; + var_B49:; + var_i0 = 499u; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B21;} + var_i0 = var_l0; + var_i1 = 48u; + var_i0 -= var_i1; + var_i1 = 9u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_i0 = w2c_highlights_f137(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B0; + } + var_i0 = 153u; + goto var_B21; + var_B48:; + var_i0 = 473u; + goto var_B21; + var_B47:; + var_i0 = 129u; + goto var_B21; + var_B46:; + var_i0 = 121u; + goto var_B21; + var_B45:; + var_i0 = instance->w2c_g51; + var_i0 = w2c_highlights_f141(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g51; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 38592u); + var_i1 = 2u; + var_i0 &= var_i1; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + } else { + var_i0 = 1u; + } + w2c_highlights_f132(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g54; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g54 = var_i0; + var_i0 = 217u; + goto var_B21; + var_B44:; + var_i0 = instance->w2c_g54; + var_i1 = instance->w2c_g55; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i2 = 38876u; + var_i1 += var_i2; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g55; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g55; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g55 = var_i0; + goto var_B20; + } + w2c_highlights_f133(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g54; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g54 = var_i0; + var_i0 = 401u; + goto var_B21; + var_B43:; + var_i0 = 178u; + var_i1 = var_l0; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B21;} + var_i0 = 190u; + goto var_B22; + var_B42:; + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 17u; + goto var_B0; + } + var_i0 = var_l0; + var_i1 = 42u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f4(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 37u; + goto var_B0; + } + var_i0 = instance->w2c_g51; + var_i0 = w2c_highlights_f141(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L60: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B59;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B59;} + var_i0 = var_l0; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + goto var_L60; + } + var_i0 = var_l0; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = var_l0; + var_i3 = 91u; + var_i2 -= var_i3; + var_i3 = 2u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = !(var_i0); + var_i1 = var_l0; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L60; + } + var_L64: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B65;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 97u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 > var_i1; + if (var_i0) {goto var_B65;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L64; + var_B65:; + var_i0 = 58u; + goto var_B58; + var_B59:; + var_i0 = 1u; + var_B58:; + goto var_B0; + } + var_i0 = 489u; + goto var_B22; + var_B41:; + var_i0 = 47u; + goto var_B22; + var_B40:; + var_i0 = var_l0; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 99u; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B21;} + var_i0 = 106u; + goto var_B21; + } + var_i0 = 113u; + goto var_B21; + var_B39:; + var_i0 = 375u; + goto var_B22; + var_B38:; + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 329u; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = 9u; + var_i1 = var_i1 <= var_i2; + if (var_i1) {goto var_B21;} + var_i0 = 322u; + goto var_B21; + } + var_i0 = 334u; + goto var_B22; + var_B37:; + var_i0 = 0u; + w2c_highlights_f132(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 225u; + goto var_B21; + var_B36:; + w2c_highlights_f133(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 409u; + goto var_B21; + var_B35:; + var_i0 = 34u; + var_i0 = w2c_highlights_f139(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B0; + var_B34:; + var_i0 = 39u; + var_i0 = w2c_highlights_f139(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B0; + var_B33:; + var_i0 = w2c_highlights_f131(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_i1 = w2c_highlights_f155(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 = w2c_highlights_f185(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 &= var_i2; + if (var_i1) {goto var_B0;} + } + var_i0 = 263u; + goto var_B22; + var_B32:; + var_i0 = var_l0; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 564u; + var_i1 = instance->w2c_g4; + var_i2 = 3u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B21;} + var_i0 = 459u; + goto var_B21; + } + } + var_i0 = 447u; + goto var_B22; + var_B31:; + var_i0 = 395u; + goto var_B22; + var_B30:; + var_i0 = 291u; + goto var_B22; + var_B29:; + var_i0 = 79u; + goto var_B22; + var_B28:; + var_i0 = 537u; + goto var_B22; + var_B27:; + var_i0 = 521u; + goto var_B22; + var_B26:; + var_i0 = 569u; + goto var_B21; + var_B25:; + var_i0 = w2c_highlights_f131(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + w2c_highlights_f132(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g54; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g54 = var_i0; + var_i0 = 218u; + goto var_B21; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f136(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g49; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f183(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 1u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_l0; + goto var_B0; + } + var_i0 = 10u; + goto var_B0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f136(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 10u; + goto var_B0; + var_B24:; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g48; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + goto var_B0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f136(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 25u; + goto var_B0; + var_B23:; + var_i0 = var_l1; + var_i1 = 128u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = w2c_highlights_f134(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i0 = w2c_env_is_id_start(instance->w2c_env_instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f136(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 26u; + goto var_B0; + } + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i2 = 1u; + var_i3 = var_l0; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + var_i0 = 1u; + goto var_B0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + goto var_B0; + var_B22:; + var_l3 = var_i0; + var_i1 = 4294967288u; + var_i0 &= var_i1; + var_l2 = var_i0; + var_i0 = var_l0; + var_i1 = var_l1; + var_i0 = var_i0 == var_i1; + var_i1 = 0u; + var_i2 = var_l3; + var_i3 = 2u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 4u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 21u; + var_i0 -= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B21;} + } + var_i0 = var_l2; + var_i1 = 14u; + var_i0 -= var_i1; + goto var_B21; + } + var_i0 = var_l2; + var_i1 = 6u; + var_i0 -= var_i1; + var_i1 = var_l3; + var_i2 = 1u; + var_i1 &= var_i2; + var_i2 = var_l0; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B21;} + var_i0 = var_l2; + var_i1 = 1u; + var_i0 |= var_i1; + var_B21:; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i2 = 7u; + var_i1 &= var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + goto var_B0; + var_B20:; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = w2c_highlights_f140(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_B0:; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + instance->w2c_g50 = var_i0; + var_i0 = instance->w2c_g61; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + var_i2 = 5u; + var_i3 = instance->w2c_g62; + var_i4 = instance->w2c_g49; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_l1 = var_i4; + var_i5 = 39u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l1; + var_i4 = 34u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l1; + var_i3 = 96u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 125u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g62 = var_i0; + var_i0 = 63u; + var_i1 = var_l0; + var_i2 = instance->w2c_g50; + var_i3 = 1u; + var_i2 -= var_i3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 10u; + var_i2 = var_i2 == var_i3; + var_i3 = instance->w2c_g62; + var_i4 = 4u; + var_i3 -= var_i4; + var_i4 = 1u; + var_i3 = var_i3 <= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + } + var_i0 = var_l0; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g49; + var_i1 = instance->w2c_g50; + var_i0 = w2c_highlights_f149(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 3u; + var_i1 = 2u; + var_i2 = instance->w2c_g49; + var_i3 = instance->w2c_g50; + var_i2 = w2c_highlights_f150(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g62 = var_i0; + } + } + } + var_i0 = instance->w2c_g62; + var_i0 = !(var_i0); + var_i1 = var_l0; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 38592u); + var_i2 = 8u; + var_i1 &= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g51; + instance->w2c_g52 = var_i0; + var_i0 = var_l0; + instance->w2c_g51 = var_i0; + } + var_i0 = var_l0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f144(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = 3u; + instance->w2c_g47 = var_i1; + var_i1 = var_p0; + instance->w2c_g4 = var_i1; + var_i1 = var_p0; + instance->w2c_g48 = var_i1; + var_i1 = 0u; + instance->w2c_g51 = var_i1; + var_i1 = 0u; + instance->w2c_g52 = var_i1; + var_i1 = 0u; + instance->w2c_g59 = var_i1; + var_i1 = 0u; + instance->w2c_g53 = var_i1; + var_i1 = 0u; + instance->w2c_g54 = var_i1; + var_i1 = 0u; + instance->w2c_g55 = var_i1; + var_i1 = 0u; + instance->w2c_g57 = var_i1; + var_i1 = 0u; + instance->w2c_g58 = var_i1; + var_i1 = 0u; + instance->w2c_g60 = var_i1; + var_i1 = 1u; + instance->w2c_g67 = var_i1; + w2c_highlights_f36(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = w2c_highlights_f143(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 27u; + var_i1 = var_i1 != var_i2; + if (var_i1) { + var_i1 = var_p0; + var_i2 = 1u; + var_i1 += var_i2; + var_p0 = var_i1; + } else { + var_L2: + var_i1 = w2c_highlights_f155(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i1; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i2 = var_p0; + var_i3 = 3u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + if (var_i1) { + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + if (var_i1) { + var_i1 = instance->w2c_g3; + var_p0 = var_i1; + goto var_B3; + } + var_i1 = var_p0; + w2c_highlights_f172(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i1 = w2c_highlights_f143(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i1; + var_i1 = !(var_i1); + if (var_i1) { + var_i1 = instance->w2c_g3; + var_p0 = var_i1; + goto var_B3; + } + var_i1 = var_l1; + var_i2 = 50u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = var_p0; + var_i2 = 3u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g54; + var_i3 = w2c_highlights_f156(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = (u32)((s32)var_i2 <= (s32)var_i3); + var_i1 &= var_i2; + if (var_i1) { + w2c_highlights_f160(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i1 = instance->w2c_g54; + var_i2 = var_p0; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + if (var_i1) { + var_i1 = instance->w2c_g50; + var_p0 = var_i1; + goto var_B3; + } + } + var_i1 = var_l1; + var_i2 = 32u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = instance->w2c_g59; + var_i1 = w2c_highlights_f142(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i1) { + var_i1 = instance->w2c_g50; + var_i1 = w2c_highlights_f167(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i1 = 0u; + } + } else { + var_i1 = 0u; + } + if (var_i1) { + var_i1 = instance->w2c_g50; + instance->w2c_g4 = var_i1; + var_i1 = 1u; + var_i2 = w2c_highlights_f168(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f153(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i1 = var_l1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 38592u); + var_i2 = 8u; + var_i1 &= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + if (var_i1) { + var_i1 = var_l1; + instance->w2c_g59 = var_i1; + } + goto var_L2; + var_B3:; + } + var_i1 = 0u; + instance->w2c_g67 = var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p0; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f145(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_L0: + var_i0 = var_p2; + var_i1 = var_p1; + var_i2 = var_p2; + var_i3 = 92u; + var_i4 = 0u; + var_i5 = 0u; + var_i1 = w2c_highlights_f5(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 45u; + var_i1 = var_l3; + var_i2 = var_l3; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p1 = var_i2; + var_i3 = 117u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_l3; + var_i3 = 2u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_l3; + var_i3 = 3u; + var_i2 += var_i3; + var_i3 = 16u; + var_i2 = w2c_highlights_f10(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p1 = var_i2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 125u; + var_i2 = var_i2 == var_i3; + var_i3 = var_p1; + var_i4 = var_p2; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = var_p1; + var_i3 = 1u; + var_i2 += var_i3; + } else { + var_i2 = var_p1; + } + } else { + var_i2 = var_l3; + var_i3 = 2u; + var_i2 += var_i3; + var_i3 = 4u; + var_i2 = w2c_highlights_f10(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } else { + var_i2 = var_p1; + var_i3 = 120u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_l3; + var_i3 = 2u; + var_i2 += var_i3; + var_i3 = 2u; + var_i2 = w2c_highlights_f10(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i2 = var_l3; + var_i3 = 2u; + var_i2 += var_i3; + } + } + var_i3 = var_p2; + var_i2 = w2c_highlights_f9(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p1 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L0; + } + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = var_p2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f146(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 9u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f147(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3, u32 var_p4) { + u32 var_l5 = 0, var_l6 = 0, var_l7 = 0, var_l8 = 0; + v128 var_l9 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = var_p0; + var_l6 = var_i0; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = var_p3; + if (var_i0) { + var_i0 = var_l7; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = instance->w2c_g45; + var_l8 = var_i1; + var_i2 = 1073741824u; + var_i1 &= var_i2; + if (var_i1) {goto var_B2;} + var_i0 = var_l8; + var_i1 = var_l8; + var_i2 = 0u; + var_i1 = (u32)((s32)var_i1 >= (s32)var_i2); + if (var_i1) {goto var_B2;} + var_i0 = var_l8; + var_i1 = var_p0; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_p1; + var_i1 = w2c_highlights_f146(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i1; + var_i2 = var_p1; + var_i1 = var_i1 >= var_i2; + if (var_i1) {goto var_B2;} + var_i0 = var_l8; + var_i1 = var_l5; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l5 = var_i1; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l5; + var_i3 = 64u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l5; + var_i3 = 10u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l5; + var_i4 = 13u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l5; + var_i4 = 123u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B2;} + var_i0 = 0u; + var_B2:; + instance->w2c_g46 = var_i0; + } else { + var_i0 = instance->w2c_g56; + if (var_i0) { + var_i0 = instance->w2c_g56; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g56 = var_i0; + var_i0 = instance->w2c_g56; + var_i1 = 2u; + var_i0 <<= (var_i1 & 31); + var_i1 = 39904u; + var_i0 += var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + instance->w2c_g46 = var_i0; + } + } + } + var_i0 = var_p3; + var_i1 = var_l7; + var_i2 = 125u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 40u; + var_i1 = var_p0; + var_i2 = var_p0; + var_i3 = 1u; + var_i2 += var_i3; + var_l6 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = var_p1; + var_l5 = var_i0; + var_i0 = var_p2; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 2u; + var_i0 -= var_i1; + var_l5 = var_i0; + var_i1 = var_l6; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l6; + var_l5 = var_i0; + } + } + var_i0 = instance->w2c_g46; + if (var_i0) { + var_i0 = var_p3; + var_i1 = var_l7; + var_i2 = 96u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = var_p0; + var_i3 = 1u; + var_i2 += var_i3; + var_l6 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g46; + var_i1 = 256u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_l7 = var_i1; + var_i1 = instance->w2c_g22; + var_i2 = instance->w2c_g43; + var_i3 = var_l6; + instance->w2c_g4 = var_i3; + var_i3 = var_l5; + var_i4 = var_p4; + var_i3 -= var_i4; + instance->w2c_g3 = var_i3; + var_i3 = 0u; + instance->w2c_g22 = var_i3; + var_i3 = 0u; + instance->w2c_g43 = var_i3; + var_i3 = instance->w2c_g46; + var_i3 = w2c_highlights_f95(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g46 = var_i3; + instance->w2c_g43 = var_i2; + instance->w2c_g22 = var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l7; + instance->w2c_g3 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_p3 = var_i1; + var_i1 = var_l6; + instance->w2c_g4 = var_i1; + var_i1 = var_l5; + var_i2 = var_p4; + var_i1 -= var_i2; + instance->w2c_g3 = var_i1; + var_i1 = instance->w2c_g46; + var_i2 = 2147483647u; + var_i1 &= var_i2; + var_i2 = instance->w2c_g46; + var_i3 = 2147483648u; + var_i2 &= var_i3; + var_p0 = var_i2; + var_i3 = 0u; + var_i2 = var_i2 != var_i3; + var_i1 = w2c_highlights_f129(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_p0; + var_i1 |= var_i2; + instance->w2c_g46 = var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p3; + instance->w2c_g3 = var_i0; + } + var_i0 = var_p4; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l5; + var_i2 = 1u; + var_i1 -= var_i2; + var_i2 = var_l5; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } else { + var_i0 = 44u; + var_i1 = var_l6; + var_i2 = var_l5; + w2c_highlights_f145(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 40u; + var_i1 = var_l5; + var_i2 = var_p1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p2; + var_i1 = 0u; + var_i2 = instance->w2c_g56; + var_i3 = 256u; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = instance->w2c_g56; + var_i1 = 2u; + var_i0 <<= (var_i1 & 31); + var_i1 = 39904u; + var_i0 += var_i1; + var_i1 = instance->w2c_g46; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g56; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g56 = var_i0; + } + var_i0 = var_p2; + var_i1 = var_p4; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g46 = var_i0; + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f148(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, var_l8 = 0; + u64 var_l9 = 0; + v128 var_l10 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + u64 var_j0, var_j1, var_j2, var_j3, var_j4; + var_i0 = var_p2; + var_i1 = var_p0; + var_l5 = var_i1; + var_i0 += var_i1; + var_p2 = var_i0; + var_L0: + var_i0 = var_p1; + var_i1 = var_p2; + var_i2 = var_p1; + var_i3 = 64u; + var_i4 = 0u; + var_i5 = 0u; + var_i1 = w2c_highlights_f5(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = 32u; + var_p2 = var_i0; + var_i0 = var_p0; + var_i1 = var_l3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p2 = var_i0; + } + var_i0 = var_p2; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p2; + var_i2 = 9u; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_p2; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p2; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_p2; + var_i3 = 42u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_p2 = var_i0; + goto var_L0; + } + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_p2 = var_i0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_L0;} + var_i0 = var_p2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 97u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 > var_i1; + if (var_i0) {goto var_L0;} + var_L4: + var_i0 = var_p1; + var_i1 = var_p2; + var_i2 = 1u; + var_i1 += var_i2; + var_p2 = var_i1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_p2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 97u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l4; + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = 9u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_L4;} + } + var_i0 = 5u; + var_i1 = var_l5; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 63u; + var_i1 = var_l3; + var_i2 = var_p2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p2; + var_i1 = var_l3; + var_i2 = 1u; + var_i1 += var_i2; + var_l3 = var_i1; + var_i0 -= var_i1; + var_l5 = var_i0; + var_i1 = 8u; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = var_l3; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_j0; + var_i0 = var_l5; + var_i1 = 8u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_j0 = var_l9; + var_j1 = 1ull; + var_i2 = var_l5; + var_i3 = 3u; + var_i2 <<= (var_i3 & 31); + var_j2 = (u64)(var_i2); + var_j1 <<= (var_j2 & 63); + var_j2 = 1ull; + var_j1 -= var_j2; + var_j0 &= var_j1; + var_l9 = var_j0; + } + var_j0 = var_l9; + var_j1 = 469786321264ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l9; + var_j2 = 6779489ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + var_j1 = var_l9; + var_j2 = 8389754676633367137ull; + var_i1 = var_j1 == var_j2; + var_j2 = var_l9; + var_j3 = 1886351984ull; + var_i2 = var_j2 == var_j3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_j1 = var_l9; + var_j2 = 8751745755891331696ull; + var_i1 = var_j1 == var_j2; + var_j2 = var_l9; + var_j3 = 7310575213499737460ull; + var_i2 = var_j2 == var_j3; + var_i1 |= var_i2; + var_j2 = var_l9; + var_j3 = 28821929497491828ull; + var_i2 = var_j2 == var_j3; + var_j3 = var_l9; + var_j4 = 7738135660106375523ull; + var_i3 = var_j3 == var_j4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + } + var_i1 = var_p2; + var_l5 = var_i1; + var_i2 = var_p1; + var_i1 = w2c_highlights_f146(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i1; + var_i2 = var_p1; + var_i1 = var_i1 >= var_i2; + if (var_i1) {goto var_B8;} + var_i1 = var_l4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 123u; + var_i1 = var_i1 != var_i2; + if (var_i1) {goto var_B8;} + var_i1 = var_l4; + var_i2 = 1u; + var_i1 += var_i2; + var_l3 = var_i1; + var_i1 = 1u; + var_l6 = var_i1; + var_L9: + var_i1 = var_p1; + var_i2 = var_l3; + var_i1 = var_i1 <= var_i2; + if (var_i1) {goto var_B8;} + var_i1 = var_l3; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l7 = var_i1; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l7; + var_i3 = 13u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B8;} + var_i1 = var_l3; + var_i2 = 1u; + var_i1 += var_i2; + var_l3 = var_i1; + var_i1 = var_l6; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_l6; + var_i3 = var_l7; + var_i4 = 123u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l6 = var_i1; + var_i2 = 1u; + var_i1 -= var_i2; + var_i2 = var_l6; + var_i3 = var_l7; + var_i4 = 125u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l6 = var_i1; + if (var_i1) {goto var_L9;} + var_i1 = 5u; + var_i2 = var_l5; + var_i3 = var_l4; + w2c_highlights_f21(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 32u; + var_i2 = var_l4; + var_i3 = var_l4; + var_i4 = 1u; + var_i3 += var_i4; + var_p2 = var_i3; + w2c_highlights_f21(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 68u; + var_i2 = var_p2; + var_i3 = var_l3; + var_i4 = 1u; + var_i3 -= var_i4; + var_p2 = var_i3; + w2c_highlights_f21(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 32u; + var_i2 = var_p2; + var_i3 = var_l3; + w2c_highlights_f21(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_l5 = var_i1; + var_p2 = var_i1; + var_B8:; + if (var_i0) { + var_i0 = var_p2; + var_i1 = var_p1; + var_i0 = w2c_highlights_f146(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B11;} + var_i0 = var_l4; + var_l3 = var_i0; + var_L12: + var_i0 = var_p1; + var_i1 = var_l3; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B13;} + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 97u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l6; + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = 9u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_l6; + var_i2 = 95u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l6; + var_i3 = 36u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l6; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B13;} + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + goto var_L12; + var_B13:; + var_i0 = var_l3; + var_i1 = var_l4; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_B11;} + var_i0 = 5u; + var_i1 = var_l5; + var_i2 = var_l4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 69u; + var_i1 = var_l4; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_l5 = var_i0; + var_p2 = var_i0; + var_B11:; + } + goto var_L0; + } + var_i0 = 5u; + var_i1 = var_l5; + var_i2 = var_p1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f149(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p1; + var_i1 = 2u; + var_i0 -= var_i1; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 12074u; + var_i0 = var_i0 != var_i1; + var_i1 = var_p1; + var_i2 = var_p0; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 < var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f150(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 42u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = var_p1; + var_i1 = w2c_highlights_f149(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_p1; + var_i3 = var_p0; + var_i2 -= var_i3; + var_i3 = 4u; + var_i2 = var_i2 > var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f151(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 0u; + w2c_highlights_f191(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f152(w2c_highlights* instance, u32 var_p0) { + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = 0u; + var_i1 = var_p0; + w2c_highlights_f192(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f153(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = instance->w2c_g60; + var_i1 = 512u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g60; + var_i1 = 3u; + var_i0 <<= (var_i1 & 31); + var_i1 = 40928u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l2; + var_i1 = var_p1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + } + var_i0 = instance->w2c_g60; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g60 = var_i0; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f154(w2c_highlights* instance) { + u32 var_l0 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = instance->w2c_g60; + var_i1 = 1u; + var_i0 -= var_i1; + var_l0 = var_i0; + var_i1 = 511u; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = 511u; + } else { + var_i0 = var_l0; + } + var_i1 = 3u; + var_i0 <<= (var_i1 & 31); + var_i1 = 40928u; + var_i0 += var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f155(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = instance->w2c_g60; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = w2c_highlights_f154(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f156(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = instance->w2c_g60; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = w2c_highlights_f154(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f157(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = instance->w2c_g60; + var_i0 = !(var_i0); + if (var_i0) { + goto var_Bfunc; + } + var_i0 = w2c_highlights_f154(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f158(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = instance->w2c_g60; + var_i0 = !(var_i0); + if (var_i0) { + goto var_Bfunc; + } + var_i0 = w2c_highlights_f154(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f159(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = 1u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_p0; + var_i2 = 6u; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f160(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g60; + if (var_i0) { + var_i0 = instance->w2c_g60; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g60 = var_i0; + } + var_i0 = 26u; + instance->w2c_g59 = var_i0; + var_i0 = 26u; + instance->w2c_g51 = var_i0; + var_i0 = w2c_highlights_f131(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g59 = var_i0; + var_i0 = w2c_highlights_f155(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g54; + var_i2 = w2c_highlights_f156(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g60; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g60 = var_i0; + } + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f161(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g67; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = var_p2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f162(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = instance->w2c_g67; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_p1; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f163(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 95u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f164(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + var_i0 = w2c_highlights_f163(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = 9u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_p0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f165(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_L0: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f164(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f166(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 9u; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f167(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + u64 var_j1, var_j2; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = w2c_highlights_f131(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f163(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f165(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = w2c_highlights_f130(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_p0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 1936617315u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i2 = 116u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = var_p0; + var_i1 -= var_i2; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = w2c_highlights_f166(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f163(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i2 = var_l1; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = w2c_highlights_f165(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l1; + } + } else { + var_i0 = var_l1; + } + var_i0 = w2c_highlights_f166(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_l1; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 7u; + var_i0 += var_i1; + var_l1 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 <= var_i1; + var_i1 = var_p0; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 32480047633037413ull; + var_j1 ^= var_j2; + var_j2 = 8ull; + var_j1 <<= (var_j2 & 63); + var_i1 = !(var_j1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f164(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_l1; + var_i0 = w2c_highlights_f166(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + } + } + } else { + var_i0 = var_l1; + var_i0 = w2c_highlights_f166(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + } + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i1 = w2c_highlights_f163(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_p0; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_i3 = 39u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f168(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = w2c_highlights_f164(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B1;} + var_i0 = 1u; + var_i1 = var_l1; + var_i2 = var_l2; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + var_B1:; + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = 67u; + var_i1 = 51u; + var_i2 = var_l1; + var_i3 = var_l0; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 65u; + var_i3 -= var_i4; + var_i4 = 25u; + var_i3 = var_i3 <= var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f131(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f184(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + } + } else { + var_i0 = 0u; + } + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f169(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = w2c_highlights_f143(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g50; + var_i1 = instance->w2c_g49; + var_i0 -= var_i1; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g49; + var_i1 = instance->w2c_g50; + w2c_highlights_f187(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 32u; + var_i1 = instance->w2c_g49; + var_i2 = instance->w2c_g50; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 3u; + var_i1 = instance->w2c_g54; + var_i2 = 1u; + var_i1 -= var_i2; + w2c_highlights_f153(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 27u; + instance->w2c_g59 = var_i0; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f170(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0; + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f166(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i1; + var_i1 = instance->w2c_g4; + w2c_highlights_f162(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 34u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B1; + } + var_i0 = var_l1; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L0; + var_B1:; + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f171(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g60; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g60; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f172(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0; + v128 var_l8 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + v128 var_o0, var_o1, var_o2, var_o3; + var_L0: + var_i0 = var_p0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f166(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i1; + var_i1 = instance->w2c_g4; + w2c_highlights_f162(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B2;} + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = w2c_highlights_f156(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = 256u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 32u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 256u; + var_i0 -= var_i1; + w2c_highlights_f158(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B2; + } + var_i0 = 34u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + w2c_highlights_f157(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 6u; + w2c_highlights_f157(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 260u; + w2c_highlights_f158(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = var_l1; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 5u; + w2c_highlights_f157(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + w2c_highlights_f158(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + instance->w2c_g59 = var_i0; + var_i0 = 0u; + instance->w2c_g51 = var_i0; + } + goto var_B2; + } + var_i0 = w2c_highlights_f130(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f156(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 256u; + var_i0 += var_i1; + w2c_highlights_f158(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B2; + } + var_i0 = var_l1; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 34u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f160(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B2; + } + var_i0 = var_l2; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 4u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B2; + } + var_i0 = var_l2; + var_i1 = 42u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f4(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 4u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g61; + var_i1 = instance->w2c_g67; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f149(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 2u; + instance->w2c_g62 = var_i0; + } + } + goto var_B2; + } + } + var_i0 = var_l1; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + w2c_highlights_f169(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B2; + } + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l1; + var_i2 = var_l1; + var_i3 = var_l1; + var_i0 = w2c_highlights_f8(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } else { + var_i0 = instance->w2c_g61; + var_i1 = instance->w2c_g67; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 6u; + var_i1 = 7u; + var_i2 = var_l1; + var_i3 = 34u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g62 = var_i0; + } + } + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B2; + } + var_i0 = var_l1; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f156(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 256u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B2; + } + } + var_i0 = 37u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B2; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f163(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L22: + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B23;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f164(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) {goto var_L22;} + var_B23:; + var_i0 = 55u; + var_i1 = 2u; + var_i2 = w2c_highlights_f156(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 256u; + var_i2 = var_i2 >= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B2; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = 0u; + var_i2 = var_l1; + var_i3 = 44u; + var_i2 = var_i2 == var_i3; + var_i3 = w2c_highlights_f156(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 256u; + var_i3 = var_i3 >= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_B2:; + } else { + var_i0 = var_p0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = w2c_highlights_f131(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = var_l5; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f186(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + if (var_i0) { + var_i0 = 52u; + var_i1 = instance->w2c_g4; + var_i2 = var_p0; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + var_i0 = 4u; + var_i1 = instance->w2c_g54; + w2c_highlights_f153(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B25; + } + } + var_L28: + var_i0 = var_l5; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + } else { + var_L32: + var_i0 = var_p0; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_o0; + var_i1 = 60u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_o1 = var_l8; + var_i2 = 123u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_o1 = var_l8; + var_i2 = 38u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o2 = var_l8; + var_i3 = 64u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_o1 = var_l8; + var_i2 = 47u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o2 = var_l8; + var_i3 = 10u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_l3 = var_i0; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_l3; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + var_p0 = var_i0; + goto var_B33; + } + var_i0 = var_p0; + var_i1 = 16u; + var_i0 += var_i1; + var_p0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L32;} + var_B33:; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } else { + var_i0 = instance->w2c_g4; + var_i1 = 60u; + var_i2 = 123u; + var_i3 = 38u; + var_i0 = w2c_highlights_f8(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B29;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B29;} + var_i0 = var_l2; + var_i1 = 38u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + var_L36: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B37;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 97u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l3; + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = 9u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B37;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L36; + var_B37:; + var_i0 = var_p0; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i0 = var_i0 > var_i1; + var_i1 = var_p0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i2 = var_p0; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 59u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 52u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 47u; + var_i1 = instance->w2c_g4; + var_i2 = var_p0; + var_i3 = 1u; + var_i2 += var_i3; + var_p0 = var_i2; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L28; + } + var_i0 = var_l2; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f186(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + if (var_i0) { + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + var_i0 = 2u; + var_l4 = var_i0; + goto var_B29; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L28; + } + var_i0 = var_l2; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l4 = var_i0; + goto var_B29; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_p0 = var_i0; + var_L43: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B44;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f182(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B44;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L43; + var_B44:; + var_i0 = var_l3; + var_i1 = var_p0; + var_i0 = w2c_highlights_f183(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 1u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 2u; + var_l4 = var_i0; + goto var_B29; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L28; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i0; + var_i1 = 42u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 52u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f4(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 4u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g61; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + var_i1 = w2c_highlights_f149(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + instance->w2c_g62 = var_i0; + } + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + goto var_L28; + } + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + var_L49: + var_i0 = var_p0; + var_i1 = var_l6; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_p0; + var_i2 = 1u; + var_i1 -= var_i2; + var_p0 = var_i1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l3 = var_i1; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = 13u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B48;} + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = 32u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = 9u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + if (var_i1) {goto var_B48;} + goto var_L49; + } + var_i0 = 1u; + var_B48:; + var_i1 = var_l7; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 52u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 4u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L28; + var_B29:; + var_i0 = 52u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B25;} + var_i0 = var_l4; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + w2c_highlights_f169(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B25; + } + var_i0 = var_l4; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 4u; + var_i1 = instance->w2c_g54; + w2c_highlights_f153(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B25; + } + var_i0 = var_l2; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + w2c_highlights_f169(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B25; + } + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 34u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f168(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l5; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 7u; + w2c_highlights_f157(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f169(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B25; + } + var_i0 = w2c_highlights_f170(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f160(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B25; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f163(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l5; + var_i2 = var_l1; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l1; + var_i3 = 62u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 34u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = w2c_highlights_f168(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f153(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B25; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 52u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f161(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_B25:; + } else { + var_i0 = var_p0; + var_i1 = 6u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_p0 = var_i0; + var_L60: + var_i0 = var_p0; + var_i1 = 60u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B61;} + var_i0 = var_p0; + var_i1 = 2u; + var_i0 = w2c_highlights_f185(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L60; + } + var_l1 = var_i0; + var_B61:; + var_i0 = var_p0; + var_i1 = var_l2; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g22; + var_i3 = instance->w2c_g43; + var_i4 = var_l2; + instance->w2c_g4 = var_i4; + var_i4 = var_p0; + instance->w2c_g3 = var_i4; + var_i4 = 0u; + instance->w2c_g22 = var_i4; + var_i4 = 0u; + instance->w2c_g43 = var_i4; + var_i4 = w2c_highlights_f156(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = w2c_highlights_f95(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f158(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g43 = var_i3; + instance->w2c_g22 = var_i2; + instance->w2c_g3 = var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i0 = !(var_i0); + if (var_i0) {goto var_B59;} + var_i0 = var_p0; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 34u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f168(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f170(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f160(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_B59:; + } else { + var_i0 = w2c_highlights_f170(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f160(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + } + } + var_i0 = w2c_highlights_f155(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = instance->w2c_g68; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = w2c_highlights_f171(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + instance->w2c_g68 = var_i0; + var_i0 = instance->w2c_g4; + instance->w2c_g3 = var_i0; + goto var_Bfunc; + } + } + var_i0 = var_p0; + var_i0 = w2c_highlights_f159(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_L0;} + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f173(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 2u; + w2c_highlights_f191(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f174(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 134u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_p0; + var_i2 = 73u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + var_i1 = var_p0; + var_i2 = 26u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f175(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u64 var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + u64 var_j0, var_j1, var_j2, var_j3; + var_i0 = var_p0; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_j0; + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 -= var_i1; + var_p0 = var_i0; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_j0 = var_l2; + var_j1 = 16777215ull; + var_j0 &= var_j1; + var_j1 = 7958113ull; + var_i0 = var_j0 == var_j1; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 5u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_j0 = var_l2; + var_j1 = 491328529774ull; + var_j0 ^= var_j1; + var_j1 = 24ull; + var_j0 <<= (var_j1 & 63); + var_i0 = !(var_j0); + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 6u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_j0 = var_l2; + var_j1 = 281474976710655ull; + var_j0 &= var_j1; + var_l2 = var_j0; + var_j1 = 125779768604014ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l2; + var_j2 = 113723913172083ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + var_j1 = var_l2; + var_j2 = 119225648511347ull; + var_i1 = var_j1 == var_j2; + var_j2 = var_l2; + var_j3 = 127970252055151ull; + var_i2 = var_j2 == var_j3; + var_i1 |= var_i2; + var_i0 |= var_i1; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 7u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_j0 = var_l2; + var_j1 = 72057594037927935ull; + var_j0 &= var_j1; + var_l2 = var_j0; + var_j1 = 31069335677005666ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l2; + var_j2 = 31093567915781749ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + goto var_Bfunc; + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f176(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = var_p0; + var_i1 = instance->w2c_g0; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 -= var_i1; + var_l1 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 9u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B1;} + var_i0 = var_l1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f177(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i1 = instance->w2c_g0; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f178(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = w2c_highlights_f176(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = w2c_highlights_f177(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = w2c_highlights_f176(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f177(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f179(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3, u32 var_p4) { + u32 var_l5 = 0; + u64 var_l6 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + u64 var_j0, var_j1, var_j2, var_j3; + var_i0 = var_p1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 38592u); + var_i1 = 32u; + var_i0 &= var_i1; + var_i1 = instance->w2c_g41; + var_i2 = instance->w2c_g37; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B0;} + var_i0 = var_p1; + var_i1 = 33u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g36; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g36 = var_i0; + var_i0 = instance->w2c_g42; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g41; + if (var_i0) { + w2c_highlights_f38(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + instance->w2c_g41 = var_i0; + } + goto var_B0; + } + var_i0 = var_p1; + var_i1 = 56u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f39(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g36; + if (var_i0) { + var_i0 = instance->w2c_g36; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g36 = var_i0; + } + goto var_B0; + } + var_i0 = var_p1; + var_i1 = 90u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p1; + var_i2 = 75u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B7;} + var_i0 = var_p0; + var_i1 = 19u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 40u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_p1; + var_i1 = 26u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p2; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p4; + var_i1 = var_p3; + var_i0 -= var_i1; + var_i1 = 11u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = var_p3; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 7u); + var_i1 = 1919906915u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p3; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 7166760226508402531ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + } + if (var_i0) {goto var_B7;} + } + var_i0 = var_p1; + var_i1 = 122u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p1; + var_i2 = 124u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p2; + var_i1 = w2c_highlights_f174(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_p2; + var_i3 = 25u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B7;} + } + var_i0 = instance->w2c_g41; + if (var_i0) { + var_i0 = var_p1; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g42; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g42 = var_i0; + goto var_B0; + } + var_i0 = var_p1; + var_i1 = 55u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + w2c_highlights_f41(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B0; + } + var_i0 = var_p1; + var_i1 = 53u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 2u; + w2c_highlights_f41(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B0; + } + var_i0 = var_p1; + var_i1 = 26u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p1; + var_i2 = 25u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p1; + var_i2 = 134u; + var_i1 = var_i1 <= var_i2; + var_i2 = var_p1; + var_i3 = 118u; + var_i2 = var_i2 >= var_i3; + var_i1 &= var_i2; + var_i2 = var_p1; + var_i3 = 9u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g42; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = 0u; + instance->w2c_g41 = var_i0; + var_i0 = 0u; + instance->w2c_g42 = var_i0; + } + } + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B0;} + var_i0 = var_p1; + var_i1 = 27u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p1; + var_i2 = 28u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g38; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = w2c_highlights_f131(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_p0; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_i3 = 16u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + instance->w2c_g39 = var_i0; + } + var_i0 = instance->w2c_g38; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g38 = var_i0; + goto var_B0; + } + var_i0 = var_p1; + var_i1 = 50u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p1; + var_i2 = 51u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g38; + if (var_i0) { + var_i0 = instance->w2c_g38; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g38 = var_i0; + } + goto var_B0; + } + var_i0 = instance->w2c_g38; + if (var_i0) {goto var_B0;} + var_i0 = var_p1; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + w2c_highlights_f39(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B0; + } + var_i0 = var_p1; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g40; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g40 = var_i0; + goto var_B0; + } + var_i0 = var_p1; + var_i1 = 55u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + w2c_highlights_f40(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B0; + } + var_i0 = var_p1; + var_i1 = 53u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 2u; + w2c_highlights_f40(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B0; + } + var_i0 = var_p1; + var_i1 = 57u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 3u; + w2c_highlights_f40(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_B0; + var_B7:; + var_i0 = 1u; + instance->w2c_g41 = var_i0; + var_i0 = 0u; + instance->w2c_g42 = var_i0; + var_B0:; + var_i0 = var_p1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 38736u); + var_l5 = var_i0; + var_i1 = 254u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l5; + goto var_Bfunc; + } + var_i0 = var_l5; + var_i1 = 255u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_l5 = var_i0; + var_i0 = var_p1; + var_i1 = 26u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 4294967295u; + var_i1 = var_p1; + var_i2 = 134u; + var_i1 = var_i1 == var_i2; + var_p0 = var_i1; + var_i2 = instance->w2c_g53; + var_i3 = instance->w2c_g69; + var_i3 = !(var_i3); + var_i2 &= var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B29;} + var_i0 = instance->w2c_g53; + var_i1 = var_p2; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 20u; + var_i1 = instance->w2c_g69; + var_i2 = var_p1; + var_i3 = 121u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l5; + var_i3 = 121u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l5; + var_i4 = 134u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l5; + var_i4 = 50u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l5; + var_i5 = 9u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 |= var_i3; + var_i3 = var_l5; + var_i4 = 26u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B29;} + var_i0 = 19u; + var_i1 = w2c_highlights_f130(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_p0; + var_i1 &= var_i2; + var_i2 = instance->w2c_g69; + var_i3 = var_l5; + var_i4 = 85u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l5; + var_i5 = 92u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l5; + var_i5 = 27u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l5; + var_i6 = 16u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i3 |= var_i4; + var_i2 &= var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B29;} + } + var_i0 = 18u; + var_i1 = var_p1; + var_i2 = 120u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B29;} + var_i0 = var_p1; + var_i1 = 119u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 17u; + var_i1 = var_p2; + var_i1 = w2c_highlights_f174(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_p2; + var_i3 = 33u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B29;} + } + var_i0 = var_p1; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 17u; + var_i1 = var_l5; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 38592u); + var_i2 = 1u; + var_i1 &= var_i2; + if (var_i1) {goto var_B29;} + } + var_i0 = var_p1; + var_i1 = 129u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 17u; + var_i1 = var_p2; + var_i1 = w2c_highlights_f174(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_p2; + var_i3 = 33u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B29;} + } + var_i0 = var_p1; + var_i1 = 121u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 20u; + var_i1 = var_p2; + var_i2 = 63u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B29;} + var_i0 = 20u; + var_i1 = w2c_highlights_f131(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_p2; + var_i3 = 26u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B29;} + } + var_i0 = var_p1; + var_i1 = 118u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 17u; + var_i1 = var_p2; + var_i1 = w2c_highlights_f174(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i1) {goto var_B29;} + } + var_i0 = var_p1; + var_i1 = 134u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_p1; + var_i2 = 122u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 19u; + var_i1 = 17u; + var_i2 = var_p1; + var_i3 = 134u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_p2; + var_i1 = w2c_highlights_f174(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = instance->w2c_g53; + var_i2 = !(var_i2); + var_i3 = var_p1; + var_i4 = 122u; + var_i3 = var_i3 == var_i4; + var_i4 = var_p1; + var_i5 = 124u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_p2; + var_i5 = 25u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i4 = var_p1; + var_i5 = 132u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l5; + var_i6 = 19u; + var_i5 = var_i5 != var_i6; + var_i4 &= var_i5; + var_i5 = var_p2; + var_i6 = 28u; + var_i5 = var_i5 == var_i6; + var_i4 &= var_i5; + var_i3 |= var_i4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i2 = var_p1; + var_i3 = 123u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B29;} + } + var_i0 = 4294967295u; + var_B29:; + var_p0 = var_i0; + var_i1 = 4294967295u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_p0; + goto var_B27; + } + } else { + var_i0 = var_p2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 38592u); + var_i1 = 64u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g53; + var_i1 = var_l5; + var_i2 = 19u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l5; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_p4; + var_i1 = var_p3; + var_i0 -= var_i1; + var_p0 = var_i0; + var_i0 = var_p3; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_j0; + var_i0 = var_p2; + var_i1 = 27u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 17u; + var_i1 = var_p0; + var_i2 = 6u; + var_i1 = var_i1 == var_i2; + var_j2 = var_l6; + var_j3 = 119165519096935ull; + var_j2 ^= var_j3; + var_j3 = 16ull; + var_j2 <<= (var_j3 & 63); + var_i2 = !(var_j2); + var_i1 &= var_i2; + var_i2 = var_l5; + var_i3 = 126u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B40;} + var_i0 = 4294967295u; + goto var_B40; + } + var_i0 = var_p2; + var_i1 = 123u; + var_i0 = var_i0 != var_i1; + var_i1 = var_p2; + var_i2 = 118u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + var_i1 = var_p2; + var_i2 = 26u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_p1 = var_i0; + var_i0 = var_p0; + var_i1 = 5u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 19u; + var_i1 = var_p1; + var_j2 = var_l6; + var_j3 = 444234036085ull; + var_j2 ^= var_j3; + var_j3 = 24ull; + var_j2 <<= (var_j3 & 63); + var_i2 = !(var_j2); + var_i1 &= var_i2; + if (var_i1) {goto var_B40;} + var_i0 = 4294967295u; + goto var_B40; + } + var_i0 = var_p0; + var_i1 = 8u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 17u; + var_i1 = var_p1; + var_i2 = var_p2; + var_i3 = 25u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_j2 = var_l6; + var_j3 = 8245936382198113121ull; + var_i2 = var_j2 == var_j3; + var_i1 &= var_i2; + if (var_i1) {goto var_B40;} + var_i0 = 4294967295u; + goto var_B40; + } + var_i0 = 4294967295u; + var_i1 = w2c_highlights_f130(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + if (var_i1) {goto var_B40;} + var_i0 = var_p0; + var_i1 = 6u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 17u; + var_i1 = var_p1; + var_i2 = var_p2; + var_i3 = 63u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_j2 = var_l6; + var_j3 = 281474976710655ull; + var_j2 &= var_j3; + var_l6 = var_j2; + var_j3 = 111516500389741ull; + var_i2 = var_j2 == var_j3; + var_i1 &= var_i2; + if (var_i1) {goto var_B40;} + var_i0 = 17u; + var_i1 = var_p1; + var_j2 = var_l6; + var_j3 = 111555088313973ull; + var_i2 = var_j2 == var_j3; + var_i1 &= var_i2; + if (var_i1) {goto var_B40;} + var_i0 = 4294967295u; + goto var_B40; + } + var_i0 = 17u; + var_i1 = var_p0; + var_i2 = 7u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l5; + var_i3 = 15u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_p1; + var_i3 = var_p2; + var_i4 = 100u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 &= var_i2; + var_j2 = var_l6; + var_j3 = 32497656998884193ull; + var_j2 ^= var_j3; + var_j3 = 8ull; + var_j2 <<= (var_j3 & 63); + var_i2 = !(var_j2); + var_i1 &= var_i2; + if (var_i1) {goto var_B40;} + var_i0 = 4294967295u; + var_B40:; + var_p0 = var_i0; + var_i1 = 4294967295u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_p0; + goto var_B27; + } + } + } + } + var_i0 = var_l5; + var_i1 = 19u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 40u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_p2; + var_i1 = 33u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 57u; + var_L50: + var_i1 = var_p3; + var_i1 = w2c_highlights_f177(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = var_p3; + var_i2 = 1u; + var_i1 -= var_i2; + var_p3 = var_i1; + var_L52: + var_i1 = var_p3; + var_i1 = w2c_highlights_f177(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i1; + var_i1 = w2c_highlights_f163(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_p0; + var_i3 = 48u; + var_i2 -= var_i3; + var_i3 = 9u; + var_i2 = var_i2 <= var_i3; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + var_i1 = !(var_i1); + if (var_i1) { + var_i1 = var_p3; + var_i2 = 1u; + var_i1 -= var_i2; + var_p3 = var_i1; + goto var_L52; + } + goto var_L50; + } + var_i1 = 0u; + var_i2 = var_p3; + var_i2 = w2c_highlights_f176(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i2; + var_i3 = instance->w2c_g0; + var_i2 -= var_i3; + var_i3 = 3u; + var_i2 = var_i2 < var_i3; + if (var_i2) {goto var_B49;} + var_i1 = var_p0; + var_i2 = 3u; + var_i1 -= var_i2; + var_p0 = var_i1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 7824750u; + var_i1 ^= var_i2; + var_i2 = 8u; + var_i1 <<= (var_i2 & 31); + var_i1 = !(var_i1); + var_i2 = var_p0; + var_i2 = w2c_highlights_f177(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f163(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = !(var_i2); + var_i1 &= var_i2; + var_B49:; + if (var_i1) {goto var_B27;} + } + var_i0 = 16u; + goto var_B27; + } + var_i0 = 29u; + goto var_B27; + } + var_i0 = w2c_highlights_f131(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 23u; + var_i1 = var_l5; + var_i2 = 130u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B27;} + var_i0 = var_l5; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p2; + var_i2 = 26u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 17u; + var_i1 = instance->w2c_g57; + var_i1 = !(var_i1); + var_i2 = instance->w2c_g57; + var_i3 = 1024u; + var_i2 = var_i2 > var_i3; + var_i1 |= var_i2; + if (var_i1) { + var_i1 = 0u; + } else { + var_i1 = instance->w2c_g57; + var_i2 = 37567u; + var_i1 += var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + } + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p4; + var_i3 = var_p3; + var_i2 -= var_i3; + var_p0 = var_i2; + var_i3 = 5u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_p3; + var_i3 = 5u; + var_j2 = w2c_highlights_f181(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_j3 = 517097156201ull; + var_i2 = var_j2 == var_j3; + goto var_B57; + } + var_i2 = var_p0; + var_i3 = 3u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_p3; + var_i3 = 3u; + var_j2 = w2c_highlights_f181(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_j3 = 7955819ull; + var_i2 = var_j2 == var_j3; + goto var_B57; + } + var_i2 = 0u; + var_B57:; + var_i1 &= var_i2; + if (var_i1) {goto var_B27;} + } + } + var_i0 = var_p2; + var_i1 = 22u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = w2c_highlights_f130(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + if (var_i1) {goto var_B62;} + var_i0 = 1u; + var_i1 = var_l5; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l5; + var_i3 = 5u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l5; + var_i3 = 128u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B62;} + var_i0 = var_l5; + var_i1 = 15u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p3; + var_i0 = w2c_highlights_f178(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B62; + } + var_i0 = 0u; + var_B62:; + var_i0 = !(var_i0); + if (var_i0) {goto var_B60;} + } + var_i0 = var_l5; + var_i1 = 33u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p2; + var_i2 = 56u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g50; + var_p0 = var_i0; + var_L65: + var_i0 = var_p0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p1 = var_i0; + var_i0 = !(var_i0); + var_i1 = var_p1; + var_i2 = 32u; + var_i1 = var_i1 > var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L65; + } + var_i0 = var_p1; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B60;} + } + var_i0 = w2c_highlights_f130(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p2; + var_i2 = 128u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B60;} + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g38; + var_i1 = instance->w2c_g40; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = var_l5; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 38592u); + var_i2 = 16u; + var_i1 &= var_i2; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g38; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g39; + var_i3 = 0u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i2 = var_l5; + var_i3 = 27u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l5; + var_i4 = 28u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l5; + var_i4 = 16u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_p2; + var_i4 = 15u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B60;} + } + var_i0 = w2c_highlights_f130(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l5; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p2; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g50; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_p2; + var_i2 = 15u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f38(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B60; + } + } + var_i0 = 7u; + var_i1 = var_p4; + var_i2 = var_p3; + var_i1 -= var_i2; + var_p0 = var_i1; + var_i2 = 9u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = var_p3; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 8u); + var_i2 = 100u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p3; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 7308895133777555061ull; + var_i2 = var_j2 == var_j3; + var_i1 &= var_i2; + goto var_B70; + } + var_i1 = var_p0; + var_i2 = 3u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = var_p3; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 5136718u; + var_i1 ^= var_i2; + var_i2 = 8u; + var_i1 <<= (var_i2 & 31); + var_i1 = !(var_i1); + goto var_B70; + } + var_i1 = var_p0; + var_i2 = 8u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = var_p3; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 8751735898823355977ull; + var_i1 = var_j1 == var_j2; + goto var_B70; + } + var_i1 = 0u; + var_B70:; + if (var_i1) {goto var_B27;} + var_i0 = w2c_highlights_f130(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_p3; + var_i1 = var_p4; + var_i0 = w2c_highlights_f175(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 56u; + var_i1 = var_l5; + var_i2 = 15u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B27;} + var_i0 = var_l5; + var_i1 = 86u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 56u; + var_i1 = var_p2; + var_i2 = 55u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p2; + var_i3 = 53u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_p2; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i3 = var_p2; + var_i4 = 5u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_p2; + var_i4 = 41u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B27;} + } + var_i0 = var_l5; + var_i1 = 26u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p3; + var_i0 = w2c_highlights_f176(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i1 = instance->w2c_g0; + var_i0 -= var_i1; + var_i1 = 6u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 56u; + var_i1 = var_p0; + var_i2 = 6u; + var_i1 -= var_i2; + var_p0 = var_i1; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 111555088313973ull; + var_j1 ^= var_j2; + var_j2 = 16ull; + var_j1 <<= (var_j2 & 63); + var_i1 = !(var_j1); + var_i2 = var_p0; + var_i2 = w2c_highlights_f177(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f163(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = !(var_i2); + var_i1 &= var_i2; + if (var_i1) {goto var_B27;} + } + } + } + } + var_i0 = 57u; + var_i1 = var_l5; + var_i2 = 95u; + var_i1 = var_i1 == var_i2; + var_i2 = 0u; + var_i3 = instance->w2c_g53; + var_i4 = var_p2; + var_i5 = 19u; + var_i4 = var_i4 != var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + if (var_i1) {goto var_B27;} + var_i0 = 57u; + var_i1 = var_l5; + var_i2 = 76u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l5; + var_i3 = 86u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B27;} + var_i0 = 55u; + var_i1 = var_l5; + var_i2 = 110u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l5; + var_i3 = 84u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l5; + var_i3 = 134u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B27;} + var_i0 = 14u; + var_i1 = var_l5; + var_i2 = 90u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B27;} + var_i0 = 29u; + var_i1 = w2c_highlights_f130(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l5; + var_i3 = 59u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l5; + var_i3 = 27u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l5; + var_i4 = 16u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i2 = w2c_highlights_f130(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_p2; + var_i4 = 41u; + var_i3 = var_i3 == var_i4; + var_i4 = instance->w2c_g50; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 58u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i2 &= var_i3; + var_i3 = var_p2; + var_i4 = 15u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B27;} + var_i0 = 14u; + var_i1 = var_p2; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B27;} + var_i0 = var_p3; + var_p0 = var_i0; + var_L80: + var_i0 = 1u; + var_i1 = var_p0; + var_i2 = var_p4; + var_i1 = var_i1 >= var_i2; + if (var_i1) {goto var_B79;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p1 = var_i0; + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_p1; + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = 9u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_p1; + var_i2 = 95u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L80; + } + var_i0 = 0u; + var_B79:; + if (var_i0) { + var_i0 = w2c_highlights_f130(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 55u; + var_i1 = 1u; + var_i2 = var_l5; + var_i3 = 129u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l5; + var_i4 = 127u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l5; + var_i4 = 118u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l5; + var_i5 = 133u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l5; + var_i5 = 128u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 |= var_i3; + if (var_i2) {goto var_B84;} + var_i1 = 0u; + var_i2 = var_p2; + var_i3 = instance->w2c_g53; + var_i1 = var_i3 ? var_i1 : var_i2; + var_p0 = var_i1; + var_i2 = 16u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_i3 = 55u; + var_i2 = var_i2 == var_i3; + var_p1 = var_i2; + var_i1 |= var_i2; + var_i2 = var_p0; + var_i3 = 86u; + var_i2 = var_i2 == var_i3; + var_p2 = var_i2; + var_i1 |= var_i2; + var_i2 = var_l5; + var_i3 = 77u; + var_i2 = var_i2 == var_i3; + if (var_i2) {goto var_B84;} + var_i1 = var_l5; + var_i2 = 32u; + var_i1 = var_i1 == var_i2; + var_p4 = var_i1; + var_i2 = var_l5; + var_i3 = 16u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) { + var_i1 = var_p0; + var_i2 = 53u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p1; + var_i1 |= var_i2; + var_i2 = var_p2; + var_i3 = var_p4; + var_i4 = var_p0; + var_i5 = 16u; + var_i4 = var_i4 == var_i5; + var_i5 = var_p0; + var_i6 = 23u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i3 &= var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + goto var_B84; + } + var_i1 = var_p0; + var_i2 = 93u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l5; + var_i3 = 28u; + var_i2 = var_i2 == var_i3; + if (var_i2) {goto var_B84;} + var_i1 = var_p0; + var_i2 = 22u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l5; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l5; + var_i4 = 5u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + if (var_i2) {goto var_B84;} + var_i1 = var_l5; + var_i2 = 15u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = 1u; + var_i2 = var_p0; + var_i3 = 32u; + var_i2 = var_i2 == var_i3; + if (var_i2) {goto var_B84;} + var_i1 = 1u; + var_i2 = 0u; + var_i3 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = instance->w2c_g38; + var_i2 = var_i4 ? var_i2 : var_i3; + if (var_i2) {goto var_B84;} + var_i1 = var_p3; + var_i1 = w2c_highlights_f178(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B84; + } + var_i1 = 0u; + var_B84:; + if (var_i1) {goto var_B27;} + } + var_i0 = 6u; + goto var_B27; + } + var_i0 = 55u; + var_i1 = var_p3; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 65u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + if (var_i1) {goto var_B27;} + var_i0 = 58u; + goto var_B27; + var_B60:; + var_i0 = 59u; + var_B27:; + goto var_Bfunc; + } + var_i0 = w2c_highlights_f130(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_p1; + var_i1 = 15u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p2; + var_i1 = 26u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g49; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + var_i1 = instance->w2c_g49; + var_i2 = instance->w2c_g50; + var_i1 = w2c_highlights_f175(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 40u; + goto var_Bfunc; + } + } + } else { + var_i0 = var_p2; + var_i1 = 15u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 40u; + goto var_Bfunc; + } + } + } + var_i0 = 35u; + var_i1 = 25u; + var_i2 = var_p1; + var_i3 = 15u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f180(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 1u; + w2c_highlights_f191(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +u64 w2c_highlights_f181(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + u64 var_j0, var_j1, var_j2; + var_i0 = var_p1; + var_i1 = 8u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + goto var_Bfunc; + } + var_i0 = var_p0; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 1ull; + var_i2 = var_p1; + var_i3 = 3u; + var_i2 <<= (var_i3 & 31); + var_j2 = (u64)(var_i2); + var_j1 <<= (var_j2 & 63); + var_j2 = 1ull; + var_j1 -= var_j2; + var_j0 &= var_j1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_j0; +} + +u32 w2c_highlights_f182(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i0 = w2c_highlights_f163(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = 9u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f183(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + u64 var_j1, var_j2, var_j3; + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = w2c_highlights_f135(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 38592u); + var_i1 = 128u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + goto var_Bfunc; + } + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 -= var_i1; + var_p1 = var_i0; + var_i1 = 5u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 5u; + var_j1 = w2c_highlights_f181(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_j2 = 521644567909ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + var_i1 = var_p1; + var_i2 = 7u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_i3 = 7u; + var_j2 = w2c_highlights_f181(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_j3 = 29113321536775536ull; + var_i2 = var_j2 == var_j3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 83u; + goto var_Bfunc; + } + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f184(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + u64 var_j0, var_j1; + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 -= var_i1; + var_p1 = var_i0; + var_i1 = 6u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 6u; + var_j0 = w2c_highlights_f181(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_j1 = 128026154263411ull; + var_i0 = var_j0 == var_j1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + } + var_i0 = var_p1; + var_i1 = 5u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 5u; + var_j0 = w2c_highlights_f181(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_j1 = 435611595891ull; + var_i0 = var_j0 == var_j1; + if (var_i0) { + var_i0 = 2u; + goto var_Bfunc; + } + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f185(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = instance->w2c_g3; + var_i1 = 8u; + var_i2 = 7u; + var_i3 = var_p1; + var_i4 = 1u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l2 = var_i1; + var_i2 = var_p0; + var_i1 += var_i2; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 12092u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = var_p0; + var_i2 = var_l2; + var_i1 += var_i2; + var_i0 = w2c_highlights_f184(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p1; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = instance->w2c_g3; + var_i1 = var_p0; + var_i2 = var_l2; + var_i1 += var_i2; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = var_l2; + var_i0 += var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 32u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_i3 = 9u; + var_i2 -= var_i3; + var_i3 = 4u; + var_i2 = var_i2 <= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f186(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + u64 var_j0, var_j1; + var_i0 = var_p0; + var_i0 = w2c_highlights_f166(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = instance->w2c_g3; + var_i1 = var_p0; + var_i2 = 7u; + var_i1 += var_i2; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 7u; + var_j0 = w2c_highlights_f181(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_j1 = 34177684928883046ull; + var_i0 = var_j0 != var_j1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 7u; + var_i0 += var_i1; + var_l1 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f182(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 0u; + var_i2 = var_l1; + var_i2 = w2c_highlights_f166(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f187(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = 18u; + var_i1 = var_p0; + var_i2 = var_p0; + var_i3 = 1u; + var_i2 += var_i3; + var_p0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 32u; + var_i1 = var_p0; + var_i2 = var_p1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f188(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 7u; + w2c_highlights_f191(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f189(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 0u; + instance->w2c_g51 = var_i0; + var_i0 = 0u; + instance->w2c_g52 = var_i0; + var_i0 = 0u; + instance->w2c_g59 = var_i0; + var_i0 = 0u; + instance->w2c_g69 = var_i0; + var_i0 = 0u; + instance->w2c_g53 = var_i0; + var_i0 = 0u; + instance->w2c_g54 = var_i0; + var_i0 = 0u; + instance->w2c_g55 = var_i0; + var_i0 = 0u; + instance->w2c_g56 = var_i0; + var_i0 = 0u; + instance->w2c_g46 = var_i0; + var_i0 = 0u; + instance->w2c_g45 = var_i0; + var_i0 = 0u; + instance->w2c_g57 = var_i0; + var_i0 = 0u; + instance->w2c_g58 = var_i0; + var_i0 = 0u; + instance->w2c_g60 = var_i0; + var_i0 = 0u; + instance->w2c_g62 = var_i0; + var_i0 = 0u; + instance->w2c_g63 = var_i0; + w2c_highlights_f36(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f190(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, var_l8 = 0, + var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0; + v128 var_l15 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + u64 var_j3, var_j4, var_j5; + var_i0 = instance->w2c_g7; + var_l14 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + if (var_i0) { + var_i0 = instance->w2c_g4; + instance->w2c_g48 = var_i0; + w2c_highlights_f189(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + instance->w2c_g48 = var_i0; + } + var_i0 = 0u; + var_i1 = instance->w2c_g62; + var_p0 = var_i1; + var_i1 = !(var_i1); + if (var_i1) {goto var_B2;} + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f140(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = var_l3; + var_i1 = instance->w2c_g4; + var_i2 = var_p0; + var_i3 = 18u; + var_i2 = var_i2 == var_i3; + var_i3 = 0u; + var_i4 = var_p0; + var_i5 = 11u; + var_i4 = var_i4 == var_i5; + w2c_highlights_f147(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_p0; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B2;} + goto var_B3; + } + var_i0 = var_p0; + var_i1 = 3u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + w2c_highlights_f4(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = instance->w2c_g4; + var_i2 = 0u; + w2c_highlights_f148(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 4u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 1u; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 -= var_i2; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 12074u; + var_i1 = var_i1 != var_i2; + var_i2 = instance->w2c_g4; + var_i3 = var_l3; + var_i2 -= var_i3; + var_i3 = 2u; + var_i2 = var_i2 < var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B2;} + var_i0 = 0u; + instance->w2c_g62 = var_i0; + var_i0 = 0u; + goto var_B2; + } + var_i0 = var_p0; + var_i1 = 5u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 34u; + var_i1 = 39u; + var_i2 = var_p0; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i0 = w2c_highlights_f138(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f145(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_p0; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B2;} + goto var_B3; + } + var_i0 = instance->w2c_g4; + var_i1 = 34u; + var_i2 = 39u; + var_i3 = var_p0; + var_i4 = 6u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_p0 = var_i1; + var_i2 = var_p0; + var_i3 = var_p0; + var_i0 = w2c_highlights_f8(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + var_p0 = var_i0; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_p0; + var_i1 = !(var_i1); + if (var_i1) {goto var_B2;} + var_i0 = 0u; + instance->w2c_g62 = var_i0; + var_i0 = 0u; + goto var_B2; + var_B3:; + var_i0 = 0u; + instance->w2c_g62 = var_i0; + var_i0 = instance->w2c_g51; + instance->w2c_g52 = var_i0; + var_i0 = var_p0; + instance->w2c_g51 = var_i0; + var_i0 = var_p0; + instance->w2c_g59 = var_i0; + var_i0 = 0u; + var_B2:; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + var_i0 = instance->w2c_g47; + var_i1 = 2u; + var_i0 &= var_i1; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + var_l7 = var_i0; + var_i0 = instance->w2c_g64; + } + var_l11 = var_i0; + var_L10: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l14; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = var_l7; + if (var_i0) { + var_i0 = w2c_highlights_f155(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + } + var_i0 = var_l4; + var_i0 = w2c_highlights_f159(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B11;} + var_i0 = var_l4; + w2c_highlights_f172(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + goto var_L10; + } + var_i0 = var_l6; + if (var_i0) { + var_i0 = var_l5; + var_l2 = var_i0; + var_i0 = var_l9; + var_l1 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = var_l10; + } else { + var_i0 = w2c_highlights_f143(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = instance->w2c_g49; + var_l1 = var_i0; + var_i0 = instance->w2c_g50; + } + var_l3 = var_i0; + var_i0 = var_p0; + var_i1 = var_l1; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i0 = !(var_i0); + var_i1 = var_l4; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 34u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f168(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f170(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f160(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + goto var_L10; + } + var_i0 = var_l2; + var_i0 = !(var_i0); + if (var_i0) {goto var_B11;} + var_i0 = var_l11; + if (var_i0) { + var_i0 = instance->w2c_g66; + var_i1 = instance->w2c_g60; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = var_l2; + var_i2 = 50u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 32125u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = var_l1; + var_i3 = 2u; + var_i2 += var_i3; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + var_i1 = var_l11; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + instance->w2c_g65 = var_i0; + goto var_B11; + } + } + var_i0 = var_l2; + var_i1 = 27u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g66; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g66 = var_i0; + } + var_i0 = var_l2; + var_i1 = 50u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g66; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g66; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g66 = var_i0; + } + } + var_i0 = var_l4; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 4u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = 50u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + } else { + var_i0 = 0u; + } + if (var_i0) { + var_i0 = instance->w2c_g54; + var_i1 = w2c_highlights_f156(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = (u32)((s32)var_i0 <= (s32)var_i1); + if (var_i0) { + var_i0 = 32u; + var_i1 = var_l1; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_p0 = var_i0; + w2c_highlights_f160(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L10; + } + } + var_i0 = var_l7; + var_i1 = var_l2; + var_i2 = 32u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g59; + var_i0 = w2c_highlights_f142(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + } + if (var_i0) { + var_i0 = var_l3; + var_i0 = w2c_highlights_f167(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 34u; + var_i1 = var_l1; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + instance->w2c_g45 = var_i0; + var_i0 = 1u; + var_i1 = w2c_highlights_f168(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f153(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + goto var_L10; + } + } + var_i0 = instance->w2c_g62; + var_l13 = var_i0; + var_i0 = w2c_highlights_f143(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = instance->w2c_g49; + var_l9 = var_i0; + var_i0 = instance->w2c_g50; + var_l10 = var_i0; + var_i0 = 1u; + var_l6 = var_i0; + var_i0 = var_l2; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 85u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g69 = var_i0; + } else { + var_i0 = instance->w2c_g69; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_i3 = 23u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 38736u); + var_i3 = 19u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g69 = var_i0; + } + } + } + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = instance->w2c_g59; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g59; + var_i2 = 27u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g59; + var_i3 = 16u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = 63u; + var_i1 = var_i1 == var_i2; + var_p0 = var_i1; + var_i2 = var_l2; + var_i3 = 26u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_l4 = var_i0; + var_i0 = 1073742084u; + var_i1 = 3221225473u; + var_i2 = 0u; + var_i3 = var_p0; + if (var_i3) { + var_i3 = var_l1; + var_i4 = 1u; + var_i3 += var_i4; + var_l4 = var_i3; + var_i3 = var_l3; + var_i4 = 1u; + var_i3 -= var_i4; + } else { + var_i3 = var_l3; + } + var_i4 = var_l4; + var_i3 -= var_i4; + var_p0 = var_i3; + var_i4 = 8u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l4; + var_j4 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_j5 = 7310575213499737460ull; + var_i4 = var_j4 == var_j5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_p0; + var_i3 = 6u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l4; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 126879448790131ull; + var_j3 ^= var_j4; + var_j4 = 16ull; + var_j3 <<= (var_j4 & 63); + var_i3 = !(var_j3); + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + } + var_i0 = var_l8; + if (var_i0) { + var_i0 = var_l5; + var_i0 = !(var_i0); + var_i1 = var_l5; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 38592u); + var_i2 = 8u; + var_i1 &= var_i2; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 |= var_i1; + var_i1 = var_l5; + var_i2 = 15u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = 26u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + } else { + var_i0 = 0u; + } + if (var_i0) { + var_i0 = 29u; + var_i1 = var_l1; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l2; + var_i1 = 27u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = var_l1; + var_i1 -= var_i2; + var_i2 = 2u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g59; + var_i1 = var_l2; + var_i2 = var_l5; + var_i3 = var_l1; + var_i4 = var_l3; + var_i0 = w2c_highlights_f179(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = var_l3; + w2c_highlights_f187(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B35; + } + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 38736u); + var_i1 = 253u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = instance->w2c_g59; + var_i1 = var_l2; + var_i2 = var_l5; + var_i3 = var_l1; + var_i4 = var_l3; + var_i0 = w2c_highlights_f179(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B35; + } + var_i0 = var_l2; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = var_l3; + w2c_highlights_f145(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B35; + } + var_i0 = var_l2; + var_i1 = 11u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l3; + var_i2 = 0u; + var_i3 = 1u; + var_i4 = 1u; + w2c_highlights_f147(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B35; + } + var_i0 = var_l2; + var_i1 = 18u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l3; + var_i2 = 1u; + var_i3 = 1u; + var_i4 = 0u; + w2c_highlights_f147(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B35; + } + var_i0 = var_l2; + var_i1 = 17u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 24u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 4u; + var_i1 = var_l1; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B35; + } + var_i0 = var_l2; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l3; + var_i0 = w2c_highlights_f150(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l3; + var_i2 = 3u; + w2c_highlights_f148(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 4u; + var_i1 = var_l1; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_B35; + } + var_i0 = var_l2; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = var_l3; + w2c_highlights_f145(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B35; + } + var_i0 = var_p0; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 125u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l3; + var_i2 = 0u; + var_i3 = 1u; + var_i4 = 0u; + w2c_highlights_f147(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B35; + } + var_i0 = var_p0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 46u; + var_i1 = var_l1; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B35; + } + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B35; + } + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_B35:; + } + var_i0 = instance->w2c_g45; + var_l12 = var_i0; + var_i0 = 0u; + instance->w2c_g45 = var_i0; + var_i0 = var_l1; + var_l4 = var_i0; + var_i0 = var_l3; + var_p0 = var_i0; + var_i0 = var_l2; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 2u; + var_i0 += var_i1; + var_l4 = var_i0; + var_i0 = var_l3; + var_i1 = 2u; + var_i0 -= var_i1; + var_p0 = var_i0; + var_L49: + var_i0 = var_p0; + var_i1 = var_l4; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B50;} + var_i0 = var_l4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 32u; + var_i0 = var_i0 > var_i1; + if (var_i0) {goto var_B50;} + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + var_l4 = var_i0; + goto var_L49; + var_B50:; + var_L51: + var_i0 = var_p0; + var_i1 = var_l4; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B52;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 -= var_i1; + var_l1 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 32u; + var_i0 = var_i0 > var_i1; + if (var_i0) {goto var_B52;} + var_i0 = var_l1; + var_p0 = var_i0; + goto var_L51; + var_B52:; + } + var_i0 = var_l2; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i1 = var_l13; + var_i1 = !(var_i1); + var_i0 &= var_i1; + var_i1 = var_l2; + var_i2 = 26u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = var_l4; + var_i1 -= var_i2; + var_p0 = var_i1; + var_i2 = 3u; + var_i1 -= var_i2; + var_i2 = 1u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 538976288u; + var_i2 = 0u; + var_i3 = var_l1; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 |= var_i1; + var_l1 = var_i0; + var_i0 = var_p0; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1819112552u; + var_i0 = var_i0 == var_i1; + instance->w2c_g45 = var_i0; + } else { + var_i0 = var_l1; + var_i1 = 7566179u; + var_i0 ^= var_i1; + var_i1 = 8u; + var_i0 <<= (var_i1 & 31); + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 260u; + instance->w2c_g45 = var_i0; + } + } + } + var_i0 = var_l2; + var_i1 = 15u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l12; + var_i2 = 1073741824u; + var_i1 &= var_i2; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l12; + var_i1 = 3221225471u; + var_i0 &= var_i1; + instance->w2c_g45 = var_i0; + } + var_i0 = instance->w2c_g45; + var_i0 = !(var_i0); + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 38592u); + var_i2 = 8u; + var_i1 &= var_i2; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l12; + instance->w2c_g45 = var_i0; + } + var_i0 = var_l8; + if (var_i0) { + var_i0 = var_l8; + instance->w2c_g45 = var_i0; + } + var_i0 = var_l3; + var_p0 = var_i0; + var_i0 = var_l13; + var_i0 = !(var_i0); + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 38592u); + var_i2 = 8u; + var_i1 &= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + instance->w2c_g59 = var_i0; + } + goto var_L10; + var_B11:; + var_i0 = instance->w2c_g65; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f191(w2c_highlights* instance, u32 var_p0) { + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = var_p0; + instance->w2c_g47 = var_i0; + var_i0 = 0u; + instance->w2c_g64 = var_i0; + var_i0 = 0u; + instance->w2c_g61 = var_i0; + var_i0 = 1u; + w2c_highlights_f190(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f192(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = var_p0; + instance->w2c_g47 = var_i0; + var_i0 = 0u; + instance->w2c_g64 = var_i0; + var_i0 = 1u; + instance->w2c_g61 = var_i0; + var_i0 = var_p1; + w2c_highlights_f190(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f193(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 3u; + w2c_highlights_f191(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f194(w2c_highlights* instance, u32 var_p0) { + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = 3u; + var_i1 = var_p0; + w2c_highlights_f192(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f195(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = 3u; + instance->w2c_g47 = var_i0; + var_i0 = instance->w2c_g22; + instance->w2c_g61 = var_i0; + var_i0 = var_p0; + instance->w2c_g64 = var_i0; + var_i0 = 0u; + instance->w2c_g65 = var_i0; + var_i0 = 0u; + var_i1 = var_p1; + var_i0 -= var_i1; + instance->w2c_g66 = var_i0; + var_i0 = 1u; + w2c_highlights_f190(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g65; + var_p0 = var_i0; + var_i0 = 0u; + instance->w2c_g64 = var_i0; + var_i0 = 0u; + instance->w2c_g65 = var_i0; + var_i0 = var_p0; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g22; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g2; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p2; + w2c_highlights_f68(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p3; + instance->w2c_g26 = var_i0; + var_i0 = 1u; + instance->w2c_g31 = var_i0; + } + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f196(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 9u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f197(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_p0; + var_i2 = var_p0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 13u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p0 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + } else { + var_i0 = var_p0; + } + } else { + var_i0 = var_p0; + } + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f198(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = w2c_highlights_f196(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i1 = 10u; + var_i2 = 13u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = var_l2; + var_i1 = var_l3; + var_i0 = var_i0 != var_i1; + var_i1 = var_l2; + var_i2 = var_p0; + var_i1 -= var_i2; + var_i2 = var_p1; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_l3; + var_i0 = w2c_highlights_f197(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f199(w2c_highlights* instance) { + u32 var_l0 = 0; + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g26; + var_i0 = w2c_highlights_f198(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = 44u; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = 0u; + instance->w2c_g25 = var_i0; + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f200(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 58u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 93u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 125u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p1; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f201(w2c_highlights* instance, u32 var_p0) { + u32 var_l3 = 0, var_l4 = 0, var_l5 = 0; + v128 var_l1 = simde_wasm_i64x2_make(0, 0), var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + v128 var_o0, var_o1, var_o2, var_o3, var_o4; + var_i0 = instance->w2c_g4; + var_l5 = var_i0; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_o0; + var_i1 = 10u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_o1 = var_l1; + var_i2 = 13u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_o1 = var_l1; + var_i2 = 58u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o2 = var_l1; + var_i3 = 35u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_l2 = var_o0; + var_i0 = var_p0; + if (var_i0) { + var_o0 = var_l2; + var_o1 = var_l1; + var_i2 = 44u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o2 = var_l1; + var_i3 = 91u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o2 = var_l1; + var_i3 = 93u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o3 = var_l1; + var_i4 = 123u; + var_o4 = simde_wasm_i8x16_splat(var_i4); + var_o3 = simde_wasm_i8x16_eq(var_o3, var_o4); + var_o2 = simde_wasm_v128_or(var_o2, var_o3); + var_o3 = var_l1; + var_i4 = 125u; + var_o4 = simde_wasm_i8x16_splat(var_i4); + var_o3 = simde_wasm_i8x16_eq(var_o3, var_o4); + var_o2 = simde_wasm_v128_or(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + } else { + var_o0 = var_l2; + } + var_i0 = v128_i8x16_bitmask(var_o0); + var_l3 = var_i0; + var_i0 = instance->w2c_g3; + var_i1 = instance->w2c_g4; + var_i0 -= var_i1; + var_l4 = var_i0; + var_i1 = 16u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i2 = var_l4; + var_i1 <<= (var_i2 & 31); + var_i2 = 1u; + var_i1 -= var_i2; + var_i0 &= var_i1; + var_l3 = var_i0; + } + var_i0 = var_l3; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l3; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_p0; + var_i0 = w2c_highlights_f200(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 9u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_l5; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = var_l3; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + } + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + } + goto var_B1; + } + var_i0 = var_l4; + var_i1 = 16u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 16u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + } + var_B1:; + var_L8: + var_i0 = instance->w2c_g4; + var_i1 = var_l5; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B9;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 -= var_i1; + var_p0 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i1 = 32u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l3; + var_i2 = 9u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B9;} + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + goto var_L8; + var_B9:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f202(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0; + v128 var_l12 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + u64 var_j3, var_j4; + var_i0 = instance->w2c_g7; + var_l10 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12488u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l8 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + } else { + var_i0 = 0u; + } + } + var_l3 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l10; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i1 = instance->w2c_g0; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + } + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + var_i1 = var_i1 != var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l1 = var_i1; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L9: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = var_l1; + var_i3 = var_l1; + var_i4 = 34u; + var_i3 = var_i3 == var_i4; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + var_i0 = var_l0; + var_i1 = var_l1; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_B10;} + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L9; + var_B10:; + var_i0 = 29u; + var_i1 = 44u; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f196(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = var_l4; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i2 = var_l2; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_L14: + var_i0 = var_l1; + var_i1 = 1u; + var_i2 = var_l2; + w2c_highlights_f55(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B15;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 39u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B15;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_L14;} + var_B15:; + } + var_i0 = var_l2; + var_i1 = 29u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 42u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 38u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 55u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 16777215u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i1 = 2960685u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 3026478u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 3u; + var_i1 += var_i2; + var_l0 = var_i1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i2 = instance->w2c_g4; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 1u); + var_i2 = w2c_highlights_f44(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 &= var_i2; + var_i2 = var_l1; + var_i3 = 43u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 45u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = var_l3; + w2c_highlights_f201(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 29u; + var_i1 = 24u; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f196(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l3; + var_i2 = w2c_highlights_f200(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + goto var_B19; + } + var_i0 = var_l1; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_l0 = var_i0; + var_i1 = var_l1; + var_i2 = 93u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 125u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l3; + var_i2 = 1u; + var_i1 -= var_i2; + var_i2 = var_l3; + var_i3 = var_l3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 124u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_l6 = var_i0; + var_L26: + var_i0 = var_l6; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B27;} + var_i0 = var_l6; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 43u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 49u; + var_i1 -= var_i2; + var_i2 = 8u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B27;} + var_i0 = var_l6; + var_i1 = 1u; + var_i0 += var_i1; + var_l6 = var_i0; + goto var_L26; + var_B27:; + var_i0 = var_l6; + var_i0 = w2c_highlights_f196(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_l9 = var_i0; + var_i0 = var_l5; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + var_i1 = var_l5; + var_i2 = var_l6; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 10u; + var_i2 = 13u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + } + } + var_i0 = 0u; + var_i1 = var_l5; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 10u; + var_i1 = var_i1 != var_i2; + var_i2 = var_l5; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 13u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i2 = var_l5; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B25;} + var_i0 = var_l7; + var_l0 = var_i0; + var_L30: + var_i0 = var_l0; + var_i1 = instance->w2c_g0; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B31;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 -= var_i1; + var_l2 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l11; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B31;} + var_i0 = var_l2; + var_l0 = var_i0; + goto var_L30; + var_B31:; + var_i0 = var_l0; + var_i0 = w2c_highlights_f196(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i0 -= var_i1; + var_l0 = var_i0; + var_i0 = 35u; + var_i1 = var_l7; + var_i2 = var_l6; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l6; + var_i1 = var_l9; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 4u; + var_i1 = var_l9; + var_i2 = var_l5; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l5; + var_i0 = w2c_highlights_f197(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = var_l5; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i0 = w2c_highlights_f198(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = 44u; + var_i1 = instance->w2c_g4; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 11u; + instance->w2c_g25 = var_i0; + var_i0 = var_l0; + instance->w2c_g26 = var_i0; + } + var_i0 = 1u; + var_B25:; + if (var_i0) {goto var_L3;} + } + var_i0 = instance->w2c_g4; + var_i1 = var_l3; + var_i0 = w2c_highlights_f200(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l1; + var_i3 = 124u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l1; + var_i3 = 63u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_B19:; + var_i0 = var_l3; + w2c_highlights_f201(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l4; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f196(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i0; + var_i0 = 29u; + var_i1 = 44u; + var_i2 = instance->w2c_g4; + var_i3 = var_l4; + var_i2 -= var_i3; + var_l0 = var_i2; + var_i3 = 1u; + var_i2 -= var_i3; + var_i3 = 4u; + var_i2 = var_i2 > var_i3; + if (var_i2) {goto var_B35;} + var_i1 = var_l0; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = 7u; + var_i2 = 44u; + var_i3 = var_l4; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 126u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + goto var_B35; + } + var_i1 = var_l0; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = 3u; + var_i2 = 44u; + var_i3 = var_l4; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 137977929760ull; + var_j3 |= var_j4; + var_j4 = 435728179558ull; + var_j3 ^= var_j4; + var_j4 = 24ull; + var_j3 <<= (var_j4 & 63); + var_i3 = !(var_j3); + var_i1 = var_i3 ? var_i1 : var_i2; + goto var_B35; + } + var_i1 = var_l4; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 538976288u; + var_i1 |= var_i2; + var_l2 = var_i1; + var_i1 = var_l0; + var_i2 = 4u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = 3u; + var_i2 = var_l2; + var_i3 = 1702195828u; + var_i2 = var_i2 == var_i3; + if (var_i2) {goto var_B35;} + var_i1 = 7u; + var_i2 = 44u; + var_i3 = var_l2; + var_i4 = 1819047278u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + goto var_B35; + } + var_i1 = var_l0; + var_i2 = 3u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = 3u; + var_i2 = 44u; + var_i3 = var_l2; + var_i4 = 16777215u; + var_i3 &= var_i4; + var_l0 = var_i3; + var_i4 = 7562617u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i5 = 6710895u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + goto var_B35; + } + var_i1 = 3u; + var_i2 = 44u; + var_i3 = var_l2; + var_i4 = 65535u; + var_i3 &= var_i4; + var_l0 = var_i3; + var_i4 = 28526u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i5 = 28271u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_B35:; + var_i2 = var_l7; + var_i3 = var_l3; + var_i2 = w2c_highlights_f200(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + var_B4:; + var_i0 = var_l8; + if (var_i0) { + var_i0 = 12488u; + instance->w2c_g32 = var_i0; + var_i0 = 12488u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f203(w2c_highlights* instance) { + u32 var_l0 = 0; + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12496u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l0 = var_i0; + instance->w2c_g24 = var_i0; + } + var_i0 = 0u; + w2c_highlights_f126(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f204(w2c_highlights* instance, u32 var_p0) { + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 10u; + var_i2 = 13u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f205(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 2u; + var_i0 += var_i1; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + goto var_Bfunc; + } + var_i0 = var_p0; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f206(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 2960685u; + var_i0 ^= var_i1; + var_i1 = 8u; + var_i0 <<= (var_i1 & 31); + var_i0 = !(var_i0); + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 3u; + var_i2 += var_i3; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g1; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i2 = 3u; + var_i1 += var_i2; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f205(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f207(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = instance->w2c_g3; + var_i1 = var_p0; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = var_p0; + var_i0 -= var_i1; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 2960685u; + var_i1 ^= var_i2; + var_i2 = 8u; + var_i1 <<= (var_i2 & 31); + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + goto var_Bfunc; + } else { + var_i0 = var_l1; + var_i0 = w2c_highlights_f205(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + goto var_L0; + } + UNREACHABLE; + } + var_i0 = instance->w2c_g3; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f208(w2c_highlights* instance, u32 var_p0) { + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_p0; + var_i2 = var_p0; + var_i2 = w2c_highlights_f204(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f205(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f209(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12496u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l2 = var_i0; + instance->w2c_g24 = var_i0; + } + var_i0 = w2c_highlights_f206(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + if (var_i0) { + var_i0 = 40u; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i0 = w2c_highlights_f207(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = instance->w2c_g22; + var_i1 = var_l1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + var_i0 = 3u; + w2c_highlights_f68(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g3; + var_i1 = var_l1; + instance->w2c_g3 = var_i1; + var_i1 = 1u; + w2c_highlights_f194(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g3 = var_i0; + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + instance->w2c_g31 = var_i0; + } else { + var_i0 = var_l0; + var_i1 = var_l1; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + var_i1 = var_l1; + instance->w2c_g3 = var_i1; + var_i1 = var_l0; + instance->w2c_g4 = var_i1; + var_i1 = 3u; + w2c_highlights_f191(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g3 = var_i0; + } + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + } + var_i0 = var_l1; + w2c_highlights_f208(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 1u; + w2c_highlights_f126(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f210(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i1 = 12u; + var_i0 *= var_i1; + var_i1 = 45028u; + var_i0 += var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f211(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = instance->w2c_g70; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g71; + goto var_Bfunc; + } + var_i0 = instance->w2c_g70; + var_i0 = w2c_highlights_f210(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f212(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = instance->w2c_g70; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_p0; + instance->w2c_g71 = var_i0; + var_i0 = var_p1; + instance->w2c_g72 = var_i0; + var_i0 = var_p2; + instance->w2c_g73 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g70; + var_i0 = w2c_highlights_f210(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l3; + var_i1 = var_p1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = var_l3; + var_i1 = var_p2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u, var_i1); + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f213(w2c_highlights* instance) { + u32 var_l0 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g70; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f210(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 45136u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 0u; + var_i2 = 45136u; + var_i3 = var_l0; + var_i2 -= var_i3; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f214(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + u32 var_l4 = 0, var_l5 = 0, var_l6 = 0; + v128 var_l7 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = 0u; + instance->w2c_g74 = var_i0; + var_i0 = var_p1; + var_i1 = var_p2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_p2; + instance->w2c_g4 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g70; + var_i1 = 8u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 53u; + var_i1 = var_p1; + var_i2 = var_p2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p2; + instance->w2c_g4 = var_i0; + goto var_Bfunc; + } + var_i0 = 1u; + instance->w2c_g74 = var_i0; + var_i0 = instance->w2c_g70; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g70 = var_i0; + var_i0 = instance->w2c_g3; + var_i1 = var_p2; + instance->w2c_g3 = var_i1; + var_i1 = var_p1; + instance->w2c_g4 = var_i1; + var_i1 = instance->w2c_g1; + var_i2 = var_p1; + var_i3 = 0u; + var_i4 = instance->w2c_g22; + var_i5 = var_p3; + var_i4 &= var_i5; + var_i4 = I32_CLZ(var_i4); + var_i5 = 5u; + var_i4 >>= (var_i5 & 31); + var_i2 = var_i4 ? var_i2 : var_i3; + instance->w2c_g1 = var_i2; + var_i2 = var_p0; + var_i3 = 47u; + var_i2 = var_i2 == var_i3; + var_i3 = var_p0; + var_i4 = 49u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + if (var_i2) { + var_i2 = instance->w2c_g22; + var_i3 = w2c_highlights_f211(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 0u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = w2c_highlights_f225(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = instance->w2c_g4; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 >= var_i4; + var_i2 |= var_i3; + if (var_i2) {goto var_B2;} + } + var_i2 = var_p0; + var_i3 = 47u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + w2c_highlights_f229(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + w2c_highlights_f345(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_B2; + } + var_i2 = instance->w2c_g22; + var_i2 = !(var_i2); + var_i3 = var_p3; + var_i3 = !(var_i3); + var_i2 |= var_i3; + if (var_i2) { + w2c_highlights_f36(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i2 = instance->w2c_g24; + var_p1 = var_i2; + var_i2 = instance->w2c_g23; + var_l6 = var_i2; + var_i2 = instance->w2c_g22; + if (var_i2) { + var_i2 = 0u; + instance->w2c_g24 = var_i2; + var_i2 = var_p3; + var_i2 = !(var_i2); + instance->w2c_g23 = var_i2; + } + var_i2 = var_p0; + var_i3 = 35u; + var_i2 = var_i2 == var_i3; + var_i3 = var_p0; + var_i4 = 39u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_p0; + var_i4 = 72u; + var_i3 = var_i3 == var_i4; + var_i4 = var_p0; + var_i5 = 74u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_p0; + var_i5 = 73u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 |= var_i3; + var_i2 = I32_CLZ(var_i2); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + var_i3 = instance->w2c_g22; + var_i4 = var_p3; + var_i3 &= var_i4; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = instance->w2c_g30; + if (var_i2) { + var_i2 = var_p0; + var_i2 = w2c_highlights_f408(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i2) {goto var_B8;} + } + var_i2 = w2c_highlights_f72(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i2) {goto var_B8;} + var_i2 = var_p0; + var_i2 = w2c_highlights_f408(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i2) {goto var_B8;} + } + var_i2 = instance->w2c_g22; + if (var_i2) { + var_i2 = var_p0; + var_i3 = var_p3; + var_i3 = !(var_i3); + var_i2 = w2c_highlights_f407(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i2) {goto var_B11;} + } + var_i2 = var_p0; + CALL_INDIRECT(instance->w2c_T0, void (*)(void*), w2c_highlights_t1, var_i2, instance->w2c_T0.data[var_i2].module_instance); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_B11:; + var_B8:; + var_i2 = instance->w2c_g22; + if (var_i2) { + var_i2 = var_p1; + instance->w2c_g24 = var_i2; + var_i2 = var_l6; + instance->w2c_g23 = var_i2; + } + var_B2:; + var_i2 = instance->w2c_g70; + var_i3 = 1u; + var_i2 -= var_i3; + instance->w2c_g70 = var_i2; + instance->w2c_g1 = var_i1; + instance->w2c_g3 = var_i0; + var_i0 = var_p2; + instance->w2c_g4 = var_i0; + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f215(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_L0: + var_i0 = var_p2; + var_i0 = !(var_i0); + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = w2c_highlights_f222(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 62u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = var_l3; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 39u; + var_i1 = var_l3; + var_i2 = var_l3; + var_i3 = 1u; + var_i2 += var_i3; + var_p0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = var_p1; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_p0; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = var_p2; + var_i1 = 1u; + var_i0 -= var_i1; + var_p2 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f216(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3, u32 var_p4) { + u32 var_l5 = 0, var_l6 = 0, var_l7 = 0; + v128 var_l8 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = var_p0; + var_i1 = 47u; + var_i0 = var_i0 != var_i1; + var_i1 = var_p0; + var_i2 = 49u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_p3; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g2; + var_i1 = instance->w2c_g22; + var_l5 = var_i1; + var_i1 = 1u; + instance->w2c_g22 = var_i1; + var_L1: + var_i1 = var_p1; + var_i2 = var_p2; + var_i1 = var_i1 < var_i2; + if (var_i1) { + var_i1 = var_p1; + var_i2 = var_p1; + var_i2 = w2c_highlights_f204(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p1 = var_i2; + var_i3 = var_p2; + var_i2 = var_i2 > var_i3; + if (var_i2) { + var_i2 = var_p2; + var_p1 = var_i2; + } + var_i2 = var_p1; + var_i3 = var_p3; + var_i1 = w2c_highlights_f215(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i1; + var_i1 = var_p1; + var_i1 = w2c_highlights_f205(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p1 = var_i1; + var_i2 = var_p2; + var_i1 = var_i1 > var_i2; + if (var_i1) { + var_i1 = var_p2; + var_p1 = var_i1; + } + var_i1 = var_p0; + if (var_i1) { + var_i1 = var_p1; + instance->w2c_g2 = var_i1; + var_i1 = var_p0; + var_i2 = var_l6; + var_i3 = var_p1; + var_i4 = var_p4; + w2c_highlights_f214(instance, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p4; + var_i2 = instance->w2c_g74; + var_i1 |= var_i2; + var_p4 = var_i1; + } else { + var_i1 = 53u; + var_i2 = var_l6; + var_i3 = var_p1; + w2c_highlights_f21(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L1; + } + instance->w2c_g2 = var_i0; + var_i0 = var_l5; + instance->w2c_g22 = var_i0; + var_i0 = var_l5; + var_i0 = !(var_i0); + if (var_i0) { + w2c_highlights_f224(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = var_p4; + instance->w2c_g74 = var_i0; + var_i0 = var_p2; + instance->w2c_g4 = var_i0; + goto var_Bfunc; + } + var_i0 = var_p0; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = var_p2; + var_i3 = var_p4; + w2c_highlights_f214(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = 53u; + var_i1 = var_p1; + var_i2 = var_p2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f217(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = w2c_highlights_f205(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = 35u; + var_i1 = instance->w2c_g4; + var_i2 = var_l2; + var_i3 = var_p0; + var_i1 = w2c_highlights_f215(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f218(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 128u; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f219(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = w2c_highlights_f220(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i1 = var_p0; + var_i0 -= var_i1; + var_l3 = var_i0; + var_L0: + var_i0 = var_p1; + var_i1 = var_l2; + var_i2 = var_p1; + var_i3 = 96u; + var_i4 = 0u; + var_i5 = 0u; + var_i1 = w2c_highlights_f5(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = var_p0; + var_i2 = var_p1; + var_i1 = w2c_highlights_f220(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i1; + var_i2 = var_p0; + var_i1 -= var_i2; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_L0;} + var_i0 = var_l2; + goto var_Bfunc; + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f220(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_L0: + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 96u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f221(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 43u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + goto var_Bfunc; + } + var_i0 = var_p0; + var_l1 = var_i0; + var_L1: + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B2;} + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B2;} + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L1; + var_B2:; + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 41u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_i1 = var_p0; + var_i2 = var_l1; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + goto var_Bfunc; + } + var_i0 = var_p0; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f222(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = var_l2; + var_i1 = 3u; + var_i0 = var_i0 >= var_i1; + var_i1 = var_p0; + var_i2 = var_p1; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 32u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f223(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3, u32 var_p4) { + u32 var_l5 = 0, var_l6 = 0, var_l7 = 0, var_l8 = 0; + v128 var_l9 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = 0u; + instance->w2c_g75 = var_i0; + var_L0: + var_i0 = instance->w2c_g3; + var_i1 = var_p0; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i0; + var_i0 = var_p0; + var_l5 = var_i0; + var_i0 = var_p3; + var_l6 = var_i0; + var_L2: + var_i0 = var_l6; + if (var_i0) { + var_i0 = var_l5; + var_i1 = var_l7; + var_i0 = w2c_highlights_f222(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 62u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l5; + var_i2 = var_l7; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g75 = var_i0; + var_i0 = var_p0; + goto var_Bfunc; + } else { + var_i0 = var_l5; + var_i1 = 1u; + var_i0 += var_i1; + var_l5 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = var_l7; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 1u; + var_i0 += var_i1; + var_l5 = var_i0; + } + var_i0 = var_l6; + var_i1 = 1u; + var_i0 -= var_i1; + var_l6 = var_i0; + goto var_L2; + } + UNREACHABLE; + } + var_i0 = 0u; + var_l6 = var_i0; + var_L7: + var_i0 = var_p4; + var_i1 = var_l6; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = var_l7; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B6;} + var_i0 = var_l5; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3472u); + var_i1 = 32u; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = 1u; + instance->w2c_g75 = var_i0; + var_i0 = var_p0; + goto var_Bfunc; + } else { + var_i0 = var_l6; + var_i1 = 1u; + var_i2 = 4u; + var_i3 = var_l6; + var_i4 = 3u; + var_i3 &= var_i4; + var_i2 -= var_i3; + var_i3 = var_l8; + var_i4 = 9u; + var_i3 = var_i3 != var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + var_l6 = var_i0; + var_i0 = var_l5; + var_i1 = 1u; + var_i0 += var_i1; + var_l5 = var_i0; + goto var_L7; + } + UNREACHABLE; + } + var_i0 = var_l5; + var_i1 = var_l7; + var_i0 = w2c_highlights_f222(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_l6 = var_i0; + var_L10: + var_i0 = var_l5; + var_i1 = var_l7; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B11;} + var_i0 = var_l5; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p1; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B11;} + var_i0 = var_l5; + var_i1 = 1u; + var_i0 += var_i1; + var_l5 = var_i0; + goto var_L10; + var_B11:; + var_i0 = var_l5; + var_i1 = var_l6; + var_i0 -= var_i1; + var_i1 = var_p2; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_B6;} + var_L12: + var_i0 = var_l5; + var_i1 = var_l7; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B13;} + var_i0 = var_l5; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i1 = 32u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l6; + var_i2 = 9u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B13;} + var_i0 = var_l5; + var_i1 = 1u; + var_i0 += var_i1; + var_l5 = var_i0; + goto var_L12; + var_B13:; + var_i0 = var_l5; + var_i1 = var_l7; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + goto var_Bfunc; + } + var_B6:; + var_i0 = var_l7; + var_i0 = w2c_highlights_f205(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + goto var_L0; + } + var_i0 = instance->w2c_g3; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f224(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 0u; + instance->w2c_g30 = var_i0; + var_i0 = 0u; + instance->w2c_g31 = var_i0; + w2c_highlights_f230(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + instance->w2c_g80 = var_i0; + var_i0 = 0u; + instance->w2c_g81 = var_i0; + var_i0 = 0u; + instance->w2c_g82 = var_i0; + var_i0 = 0u; + instance->w2c_g78 = var_i0; + var_i0 = 0u; + instance->w2c_g33 = var_i0; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f225(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0; + v128 var_l7 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + var_i0 = w2c_highlights_f211(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = instance->w2c_g70; + if (var_i0) { + var_i0 = instance->w2c_g70; + var_i0 = w2c_highlights_f210(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } else { + var_i0 = instance->w2c_g72; + } + var_l2 = var_i0; + var_i0 = instance->w2c_g70; + if (var_i0) { + var_i0 = instance->w2c_g70; + var_i0 = w2c_highlights_f210(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + } else { + var_i0 = instance->w2c_g73; + } + var_l0 = var_i0; + var_i0 = var_l1; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i2 = 256u; + var_i1 &= var_i2; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 = w2c_highlights_f344(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = 0u; + var_i1 = 0u; + var_i2 = 0u; + w2c_highlights_f212(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + } + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i2 = var_l2; + var_i3 = 65535u; + var_i2 &= var_i3; + var_i3 = var_l2; + var_i4 = 16u; + var_i3 >>= (var_i4 & 31); + var_l4 = var_i3; + var_i4 = var_l0; + var_i5 = 16u; + var_i4 >>= (var_i5 & 31); + var_i0 = w2c_highlights_f223(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = instance->w2c_g75; + var_i1 = var_l0; + var_i2 = 255u; + var_i1 &= var_i2; + var_l6 = var_i1; + var_i2 = instance->w2c_g4; + var_i3 = var_l3; + var_i4 = var_l4; + var_i5 = var_l0; + var_i6 = 256u; + var_i5 &= var_i6; + var_i6 = 0u; + var_i5 = var_i5 != var_i6; + w2c_highlights_f216(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = instance->w2c_g74; + var_i2 = var_l6; + var_i3 = 0u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + if (var_i1) { + var_i1 = var_l1; + var_i2 = var_l2; + var_i3 = var_l0; + var_i4 = 256u; + var_i3 |= var_i4; + w2c_highlights_f212(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i1 = 1u; + var_i0 = var_i1; goto var_Bfunc; + } + w2c_highlights_f224(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + instance->w2c_g4 = var_i1; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_l4; + w2c_highlights_f217(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_i1 = 0u; + var_i2 = 0u; + w2c_highlights_f212(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f213(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f226(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l2; + goto var_Bfunc; + } + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 63u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_l2; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 757932348u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 4u; + var_i1 += var_i2; + var_l3 = var_i1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_l2 = var_i0; + var_L3: + var_i0 = var_l2; + var_i1 = 45u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p1 = var_i0; + var_i0 = var_p1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = var_p1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 4074797u; + var_i0 ^= var_i1; + var_i1 = 8u; + var_i0 <<= (var_i1 & 31); + var_i0 = !(var_i0); + var_i1 = var_p1; + var_i2 = 3u; + var_i1 += var_i2; + var_p0 = var_i1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + goto var_Bfunc; + } else { + var_i0 = var_p1; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + goto var_L3; + } + UNREACHABLE; + var_B4:; + var_i0 = instance->w2c_g3; + goto var_Bfunc; + } + var_i0 = var_l2; + var_i1 = var_p1; + var_i2 = 62u; + var_i3 = 0u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_L7: + var_i0 = var_p1; + var_i1 = var_l2; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = var_l3; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_B8;} + var_i0 = var_l3; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = var_p1; + var_i2 = var_l3; + var_i3 = 0u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + } + goto var_L7; + var_B8:; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + var_i1 = var_p0; + var_i1 = w2c_highlights_f108(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f103(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + if (var_i0) { + var_L14: + var_i0 = var_l2; + var_i1 = 60u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p1 = var_i0; + var_i0 = var_p1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B15;} + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 = w2c_highlights_f104(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_p1; + var_i1 = 62u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + goto var_Bfunc; + } + var_i0 = instance->w2c_g3; + goto var_Bfunc; + } else { + var_i0 = var_p1; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + goto var_L14; + } + UNREACHABLE; + var_B15:; + var_i0 = instance->w2c_g3; + goto var_Bfunc; + } + } + var_i0 = var_l2; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f227(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = 32u; + var_i1 = var_p0; + var_i2 = var_p0; + var_i3 = 1u; + var_i2 += var_i3; + var_p0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 64u; + var_i1 = var_p0; + var_i2 = var_p1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p1; + var_i1 = var_p2; + w2c_highlights_f228(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f228(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = 32u; + var_i1 = var_p0; + var_i2 = var_p0; + var_i3 = 2u; + var_i2 += var_i3; + var_p0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 65u; + var_i1 = var_p0; + var_i2 = var_p1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 32u; + var_i1 = var_p1; + var_i2 = var_p1; + var_i3 = 1u; + var_i2 += var_i3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f229(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, + var_l16 = 0; + u64 var_l18 = 0, var_l19 = 0; + v128 var_l17 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7, + var_i8; + u64 var_j0, var_j1, var_j2, var_j3; + v128 var_o0, var_o1, var_o2, var_o3; + var_i0 = instance->w2c_g7; + var_l14 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12496u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l13 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + var_l8 = var_i0; + } + var_i0 = 0u; + instance->w2c_g76 = var_i0; + var_i0 = 0u; + instance->w2c_g77 = var_i0; + var_i0 = w2c_highlights_f206(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + if (var_i0) { + var_i0 = 40u; + var_i1 = instance->w2c_g4; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i0 = w2c_highlights_f207(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = instance->w2c_g3; + var_i1 = var_l0; + instance->w2c_g3 = var_i1; + var_i1 = var_l3; + instance->w2c_g4 = var_i1; + w2c_highlights_f202(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g3 = var_i0; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g22; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 4u; + w2c_highlights_f68(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + instance->w2c_g31 = var_i0; + } else { + var_i0 = instance->w2c_g22; + if (var_i0) { + w2c_highlights_f224(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + var_i0 = var_l0; + w2c_highlights_f208(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g0; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g0; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + } + var_l6 = var_i0; + var_L6: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l14; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B7;} + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f205(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = var_l4; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l6 = var_i0; + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + goto var_L6; + } + var_i0 = var_l6; + var_i1 = var_l5; + var_i2 = 32u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l0 = var_i0; + var_L11: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B12;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 32u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l0; + var_i2 = 3u; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B12;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L11; + var_B12:; + var_i0 = var_l4; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L6; + } + var_i0 = var_l6; + var_i1 = var_l5; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 39u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l9; + var_i1 = 1u; + var_i0 += var_i1; + var_l9 = var_i0; + goto var_L6; + } + var_i0 = var_l6; + var_i1 = var_l5; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_L15: + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B16;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 35u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B16;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L15; + var_B16:; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i0 -= var_i1; + var_i1 = 6u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i2 = var_l0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i2 = w2c_highlights_f43(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 54u; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_L18: + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + var_i1 = var_i1 >= var_i2; + if (var_i1) {goto var_B19;} + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f43(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + if (var_i1) {goto var_B19;} + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + instance->w2c_g4 = var_i1; + goto var_L18; + var_B19:; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 54u; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + goto var_L6; + } + } + var_i0 = var_l6; + var_i1 = var_l5; + var_i2 = 96u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l5; + var_i3 = 126u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_L21: + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B22;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_l5; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B22;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L21; + var_B22:; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i0 -= var_i1; + var_l11 = var_i0; + var_i1 = 3u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_L24: + var_i0 = var_l0; + var_i1 = var_l4; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B25;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B25;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L24; + var_B25:; + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = var_l4; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = var_l4; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + } + } + var_i0 = var_l0; + var_l3 = var_i0; + var_L28: + var_i0 = var_l0; + var_i1 = var_l4; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B29;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l1; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 125u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B29;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L28; + var_B29:; + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = var_l3; + var_i1 -= var_i2; + var_l0 = var_i1; + var_i2 = 1u; + var_i1 -= var_i2; + var_i2 = 17u; + var_i1 = var_i1 > var_i2; + if (var_i1) {goto var_B30;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 <<= (var_i1 & 31); + var_l6 = var_i0; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1360u); + var_i1 = 1360u; + var_i0 += var_i1; + var_l1 = var_i0; + var_i0 = var_l6; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1362u); + var_i1 = 1360u; + var_i0 += var_i1; + var_l15 = var_i0; + var_i0 = var_l3; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 2314885530818453536ull; + var_j0 |= var_j1; + var_l18 = var_j0; + var_j0 = 18446744073709551615ull; + var_j1 = 1ull; + var_i2 = var_l0; + var_i3 = 3u; + var_i2 <<= (var_i3 & 31); + var_j2 = (u64)(var_i2); + var_j1 <<= (var_j2 & 63); + var_j2 = 1ull; + var_j1 -= var_j2; + var_i2 = var_l0; + var_i3 = 8u; + var_i2 = var_i2 >= var_i3; + var_j0 = var_i2 ? var_j0 : var_j1; + var_l19 = var_j0; + var_L31: + var_i0 = var_l1; + var_i1 = var_l15; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_j0 = var_l18; + var_i1 = var_l1; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_j0 ^= var_j1; + var_j1 = var_l19; + var_j0 &= var_j1; + var_j1 = 0ull; + var_i0 = var_j0 != var_j1; + if (var_i0) {goto var_B33;} + var_i0 = 8u; + var_l6 = var_i0; + var_L34: + var_i0 = var_l0; + var_i1 = var_l6; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l6; + var_i0 += var_i1; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = var_l3; + var_i2 = var_l6; + var_i1 += var_i2; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 2314885530818453536ull; + var_j1 |= var_j2; + var_j0 ^= var_j1; + var_j1 = 18446744073709551615ull; + var_j2 = 1ull; + var_i3 = var_l0; + var_i4 = var_l6; + var_i3 -= var_i4; + var_l16 = var_i3; + var_i4 = 3u; + var_i3 <<= (var_i4 & 31); + var_j3 = (u64)(var_i3); + var_j2 <<= (var_j3 & 63); + var_j3 = 1ull; + var_j2 -= var_j3; + var_i3 = var_l16; + var_i4 = 8u; + var_i3 = var_i3 >= var_i4; + var_j1 = var_i3 ? var_j1 : var_j2; + var_j0 &= var_j1; + var_j1 = 0ull; + var_i0 = var_j0 != var_j1; + if (var_i0) {goto var_B33;} + var_i0 = var_l6; + var_i1 = 8u; + var_i0 += var_i1; + var_l6 = var_i0; + goto var_L34; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + goto var_B30; + var_B33:; + var_i0 = var_l1; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 += var_i2; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L31; + } + var_i0 = 0u; + var_B30:; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_l8; + var_i0 -= var_i1; + var_i1 = 0u; + var_i2 = var_l8; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = var_l4; + var_i0 = w2c_highlights_f205(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = 35u; + var_i1 = instance->w2c_g4; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = var_l5; + var_i2 = var_l11; + var_i3 = var_l9; + var_i4 = var_l6; + var_i0 = w2c_highlights_f223(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = instance->w2c_g75; + var_i1 = var_l3; + var_i2 = var_l1; + var_i3 = var_l0; + var_i4 = var_l9; + var_i5 = 0u; + w2c_highlights_f216(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g22; + if (var_i1) { + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = var_l5; + var_i2 = 32767u; + var_i3 = var_l9; + var_i4 = var_l9; + var_i5 = 32767u; + var_i4 = var_i4 > var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = 16u; + var_i2 <<= (var_i3 & 31); + var_i3 = 65535u; + var_i4 = var_l11; + var_i5 = var_l11; + var_i6 = 65535u; + var_i5 = var_i5 > var_i6; + var_i3 = var_i5 ? var_i3 : var_i4; + var_i2 |= var_i3; + var_i3 = var_l3; + var_i4 = var_l6; + var_i5 = 16u; + var_i4 <<= (var_i5 & 31); + var_i3 |= var_i4; + var_i4 = 256u; + var_i5 = 0u; + var_i6 = instance->w2c_g74; + var_i7 = var_l3; + var_i8 = 0u; + var_i7 = var_i7 != var_i8; + var_i6 &= var_i7; + var_i4 = var_i6 ? var_i4 : var_i5; + var_i3 |= var_i4; + w2c_highlights_f212(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + w2c_highlights_f224(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f213(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + var_i1 = var_l0; + instance->w2c_g4 = var_i1; + var_i0 = !(var_i0); + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l9; + w2c_highlights_f217(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 1u; + var_l6 = var_i0; + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + goto var_L6; + } + } + var_i0 = var_l6; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f221(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i0 = var_i0 > var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i2 = var_l0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i2 = w2c_highlights_f43(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l8; + var_i1 = instance->w2c_g4; + var_i2 = var_l8; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 38u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L6; + } + } + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = var_l5; + var_i1 = 124u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 39u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L6; + } + var_i0 = var_l5; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + } + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_L45: + var_i0 = var_l0; + var_i1 = var_l2; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B46;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 97u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l1; + var_i2 = 43u; + var_i1 -= var_i2; + var_i2 = 14u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 95u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 128u; + var_i2 = var_i2 >= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B46;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L45; + var_B46:; + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = var_l2; + var_i1 = var_i1 >= var_i2; + if (var_i1) {goto var_B44;} + var_i0 = var_l0; + var_i1 = var_l3; + var_i0 -= var_i1; + var_i1 = 3u; + var_i0 -= var_i1; + var_i1 = 30u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l3; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l1 = var_i1; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_L48: + var_i0 = var_l2; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 += var_i2; + var_l0 = var_i1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l3 = var_i1; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B44;} + var_i0 = var_l3; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 127u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 32u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_L48;} + } + var_i0 = 0u; + goto var_B44; + } + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = var_l3; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 64u; + var_i2 = var_i2 != var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B44;} + var_i0 = var_l0; + var_l3 = var_i0; + var_L50: + var_i0 = var_l2; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 += var_i2; + var_l0 = var_i1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f218(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i0 = !(var_i0); + if (var_i0) {goto var_L50;} + } + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = var_l2; + var_i2 = var_i2 < var_i3; + var_i1 &= var_i2; + var_i2 = var_l0; + var_i3 = var_l3; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B44;} + var_i0 = 0u; + var_B44:; + var_l0 = var_i0; + if (var_i0) { + var_i0 = 32u; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 65u; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_l0; + var_i3 = 1u; + var_i2 -= var_i3; + var_l3 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + goto var_L6; + } + var_i0 = instance->w2c_g4; + var_i1 = var_l12; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l12; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + var_i3 = var_l2; + var_i2 = w2c_highlights_f226(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l12 = var_i0; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + var_i1 = var_l0; + instance->w2c_g3 = var_i1; + w2c_highlights_f118(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g3 = var_i0; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g22; + var_i1 = var_l0; + var_i2 = instance->w2c_g2; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + w2c_highlights_f224(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L6; + } + } + } + var_i0 = var_l5; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 = w2c_highlights_f219(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + } + var_i0 = 53u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L6; + } + var_i0 = var_l5; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i1 = var_l10; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l7; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = var_l2; + var_i2 = 93u; + var_i3 = 0u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i0; + } + var_i0 = 0u; + var_i1 = instance->w2c_g4; + var_l0 = var_i1; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 23329u; + var_i1 = var_i1 != var_i2; + var_i2 = var_l0; + var_i3 = 3u; + var_i2 += var_i3; + var_l3 = var_i2; + var_i3 = var_l2; + var_i2 = var_i2 >= var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B63;} + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = var_l7; + var_i3 = 91u; + var_i4 = 0u; + var_i5 = 0u; + var_i1 = w2c_highlights_f5(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l7; + var_i1 = var_i1 < var_i2; + if (var_i1) {goto var_B63;} + var_i0 = 0u; + var_i1 = var_l7; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 40u; + var_i1 = var_i1 != var_i2; + var_i2 = var_l7; + var_i3 = 1u; + var_i2 += var_i3; + var_i3 = var_l2; + var_i2 = var_i2 >= var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B63;} + var_i0 = 0u; + var_i1 = var_l7; + var_i2 = 2u; + var_i1 += var_i2; + var_i2 = var_l2; + var_i3 = 41u; + var_i4 = 0u; + var_i5 = 0u; + var_i1 = w2c_highlights_f5(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i1; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 10333u; + var_i1 = var_i1 != var_i2; + var_i2 = var_l3; + var_i3 = 2u; + var_i2 += var_i3; + var_i3 = var_l2; + var_i2 = var_i2 >= var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B63;} + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = var_l3; + var_i3 = 3u; + var_i2 += var_i3; + var_i3 = var_l2; + var_i4 = 41u; + var_i5 = 0u; + var_i6 = 0u; + var_i2 = w2c_highlights_f5(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i2; + var_i1 = var_i1 <= var_i2; + if (var_i1) {goto var_B63;} + var_i0 = 32u; + var_i1 = var_l0; + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_l11 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_i1 = var_l11; + var_i2 = var_l0; + var_i3 = 2u; + var_i2 += var_i3; + var_l0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = var_l7; + var_i2 = var_l3; + w2c_highlights_f227(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l1; + w2c_highlights_f228(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_B63:; + var_l0 = var_i0; + if (var_i0) { + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + goto var_L6; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_L65: + var_i0 = var_l0; + var_i1 = var_l7; + var_i2 = 91u; + var_i3 = 1u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = var_l7; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B66;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_B66;} + var_i0 = var_l0; + var_i1 = 2u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L65; + var_B66:; + var_i0 = var_l0; + var_i1 = var_l7; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L6; + } + var_i0 = var_l7; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 93u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l7; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 40u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l7; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_l2; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l7; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = var_l2; + var_i2 = 41u; + var_i3 = 0u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = var_l2; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l7; + var_i2 = var_l0; + w2c_highlights_f227(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L6; + } + var_i0 = var_l2; + } else { + var_i0 = var_l2; + var_i1 = var_l7; + var_i2 = var_l2; + var_i3 = var_l7; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } else { + var_i0 = var_l10; + } + var_l10 = var_i0; + } + var_i0 = var_l5; + var_i1 = 42u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 95u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 1u; + var_i2 = instance->w2c_g4; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 1u); + var_i3 = var_l5; + var_i2 = var_i2 == var_i3; + var_i3 = instance->w2c_g3; + var_i4 = instance->w2c_g4; + var_i5 = 1u; + var_i4 += var_i5; + var_i3 = var_i3 > var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + } + var_i0 = var_l3; + var_i1 = var_l4; + var_i0 += var_i1; + var_l1 = var_i0; + var_i0 = var_l5; + var_i1 = 95u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = instance->w2c_g0; + var_i1 = var_i1 > var_i2; + var_i2 = var_l4; + var_i3 = 1u; + var_i2 -= var_i3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i2 = w2c_highlights_f218(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 &= var_i2; + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i2 = w2c_highlights_f43(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l1; + var_i4 = var_l2; + var_i3 = var_i3 >= var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B71;} + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = instance->w2c_g77; + var_i1 = var_i1 == var_i2; + var_i2 = var_l4; + var_i3 = instance->w2c_g76; + var_i2 = var_i2 < var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B71;} + } + var_L74: + var_i0 = var_l1; + var_i1 = var_l2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l2; + } else { + var_L76: + var_i0 = var_l1; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l17 = var_o0; + var_i1 = var_l5; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_o1 = var_l17; + var_i2 = 96u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_l0 = var_i0; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l0; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + var_l1 = var_i0; + goto var_B77; + } + var_i0 = var_l2; + var_i1 = var_l1; + var_i2 = 16u; + var_i1 += var_i2; + var_l1 = var_i1; + var_i0 = var_i0 > var_i1; + if (var_i0) {goto var_L76;} + var_B77:; + var_i0 = var_l1; + var_i1 = var_l2; + var_i2 = var_l1; + var_i3 = var_l2; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l0 = var_i0; + var_i1 = var_l2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 95u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + instance->w2c_g76 = var_i0; + var_i0 = var_l3; + instance->w2c_g77 = var_i0; + } + var_i0 = 0u; + goto var_B71; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = var_l2; + var_i0 = w2c_highlights_f219(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_l0; + var_i1 = var_l2; + var_i0 = w2c_highlights_f220(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + } + goto var_L74; + } + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + var_i0 = var_l3; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = 0u; + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = var_l5; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = var_l2; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 128u; + var_i0 = var_i0 >= var_i1; + var_i1 = var_l1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f218(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = var_l2; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + var_i1 = var_l5; + var_i2 = 95u; + var_i1 = var_i1 != var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + } else { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L74; + } + var_B71:; + var_l0 = var_i0; + if (var_i0) { + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 13u; + var_i1 = 12u; + var_i2 = var_l3; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L6; + } + var_i0 = var_l5; + var_i1 = 95u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_L87: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B88;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 95u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B88;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L87; + var_B88:; + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L6; + } + } + var_i0 = var_l5; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 33u; + var_i0 -= var_i1; + var_i1 = 14u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l0; + var_i2 = 58u; + var_i1 -= var_i2; + var_i2 = 6u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 91u; + var_i1 -= var_i2; + var_i2 = 5u; + var_i1 = var_i1 <= var_i2; + var_i2 = var_l0; + var_i3 = 123u; + var_i2 -= var_i3; + var_i3 = 3u; + var_i2 = var_i2 <= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 45u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_L92: + var_i0 = instance->w2c_g3; + var_i1 = var_l0; + var_i0 -= var_i1; + var_i1 = 16u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l17 = var_o0; + var_i1 = 10u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_o1 = var_l17; + var_i2 = 13u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_o1 = var_l17; + var_i2 = 60u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o2 = var_l17; + var_i3 = 91u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_o1 = var_l17; + var_i2 = 96u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o2 = var_l17; + var_i3 = 92u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_o1 = var_l17; + var_i2 = 42u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o2 = var_l17; + var_i3 = 95u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_o1 = var_l17; + var_i2 = 124u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_eq(var_o1, var_o2); + var_o0 = simde_wasm_v128_or(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_l3 = var_i0; + if (var_i0) { + var_i0 = var_l0; + var_i1 = var_l3; + var_i1 = I32_CTZ(var_i1); + var_i0 += var_i1; + goto var_B91; + } else { + var_i0 = var_l0; + var_i1 = 16u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L92; + } + UNREACHABLE; + } + var_L95: + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B96;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3472u); + var_i1 = 64u; + var_i0 &= var_i1; + if (var_i0) {goto var_B96;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L95; + var_B96:; + var_i0 = var_l0; + var_B91:; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L6; + var_B7:; + var_i0 = var_l13; + if (var_i0) { + var_i0 = 12496u; + instance->w2c_g32 = var_i0; + var_i0 = 12496u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f230(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + w2c_highlights_f189(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + instance->w2c_g64 = var_i0; + var_i0 = 0u; + instance->w2c_g65 = var_i0; + var_i0 = 0u; + instance->w2c_g66 = var_i0; + var_i0 = 0u; + instance->w2c_g25 = var_i0; + var_i0 = 0u; + instance->w2c_g26 = var_i0; + var_i0 = 0u; + instance->w2c_g27 = var_i0; + var_i0 = 0u; + instance->w2c_g28 = var_i0; + var_i0 = 0u; + instance->w2c_g29 = var_i0; + var_i0 = 12416u; + var_i1 = 0u; + var_i2 = 32u; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 12448u; + var_i1 = 0u; + var_i2 = 1440u; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + FUNC_EPILOGUE; +} + +void w2c_highlights_f231(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0; + v128 var_l7 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g24; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g23; + var_l6 = var_i2; + var_i2 = 0u; + instance->w2c_g24 = var_i2; + var_i2 = instance->w2c_g31; + var_i2 = !(var_i2); + var_l3 = var_i2; + instance->w2c_g23 = var_i2; + var_i2 = var_p2; + instance->w2c_g3 = var_i2; + var_i2 = var_p1; + instance->w2c_g4 = var_i2; + var_i2 = var_l3; + var_i2 = !(var_i2); + var_i3 = var_p0; + var_i4 = 2u; + var_i3 = var_i3 == var_i4; + var_i4 = var_p0; + var_i5 = 14u; + var_i4 = var_i4 >= var_i5; + var_i3 |= var_i4; + var_i4 = var_p0; + var_i5 = 4u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = w2c_highlights_f72(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i2) {goto var_B0;} + } + var_i2 = var_p0; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_l3; + w2c_highlights_f152(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i2 = var_p0; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i3 = var_p0; + var_i4 = 14u; + var_i3 = var_i3 >= var_i4; + var_i2 |= var_i3; + if (var_i2) { + var_i2 = var_p0; + w2c_highlights_f113(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i2 = var_p0; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_l3; + var_i2 = !(var_i2); + var_i3 = instance->w2c_g25; + var_i4 = 11u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = w2c_highlights_f199(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + w2c_highlights_f202(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i2 = var_l3; + w2c_highlights_f194(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + } + var_B0:; + instance->w2c_g3 = var_i1; + var_i1 = var_p2; + instance->w2c_g4 = var_i1; + var_i1 = var_l6; + instance->w2c_g23 = var_i1; + instance->w2c_g24 = var_i0; + var_i0 = 1u; + instance->w2c_g31 = var_i0; + FUNC_EPILOGUE; +} + +void w2c_highlights_f232(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0; + v128 var_l8 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + var_i0 = instance->w2c_g7; + var_l6 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12504u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + } else { + var_i0 = 1u; + } + } + var_l1 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l6; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l1; + var_i2 = var_l0; + var_i3 = instance->w2c_g4; + var_i4 = 10u; + var_i5 = 0u; + var_i6 = 1u; + var_i2 = w2c_highlights_f5(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = instance->w2c_g4; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 2u); + var_i1 = 0u; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 2u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 0u; + var_i3 = instance->w2c_g3; + var_i4 = instance->w2c_g4; + var_i5 = 1u; + var_i4 += var_i5; + var_i3 = var_i3 > var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l2 = var_i1; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l4; + var_i2 = w2c_highlights_f44(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l2; + var_i4 = 43u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l2; + var_i5 = 45u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + var_l4 = var_i0; + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_l7 = var_i0; + var_i1 = var_l2; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l4; + var_i1 = !(var_i1); + var_i2 = var_l0; + var_i3 = 35u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 1u; + var_i2 = var_l7; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l4; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 43u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = var_l4; + var_i1 = !(var_i1); + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 22u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = 24u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 60u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 22u; + var_i1 = 27u; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 22u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 22u; + } else { + var_i0 = var_l1; + if (var_i0) { + var_i0 = 17u; + } else { + var_i0 = 60u; + var_i1 = 58u; + var_i2 = instance->w2c_g4; + var_l1 = var_i2; + var_i2 = var_l3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 32u; + var_i2 |= var_i3; + var_l0 = var_i2; + var_i2 = 1u; + var_i3 = var_l3; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 1u); + var_i3 = w2c_highlights_f44(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = var_l0; + var_i5 = 120u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l0; + var_i6 = 119u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i5 = var_l0; + var_i6 = 114u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i3 &= var_i4; + var_i4 = var_l1; + var_i5 = var_l3; + var_i4 -= var_i5; + var_l1 = var_i4; + var_i5 = 1u; + var_i4 = var_i4 > var_i5; + var_i3 &= var_i4; + if (var_i3) {goto var_B17;} + var_i2 = var_l0; + var_i3 = 116u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 115u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l0; + var_i4 = 97u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l1; + var_i4 = 2u; + var_i3 -= var_i4; + var_i4 = 1u; + var_i3 = var_i3 <= var_i4; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = var_l3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 1u); + var_i2 = w2c_highlights_f44(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i2) { + var_i2 = 1u; + var_i3 = var_l3; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 2u); + var_i3 = w2c_highlights_f44(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = var_l1; + var_i5 = 2u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + if (var_i3) {goto var_B17;} + } + } + var_i2 = var_l3; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 538976288u; + var_i2 |= var_i3; + var_l2 = var_i2; + var_i2 = 1u; + var_i3 = var_l3; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 3u); + var_i3 = w2c_highlights_f44(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = var_l0; + var_i5 = 120u; + var_i4 -= var_i5; + var_i5 = 2u; + var_i4 = var_i4 <= var_i5; + var_i3 &= var_i4; + var_i4 = var_l2; + var_i5 = 16776960u; + var_i4 &= var_i5; + var_i5 = 7171328u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i4 = var_l1; + var_i5 = 4u; + var_i4 -= var_i5; + var_i5 = 1u; + var_i4 = var_i4 <= var_i5; + var_i3 &= var_i4; + if (var_i3) {goto var_B17;} + var_i2 = var_l1; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_i4 = 1869768058u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i3 = var_l1; + var_i4 = 3u; + var_i3 = var_i3 > var_i4; + if (var_i3) {goto var_B17;} + var_i2 = var_l1; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = 1u; + var_i3 = var_l2; + var_i4 = 65535u; + var_i3 &= var_i4; + var_l1 = var_i3; + var_i4 = 8u; + var_i3 >>= (var_i4 & 31); + var_l2 = var_i3; + var_i4 = 108u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l2; + var_i5 = 104u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l2; + var_i5 = 120u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l0; + var_i5 = 97u; + var_i4 -= var_i5; + var_i5 = 3u; + var_i4 = var_i4 <= var_i5; + var_i3 &= var_i4; + if (var_i3) {goto var_B17;} + var_i2 = 1u; + var_i3 = var_l0; + var_i4 = 115u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i5 = 99u; + var_i4 -= var_i5; + var_i5 = 4u; + var_i4 = var_i4 <= var_i5; + var_i3 |= var_i4; + var_i4 = var_l2; + var_i5 = 115u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + if (var_i3) {goto var_B17;} + var_i2 = var_l1; + var_i3 = 28787u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 28774u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l1; + var_i4 = 29292u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l1; + var_i5 = 25456u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 |= var_i3; + var_i3 = var_l1; + var_i4 = 26995u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l1; + var_i5 = 26980u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l1; + var_i5 = 28770u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l1; + var_i5 = 28775u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l1; + var_i6 = 28788u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i5 = var_l1; + var_i6 = 24946u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i3 |= var_i4; + var_i2 |= var_i3; + goto var_B17; + } + var_i2 = 0u; + var_i3 = var_l1; + var_i4 = 3u; + var_i3 = var_i3 != var_i4; + if (var_i3) {goto var_B17;} + var_i2 = var_l0; + var_i3 = 101u; + var_i2 = var_i2 != var_i3; + var_i3 = var_l0; + var_i4 = 114u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = var_l2; + var_i3 = 16777215u; + var_i2 &= var_i3; + var_l0 = var_i2; + var_i3 = 7104883u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 7104868u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l0; + var_i4 = 7106675u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i5 = 7106658u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 |= var_i3; + goto var_B17; + } + var_i2 = var_l2; + var_i3 = 8u; + var_i2 >>= (var_i3 & 31); + var_i3 = 65535u; + var_i2 &= var_i3; + var_l0 = var_i2; + var_i3 = 30817u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 30818u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l0; + var_i4 = 30819u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i5 = 30820u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 |= var_i3; + var_i3 = var_l0; + var_i4 = 26995u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i5 = 26980u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l0; + var_i5 = 28770u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l0; + var_i6 = 28787u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i5 = var_l0; + var_i6 = 28777u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i3 |= var_i4; + var_i2 |= var_i3; + var_B17:; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + var_l0 = var_i0; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 22u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = 32u; + var_i2 = 25u; + var_i3 = var_l0; + var_i4 = 40u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i5 = 41u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l0; + var_i5 = 91u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l0; + var_i6 = 93u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i3 = 44u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 58u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + var_B4:; + var_i0 = var_l5; + if (var_i0) { + var_i0 = 12504u; + instance->w2c_g32 = var_i0; + var_i0 = 12504u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f233(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = 40u; + var_i2 = 41u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + } else { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 -= var_i1; + var_p0 = var_i0; + var_i0 = !(var_i0); + if (var_i0) {goto var_B1;} + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + var_B1:; + var_i0 = 47u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f234(w2c_highlights* instance) { + u32 var_l0 = 0; + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 125u; + var_i2 = 10u; + var_i3 = 13u; + var_i0 = w2c_highlights_f8(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 58u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 125u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f235(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 58u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f234(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = 4294967295u; + goto var_Bfunc; + } + var_i0 = var_l1; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 2u; + var_l1 = var_i0; + } + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_l1; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g78; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g78 = var_i0; + } + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f233(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 3472u); + var_i2 = 7u; + var_i1 >>= (var_i2 & 31); + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = 58u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f236(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_L0: + var_i0 = var_l1; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = var_l1; + var_i1 = var_i1 > var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = 34u; + var_i3 = 1u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i2 = 36u; + var_i3 = 0u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_l3; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 1u; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + } + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_p0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + goto var_L0; + } + var_i0 = var_l3; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i0 = w2c_highlights_f235(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L0; + var_B1:; + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = 0u; + var_i2 = (u32)((s32)var_i2 > (s32)var_i3); + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g26 = var_i0; + var_i0 = var_l2; + var_i1 = 4294967295u; + var_i0 = var_i0 == var_i1; + instance->w2c_g27 = var_i0; + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f237(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = var_p2; + var_i1 = var_l3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_l3; + var_i0 += var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p1; + var_i2 = var_l3; + var_i1 += var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } else { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + goto var_L0; + } + UNREACHABLE; + } + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f238(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0; + v128 var_l14 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g7; + var_l13 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + var_i0 = instance->w2c_g22; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g23; + var_i2 = instance->w2c_g24; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g78 = var_i0; + } + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12512u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l11 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + } + var_l6 = var_i0; + } + var_i0 = var_l5; + var_i0 = !(var_i0); + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g0; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 -= var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l3 = var_i1; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = 13u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + } else { + var_i0 = var_l1; + } + } + var_l3 = var_i0; + var_L5: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l13; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = var_l6; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_l6; + var_i3 = var_l9; + var_i2 += var_i3; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + instance->w2c_g4 = var_i1; + var_i1 = 13u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_L12: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = var_l10; + if (var_i0) { + var_L15: + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B16;} + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 9u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B16;} + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L15; + var_B16:; + } + var_i0 = var_l1; + var_i1 = var_l6; + var_i0 += var_i1; + var_l0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l1; + var_i2 = var_l9; + var_i3 = var_l6; + var_i1 = w2c_highlights_f237(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l1 = var_i2; + var_i3 = 10u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 13u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l0; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B11; + } + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L12; + } + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l9; + var_i1 = var_l6; + var_i2 = var_l10; + var_i3 = 44u; + w2c_highlights_f67(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_B11:; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 1u; + var_l3 = var_i0; + goto var_L5; + } + } + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f81(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 7u; + var_i0 &= var_i1; + var_l2 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = var_l5; + var_i0 = !(var_i0); + } else { + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i0 = var_i0 < var_i1; + var_i1 = var_l2; + var_i2 = 8u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 4294967287u; + var_i0 &= var_i1; + var_l2 = var_i0; + var_i0 = 1u; + } else { + var_i0 = var_l3; + } + } + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B6;} + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 0u; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = var_l3; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + var_i1 = var_i1 < var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l0 = var_i1; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L5; + } + var_i0 = var_l0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 39u; + var_i1 = 1u; + var_i2 = 44u; + w2c_highlights_f55(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L5; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + instance->w2c_g4 = var_i1; + var_i0 = w2c_highlights_f236(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g22; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12u; + instance->w2c_g25 = var_i0; + var_i0 = 44u; + instance->w2c_g29 = var_i0; + } + var_i0 = 0u; + var_l3 = var_i0; + goto var_L5; + } + var_i0 = var_l0; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 96u; + var_i1 = 1u; + var_i2 = 47u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L5; + } + var_i0 = var_l0; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 39u; + var_i1 = 1u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L5; + } + var_i0 = instance->w2c_g78; + var_l3 = var_i0; + var_i0 = 0u; + var_i0 = w2c_highlights_f235(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i1 = instance->w2c_g78; + var_i2 = var_l3; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_l3 = var_i0; + var_i0 = var_l1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 2u; + var_i2 = var_l3; + var_i1 -= var_i2; + var_i0 += var_i1; + var_i1 = var_l5; + var_i2 = var_l5; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i0 = var_l2; + var_i1 = 4294967287u; + var_i0 &= var_i1; + var_l2 = var_i0; + } + goto var_L5; + } + var_i0 = var_l0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g78; + var_i1 = !(var_i1); + var_i2 = instance->w2c_g4; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 2u); + var_i3 = 60u; + var_i2 = var_i2 != var_i3; + var_i3 = instance->w2c_g4; + var_i4 = 2u; + var_i3 += var_i4; + var_l7 = var_i3; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 >= var_i4; + var_i2 |= var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l7; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l1 = var_i0; + } + var_i0 = 25u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f73(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i1; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_L5;} + var_i0 = instance->w2c_g4; + var_l12 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l7; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = var_l7; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_l4; + var_i0 -= var_i1; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l7; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } else { + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_L34: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B35;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 3728u); + var_i2 = 1u; + var_i1 >>= (var_i2 & 31); + var_i2 = 1u; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B35;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L34; + var_B35:; + var_i0 = instance->w2c_g4; + var_i1 = var_l4; + var_i0 -= var_i1; + var_l0 = var_i0; + } + var_i0 = 44u; + var_i1 = var_l12; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l6; + var_i0 = !(var_i0); + var_i1 = var_l0; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_l9 = var_i0; + var_i0 = var_l1; + var_l10 = var_i0; + var_i0 = var_l0; + var_l6 = var_i0; + } + goto var_L5; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L5; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = var_l0; + var_i1 = 126u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 45u; + var_i1 -= var_i2; + var_i2 = 2u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 46u; + var_i2 -= var_i3; + var_i3 = 1u; + var_i2 = var_i2 <= var_i3; + var_i3 = var_l0; + var_i4 = 45u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 |= var_i1; + } else { + var_i0 = 0u; + } + } + if (var_i0) { + var_i0 = var_l0; + var_i1 = 126u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_L42: + var_i0 = 45u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B43;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 47u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l1; + var_i2 = 46u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B43;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L42; + var_B43:; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = 0u; + var_l0 = var_i0; + var_i0 = var_l3; + var_i1 = var_l2; + var_i2 = 4u; + var_i1 &= var_i2; + var_l1 = var_i1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = var_l7; + var_i2 = 14144u; + var_i3 = 7u; + var_i4 = 25u; + var_i0 = w2c_highlights_f75(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = var_l2; + var_i3 = 3u; + var_i2 &= var_i3; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 3u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i3 = var_l0; + var_i4 = 4u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l1; + var_i5 = 0u; + var_i4 = var_i4 != var_i5; + var_i3 = var_i3 != var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + } + } + var_i0 = 58u; + var_i1 = var_l0; + var_i1 = !(var_i1); + if (var_i1) {goto var_B44;} + var_i0 = 18u; + var_i1 = var_l0; + var_i2 = 6u; + var_i1 = var_i1 <= var_i2; + if (var_i1) {goto var_B44;} + var_i0 = 19u; + var_i1 = var_l0; + var_i2 = 8u; + var_i1 = var_i1 <= var_i2; + if (var_i1) {goto var_B44;} + var_i0 = 17u; + var_B44:; + var_l1 = var_i0; + var_i0 = var_l8; + if (var_i0) { + var_i0 = 15u; + var_l1 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + } else { + var_i0 = var_l1; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l7; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l12 = var_i0; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 10536u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = var_l12; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 15u; + var_l1 = var_i0; + } else { + var_i0 = var_l3; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 8u; + var_i0 |= var_i1; + var_l2 = var_i0; + } else { + var_i0 = 14u; + var_i1 = var_l1; + var_i2 = var_l2; + var_i3 = 3u; + var_i2 &= var_i3; + var_i3 = 2u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + } + } + } + } + } + var_i0 = var_l1; + var_i1 = var_l4; + var_i2 = var_l7; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 514u; + var_i1 = var_l0; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_l3 = var_i0; + var_i0 = var_l0; + var_i1 = 3u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 4294967292u; + var_i0 &= var_i1; + var_i1 = var_l2; + var_i2 = var_l0; + var_i3 = 3u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = var_l0; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 4294967291u; + var_i0 &= var_i1; + var_l2 = var_i0; + var_i1 = 3u; + var_i0 &= var_i1; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + } + } + var_i0 = var_l0; + var_i1 = 5u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l8; + var_i2 = var_l1; + var_i3 = 19u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 8u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + var_i0 = var_l2; + var_i1 = 4294967291u; + var_i0 &= var_i1; + var_i1 = 4u; + var_i2 = 0u; + var_i3 = var_l0; + var_i4 = 6u; + var_i3 = var_i3 <= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 |= var_i1; + var_l1 = var_i0; + var_i1 = 4294967292u; + var_i0 &= var_i1; + var_i1 = 1u; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = var_l0; + var_i3 = 6u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l2; + } + var_l2 = var_i0; + } + goto var_L5; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l3; + var_l1 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = var_l0; + var_i1 = 41u; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 93u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = var_l0; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f43(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 |= var_i1; + var_l3 = var_i0; + } + var_i0 = 32u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L5; + } + var_i0 = var_l0; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g78; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 41u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g78; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g78 = var_i0; + } + var_i0 = var_l0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l2; + var_i2 = 4294967287u; + var_i1 &= var_i2; + var_l2 = var_i1; + var_i2 = 4u; + var_i1 &= var_i2; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 40u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g78; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g78 = var_i0; + var_i0 = var_l2; + var_i1 = 4294967291u; + var_i0 &= var_i1; + var_l2 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + } + var_i0 = 0u; + var_i1 = instance->w2c_g78; + var_i2 = var_l4; + var_i3 = instance->w2c_g0; + var_i4 = 2u; + var_i3 += var_i4; + var_i2 = var_i2 < var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B63;} + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = 1u; + var_i1 -= var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 61u; + var_i1 = var_i1 != var_i2; + if (var_i1) {goto var_B63;} + var_i0 = var_l4; + var_i1 = 2u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l7; + var_i2 = 43u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l7; + var_i3 = 93u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_B63:; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = var_l1; + var_i1 = var_l4; + var_i2 = 1u; + var_i1 -= var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 2u; + var_i1 |= var_i2; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l4; + var_i3 = instance->w2c_g0; + var_i2 = var_i2 > var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + var_l3 = var_i0; + var_i0 = var_l5; + var_i1 = instance->w2c_g4; + var_i2 = var_l4; + var_i1 -= var_i2; + var_i0 += var_i1; + var_i1 = var_l5; + var_i2 = var_l5; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l5 = var_i0; + } + var_i0 = var_l0; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_l5; + var_i2 = var_l5; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i0 = var_l2; + var_i1 = 3u; + var_i0 &= var_i1; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l3 = var_i0; + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + } else { + var_i0 = var_l2; + } + var_l2 = var_i0; + } + var_i0 = 32u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L5; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 2u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = var_l1; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = 25u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g78; + var_i0 = !(var_i0); + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_l4 = var_i1; + var_i2 = var_l0; + var_i3 = 38u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 124u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l3 = var_i0; + var_i0 = var_l2; + var_i1 = 3u; + var_i0 &= var_i1; + var_l2 = var_i0; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = var_l2; + var_i2 = var_l4; + var_i3 = var_l1; + var_i4 = 59u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l1; + var_i5 = 38u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l2; + } + var_l2 = var_i0; + } + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + } + goto var_L5; + var_B6:; + var_i0 = var_l11; + if (var_i0) { + var_i0 = 12512u; + instance->w2c_g32 = var_i0; + var_i0 = 12512u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12516u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12520u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12524u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12528u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12532u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f239(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0; + u64 var_l14 = 0; + v128 var_l15 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + u64 var_j0, var_j1, var_j2, var_j3, var_j4, var_j5; + var_i0 = instance->w2c_g7; + var_l11 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62320u; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l14 = var_j0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12536u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l14 = var_j0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + } else { + var_i0 = 0u; + } + } + var_l3 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l11; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_j1 = var_l14; + i64_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_j1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l6; + var_i0 = !(var_i0); + var_l6 = var_i0; + var_i0 = 1u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l4 = var_i0; + var_i1 = var_l0; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l8 = var_i1; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l8; + var_i3 = 42u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B9;} + var_i0 = var_l8; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + var_l13 = var_i0; + var_i1 = var_l8; + var_i2 = 126u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l13; + if (var_i0) { + var_i0 = 1u; + var_l10 = var_i0; + var_i0 = var_l4; + var_l0 = var_i0; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 126u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_L14: + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_L17: + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L17; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + } + } + goto var_B15; + } + var_i0 = var_l4; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i2 = 32u; + var_i1 |= var_i2; + var_l8 = var_i1; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B15;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i0 = var_l4; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) {goto var_B15;} + var_i0 = var_l0; + var_i1 = var_l7; + var_i2 = var_l10; + var_j3 = var_l14; + var_j4 = 1ull; + var_i5 = var_l4; + var_i6 = 65u; + var_i5 -= var_i6; + var_j5 = (u64)(var_i5); + var_j4 <<= (var_j5 & 63); + var_j3 &= var_j4; + var_j4 = 0ull; + var_i3 = var_j3 != var_j4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i0 = var_l8; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 16u; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i0 = !(var_i0); + if (var_i0) {goto var_L14;} + var_B15:; + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + } + } + var_i0 = var_l7; + var_i1 = var_l0; + var_i2 = var_l7; + var_i0 = var_i2 ? var_i0 : var_i1; + goto var_B9; + } + } + var_L22: + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B23;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B23;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i1 = var_l4; + var_i2 = var_l12; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B9;} + goto var_L22; + var_B23:; + var_i0 = var_l1; + var_B9:; + var_l0 = var_i0; + var_i1 = var_l1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = var_l1; + var_i0 -= var_i1; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 9509u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 2u); + var_l4 = var_i0; + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 97u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_j0 = var_l14; + var_j1 = 1ull; + var_i2 = var_l4; + var_i3 = 65u; + var_i2 -= var_i3; + var_j2 = (u64)(var_i2); + var_j1 <<= (var_j2 & 63); + var_j0 |= var_j1; + var_l14 = var_j0; + } + } + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 60u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + } + var_i0 = var_l6; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L28: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B29;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 32u; + var_i0 &= var_i1; + if (var_i0) {goto var_B29;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L28; + var_B29:; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l1; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 94u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 45u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = !(var_i0); + var_i1 = var_l2; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + var_i2 = 22u; + var_i3 = var_l1; + var_i4 = 1u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 58u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l5; + var_i2 = var_l2; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i0 = !(var_i0); + var_i1 = 3408u; + var_i2 = var_l1; + var_i3 = instance->w2c_g4; + var_i2 = w2c_highlights_f77(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i2; + var_i3 = 3408u; + var_i2 += var_i3; + var_i3 = 14240u; + var_i4 = 15u; + var_i5 = 55u; + var_i1 = w2c_highlights_f76(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i1; + var_i2 = 4u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 4u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = 22u; + var_i1 = 58u; + var_i2 = var_l0; + var_i3 = var_l0; + var_i4 = 4u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i5 = 0u; + var_i4 = (u32)((s32)var_i4 < (s32)var_i5); + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l5; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = 3408u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 0u; + var_i2 = var_l4; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i1 = 1869901671u; + var_i0 = var_i0 == var_i1; + var_l5 = var_i0; + var_i0 = 1u; + var_l3 = var_i0; + var_i0 = var_l2; + var_i1 = 18u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + var_i1 = 3408u; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 28516u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 1819042147u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 1702063205u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_l3 = var_i0; + } + var_i0 = var_l0; + var_i1 = 1819042147u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l5 = var_i0; + var_i0 = 1u; + var_l3 = var_i0; + } + } + var_i0 = var_l2; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 3984u); + var_i3 = 2u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = 35u; + var_i1 = 25u; + var_i2 = 32u; + var_i3 = 0u; + var_i4 = var_l2; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4) + 3728u); + var_i5 = 64u; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l2; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 3728u); + var_i4 = 128u; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 3984u); + var_i3 = 1u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + var_B4:; + var_i0 = var_l9; + if (var_i0) { + var_i0 = 12536u; + instance->w2c_g32 = var_i0; + var_i0 = 12536u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12540u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12544u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12552u; + var_j1 = var_l14; + i64_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_j1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f240(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + u64 var_j1, var_j2; + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 -= var_i1; + var_i1 = 8u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 7310870969309884259ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 18u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = 14496u; + var_i3 = 15u; + var_i4 = 54u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i1 = 4294967295u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_l2; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 6u; + goto var_Bfunc; + } + var_i0 = var_p1; + var_i1 = 2u; + var_i0 -= var_i1; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 29791u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p1; + var_i2 = var_p0; + var_i1 -= var_i2; + var_i2 = 3u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 55u; + goto var_Bfunc; + } + var_i0 = var_p1; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p1 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 14u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 55u; + goto var_Bfunc; + } + var_i0 = 58u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f241(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3984u); + var_i1 = 2u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f242(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0; + v128 var_l7 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g7; + var_l6 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12560u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + } else { + var_i0 = 0u; + } + var_i0 = w2c_highlights_f59(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_l3 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l6; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 2u); + var_i1 = 0u; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 2u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 0u; + var_i3 = instance->w2c_g3; + var_i4 = instance->w2c_g4; + var_i5 = 1u; + var_i4 += var_i5; + var_i3 = var_i3 > var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l2 = var_i1; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l4; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l4; + var_i5 = 33u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l4; + var_i4 = 42u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l4; + var_i5 = 33u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = w2c_highlights_f58(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f74(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 27u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + } + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f57(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 117u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 85u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 76u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_l0 = var_i1; + var_i2 = var_l1; + var_i1 -= var_i2; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = var_l1; + var_i1 -= var_i2; + var_i2 = 2u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i2 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 14453u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l2 = var_i1; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_i3 = 39u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f57(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = var_l0; + var_i0 = w2c_highlights_f240(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + w2c_highlights_f50(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f241(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3984u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = var_l2; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_i3 = 62u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = 25u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L20: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B21;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i1 = w2c_highlights_f241(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 34u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 39u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i1 = w2c_highlights_f43(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 |= var_i1; + if (var_i0) {goto var_B21;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L20; + var_B21:; + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + var_B4:; + var_i0 = var_l5; + if (var_i0) { + var_i0 = 12560u; + instance->w2c_g32 = var_i0; + var_i0 = 12560u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f243(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0; + u64 var_l4 = 0; + v128 var_l5 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + u64 var_j0, var_j1, var_j2; + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = 14688u; + var_i3 = 31u; + var_i4 = 104u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = var_p2; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 18u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + goto var_Bfunc; + } + var_i0 = var_l3; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = 17u; + goto var_Bfunc; + } + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 -= var_i1; + var_i1 = 7u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 72057594037927935ull; + var_j0 &= var_j1; + var_l4 = var_j0; + var_j1 = 32778015450816886ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l4; + var_j2 = 32758215669408118ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 17u; + goto var_Bfunc; + } + } + var_i0 = 60u; + goto var_Bfunc; + } + var_i0 = 4294967295u; + var_i1 = var_l3; + var_i2 = var_l3; + var_i3 = 1024u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f244(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3984u); + var_i1 = 4u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f245(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0; + v128 var_l9 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = instance->w2c_g7; + var_l7 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12568u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l6 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } + } else { + var_i0 = 0u; + } + } + var_l1 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l7; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l5; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 10799u; + var_i1 = 12074u; + var_i2 = 4u; + w2c_highlights_f71(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 10812u; + var_i1 = 15914u; + var_i2 = 5u; + w2c_highlights_f71(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 34u; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 39u; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 96u; + var_i1 = 1u; + var_i2 = 44u; + w2c_highlights_f55(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = var_l3; + var_i1 -= var_i2; + var_l5 = var_i1; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 120u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l5; + var_i3 = 3u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l3; + var_i3 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 3421794u; + var_i3 ^= var_i4; + var_i4 = 8u; + var_i3 <<= (var_i4 & 31); + var_i3 = !(var_i3); + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 34u; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l8 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = var_l0; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l2; + var_i2 = 1u; + var_i0 = w2c_highlights_f243(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = 4294967295u; + var_i1 = var_l3; + var_i2 = var_l2; + var_i3 = 0u; + var_i1 = w2c_highlights_f243(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l0; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_i1 = var_l4; + var_i2 = var_l4; + var_i3 = 1u; + var_i2 = var_i2 != var_i3; + var_i3 = var_l0; + var_i4 = 255u; + var_i3 &= var_i4; + var_l0 = var_i3; + var_i4 = 56u; + var_i3 = var_i3 != var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + } else { + var_i0 = var_l4; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 15u; + } else { + var_i0 = 23u; + var_i1 = 55u; + var_i2 = var_l5; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l0 = var_i0; + } else { + var_i0 = var_l4; + if (var_i0) { + var_i0 = 55u; + var_i1 = 23u; + var_i2 = var_l4; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_l1 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = var_l5; + var_i3 = 58u; + var_i2 = var_i2 != var_i3; + var_i3 = var_l1; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + } else { + var_i0 = var_l5; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 55u; + var_i1 = 16u; + var_i2 = 14u; + var_i3 = var_l1; + var_i4 = 1u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 29u; + } else { + var_i0 = var_l3; + var_i1 = var_l2; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 6u; + } else { + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 55u; + } else { + var_i0 = 23u; + var_i1 = 58u; + var_i2 = var_l5; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l8; + var_i4 = 1u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 58u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + } + var_l0 = var_i0; + } + } + } + var_i0 = var_l0; + var_i1 = var_l3; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = var_l0; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 41u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l4; + var_i4 = 1u; + var_i3 = var_i3 != var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l2; + var_i4 = 58u; + var_i3 = var_i3 == var_i4; + var_l0 = var_i3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + var_i1 = 0u; + var_i2 = var_l0; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l5; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = 25u; + var_i1 = 35u; + var_i2 = var_l2; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = 46u; + var_i0 = var_i0 != var_i1; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f244(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3984u); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = var_l2; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l2; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = 25u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l6; + if (var_i0) { + var_i0 = 12568u; + instance->w2c_g32 = var_i0; + var_i0 = 12568u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12572u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f246(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3984u); + var_i1 = 6u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f247(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f246(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + goto var_L0; + var_B1:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f248(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_L0: + var_i0 = var_p1; + var_i1 = var_l3; + var_i2 = 1u; + var_i1 += var_i2; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p2; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = var_p0; + var_i0 -= var_i1; + goto var_Bfunc; + } else { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + goto var_L0; + } + UNREACHABLE; + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f249(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0; + u64 var_l8 = 0; + v128 var_l9 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + u64 var_j1, var_j2, var_j3, var_j4; + var_i0 = instance->w2c_g7; + var_l7 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12576u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l6 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } + } else { + var_i0 = 0u; + } + } + var_l4 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l7; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = var_l1; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 34u; + var_i1 = 1u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 32u; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + w2c_highlights_f247(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 47u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f246(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + var_i1 = var_l1; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f247(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 48u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_l0 = var_i0; + var_l4 = var_i0; + var_i0 = var_l3; + var_i1 = 8u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 8u; + var_i2 = 4294967288u; + var_i3 = var_l0; + var_i4 = var_l1; + var_i5 = 91u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l1; + var_i6 = 123u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i1 = 0u; + var_i2 = var_l1; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 94u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i1 = 8u; + var_i0 += var_i1; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3984u); + var_i1 = 128u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l1; + var_i4 = 126u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l2; + var_i5 = 64u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 46u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 34u; + var_i1 = 1u; + var_i2 = 46u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 33u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f247(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 7u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f247(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 48u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i1 = var_l2; + var_i2 = 95u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 40u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f247(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + w2c_highlights_f247(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_l5 = var_i0; + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 43u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 45u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 24u; + var_i1 = var_l0; + var_i2 = var_l5; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 60u; + var_i1 = var_l0; + var_i2 = var_l5; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 38u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = var_l0; + var_i1 -= var_i2; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 17u; + var_i1 = var_l0; + var_i2 = var_l5; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = var_l0; + var_i1 -= var_i2; + var_i2 = 1u; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 29u; + var_i1 = 16u; + var_i2 = var_l2; + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l0; + var_i2 = var_l5; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = var_l5; + var_i2 = 15072u; + var_i3 = 15u; + var_i4 = 54u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l2; + goto var_B28; + } + var_i0 = var_l5; + var_i1 = var_l0; + var_i0 -= var_i1; + var_l2 = var_i0; + var_i1 = 6u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 18u; + var_i1 = var_l0; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 1814914665u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i2 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 4u); + var_i3 = 29797u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B28;} + } + var_i0 = var_l2; + var_i1 = 7u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 275u; + var_i1 = 531u; + var_i2 = 4294967295u; + var_i3 = var_l0; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 72057594037927935ull; + var_j3 &= var_j4; + var_l8 = var_j3; + var_j4 = 28538298614310244ull; + var_i3 = var_j3 == var_j4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_j2 = var_l8; + var_j3 = 28554735403623780ull; + var_i2 = var_j2 == var_j3; + var_i0 = var_i2 ? var_i0 : var_i1; + goto var_B28; + } + var_i0 = var_l2; + var_i1 = 8u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 18u; + var_i1 = var_l0; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 8387228823428884599ull; + var_i1 = var_j1 == var_j2; + if (var_i1) {goto var_B28;} + } + var_i0 = var_l2; + var_i1 = 9u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 787u; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 8u); + var_i2 = 100u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 8245918730100827492ull; + var_i2 = var_j2 == var_j3; + var_i1 &= var_i2; + if (var_i1) {goto var_B28;} + } + var_i0 = 4294967295u; + var_B28:; + var_l2 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l2; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_i1 = var_l3; + var_i2 = var_l4; + var_i3 = var_l3; + var_i4 = 8u; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = var_l2; + var_i1 = 255u; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = var_l5; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = 6u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 23u; + var_i1 = 55u; + var_i2 = 58u; + var_i3 = 15u; + var_i4 = var_l3; + var_i5 = 2u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l3; + var_i4 = 3u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l3; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 0u; + var_l3 = var_i1; + var_i1 = var_l0; + var_i2 = var_l5; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l0; + var_i1 = var_l5; + var_i2 = 47u; + var_i0 = w2c_highlights_f248(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + if (var_i0) { + var_i0 = 55u; + var_i1 = 23u; + var_i2 = var_l1; + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l0; + var_i2 = var_l0; + var_i3 = var_l2; + var_i2 += var_i3; + var_l0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 35u; + var_i1 = var_l0; + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_l0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + } + var_i0 = var_l1; + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 55u; + } else { + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l0; + var_i1 = var_l5; + var_i2 = 46u; + var_i0 = w2c_highlights_f248(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + } + if (var_i0) { + var_i0 = 23u; + } else { + var_i0 = var_l4; + if (var_i0) { + var_i0 = 14u; + } else { + var_i0 = var_l5; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 42u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = var_l0; + var_i1 -= var_i2; + var_i2 = 2u; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 60u; + } else { + var_i0 = 58u; + var_i1 = 25u; + var_i2 = var_l1; + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + } + var_i1 = var_l0; + var_i2 = var_l5; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l6; + if (var_i0) { + var_i0 = 12576u; + instance->w2c_g32 = var_i0; + var_i0 = 12576u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12580u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f250(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + var_L0: + var_i0 = var_p0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L0; + } + var_i0 = var_p0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 91u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l1; + var_i2 = 30u; + var_i1 = var_i1 > var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 4294967295u; + goto var_Bfunc; + } + var_i0 = var_l1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f251(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = var_p0; + var_i1 = 2u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i1 = instance->w2c_g4; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p1; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 12416u; + var_i1 = 93u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12417u; + var_i1 = 61u; + var_i2 = var_p0; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_p0; + var_i1 = 12417u; + var_i0 += var_i1; + var_i1 = 93u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l2; + instance->w2c_g26 = var_i0; + var_i0 = var_p1; + instance->w2c_g29 = var_i0; + var_i0 = w2c_highlights_f69(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 12416u; + var_i1 = var_l2; + var_i2 = var_p1; + w2c_highlights_f62(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + instance->w2c_g26 = var_i0; + var_i0 = 0u; + instance->w2c_g29 = var_i0; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f252(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + var_L0: + var_i0 = var_p0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + } + var_i0 = var_l1; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f253(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0; + v128 var_l5 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L0: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + } + var_i0 = 62u; + var_i1 = 125u; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i2; + var_i3 = 60u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_L2: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B3;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B3;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l0; + var_i2 = var_l1; + var_i3 = var_l2; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = var_l1; + var_i1 = var_l4; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 -= var_i1; + var_l0 = var_i0; + var_i0 = !(var_i0); + if (var_i0) {goto var_B3;} + } + goto var_L2; + var_B3:; + var_i0 = 47u; + var_i1 = 58u; + var_i2 = var_l2; + var_i3 = 60u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f254(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = 34u; + var_i2 = 92u; + var_i3 = 36u; + var_i0 = w2c_highlights_f8(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + goto var_B1; + } + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_l2; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 45u; + var_i1 = var_l1; + var_i2 = var_l1; + var_i2 = w2c_highlights_f51(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + goto var_L0; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f252(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f253(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + } else { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L0; + var_B1:; + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f255(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4240u); + var_i2 = 1u; + var_i1 &= var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f256(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0; + v128 var_l10 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g7; + var_l8 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12584u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l7 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + } + } else { + var_i0 = 0u; + } + } + var_l1 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l8; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l5; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = 0u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f254(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 4294967295u; + var_l0 = var_i0; + var_i0 = var_l4; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f250(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + } + var_i0 = var_l0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 4u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 4u; + w2c_highlights_f251(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f250(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l4; + var_i1 = 44u; + w2c_highlights_f251(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l5; + var_i1 = 1u; + var_i2 = var_l2; + var_i2 = w2c_highlights_f254(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f252(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + } + if (var_i0) { + w2c_highlights_f253(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 45u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_l3; + var_i2 = var_l3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f255(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f255(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L23: + var_i0 = 45u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B24;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f255(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B24;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L23; + var_B24:; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = var_l3; + if (var_i0) { + var_i0 = var_l2; + var_i1 = var_l0; + var_i2 = 15296u; + var_i3 = 15u; + var_i4 = 71u; + var_i0 = w2c_highlights_f75(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i0 = 21u; + var_i1 = 58u; + var_i2 = 6u; + var_i3 = 0u; + var_i4 = var_l2; + var_i5 = var_l0; + var_i4 = w2c_highlights_f82(instance, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l1; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l4; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l6; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 3u; + var_i1 = var_l9; + var_i2 = var_l4; + var_i3 = 5u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 3408u; + var_i1 = var_l2; + var_i2 = var_l0; + var_i1 = w2c_highlights_f77(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 3408u; + var_i1 += var_i2; + var_i2 = 15296u; + var_i3 = 15u; + var_i4 = 71u; + var_i0 = w2c_highlights_f75(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i0 = var_l0; + var_i1 = var_l2; + var_i0 -= var_i1; + var_l1 = var_i0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 3408u; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 26217u; + var_i0 = var_i0 == var_i1; + goto var_B26; + } + var_i0 = var_l1; + var_i1 = 5u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 3408u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 1818847351u; + var_i0 = var_i0 == var_i1; + var_i1 = 3412u; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 101u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + goto var_B26; + } + var_i0 = var_l1; + var_i1 = 6u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 3408u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 1702063205u; + var_i0 = var_i0 == var_i1; + var_i1 = 3412u; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 26217u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + goto var_B26; + } + var_i0 = 0u; + var_B26:; + var_l6 = var_i0; + var_i0 = var_l4; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i0 = 18u; + var_i1 = 20u; + var_i2 = 14u; + var_i3 = var_l4; + var_i4 = 2u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l4; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_i1 = var_l2; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + var_B4:; + var_i0 = var_l7; + if (var_i0) { + var_i0 = 12584u; + instance->w2c_g32 = var_i0; + var_i0 = 12584u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12588u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12592u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12596u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f257(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i0 = var_i0 == var_i1; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = var_p0; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 -= var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 92u; + var_i1 = var_i1 != var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 13u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + goto var_L0; + var_B1:; + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f258(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 0u; + w2c_highlights_f259(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f259(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, var_l8 = 0, + var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7; + u64 var_j2, var_j3, var_j4, var_j5, var_j6; + v128 var_o0, var_o1; + var_i0 = instance->w2c_g7; + var_l13 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12600u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l12 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + } + var_l4 = var_i0; + } + var_i0 = var_l8; + if (var_i0) { + var_i0 = var_l8; + var_i1 = 0u; + var_i2 = var_l8; + var_i3 = 24u; + var_i4 = 44u; + var_i5 = var_l8; + var_i6 = 39u; + var_i5 = var_i5 == var_i6; + var_i3 = var_i5 ? var_i3 : var_i4; + var_i4 = instance->w2c_g4; + var_i5 = 1u; + var_i2 = w2c_highlights_f56(instance, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + } + var_i0 = var_l11; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = w2c_highlights_f257(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l11 = var_i0; + var_i0 = 27u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + var_L5: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l13; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = instance->w2c_g4; + var_i4 = 10u; + var_i5 = 0u; + var_i6 = 1u; + var_i2 = w2c_highlights_f5(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = instance->w2c_g4; + var_i2 = var_i2 >= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B6;} + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l10 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_i0 = var_l7; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l10; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l6; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l6; + var_i5 = 33u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L5; + } + var_i0 = var_l7; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l10; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l6; + var_i4 = 42u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l3; + var_i5 = 3u; + var_i4 += var_i5; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 47u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i4 = var_l6; + var_i5 = 33u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L5; + } + var_i0 = var_l1; + var_i0 = !(var_i0); + var_i1 = var_l7; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l3; + var_i0 = w2c_highlights_f257(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l11 = var_i0; + var_i0 = var_l3; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f74(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 27u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 1u; + var_l1 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L5; + } + var_i0 = 1u; + var_i1 = instance->w2c_g4; + var_l9 = var_i1; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i1; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_i3 = 39u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B12;} + var_i0 = 258u; + var_i1 = var_l2; + var_i2 = 82u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l9; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i2; + var_i3 = 34u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B12;} + var_i0 = var_l2; + var_i1 = 117u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 56u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 3u; + var_i1 = var_l9; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i1; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 39u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B12;} + var_i0 = 260u; + var_i1 = var_l1; + var_i2 = 82u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l9; + var_i3 = 3u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 34u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B12;} + } + var_i0 = var_l2; + var_i1 = 76u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 117u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = 85u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 82u; + var_i1 = var_i1 == var_i2; + var_l2 = var_i1; + var_i2 = var_l9; + var_i3 = 2u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 34u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l1; + var_i3 = 34u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 39u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 259u; + var_i1 = 2u; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + goto var_B12; + } + var_i0 = 0u; + var_B12:; + var_l2 = var_i0; + if (var_i0) { + var_i0 = var_l3; + var_i1 = var_l2; + var_i2 = 255u; + var_i1 &= var_i2; + var_i2 = 1u; + var_i1 -= var_i2; + var_i0 += var_i1; + var_l5 = var_i0; + var_i0 = var_l2; + var_i1 = 256u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 1u; + var_i0 += var_i1; + var_l6 = var_i0; + var_l1 = var_i0; + var_L19: + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B18;} + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_B20;} + var_i0 = var_l2; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 32u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = 92u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = var_l6; + var_i2 -= var_i3; + var_i3 = 16u; + var_i2 = var_i2 >= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B18;} + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L19; + var_B20:; + var_i0 = var_l1; + var_i1 = var_l6; + var_i0 -= var_i1; + var_l8 = var_i0; + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L21: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 41u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_i8x16_eq(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_l1 = var_i0; + var_i0 = instance->w2c_g3; + var_i1 = instance->w2c_g4; + var_i0 -= var_i1; + var_l2 = var_i0; + var_i1 = 16u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i2 = var_l2; + var_i1 <<= (var_i2 & 31); + var_i2 = 1u; + var_i1 -= var_i2; + var_i0 &= var_i1; + var_l1 = var_i0; + } + var_L24: + var_i0 = var_l1; + if (var_i0) { + var_i0 = instance->w2c_g3; + var_i1 = instance->w2c_g4; + var_i2 = var_l1; + var_i2 = I32_CTZ(var_i2); + var_i1 += var_i2; + var_l9 = var_i1; + var_i2 = var_l8; + var_i3 = 2u; + var_i2 += var_i3; + var_i1 += var_i2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l5 = var_i0; + var_L27: + var_i0 = var_l5; + var_i1 = var_l8; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l5; + var_i0 += var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_l5; + var_i2 = var_l6; + var_i1 += var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = var_l5; + var_i1 = 1u; + var_i0 += var_i1; + var_l5 = var_i0; + goto var_L27; + } + } else { + var_i0 = 1u; + } + var_i1 = var_l8; + var_i2 = var_l9; + var_i1 += var_i2; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l9; + var_i1 = var_l8; + var_i2 = 2u; + var_i1 += var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + goto var_B16; + } + } + var_i0 = var_l1; + var_i1 = var_l1; + var_i2 = 1u; + var_i1 -= var_i2; + var_i0 &= var_i1; + var_l1 = var_i0; + goto var_L24; + } + var_i0 = var_l2; + var_i1 = 16u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 16u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L21; + } + } + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 12416u; + var_i1 = 41u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12417u; + var_i1 = var_l6; + var_i2 = var_l8; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l8; + var_i1 = 12417u; + var_i0 += var_i1; + var_i1 = 34u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12416u; + var_i1 = var_l8; + var_i2 = 2u; + var_i1 += var_i2; + var_i2 = 44u; + w2c_highlights_f62(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + goto var_B16; + var_B18:; + } + var_i0 = var_l5; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = var_l5; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = 24u; + var_i4 = 44u; + var_i5 = var_l2; + var_i6 = 39u; + var_i5 = var_i5 == var_i6; + var_i3 = var_i5 ? var_i3 : var_i4; + var_i4 = var_l3; + var_i5 = 1u; + var_i2 = w2c_highlights_f56(instance, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_B16:; + var_l8 = var_i0; + var_i0 = 1u; + var_l1 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L5; + } + var_i0 = var_l7; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = var_l3; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g0; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = var_l6; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l1 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L5; + } + var_i0 = var_p0; + var_i1 = var_l6; + var_i2 = var_l3; + var_i1 -= var_i2; + var_i2 = 8u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = 18u; + var_i2 = var_l3; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 7310870969309884259ull; + var_i2 = var_j2 == var_j3; + if (var_i2) {goto var_B36;} + var_i1 = 56u; + var_i2 = var_l3; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 8385476227730860131ull; + var_i2 = var_j2 == var_j3; + if (var_i2) {goto var_B36;} + } + var_i1 = var_l3; + var_i2 = var_l6; + var_i3 = 15552u; + var_i4 = 31u; + var_i5 = 96u; + var_i1 = w2c_highlights_f76(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_B36:; + var_l1 = var_i1; + var_i2 = 0u; + var_i1 = (u32)((s32)var_i1 < (s32)var_i2); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 56u; + var_i1 = 17u; + var_i2 = 17u; + var_i3 = var_l3; + var_i4 = var_l6; + var_i5 = 16320u; + var_i6 = 7u; + var_i7 = 32u; + var_i3 = w2c_highlights_f76(instance, var_i3, var_i4, var_i5, var_i6, var_i7); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = var_l3; + var_j4 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_j5 = 7305798977753210719ull; + var_i4 = var_j4 == var_j5; + var_i5 = var_l3; + var_j5 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i5)); + var_j6 = 7234314139130355551ull; + var_i5 = var_j5 == var_j6; + var_i4 |= var_i5; + var_i5 = var_l3; + var_i5 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i5) + 8u); + var_i6 = 24415u; + var_i5 = var_i5 == var_i6; + var_i4 &= var_i5; + var_i5 = var_l6; + var_i6 = var_l3; + var_i5 -= var_i6; + var_l2 = var_i5; + var_i6 = 10u; + var_i5 = var_i5 == var_i6; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l3; + var_i3 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 8u); + var_i4 = 1600091235u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l3; + var_j4 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_j5 = 7598263560299503455ull; + var_i4 = var_j4 == var_j5; + var_i3 &= var_i4; + var_i4 = var_l3; + var_i4 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4) + 8u); + var_i5 = 1600087406u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l3; + var_j5 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i5)); + var_j6 = 7596568070587309919ull; + var_i5 = var_j5 == var_j6; + var_i4 &= var_i5; + var_i3 |= var_i4; + var_i4 = var_l2; + var_i5 = 12u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l3; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 8u); + var_i3 = 7626612u; + var_i2 ^= var_i3; + var_i3 = 8u; + var_i2 <<= (var_i3 & 31); + var_i2 = !(var_i2); + var_i3 = var_l3; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 7954894357178643811ull; + var_i3 = var_j3 == var_j4; + var_i2 &= var_i3; + var_i3 = var_l2; + var_i4 = 11u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + } + var_i0 = var_l1; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l1; + var_i1 = 255u; + var_i0 &= var_i1; + var_l4 = var_i0; + var_i0 = var_l1; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l2 = var_i0; + if (var_i0) { + var_i0 = var_l2; + var_l5 = var_i0; + } + } else { + var_i0 = var_l6; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l9 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l9; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = var_l5; + if (var_i0) { + var_i0 = var_l1; + if (var_i0) { + var_i0 = 23u; + var_l4 = var_i0; + } else { + var_i0 = 57u; + var_i1 = 23u; + var_i2 = 55u; + var_i3 = var_l5; + var_i4 = 3u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l5; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + } + } else { + var_i0 = var_p0; + var_i1 = var_l9; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 3947580u; + var_i1 ^= var_i2; + var_i2 = 8u; + var_i1 <<= (var_i2 & 31); + var_i1 = !(var_i1); + var_i2 = instance->w2c_g3; + var_i3 = var_l9; + var_i4 = 3u; + var_i3 += var_i4; + var_i2 = var_i2 >= var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + var_i1 = var_l2; + var_i2 = 40u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 16u; + var_i1 = 14u; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l4; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 29u; + } else { + var_i0 = var_l4; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 23u; + var_i1 = 55u; + var_i2 = var_l1; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l2; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 22u; + } else { + var_i0 = var_l3; + var_i1 = var_l6; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 6u; + } else { + var_i0 = 55u; + var_i1 = 58u; + var_i2 = var_l3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + } + } + var_l4 = var_i0; + } + } + var_i0 = var_l4; + var_i1 = var_l3; + var_i2 = var_l6; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l1 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L5; + } + var_i0 = var_l7; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l10; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l7; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_L49: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B50;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B51;} + var_i0 = var_l4; + var_i0 = !(var_i0); + var_i1 = var_l2; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l4 = var_i0; + goto var_B51; + } + var_i0 = var_l2; + var_i1 = 43u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 32u; + var_i1 |= var_i2; + var_l1 = var_i1; + var_i2 = 101u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 112u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B50;} + var_B51:; + var_i0 = var_l2; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L49; + var_B50:; + var_i0 = 24u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l1 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L5; + } + var_i0 = var_l7; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l1 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_i1 = var_l5; + var_i2 = var_l7; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l7; + var_i4 = 125u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + goto var_L5; + } + var_i0 = var_l7; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l10; + var_i4 = 58u; + var_i3 = var_i3 == var_i4; + var_l2 = var_i3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + var_i1 = 0u; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = 1u; + var_l1 = var_i0; + goto var_L5; + } else { + var_i0 = var_l7; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l10; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_l2 = var_i0; + var_i1 = var_l6; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l10; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 2u; + var_i3 = var_l2; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + } + var_l4 = var_i0; + var_i0 = 1u; + } else { + var_i0 = var_l7; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l2 = var_i0; + var_i1 = var_l7; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_i1 = var_l5; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i0 = 1u; + } else { + var_i0 = var_l7; + var_i0 = w2c_highlights_f241(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = var_l7; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l10; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 42u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 1u; + var_l4 = var_i0; + } else { + var_i0 = var_l10; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l7; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } else { + var_i0 = var_l10; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l7; + var_i2 = var_l10; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l7; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l7; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + } + } + var_i0 = 25u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L64: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B65;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l2; + var_i2 = w2c_highlights_f241(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4240u); + var_i2 = 1u; + var_i1 >>= (var_i2 & 31); + var_i2 = 1u; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B65;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L64; + var_B65:; + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 1u; + } + } + } + var_l1 = var_i0; + goto var_L5; + } + UNREACHABLE; + var_B6:; + var_i0 = var_l12; + if (var_i0) { + var_i0 = 12600u; + instance->w2c_g32 = var_i0; + var_i0 = 12600u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12604u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12608u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12612u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12616u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f260(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, + var_l16 = 0, var_l17 = 0, var_l18 = 0, var_l19 = 0, var_l20 = 0, var_l21 = 0, var_l22 = 0; + v128 var_l23 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + u64 var_j2, var_j3, var_j4; + var_i0 = instance->w2c_g7; + var_l21 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l17 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62340u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l15 = var_i0; + var_i0 = 62344u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l14 = var_i0; + var_i0 = 62348u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + var_i0 = 1u; + var_l14 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12624u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l17 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l13 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + var_l12 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 32u); + var_l15 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 36u); + var_l14 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 40u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + } + } else { + var_i0 = 0u; + } + } + var_l7 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l21; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l17; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62340u; + var_i1 = var_l15; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62344u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62348u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l7; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l8 = var_i0; + goto var_B4; + } + var_i0 = var_l7; + var_i1 = 255u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = var_l8; + var_i1 = instance->w2c_g4; + var_i2 = var_l8; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = var_l11; + var_i0 = !(var_i0); + var_i1 = var_l7; + var_i2 = 8u; + var_i1 >>= (var_i2 & 31); + var_i0 &= var_i1; + var_l9 = var_i0; + var_L9: + var_i0 = var_l9; + var_i1 = var_l1; + var_i2 = 4u; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 34u; + var_i2 = 123u; + var_i3 = 125u; + var_i0 = w2c_highlights_f8(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l3; + } + } else { + var_i0 = instance->w2c_g3; + } + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_l3; + var_i2 = 125u; + var_i3 = 34u; + var_i4 = var_l1; + var_i5 = 4u; + var_i4 = var_i4 >= var_i5; + var_l16 = var_i4; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l1; + var_i4 = 1u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l1; + var_i5 = 4u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_l0 = var_i3; + var_i4 = var_l0; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = var_l16; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l0 = var_i1; + var_i2 = 125u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + goto var_B8; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + } + var_i0 = var_l1; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + } + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 1u; + var_i3 = var_l1; + var_i4 = 3u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l8 = var_i0; + goto var_B10; + } + var_i0 = var_l0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = var_l0; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = 3u; + var_i1 = var_l8; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 -= var_i3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l0 = var_i2; + var_i3 = 10u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 13u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = instance->w2c_g4; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + goto var_L9; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + var_i0 = var_l0; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 -= var_i2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + goto var_B8; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + UNREACHABLE; + var_B10:; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l8; + var_B8:; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_l8 = var_i0; + var_i0 = var_l7; + var_i1 = 256u; + var_i0 = var_i0 < var_i1; + var_i1 = var_l7; + var_i2 = 4u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l13; + var_l7 = var_i0; + var_i0 = 0u; + var_l11 = var_i0; + var_i0 = 0u; + var_l13 = var_i0; + } + var_i0 = var_l1; + var_i0 = !(var_i0); + var_i1 = var_l7; + var_i2 = 4u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l11 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + } + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l7; + var_l13 = var_i0; + var_i0 = 1u; + var_l11 = var_i0; + var_i0 = 0u; + var_l12 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l1; + var_i0 = !(var_i0); + var_i1 = var_l7; + var_i2 = 255u; + var_i1 &= var_i2; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l7; + } + } + var_l7 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_l18 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l18; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f81(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l15 = var_i0; + var_i0 = 1u; + var_l14 = var_i0; + } + var_i0 = var_l18; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l1; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l1; + var_i4 = 42u; + var_i3 = var_i3 == var_i4; + var_i4 = instance->w2c_g4; + var_i5 = 3u; + var_i4 += var_i5; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 47u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l14; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 27u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l14 = var_i0; + goto var_L3; + } + var_i0 = var_l14; + var_l1 = var_i0; + var_i0 = 0u; + var_l14 = var_i0; + var_i0 = var_l6; + var_i1 = 1u; + var_i0 &= var_i1; + var_l19 = var_i0; + var_i0 = var_l6; + var_i1 = 4294967294u; + var_i0 &= var_i1; + var_l6 = var_i0; + var_i0 = instance->w2c_g4; + var_l20 = var_i0; + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 0u; + var_l16 = var_i0; + var_L32: + var_i0 = var_l9; + var_i1 = var_l20; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l22 = var_i0; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l16; + var_i1 = 1u; + var_i0 |= var_i1; + } else { + var_i0 = var_l22; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l16; + var_i1 = 2u; + var_i0 |= var_i1; + } else { + goto var_B33; + } + } + var_l16 = var_i0; + var_i0 = var_l9; + var_i1 = 1u; + var_i0 += var_i1; + var_l9 = var_i0; + var_i1 = 2u; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L32;} + var_B33:; + var_i0 = 0u; + var_i1 = var_l9; + var_i2 = var_l20; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 != var_i2; + if (var_i1) {goto var_B31;} + var_i0 = var_l16; + var_i1 = var_l9; + var_i2 = 4u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + var_i1 = 256u; + var_i0 |= var_i1; + var_B31:; + var_l9 = var_i0; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l9; + var_i2 = 4u; + var_i1 >>= (var_i2 & 31); + var_i2 = 3u; + var_i1 &= var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 3u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 2u; + var_i1 = 1u; + var_i2 = var_l9; + var_i3 = 2u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_i1 = var_l9; + var_i2 = 1u; + var_i1 &= var_i2; + var_i2 = 8u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + var_l7 = var_i0; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l8 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 39u; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 58u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l9 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l5; + if (var_i0) { + var_i0 = 4294967295u; + } else { + var_i0 = var_l2; + var_i1 = var_l9; + var_i2 = 15904u; + var_i3 = 31u; + var_i4 = 112u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = 4294967295u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 19u; + var_i1 = var_l9; + var_i2 = var_l2; + var_i1 -= var_i2; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 435710945399ull; + var_j2 ^= var_j3; + var_j3 = 24ull; + var_j2 <<= (var_j3 & 63); + var_i2 = !(var_j2); + var_i1 &= var_i2; + if (var_i1) {goto var_B42;} + } + var_i0 = var_l1; + var_B42:; + } + var_l1 = var_i0; + var_i1 = 1023u; + var_i0 = (u32)((s32)var_i0 > (s32)var_i1); + if (var_i0) { + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = var_l1; + var_i1 = 4294967295u; + var_i2 = var_l6; + var_i3 = 4294967294u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l1; + var_i2 = 1024u; + var_i1 &= var_i2; + if (var_i1) {goto var_B45;} + var_i0 = var_l1; + var_i1 = 2048u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 4294967295u; + var_i2 = var_l3; + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + goto var_B45; + } + var_i0 = var_l1; + var_i1 = 4096u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l19; + var_i2 = var_l3; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 1u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 62u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i3 = var_l3; + var_i3 = !(var_i3); + var_i4 = var_l3; + var_i5 = 59u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l3; + var_i5 = 10u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l3; + var_i6 = 13u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i5 = var_l3; + var_i6 = 123u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i3 |= var_i4; + var_i2 |= var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B45;} + var_i0 = 4294967295u; + goto var_B45; + } + var_i0 = 4294967295u; + var_i1 = var_l3; + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + if (var_i1) {goto var_B45;} + var_i0 = var_l0; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 4294967295u; + var_i1 = var_l0; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l3 = var_i1; + var_i2 = 29545u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = 29537u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l3; + var_i3 = 28265u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B45;} + } + var_i0 = 4294967295u; + var_i1 = var_l1; + var_i2 = var_l0; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 1752459639u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 4u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = w2c_highlights_f47(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = !(var_i3); + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_B45:; + var_l1 = var_i0; + } + var_i0 = var_l1; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = 3u; + var_i1 = var_l1; + var_i2 = 8u; + var_i1 >>= (var_i2 & 31); + var_i2 = 3u; + var_i1 &= var_i2; + var_i2 = var_l9; + var_i3 = var_l2; + var_i2 -= var_i3; + var_i3 = 6u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 109304575259763ull; + var_j3 ^= var_j4; + var_j4 = 16ull; + var_j3 <<= (var_j4 & 63); + var_i3 = !(var_j3); + var_i2 &= var_i3; + var_i3 = var_l10; + var_i4 = 2u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l10 = var_i0; + var_i0 = var_l6; + var_i1 = 2u; + var_i0 |= var_i1; + var_i1 = var_l6; + var_i2 = var_l1; + var_i3 = 2048u; + var_i2 &= var_i3; + var_i3 = 0u; + var_i4 = var_l6; + var_i5 = 2u; + var_i4 = var_i4 < var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i1 = var_l19; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = var_l1; + var_i3 = 19u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = var_l1; + var_i1 = 255u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i1 = 56u; + var_i0 = var_i0 == var_i1; + var_l4 = var_i0; + } else { + var_i0 = var_l15; + if (var_i0) { + var_i0 = 1u; + var_i1 = 58u; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } else { + var_i0 = var_l10; + if (var_i0) { + var_i0 = 55u; + var_i1 = 23u; + var_i2 = var_l10; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_l4 = var_i2; + var_i3 = var_l10; + var_i4 = 3u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 46u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = 0u; + var_i1 = var_l10; + var_i2 = var_l0; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 46u; + var_i2 = var_i2 != var_i3; + var_i3 = var_l4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l10 = var_i0; + } else { + var_i0 = var_l5; + if (var_i0) { + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 16u; + } else { + var_i0 = 55u; + var_i1 = 29u; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_l4 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l1 = var_i0; + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 15u; + var_i1 = 14u; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } else { + var_i0 = var_l2; + var_i1 = var_l9; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 6u; + } else { + var_i0 = 55u; + var_i1 = 58u; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_l4 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l1 = var_i0; + } + } + } + } + } + var_i0 = var_l1; + var_i1 = var_l2; + var_i2 = var_l9; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l15; + var_i2 = var_l0; + var_i3 = 91u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 0u; + var_i2 = var_l0; + var_i3 = 93u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l15 = var_i0; + var_i0 = var_l6; + var_i1 = var_l0; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_l1 = var_i1; + var_i2 = var_l0; + var_i3 = 125u; + var_i2 = var_i2 == var_i3; + var_l5 = var_i2; + var_i3 = var_l0; + var_i4 = 93u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_l6 = var_i0; + var_i1 = 2u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l6; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = var_l6; + var_i2 = var_l1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i1 = 2u; + var_i0 -= var_i1; + var_i1 = var_l1; + var_i2 = var_l5; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l11; + if (var_i0) { + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4240u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l12; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_l12; + var_i3 = var_l0; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 4240u); + var_i4 = 4u; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l12 = var_i1; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l12; + var_i1 = 1u; + var_i0 -= var_i1; + var_l12 = var_i0; + } + var_i0 = var_l11; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l11; + var_i2 = var_l0; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l11 = var_i0; + var_i0 = var_l0; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l11; + var_i1 = 1u; + var_i0 -= var_i1; + var_l11 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l13; + var_l7 = var_i0; + var_i0 = 0u; + var_l13 = var_i0; + var_i0 = instance->w2c_g4; + var_l8 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + } + } + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = var_l0; + var_i1 = 91u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l0; + var_i2 = 93u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i1 = var_l0; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = var_l1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l6; + var_i2 = var_l6; + var_i3 = 4u; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l12; + var_i0 = !(var_i0); + var_i1 = var_l11; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 58u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_l8 = var_i0; + var_i0 = var_l13; + var_i1 = 255u; + var_i0 &= var_i1; + var_i1 = 3u; + var_i0 += var_i1; + var_l7 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l3; + var_i4 = 58u; + var_i3 = var_i3 == var_i4; + var_l5 = var_i3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_l5 = var_i0; + var_i1 = var_l3; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_l1 = var_i1; + var_i2 = var_l0; + var_i3 = 63u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l0; + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l3; + var_i4 = 62u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l5; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l1; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = 35u; + var_i2 = var_l1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = var_l1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = var_l3; + var_i1 = 46u; + var_i0 = var_i0 != var_i1; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + } + var_l5 = var_i0; + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f244(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } else { + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4240u); + var_i1 = 4u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = var_l3; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i1 = var_l0; + var_i2 = 63u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = var_l0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + } + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = var_l4; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = var_l18; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = instance->w2c_g4; + var_i2 = w2c_highlights_f80(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + } + var_l4 = var_i0; + } + goto var_L3; + var_B4:; + var_i0 = var_l17; + if (var_i0) { + var_i0 = 12624u; + instance->w2c_g32 = var_i0; + var_i0 = 12624u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12628u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12632u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12636u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12640u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12644u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12648u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12652u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12656u; + var_i1 = var_l15; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12660u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12664u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f261(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 1u; + w2c_highlights_f259(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f262(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0; + v128 var_l16 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + var_i0 = instance->w2c_g7; + var_l15 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12672u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l13 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l12 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + } + } else { + var_i0 = 0u; + } + } + var_l6 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l15; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l6; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + goto var_B4; + } + var_i0 = var_l6; + var_i1 = 255u; + var_i0 &= var_i1; + var_l4 = var_i0; + var_i0 = var_l6; + var_i1 = 256u; + var_i0 &= var_i1; + var_l10 = var_i0; + var_i0 = var_l6; + var_i1 = 512u; + var_i0 &= var_i1; + var_l14 = var_i0; + var_i0 = var_l7; + var_i1 = instance->w2c_g4; + var_i2 = var_l7; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_L9: + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = var_l4; + var_i3 = var_l14; + var_i3 = !(var_i3); + var_i4 = var_l10; + var_i4 = !(var_i4); + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i1 = 0u; + var_i2 = var_l14; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i2 = 36u; + var_i3 = 0u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + } + var_i0 = var_l1; + var_i1 = var_l2; + var_i2 = var_l1; + var_i3 = var_l2; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i1 = var_l4; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l10; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l4; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l4; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 1u; + var_i3 = var_l10; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l7 = var_i0; + goto var_B10; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + var_i0 = var_l11; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l11; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = var_l11; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 3u; + var_i1 = var_l7; + var_i2 = var_l0; + var_i2 = w2c_highlights_f84(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + goto var_L9; + } + var_i0 = var_l0; + var_i1 = 0u; + var_i2 = var_l9; + var_i0 = w2c_highlights_f85(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) {goto var_L9;} + var_i0 = 2u; + goto var_B8; + var_B10:; + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l7; + var_B8:; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = var_l0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l6; + var_l12 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l0; + var_i0 = !(var_i0); + var_i1 = var_l6; + var_i2 = 256u; + var_i1 &= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l6; + } + } + var_l6 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_l10 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l10; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = var_l1; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l2; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 10799u; + var_i1 = 12074u; + var_i2 = 5u; + var_i3 = 4u; + var_i4 = var_l2; + var_i5 = 42u; + var_i4 = var_i4 == var_i5; + var_i5 = instance->w2c_g4; + var_i6 = 3u; + var_i5 += var_i6; + var_i5 = w2c_highlights_f83(instance, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i6 = 47u; + var_i5 = var_i5 != var_i6; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + w2c_highlights_f71(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 114u; + var_i0 = var_i0 == var_i1; + var_l11 = var_i0; + var_i1 = var_l0; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 39u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 39u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = var_l11; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_l1 = var_i0; + var_i0 = var_l2; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = 512u; + var_l6 = var_i0; + } + var_i0 = var_l1; + var_i1 = var_l6; + var_i0 |= var_i1; + var_l6 = var_i0; + var_i0 = var_l0; + var_i1 = var_l1; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = var_l2; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l6; + var_i1 = 256u; + var_i0 |= var_i1; + var_l6 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 44u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l10 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = var_l4; + var_i1 = var_l10; + var_i2 = 16512u; + var_i3 = 31u; + var_i4 = 82u; + var_i0 = w2c_highlights_f75(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 11u; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = var_l2; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l2; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 34u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l2; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 39u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l0; + var_i5 = 11u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i2 |= var_i3; + var_i2 = I32_CLZ(var_i2); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + } + var_i0 = 4294967295u; + var_i1 = var_l0; + var_i1 = !(var_i1); + if (var_i1) {goto var_B25;} + var_i0 = 18u; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B25;} + var_i0 = 20u; + var_i1 = var_l0; + var_i2 = 11u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B25;} + var_i0 = 18u; + var_i1 = var_l0; + var_i2 = 12u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B25;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = 8u; + var_i0 <<= (var_i1 & 31); + var_i1 = 19u; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 3u; + var_i1 = var_i1 <= var_i2; + if (var_i1) {goto var_B25;} + var_i0 = 20u; + var_i1 = var_l0; + var_i2 = 4u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B25;} + var_i0 = 19u; + var_i1 = var_l0; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B25;} + var_i0 = 56u; + var_i1 = var_l0; + var_i2 = 6u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B25;} + var_i0 = 3u; + var_i1 = var_l0; + var_i2 = 7u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B25;} + var_i0 = 7u; + var_i1 = var_l0; + var_i2 = 8u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B25;} + var_i0 = 60u; + var_i1 = var_l0; + var_i2 = 9u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B25;} + var_i0 = 21u; + var_B25:; + var_l0 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l8; + var_i1 = var_l0; + var_i2 = 8u; + var_i1 >>= (var_i2 & 31); + var_i2 = var_l5; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + var_i0 = var_l0; + var_i1 = 255u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i1 = 56u; + var_i0 = var_i0 == var_i1; + var_l3 = var_i0; + } else { + var_i0 = var_l8; + if (var_i0) { + var_i0 = 55u; + var_i1 = 15u; + var_i2 = var_l8; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_l3 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + } else { + var_i0 = var_l5; + if (var_i0) { + var_i0 = var_l2; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 16u; + } else { + var_i0 = 55u; + var_i1 = 29u; + var_i2 = var_l1; + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_l3 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l0 = var_i0; + } else { + var_i0 = var_l2; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 55u; + var_i1 = 15u; + var_i2 = 14u; + var_i3 = var_l3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l1; + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + } else { + var_i0 = var_l4; + var_i1 = var_l10; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 6u; + } else { + var_i0 = 55u; + var_i1 = 58u; + var_i2 = var_l1; + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_l3 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l0 = var_i0; + } + } + } + } + var_i0 = var_l0; + var_i1 = var_l4; + var_i2 = var_l10; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l9; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l9; + var_i2 = var_l1; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = var_l1; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 1u; + var_i0 -= var_i1; + var_l9 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 40u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l12; + var_l6 = var_i0; + var_i0 = 0u; + var_l12 = var_i0; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + } + } + var_i0 = 32u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = var_l1; + var_i1 = 91u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l1; + var_i2 = 93u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + } + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l11 = var_i0; + var_i1 = var_l1; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = var_l11; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + } else { + var_i0 = var_l1; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + var_l5 = var_i0; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l5; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = 25u; + var_i1 = 35u; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = 46u; + var_i0 = var_i0 != var_i1; + } + var_l5 = var_i0; + var_i0 = var_l3; + var_i1 = 0u; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l1; + var_i0 = w2c_highlights_f244(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 126u; + var_i1 = var_i1 == var_i2; + var_l5 = var_i1; + var_i2 = var_l0; + var_i3 = 47u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } else { + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4240u); + var_i1 = 4u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = var_l1; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + var_l0 = var_i0; + var_i1 = var_l1; + var_i2 = 63u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = var_l1; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + } + var_i0 = 25u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = var_l3; + var_i1 = 0u; + var_i2 = var_l4; + var_i3 = var_l10; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 0u; + var_i2 = var_l4; + var_i3 = instance->w2c_g4; + var_i2 = w2c_highlights_f80(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + } + } + var_l3 = var_i0; + } + goto var_L3; + var_B4:; + var_i0 = var_l13; + if (var_i0) { + var_i0 = 12672u; + instance->w2c_g32 = var_i0; + var_i0 = 12672u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12676u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12680u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12684u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12688u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12692u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12696u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f263(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_L0: + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f264(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_L0: + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f265(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0; + v128 var_l7 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + u64 var_j0, var_j1, var_j2, var_j3, var_j4, var_j5, var_j6; + var_i0 = instance->w2c_g7; + var_l6 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12704u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + instance->w2c_g24 = var_i0; + } + } + var_L2: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l6; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i1 = var_l1; + var_i0 -= var_i1; + var_l3 = var_i0; + var_i0 = var_l4; + var_i1 = 43u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 3u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i0 = var_l4; + var_i1 = 65793u; + var_i0 *= var_i1; + var_i1 = var_l1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 16777215u; + var_i1 &= var_i2; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 3u); + var_i1 = w2c_highlights_f43(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 4u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_L8: + var_i0 = var_l0; + var_i1 = var_l2; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B9;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_l4; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B9;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L8; + var_B9:; + } + var_i0 = 40u; + var_i1 = var_l1; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 10u; + var_i1 = 9u; + var_i2 = var_l4; + var_i3 = 43u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l0; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B5; + } + var_i0 = var_l1; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 16448u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 2u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l1; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B5; + } + var_i0 = var_l4; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 4u; + var_i1 = var_l1; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B5; + } + var_i0 = var_l4; + var_i1 = 110u; + var_i0 -= var_i1; + var_i1 = 1u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l4; + var_i2 = 114u; + var_i1 -= var_i2; + var_i2 = 1u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_l4; + var_i2 = 105u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l4; + var_i2 = 99u; + var_i1 -= var_i2; + var_i2 = 1u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_l4; + var_i2 = 66u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_l1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 1717987684u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i1 = w2c_highlights_f43(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 4u; + var_i2 += var_i3; + var_l0 = var_i2; + var_i3 = var_l2; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 4u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 14u; + var_i1 = var_l1; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = var_l0; + var_i2 = var_l2; + var_i1 = w2c_highlights_f263(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i1; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_l1 = var_i0; + var_L14: + var_i0 = var_l0; + var_i1 = var_l2; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B15;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) {goto var_B15;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L14; + var_B15:; + var_i0 = 59u; + var_i1 = var_l1; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B5; + } + var_i0 = var_l1; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 517097156201ull; + var_j0 ^= var_j1; + var_j1 = 24ull; + var_j0 <<= (var_j1 & 63); + var_i0 = !(var_j0); + var_i1 = var_l1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 5u); + var_i1 = w2c_highlights_f43(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 5u; + var_i2 += var_i3; + var_l0 = var_i2; + var_i3 = var_l2; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 5u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 17u; + var_i1 = var_l1; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = var_l0; + var_i2 = var_l2; + var_i1 = w2c_highlights_f263(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i1; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = var_l2; + var_i2 = var_l1; + var_i1 -= var_i2; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = var_l1; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B5; + } + var_i0 = 6u; + var_i1 = var_l1; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 11822u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l0; + var_i2 = 2u; + var_i1 += var_i2; + var_i2 = var_l2; + var_i1 = var_i1 > var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B5; + } + var_i0 = 40u; + var_i1 = var_l0; + var_i2 = var_l0; + var_i3 = 2u; + var_i2 += var_i3; + var_l0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = var_l2; + var_i2 = var_l0; + var_i1 -= var_i2; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = var_l0; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B5; + } + var_i0 = 6u; + var_i1 = var_l0; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = var_l1; + var_i2 = var_l2; + var_i1 = w2c_highlights_f263(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i1; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l0; + var_i2 = var_l0; + var_i3 = var_l2; + var_i2 = w2c_highlights_f264(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B5; + } + var_i0 = var_l1; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 7598242639580588403ull; + var_i0 = var_j0 == var_j1; + var_i1 = var_l1; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 8u); + var_j2 = 8675450682572044660ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 16u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 22u; + var_i1 = var_l1; + var_i2 = var_l1; + var_i3 = 16u; + var_i2 += var_i3; + var_i3 = var_l2; + var_i2 = w2c_highlights_f263(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l0; + var_i2 = var_l0; + var_i3 = var_l2; + var_i2 = w2c_highlights_f264(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = var_l2; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 24u; + var_i1 = var_l0; + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_l0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 22u; + var_i1 = var_l0; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B5; + } + var_i0 = var_l1; + var_i1 = 8u; + var_i0 += var_i1; + var_i1 = var_l1; + var_i2 = 17u; + var_i1 += var_i2; + var_i2 = var_l1; + var_i3 = 13u; + var_i2 += var_i3; + var_i3 = 0u; + var_i4 = var_l1; + var_j4 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_j5 = 7308332182667748718ull; + var_i4 = var_j4 == var_j5; + var_i5 = var_l1; + var_j5 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i5) + 8u); + var_j6 = 435476720928ull; + var_j5 ^= var_j6; + var_j6 = 24ull; + var_j5 <<= (var_j6 & 63); + var_i5 = !(var_j5); + var_i4 &= var_i5; + var_i5 = var_l3; + var_i6 = 13u; + var_i5 = var_i5 >= var_i6; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l1; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 16u); + var_i4 = 101u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l1; + var_j4 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4) + 8u); + var_j5 = 7237123112115661158ull; + var_i4 = var_j4 == var_j5; + var_i3 &= var_i4; + var_i4 = var_l1; + var_j4 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_j5 = 2334102057476973924ull; + var_i4 = var_j4 == var_j5; + var_i3 &= var_i4; + var_i4 = var_l3; + var_i5 = 17u; + var_i4 = var_i4 >= var_i5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l1; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 7306087009988601198ull; + var_i2 = var_j2 == var_j3; + var_i3 = var_l1; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 7306087009987357807ull; + var_i3 = var_j3 == var_j4; + var_i2 |= var_i3; + var_i3 = var_l3; + var_i4 = 8u; + var_i3 = var_i3 >= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + if (var_i0) { + var_i0 = 22u; + var_i1 = var_l1; + var_i2 = var_l0; + var_i3 = var_l2; + var_i2 = w2c_highlights_f263(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l0; + var_i2 = var_l0; + var_i3 = var_l2; + var_i2 = w2c_highlights_f264(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 22u; + var_i1 = var_l0; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B5; + } + var_i0 = var_l1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_i1 = 7171954u; + var_i0 ^= var_i1; + var_i1 = 8u; + var_i0 <<= (var_i1 & 31); + var_i0 = !(var_i0); + var_i1 = var_l1; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 7358993311583855986ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 11u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 9u; + var_i1 = var_i1 >= var_i2; + var_l0 = var_i1; + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 8u); + var_i3 = 111u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 8367799628114847090ull; + var_i3 = var_j3 == var_j4; + var_i2 &= var_i3; + var_i1 &= var_i2; + var_i2 = var_l0; + var_i3 = var_l1; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 8u); + var_i4 = 109u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l1; + var_j4 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_j5 = 8030593375217413987ull; + var_i4 = var_j4 == var_j5; + var_i3 &= var_i4; + var_i2 &= var_i3; + var_i3 = var_l3; + var_i4 = 7u; + var_i3 = var_i3 >= var_i4; + var_i4 = var_l1; + var_j4 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_j5 = 31371405240069987ull; + var_j4 ^= var_j5; + var_j5 = 8ull; + var_j4 <<= (var_j5 & 63); + var_i4 = !(var_j4); + var_i3 &= var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 22u; + var_i1 = var_l1; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B5; + } + var_i0 = var_l1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_i1 = 1936026729u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 7359015323291248962ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 12u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 22u; + var_i1 = var_l1; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B5; + } + } + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_B5:; + var_i0 = instance->w2c_g4; + var_L25: + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + if (var_i1) {goto var_B26;} + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l0 = var_i1; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 13u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + if (var_i1) {goto var_B26;} + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + instance->w2c_g4 = var_i1; + goto var_L25; + var_B26:; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = var_l5; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f266(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = 3408u; + var_i1 = var_p0; + var_i2 = var_p1; + var_i1 = w2c_highlights_f77(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 3408u; + var_i1 += var_i2; + var_i2 = 16800u; + var_i3 = 3u; + var_i4 = 19u; + var_i0 = w2c_highlights_f75(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f267(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + u32 var_l4 = 0, var_l5 = 0, var_l6 = 0; + v128 var_l7 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l4; + var_i2 = 13u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l4; + var_i1 = 13u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = var_p0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + var_i0 = var_p3; + if (var_i0) { + var_i0 = var_p0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + } + var_i0 = instance->w2c_g3; + var_i1 = var_p0; + var_i2 = var_p2; + var_i1 += var_i2; + var_i0 = var_i0 >= var_i1; + var_l5 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_L6: + var_i0 = var_l5; + var_i0 = !(var_i0); + var_i1 = var_p2; + var_i2 = var_l4; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_l4; + var_i0 += var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p1; + var_i2 = var_l4; + var_i1 += var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 = var_i0 == var_i1; + var_l5 = var_i0; + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + var_l4 = var_i0; + goto var_L6; + } + var_i0 = var_l5; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_p2; + var_i0 += var_i1; + var_i1 = 0u; + var_i0 = w2c_highlights_f66(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + } + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = var_l5; + var_i0 = !(var_i0); + if (var_i0) {goto var_L3;} + } + var_i0 = 44u; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l5; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_p1; + var_i1 = var_p2; + var_i2 = var_p3; + var_i3 = 1u; + var_i2 <<= (var_i3 & 31); + var_i3 = 44u; + w2c_highlights_f67(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f268(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0; + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l1; + var_i2 = 13u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_l1; + var_i1 = 13u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 += var_i2; + var_l0 = var_i1; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + } else { + var_i0 = var_l0; + } + var_l0 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 -= var_i2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f269(w2c_highlights* instance, u32 var_p0) { + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = var_p0; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i2 = 125u; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f270(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4240u); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f271(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0; + v128 var_l14 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g7; + var_l13 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + var_i0 = 1u; + var_l5 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12704u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l11 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l1 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + } + } else { + var_i0 = 0u; + } + } + var_l8 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l13; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l9 = var_i0; + var_i0 = var_l6; + if (var_i0) { + var_i0 = var_l9; + var_i1 = var_l8; + var_i2 = var_l6; + var_i3 = var_l7; + var_i0 = w2c_highlights_f267(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l6; + var_i1 = 0u; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + } + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l9; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f81(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = var_l5; + var_i1 = 2u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 1u; + var_l5 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l1; + } + var_l1 = var_i0; + } + var_i0 = var_l9; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = var_l2; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l5; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l4; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f266(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l3; + var_i2 = 3u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 17u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = 4u; + var_i2 = 2u; + var_i3 = 3u; + var_i4 = var_l3; + var_i5 = 1u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l3; + var_i4 = 4u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = instance->w2c_g4; + var_i3 = var_l0; + var_i2 -= var_i3; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i3 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 538976288u; + var_i3 |= var_i4; + var_i4 = 1836020326u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + } else { + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 3u; + var_i1 = var_l4; + var_i2 = var_l4; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + } + goto var_L3; + } + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = var_l2; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f268(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 2u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 45u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 34u; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 39u; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f55(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i0 = w2c_highlights_f269(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 58u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + } + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l2; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 45u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 59u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = var_l4; + var_i2 = 2u; + var_i1 = var_i1 != var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L21: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B22;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) {goto var_B22;} + var_i0 = var_l0; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f269(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 58u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + goto var_L21; + } + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L21; + var_B22:; + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + } + var_i0 = var_l3; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l2; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_l7 = var_i0; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i0 += var_i1; + var_l12 = var_i0; + var_l3 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l10 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l10; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + } else { + var_i0 = 0u; + var_l10 = var_i0; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 25u; + var_i1 = var_l0; + var_i2 = var_l12; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l3; + var_l8 = var_i1; + var_i0 -= var_i1; + var_l6 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l10; + var_i0 = var_i0 == var_i1; + var_i1 = var_l10; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 47u; + var_i1 = var_l12; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 45u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l4; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + var_i1 = w2c_highlights_f266(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 3u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 17u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 14u; + var_i1 = 0u; + var_i2 = var_l1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = var_l9; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 93u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f270(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L35: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f270(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L35; + } + var_i0 = 25u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l1; + var_i2 = var_l2; + var_i3 = 38u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_i4 = 124u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l2; + var_i4 = 59u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l4; + var_i4 = 2u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + var_B4:; + var_i0 = var_l11; + if (var_i0) { + var_i0 = 12704u; + instance->w2c_g32 = var_i0; + var_i0 = 12704u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12708u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12712u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12716u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12720u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12724u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f272(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 41u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 93u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 125u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 62u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f273(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4240u); + var_i1 = 6u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f274(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, + var_l16 = 0, var_l17 = 0, var_l18 = 0; + v128 var_l19 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7, + var_i8, var_i9, var_i10; + u64 var_j3, var_j4; + var_i0 = instance->w2c_g7; + var_l18 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l15 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i0 = 62340u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l14 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12728u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l15 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l2 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + var_l13 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 32u); + var_l14 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + } + } else { + var_i0 = 0u; + } + } + var_l7 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l18; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l15; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62340u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l7; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + goto var_B4; + } + var_i0 = var_l6; + var_i1 = instance->w2c_g4; + var_i2 = var_l6; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = 0u; + var_l17 = var_i0; + var_i0 = var_l7; + var_i1 = 255u; + var_i0 &= var_i1; + var_l3 = var_i0; + var_i0 = var_l7; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_i1 = 255u; + var_i0 &= var_i1; + var_l4 = var_i0; + var_i0 = 46u; + var_i1 = 5u; + var_i2 = 48u; + var_i3 = 44u; + var_i4 = var_l7; + var_i5 = 16u; + var_i4 >>= (var_i5 & 31); + var_l0 = var_i4; + var_i5 = 128u; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l0; + var_i4 = 4u; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i3 = 32u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l16 = var_i0; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 -= var_i1; + var_l12 = var_i0; + var_L9: + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = var_l3; + var_i3 = var_l0; + var_i4 = 65u; + var_i3 &= var_i4; + var_i4 = var_l0; + var_i5 = 16u; + var_i4 &= var_i5; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = var_l12; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 35u; + var_i2 = var_l3; + var_i3 = var_l0; + var_i4 = 1u; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l4; + var_i3 = var_l3; + var_i4 = var_l4; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l12 = var_i0; + } + var_i0 = var_l12; + var_i1 = var_l1; + var_i2 = var_l1; + var_i3 = var_l12; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i1 = var_l3; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l5; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 1u; + var_i0 -= var_i1; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l3; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = var_l0; + var_i2 = 8u; + var_i1 &= var_i2; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 1u; + var_i3 = var_l0; + var_i4 = 8u; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 2u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 1u; + var_l17 = var_i0; + goto var_B10; + } + var_i0 = var_l4; + var_i1 = var_l11; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 1u; + var_i0 += var_i1; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + var_i0 = var_l11; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l11; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = var_l11; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l11 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l4; + var_i4 = var_l11; + var_i3 = var_i3 == var_i4; + var_i4 = var_l4; + var_i5 = 0u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i4 = var_l3; + var_i5 = var_l11; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + var_i0 = var_l16; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_l6; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l6; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + goto var_L9; + } + var_i0 = var_l9; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l16; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 -= var_i2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l5; + var_i1 = 2u; + var_i0 <<= (var_i1 & 31); + var_i1 = 2u; + var_i0 |= var_i1; + goto var_B8; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + UNREACHABLE; + var_B10:; + var_i0 = var_l16; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l17; + var_i1 = var_l5; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + var_B8:; + var_l0 = var_i0; + var_i1 = 2u; + var_i0 >>= (var_i1 & 31); + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = var_l0; + var_i1 = 3u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l7; + var_l13 = var_i0; + var_i0 = var_l5; + var_l14 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l7; + var_i1 = 1048576u; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l7; + } + } + var_l7 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = var_l0; + var_i2 = var_l4; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = var_l1; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) { + var_i1 = instance->w2c_g4; + var_i2 = 3u; + var_i1 += var_i2; + instance->w2c_g4 = var_i1; + var_i1 = 9u; + } else { + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + instance->w2c_g4 = var_i1; + var_i1 = 17u; + } + var_i2 = var_l10; + var_i3 = 2u; + var_i2 <<= (var_i3 & 31); + var_i1 |= var_i2; + var_i2 = 16u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + var_l7 = var_i0; + var_i0 = 5u; + var_i1 = 44u; + var_i2 = var_l10; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + var_i1 = var_l1; + var_i2 = 128u; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 32u; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + var_i1 = var_l4; + var_i2 = 32u; + var_i1 |= var_i2; + var_l12 = var_i1; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 126u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 0u; + var_i2 = var_l1; + var_i2 = w2c_highlights_f272(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i2; + var_i3 = var_l1; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i0 = 3u; + var_i1 = 66u; + var_i2 = var_l4; + var_i3 = 97u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = var_l12; + var_i3 = 114u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l7; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l5; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l5; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l5; + var_i3 = 34u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l5; + var_i4 = 39u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_i1 = 8u; + var_i0 |= var_i1; + var_l2 = var_i0; + } + var_i0 = 46u; + var_i1 = 44u; + var_i2 = var_l2; + var_i3 = 32u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l5; + var_i1 = var_l7; + var_i2 = 8u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = 16u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + var_l7 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 58u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 48u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l4; + var_i1 = 9502720u; + var_i0 |= var_i1; + var_l7 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l4; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 48u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l4; + var_i0 = w2c_highlights_f273(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L33: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f273(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L33; + } + var_i0 = 48u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + } + var_i0 = var_l4; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 -= var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 6516580u; + var_i0 ^= var_i1; + var_i1 = 8u; + var_i0 <<= (var_i1 & 31); + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = var_l3; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + var_l10 = var_i0; + var_i0 = 1u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 32u; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 0u; + var_i2 = var_l1; + var_i3 = 13u; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = var_l1; + } + } + var_l1 = var_i0; + if (var_i0) { + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = 47u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i1 = !(var_i1); + var_i2 = var_l4; + var_i3 = 1u; + var_i2 += var_i3; + var_l1 = var_i2; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 58u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = 48u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l8 = var_i0; + goto var_L3; + } + var_i0 = 4294967295u; + var_i1 = var_l3; + var_i2 = var_l4; + var_i3 = 16864u; + var_i4 = 15u; + var_i5 = 46u; + var_i1 = w2c_highlights_f75(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i1; + var_i1 = !(var_i1); + if (var_i1) { + var_i1 = 60u; + var_i2 = var_l3; + var_i2 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 24415u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l4; + var_i4 = 2u; + var_i3 -= var_i4; + var_i3 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 24415u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i3 = var_l4; + var_i4 = var_l3; + var_i3 -= var_i4; + var_l1 = var_i3; + var_i4 = 5u; + var_i3 = var_i3 >= var_i4; + var_i2 &= var_i3; + if (var_i2) {goto var_B43;} + var_i1 = 18u; + var_i2 = var_l1; + var_i3 = 7u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l3; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 28559167692432754ull; + var_j3 ^= var_j4; + var_j4 = 8ull; + var_j3 <<= (var_j4 & 63); + var_i3 = !(var_j3); + var_i2 &= var_i3; + if (var_i2) {goto var_B43;} + var_i1 = 4294967295u; + goto var_B43; + } + var_i1 = 18u; + var_i2 = var_l1; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + if (var_i2) {goto var_B43;} + var_i1 = 275u; + var_i2 = var_l1; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + if (var_i2) {goto var_B43;} + var_i1 = 531u; + var_i2 = var_l1; + var_i3 = 3u; + var_i2 = var_i2 == var_i3; + if (var_i2) {goto var_B43;} + var_i1 = 19u; + var_i2 = var_l1; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + if (var_i2) {goto var_B43;} + var_i1 = 20u; + var_i2 = var_l1; + var_i3 = 5u; + var_i2 = var_i2 == var_i3; + if (var_i2) {goto var_B43;} + var_i1 = 21u; + var_i2 = var_l1; + var_i3 = 6u; + var_i2 = var_i2 == var_i3; + if (var_i2) {goto var_B43;} + var_i1 = 3u; + var_i2 = var_l1; + var_i3 = 7u; + var_i2 = var_i2 == var_i3; + if (var_i2) {goto var_B43;} + var_i1 = 7u; + var_i2 = var_l1; + var_i3 = 8u; + var_i2 = var_i2 == var_i3; + if (var_i2) {goto var_B43;} + var_i1 = 60u; + var_B43:; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l1; + var_i1 = 255u; + var_i0 &= var_i1; + var_l2 = var_i0; + var_i0 = var_l1; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l8 = var_i0; + } else { + var_i0 = var_l8; + if (var_i0) { + var_i0 = 15u; + var_i1 = 55u; + var_i2 = var_l8; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = 0u; + var_i1 = var_l8; + var_i2 = var_l8; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 46u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i2 = I32_CLZ(var_i2); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + } else { + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 55u; + } else { + var_i0 = var_l2; + if (var_i0) { + var_i0 = 16u; + var_i1 = 29u; + var_i2 = var_l0; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = 14u; + var_i1 = 58u; + var_i2 = var_l4; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 34u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l1; + var_i5 = 39u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l0; + var_i5 = 1u; + var_i4 += var_i5; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = w2c_highlights_f46(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = var_l1; + var_i6 = 58u; + var_i5 = var_i5 == var_i6; + var_i4 &= var_i5; + var_i5 = var_l1; + var_i5 = w2c_highlights_f46(instance, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i6 = var_l0; + var_l2 = var_i6; + var_L49: + var_i6 = var_l2; + var_i7 = instance->w2c_g3; + var_i6 = var_i6 >= var_i7; + if (var_i6) {goto var_B50;} + var_i6 = var_l2; + var_i6 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i6)); + var_i6 = w2c_highlights_f47(instance, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i6 = !(var_i6); + if (var_i6) {goto var_B50;} + var_i6 = var_l2; + var_i7 = 1u; + var_i6 += var_i7; + var_l2 = var_i6; + goto var_L49; + var_B50:; + var_i6 = var_l0; + var_i7 = var_l2; + var_i8 = 16864u; + var_i9 = 15u; + var_i10 = 46u; + var_i6 = w2c_highlights_f75(instance, var_i6, var_i7, var_i8, var_i9, var_i10); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i6 = !(var_i6); + var_i5 &= var_i6; + var_i6 = var_l1; + var_i7 = 64u; + var_i6 = var_i6 == var_i7; + var_i5 |= var_i6; + var_i4 |= var_i5; + var_i3 |= var_i4; + var_i4 = var_l0; + var_i5 = var_l4; + var_i4 = var_i4 > var_i5; + var_i3 &= var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + var_l2 = var_i0; + } + } + var_i0 = var_l2; + var_i1 = var_l3; + var_i2 = var_l4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l9; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l9; + var_i2 = var_l0; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = var_l0; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 1u; + var_i0 -= var_i1; + var_l9 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 40u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l13; + var_l7 = var_i0; + var_i0 = var_l14; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + goto var_L3; + } + } + } + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 46u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l4; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 38u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 60u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f273(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_L61: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f273(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L61; + } + var_i0 = 25u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l15; + if (var_i0) { + var_i0 = 12728u; + instance->w2c_g32 = var_i0; + var_i0 = 12728u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12732u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12736u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12740u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12744u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12748u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12752u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12756u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12760u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f275(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0; + v128 var_l13 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g7; + var_l12 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12768u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l11 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + } + } else { + var_i0 = 0u; + } + } + var_l9 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l12; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l9; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_L7: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = var_l9; + var_i3 = 1u; + var_i4 = var_l3; + var_i4 = !(var_i4); + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B8;} + var_i0 = var_l3; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 3472u); + var_i2 = 1u; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l9 = var_i0; + goto var_B8; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 117u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 3u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i1 = 6u; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = var_l5; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = 45u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + } else { + var_i0 = var_l3; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 34u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 1u; + var_i3 = var_l3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_B8; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L7; + var_B8:; + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i2 = 10u; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + } + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i1; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 11643u; + var_i1 = 32045u; + var_i2 = 5u; + var_i3 = 4u; + var_i4 = var_l1; + var_i5 = 2u; + var_i4 += var_i5; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 124u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + w2c_highlights_f71(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l7 = var_i0; + var_i0 = var_l5; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_l9 = var_i1; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l3 = var_i0; + } else { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 4294967295u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + var_l10 = var_i2; + var_i3 = 17024u; + var_i4 = 7u; + var_i5 = 29u; + var_i1 = w2c_highlights_f76(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l2; + var_i3 = var_l0; + var_i4 = 65u; + var_i3 -= var_i4; + var_i4 = 25u; + var_i3 = var_i3 <= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i1 = 276u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l8 = var_i0; + } else { + var_i0 = var_l8; + var_i1 = var_l10; + var_i2 = var_l1; + var_i1 -= var_i2; + var_i2 = 2u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i2 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 29537u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l2 = var_i0; + } else { + var_i0 = 0u; + var_i1 = var_l8; + var_i2 = var_l0; + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 > var_i3; + var_i3 = var_l4; + var_i4 = 0u; + var_i3 = (u32)((s32)var_i3 >= (s32)var_i4); + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + } + } + var_i0 = var_l4; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l4; + var_i1 = 255u; + var_i0 &= var_i1; + var_l5 = var_i0; + var_i0 = var_l4; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l0 = var_i0; + if (var_i0) { + var_i0 = var_l0; + var_l2 = var_i0; + } + } else { + var_i0 = var_l2; + if (var_i0) { + var_i0 = 23u; + var_i1 = 55u; + var_i2 = var_l2; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i0 = var_l2; + var_i1 = 0u; + var_i2 = var_l10; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + } else { + var_i0 = var_l0; + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 23u; + var_i1 = 55u; + var_i2 = var_l10; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 29u; + var_i1 = 58u; + var_i2 = 15u; + var_i3 = var_l7; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l6; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l5 = var_i0; + } + } + var_i0 = var_l5; + var_i1 = var_l1; + var_i2 = var_l10; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 1u; + var_l7 = var_i0; + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + } else { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_l6 = var_i0; + var_i0 = 25u; + var_i1 = 35u; + var_i2 = 32u; + var_i3 = 0u; + var_i4 = var_l0; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4) + 3728u); + var_i5 = 8u; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l0; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 4240u); + var_i4 = 128u; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 4496u); + var_i3 = 1u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + } + var_l7 = var_i0; + } + goto var_L3; + var_B4:; + var_i0 = var_l11; + if (var_i0) { + var_i0 = 12768u; + instance->w2c_g32 = var_i0; + var_i0 = 12768u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12772u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12776u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12780u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12784u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12788u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f276(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4496u); + var_i1 = 1u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f277(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0; + v128 var_l9 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + var_i0 = instance->w2c_g7; + var_l8 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12792u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l7 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l1 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + } else { + var_i0 = 1u; + } + } + var_l5 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l8; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l4; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_l5 = var_i0; + } + var_i0 = var_l4; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = var_l5; + var_l4 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_i0 = var_l0; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 34u; + var_i1 = 1u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 39u; + var_i1 = 0u; + var_i2 = 48u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 32u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + instance->w2c_g4 = var_i0; + var_i0 = 47u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l6; + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l2; + var_i3 = 63u; + var_i2 = var_i2 == var_i3; + var_l6 = var_i2; + var_i1 &= var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 63u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l6; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 64u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 6u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + var_i1 = var_l1; + var_i2 = var_l2; + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l4; + var_i1 = var_l2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 20u; + var_i1 = 17u; + var_i2 = var_l3; + var_i3 = 1u; + var_i2 += var_i3; + var_i3 = instance->w2c_g4; + var_i4 = 17152u; + var_i5 = 15u; + var_i6 = 41u; + var_i2 = w2c_highlights_f75(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i2; + var_i3 = 6u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 3u; + var_i1 = 4u; + var_i2 = 2u; + var_i3 = var_l4; + var_i4 = 7u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l4; + var_i5 = 8u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l4; + var_i4 = 9u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l4; + var_i3 = 10u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 64u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = var_l0; + var_i1 = 95u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 65u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 6u; + var_i1 = 58u; + var_i2 = var_l1; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_i0 = var_l1; + if (var_i0) { + var_i0 = 6u; + var_i1 = 14u; + var_i2 = 55u; + var_i3 = 23u; + var_i4 = var_l1; + var_i5 = 2u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l1; + var_i4 = 3u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l1; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + } else { + var_i0 = var_l3; + var_i1 = var_l2; + var_i2 = 17152u; + var_i3 = 15u; + var_i4 = 41u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 < (s32)var_i1); + if (var_i0) { + var_i0 = var_l6; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 15u; + var_i1 = 14u; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l2; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 14u; + } else { + var_i0 = 23u; + var_i1 = 48u; + var_i2 = var_l2; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_i4 = 1u; + var_i3 += var_i4; + var_l4 = var_i3; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 39u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l4; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = w2c_highlights_f46(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = var_l4; + var_i5 = w2c_highlights_f83(instance, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i6 = 36u; + var_i5 = var_i5 != var_i6; + var_i4 &= var_i5; + var_i3 |= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + var_l0 = var_i0; + } + } + var_i0 = var_l0; + var_i1 = var_l3; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = w2c_highlights_f47(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 24u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_i3 = 62u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 0u; + var_i2 = var_l0; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 46u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 59u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l2; + var_i4 = 58u; + var_i3 = var_i3 == var_i4; + var_l4 = var_i3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = 35u; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f276(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_L29: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f276(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B30;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 15420u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 15934u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_l3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B30;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L29; + var_B30:; + var_i0 = 25u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + var_B4:; + var_i0 = var_l7; + if (var_i0) { + var_i0 = 12792u; + instance->w2c_g32 = var_i0; + var_i0 = 12792u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12796u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f278(w2c_highlights* instance, u32 var_p0) { + u64 var_l1 = 0; + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + u64 var_j0, var_j1, var_j2; + var_i0 = var_p0; + var_i1 = 3413u; + var_i0 = var_i0 == var_i1; + var_i1 = 3408u; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 435710945399ull; + var_j1 ^= var_j2; + var_j2 = 24ull; + var_j1 <<= (var_j2 & 63); + var_i1 = !(var_j1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 18u; + goto var_Bfunc; + } + var_i0 = 3408u; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 72057594037927935ull; + var_j0 &= var_j1; + var_l1 = var_j0; + var_j1 = 28554769915276905ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l1; + var_j2 = 28548172593000037ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 3415u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 14u; + goto var_Bfunc; + } + var_i0 = 3408u; + var_i1 = var_p0; + var_i2 = 17344u; + var_i3 = 63u; + var_i4 = 138u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f279(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0; + v128 var_l13 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g7; + var_l12 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12800u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l10 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + } + var_l4 = var_i0; + } + var_i0 = instance->w2c_g4; + } + var_l9 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l12; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l7; + var_i1 = instance->w2c_g4; + var_i2 = var_l9; + var_i1 -= var_i2; + var_i0 += var_i1; + var_l7 = var_i0; + var_i0 = instance->w2c_g4; + var_l9 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = var_l5; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 2u; + var_i1 = var_l1; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4496u); + var_i2 = 4u; + var_i1 &= var_i2; + if (var_i1) {goto var_B7;} + var_L9: + var_i0 = var_l1; + var_i1 = var_l2; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 32u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B8;} + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i1 = 5u; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L9;} + var_i0 = var_l1; + var_i1 = 5u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = !(var_i0); + var_i1 = var_l2; + var_i1 = w2c_highlights_f43(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l2; + var_i3 = 48u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B8;} + var_i0 = 1u; + goto var_B7; + var_B8:; + var_i0 = 3u; + var_i1 = 0u; + var_i2 = var_l1; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i2; + var_i2 = !(var_i2); + var_i3 = var_l2; + var_i4 = 10u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l2; + var_i5 = 13u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_B7:; + var_l2 = var_i0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 5u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + if (var_i0) { + var_i0 = var_l4; + } else { + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + } + var_l4 = var_i0; + } + var_i0 = var_l0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l9 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = var_l5; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g79; + var_i1 = var_l4; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_l5 = var_i0; + } else { + var_i0 = 0u; + var_l4 = var_i0; + } + } + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i1 = !(var_i1); + var_i2 = var_l5; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l4; + var_i0 = !(var_i0); + var_i1 = var_l5; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 27u; + var_i2 = 4u; + var_i3 = var_l3; + var_i4 = 36u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l5; + var_i1 = var_l0; + var_i2 = 38u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l4; + if (var_i0) { + var_i0 = 0u; + var_l5 = var_i0; + var_L21: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B22;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B22;} + var_i0 = var_l0; + var_i1 = var_l4; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } else { + var_i0 = 0u; + var_l4 = var_i0; + goto var_B22; + } + } else { + var_i0 = var_l0; + var_i1 = 38u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4496u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + goto var_B22; + } + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L21; + var_B22:; + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = instance->w2c_g79; + var_i1 = var_l7; + var_i1 = !(var_i1); + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 32u; + var_i2 |= var_i3; + var_i3 = 99u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 27u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_l4 = var_i0; + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4496u); + var_i1 = 4u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = 39u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 24u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i1 = 0u; + var_i2 = 24u; + w2c_highlights_f55(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + instance->w2c_g4 = var_i0; + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f77(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 3408u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f278(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 3u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 21u; + var_l0 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = var_l0; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l0 = var_i0; + var_L35: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B36;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l11 = var_i0; + var_i0 = var_l3; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + var_i2 = var_l2; + var_i3 = 95u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 4496u); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + var_i3 = 1u; + var_i2 &= var_i3; + var_i3 = var_l11; + var_i3 = w2c_highlights_f44(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = var_l11; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4) + 4496u); + var_i5 = 6u; + var_i4 >>= (var_i5 & 31); + var_i5 = 1u; + var_i4 &= var_i5; + var_i3 |= var_i4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i2 = var_l3; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 4496u); + var_i3 = 6u; + var_i2 >>= (var_i3 & 31); + var_i3 = 1u; + var_i2 &= var_i3; + var_i3 = var_l0; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 4496u); + var_i4 = 5u; + var_i3 >>= (var_i4 & 31); + var_i4 = 1u; + var_i3 &= var_i4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B36;} + var_i0 = var_l3; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L35; + var_B36:; + var_i0 = 24u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + var_l2 = var_i1; + var_i0 = w2c_highlights_f77(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 3408u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f278(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = var_l8; + if (var_i0) { + var_i0 = 29u; + var_l0 = var_i0; + } else { + var_i0 = var_l3; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l3; + var_i1 = 255u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i0 = var_l3; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l3 = var_i0; + if (var_i0) { + var_i0 = var_l3; + var_l6 = var_i0; + } + } else { + var_i0 = var_l6; + if (var_i0) { + var_i0 = 15u; + var_i1 = 23u; + var_i2 = var_l6; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + } else { + var_i0 = 14u; + var_i1 = 58u; + var_i2 = var_l2; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + } + } + } + var_i0 = var_l0; + var_i1 = var_l1; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + } else { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = 35u; + var_i2 = 32u; + var_i3 = 0u; + var_i4 = var_l0; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4) + 4496u); + var_i5 = 128u; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l0; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 3984u); + var_i4 = 1u; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 4752u); + var_i3 = 1u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + } + var_l8 = var_i0; + } + goto var_L3; + var_B4:; + var_i0 = var_l10; + if (var_i0) { + var_i0 = 12800u; + instance->w2c_g32 = var_i0; + var_i0 = 12800u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12804u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12808u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12812u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12816u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f280(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 0u; + instance->w2c_g79 = var_i0; + w2c_highlights_f279(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f281(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 1u; + instance->w2c_g79 = var_i0; + w2c_highlights_f279(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f282(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = 23552u; + var_i3 = 15u; + var_i4 = 70u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f283(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g3; + var_i1 = var_p0; + var_i2 = 1u; + var_i1 += var_i2; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f284(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4752u); + var_i1 = 1u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f285(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0; + v128 var_l14 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + var_i0 = instance->w2c_g7; + var_l12 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12824u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l10 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } + } else { + var_i0 = 0u; + } + } + var_l1 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l12; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i0; + var_i0 = var_l0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 10792u; + var_i1 = 10538u; + var_i2 = 5u; + var_i3 = 4u; + var_i4 = var_l7; + var_i5 = 42u; + var_i4 = var_i4 == var_i5; + var_i5 = instance->w2c_g4; + var_i6 = 3u; + var_i5 += var_i6; + var_i5 = w2c_highlights_f83(instance, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i6 = 41u; + var_i5 = var_i5 != var_i6; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + w2c_highlights_f71(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 34u; + var_i1 = 1u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 97u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f288(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 124u; + var_i0 = var_i0 == var_i1; + } else { + var_i0 = 0u; + } + var_i1 = var_l4; + var_i2 = 124u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + } else { + var_i0 = 0u; + } + if (var_i0) { + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_l0 = var_i1; + var_i2 = var_l0; + var_i2 = w2c_highlights_f288(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f289(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 37u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_l7 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l7; + var_i1 = 1u; + var_i0 += var_i1; + var_l7 = var_i0; + } + var_i0 = var_l7; + instance->w2c_g4 = var_i0; + var_i0 = 46u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l11 = var_i0; + var_l9 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 1u; + var_i0 += var_i1; + var_l9 = var_i0; + } + var_i0 = var_l9; + var_i0 = w2c_highlights_f288(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l13 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 124u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l7; + var_i2 = var_l11; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = var_l7; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l7; + var_i2 = var_l11; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l11; + var_i1 = var_l9; + var_i2 = var_l13; + w2c_highlights_f289(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + } + var_i0 = var_l0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f283(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + } + if (var_i0) { + var_i0 = 39u; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l4; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 39u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 55u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l4; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 96u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 70u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l4; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 126u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 63u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 59u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 58u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l5 = var_i0; + } + goto var_L3; + } + var_i0 = var_l4; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 37u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 91u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L22: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L22; + } + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = 46u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 39u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = 4294967295u; + var_i1 = var_l2; + var_i2 = var_l4; + var_i1 = w2c_highlights_f282(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l7; + var_i1 = 255u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i0 = var_l7; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l3 = var_i0; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 3u; + var_l3 = var_i0; + } + var_i0 = var_l4; + var_i1 = var_l2; + var_i0 -= var_i1; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 26223u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_l6 = var_i0; + } else { + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 55u; + var_i1 = 23u; + var_i2 = 8u; + var_i3 = var_l4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 46u; + var_i3 = var_i3 == var_i4; + var_l8 = var_i3; + var_i4 = var_l3; + var_i5 = 3u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l3; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = var_l3; + var_i1 = 0u; + var_i2 = var_l3; + var_i3 = 2u; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + } else { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 15u; + var_i1 = 58u; + var_i2 = var_l0; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l0; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 40u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 126u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l0; + var_i5 = w2c_highlights_f83(instance, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i6 = 63u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i3 |= var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l3; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 55u; + } else { + var_i0 = var_l6; + if (var_i0) { + var_i0 = 55u; + } else { + var_i0 = var_l1; + if (var_i0) { + var_i0 = 14u; + var_i1 = 29u; + var_i2 = var_l1; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 14u; + var_i1 = 58u; + var_i2 = var_l5; + if (var_i2) { + var_i2 = 0u; + } else { + var_i2 = var_l0; + var_i2 = w2c_highlights_f290(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + } + var_l0 = var_i0; + } + } + var_i0 = var_l0; + var_i1 = var_l2; + var_i2 = var_l4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 14u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 15u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 8u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 29u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + w2c_highlights_f50(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f286(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 93u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_l2 = var_i0; + var_i1 = var_l0; + var_i2 = 125u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_l5 = var_i0; + var_i0 = 0u; + var_i1 = var_l6; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = var_l3; + var_i1 = 0u; + var_i2 = var_l0; + var_i3 = 40u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i1 = var_l0; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l4; + var_i4 = 59u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l1; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + } else { + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 46u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 2u; + var_i1 = 1u; + var_i2 = var_l8; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f288(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f290(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l0; + } + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f284(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L39: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B40;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f284(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B40;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B40;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L39; + var_B40:; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 -= var_i1; + var_l1 = var_i0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l6; + var_i2 = var_l0; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = var_l0; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 124u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l3; + } + var_l3 = var_i0; + } + var_i0 = 0u; + var_i1 = var_l6; + var_i2 = var_l1; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_i3 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 14906u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + } + } + var_l1 = var_i0; + } + goto var_L3; + var_B4:; + var_i0 = var_l10; + if (var_i0) { + var_i0 = 12824u; + instance->w2c_g32 = var_i0; + var_i0 = 12824u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12828u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12832u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12836u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12840u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f286(w2c_highlights* instance) { + u32 var_l0 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 46u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f287(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4752u); + var_i2 = 2u; + var_i1 >>= (var_i2 & 31); + var_i2 = 1u; + var_i1 &= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f288(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 95u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f289(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = 12416u; + var_i1 = 124u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12417u; + var_i1 = var_p1; + var_i2 = var_p2; + var_i3 = var_p1; + var_i2 -= var_i3; + var_p1 = var_i2; + var_i3 = 30u; + var_i2 = var_i2 > var_i3; + if (var_i2) { + var_i2 = 30u; + var_p1 = var_i2; + } + var_i2 = var_p1; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_p1; + var_i1 = 12417u; + var_i0 += var_i1; + var_i1 = 125u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_p2; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p1; + var_i1 = 2u; + var_i0 += var_i1; + var_p2 = var_i0; + var_L1: + var_i0 = instance->w2c_g4; + var_i1 = 124u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B2;} + var_i0 = instance->w2c_g3; + var_i1 = instance->w2c_g4; + var_i2 = var_p2; + var_i1 += var_i2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 1u; + var_p1 = var_i0; + var_L4: + var_i0 = var_p1; + var_i1 = var_p2; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B5;} + var_i0 = instance->w2c_g4; + var_i1 = var_p1; + var_i0 += var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p1; + var_i2 = 12416u; + var_i1 += var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B5;} + var_i0 = var_p1; + var_i1 = 1u; + var_i0 += var_i1; + var_p1 = var_i0; + goto var_L4; + var_B5:; + var_i0 = var_p1; + var_i1 = var_p2; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_p2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_B2; + } + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L1; + var_B2:; + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 12416u; + var_i1 = var_p2; + var_i2 = 44u; + w2c_highlights_f62(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f290(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = w2c_highlights_f287(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_l1; + var_i1 = 97u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = w2c_highlights_f288(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = var_l1; + var_i0 = w2c_highlights_f282(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i1 = 255u; + var_i0 &= var_i1; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 0u; + var_i1 = (u32)((s32)var_i1 < (s32)var_i2); + var_i0 |= var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f291(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = 17856u; + var_i3 = 31u; + var_i4 = 108u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f292(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, + var_l16 = 0, var_l17 = 0; + v128 var_l18 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g7; + var_l17 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l16 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62340u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l14 = var_i0; + var_i0 = 62344u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12848u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l16 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l13 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l2 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 32u); + var_l14 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 36u); + var_l12 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + } else { + var_i0 = 0u; + } + } + var_l11 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l17; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l16; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62340u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62344u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l11; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + goto var_B4; + } + var_i0 = var_l7; + var_i1 = instance->w2c_g4; + var_i2 = var_l7; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = var_l11; + var_i1 = 1u; + var_i0 -= var_i1; + var_l5 = var_i0; + var_i1 = 2u; + var_i0 &= var_i1; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + var_l4 = var_i0; + var_i0 = var_l5; + var_i1 = 4u; + var_i0 &= var_i1; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + var_l7 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 -= var_i1; + var_l0 = var_i0; + var_L10: + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l4; + if (var_i0) { + var_i0 = var_l7; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 34u; + var_i2 = 123u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 34u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } else { + var_i0 = var_l7; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 34u; + var_i2 = 92u; + var_i3 = 123u; + var_i0 = w2c_highlights_f8(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = 34u; + var_i3 = 1u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + var_l0 = var_i0; + } + var_i0 = var_l7; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i2 = 125u; + var_i3 = 0u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i1 = var_l0; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 45u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + } else { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L10; + } + } + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + goto var_B11; + } + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l15 = var_i0; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = var_l15; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 1u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_B9; + } + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L10; + } + var_i0 = var_l4; + var_i1 = var_l3; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 45u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + goto var_L10; + } + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_B9; + } + var_i0 = var_l15; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 45u; + var_i1 = var_l0; + var_i2 = var_l0; + var_i2 = w2c_highlights_f51(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + goto var_L10; + } + var_i0 = var_l3; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 45u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + goto var_L10; + } + var_i0 = var_l10; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L10; + } else { + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + goto var_B8; + } + UNREACHABLE; + var_B11:; + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + goto var_B8; + var_B9:; + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_B8:; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = var_l0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l11; + var_l13 = var_i0; + var_i0 = 1u; + var_l10 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 1u; + var_l8 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l11; + } + } + var_l11 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i2 = 10u; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = var_l2; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = 3u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + } + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l1; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l0; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i4 = instance->w2c_g4; + var_i5 = 3u; + var_i4 += var_i5; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 47u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 41u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 10792u; + var_i1 = 10538u; + var_i2 = 4u; + w2c_highlights_f71(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l5; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 27u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_L33: + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l15 = var_i0; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 2u; + var_i0 |= var_i1; + } else { + var_i0 = var_l15; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 4u; + var_i0 |= var_i1; + } else { + goto var_B34; + } + } + var_l4 = var_i0; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_L33;} + var_B34:; + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 2u; + var_i1 += var_i2; + var_l11 = var_i1; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 1u; + var_i0 |= var_i1; + var_l4 = var_i0; + var_i0 = var_l11; + } else { + var_i0 = var_l0; + } + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + var_l11 = var_i0; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f283(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + } + if (var_i0) { + var_i0 = 39u; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 1u; + var_l8 = var_i0; + goto var_L3; + } + var_i0 = var_l5; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 39u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 55u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l12 = var_i0; + goto var_L3; + } + var_i0 = var_l5; + var_i1 = 93u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l12; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l12 = var_i0; + goto var_L3; + } + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = var_l1; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 96u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_l0 = var_i0; + var_L46: + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B47;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B47;} + var_i0 = var_l0; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = var_l4; + var_i2 = 96u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_l0 = var_i2; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 96u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B45;} + goto var_L46; + var_B47:; + var_i0 = 0u; + var_B45:; + var_l4 = var_i0; + } + var_i0 = var_l4; + var_i1 = var_l1; + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 36u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l4; + if (var_i0) { + var_i0 = var_l4; + instance->w2c_g4 = var_i0; + } else { + var_i0 = 39u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g4; + var_l5 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = 4294967295u; + var_i1 = var_l3; + var_i2 = var_l5; + var_i1 = w2c_highlights_f291(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l6; + var_i3 = var_l12; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l4; + var_i1 = 255u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = var_l4; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l0 = var_i0; + if (var_i0) { + var_i0 = var_l0; + } else { + var_i0 = var_l2; + var_i1 = 0u; + var_i2 = var_l1; + var_i3 = 19u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l2 = var_i0; + var_i0 = var_l5; + var_i1 = var_l3; + var_i0 -= var_i1; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 26223u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_l9 = var_i0; + var_i0 = var_l1; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 7u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + } else { + var_i0 = var_l12; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = var_l2; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 23u; + } else { + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 23u; + var_i1 = 55u; + var_i2 = 8u; + var_i3 = var_l9; + var_i4 = var_l2; + var_i5 = 2u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l5; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_l14 = var_i2; + var_i3 = var_l6; + var_i3 = !(var_i3); + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = var_l2; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = 2u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = var_l6; + if (var_i0) { + var_i0 = 16u; + var_i1 = 29u; + var_i2 = var_l1; + var_i2 = w2c_highlights_f287(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l0; + } + } else { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 15u; + var_i1 = 58u; + var_i2 = var_l1; + var_i2 = w2c_highlights_f287(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l2; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 55u; + } else { + var_i0 = var_l2; + var_i1 = 5u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 58u; + } else { + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 16u; + var_i1 = 29u; + var_i2 = var_l1; + var_i2 = w2c_highlights_f287(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } else { + var_i0 = var_l9; + if (var_i0) { + var_i0 = 55u; + } else { + var_i0 = var_l6; + if (var_i0) { + var_i0 = 16u; + var_i1 = 29u; + var_i2 = var_l1; + var_i2 = w2c_highlights_f287(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 14u; + var_i1 = 58u; + var_i2 = var_l8; + if (var_i2) { + var_i2 = 0u; + } else { + var_i2 = 0u; + var_i3 = var_l0; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i3; + var_i3 = w2c_highlights_f287(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = !(var_i3); + if (var_i3) {goto var_B63;} + var_i2 = var_l1; + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l1; + var_i4 = 36u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = var_l0; + var_L65: + var_i3 = var_l0; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 >= var_i4; + if (var_i3) {goto var_B66;} + var_i3 = var_l0; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i3 = w2c_highlights_f47(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = var_l0; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_i5 = 39u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i3 = I32_CLZ(var_i3); + var_i4 = 5u; + var_i3 >>= (var_i4 & 31); + if (var_i3) {goto var_B66;} + var_i3 = var_l0; + var_i4 = 1u; + var_i3 += var_i4; + var_l0 = var_i3; + goto var_L65; + var_B66:; + var_i3 = var_l0; + var_i2 = w2c_highlights_f291(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 0u; + var_i2 = (u32)((s32)var_i2 < (s32)var_i3); + goto var_B63; + } + var_i2 = 1u; + var_B63:; + } + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + } + } + } + } + } + var_l1 = var_i0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 14u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 15u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 16u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 8u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 29u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + } + var_l8 = var_i0; + var_i0 = var_l1; + var_i1 = var_l3; + var_i2 = var_l5; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l5; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f286(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 1u; + var_l8 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l10; + if (var_i0) { + var_i0 = var_l10; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l10; + var_i2 = var_l1; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l10 = var_i0; + var_i0 = var_l1; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l10; + var_i1 = 1u; + var_i0 -= var_i1; + var_l10 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 40u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l13; + var_l11 = var_i0; + var_i0 = 0u; + var_l13 = var_i0; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + goto var_L3; + } + } + } + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4752u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_l8 = var_i0; + var_i0 = 0u; + var_i1 = var_l9; + var_i2 = var_l1; + var_i3 = 41u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 93u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = var_l1; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_i4 = 3u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + goto var_L3; + } else { + var_i0 = var_l1; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l0 = var_i0; + var_i1 = var_l1; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l5; + var_i4 = 59u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = var_l2; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = 3u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l1; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 46u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 2u; + var_i1 = 1u; + var_i2 = var_l14; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l1; + var_i0 = w2c_highlights_f284(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L76: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B77;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f284(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B77;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B77;} + var_i0 = instance->w2c_g4; + var_i1 = var_l3; + var_i0 = var_i0 > var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 93u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B77;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L76; + var_B77:; + var_i0 = 25u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l3; + var_i0 -= var_i1; + var_l0 = var_i0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l9; + var_i2 = var_l1; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = var_l1; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 124u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = var_l2; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = 3u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l2; + } + var_l2 = var_i0; + } + var_i0 = 0u; + var_i1 = var_l9; + var_i2 = var_l0; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l3; + var_i3 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 14906u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + } + } + } + var_l6 = var_i0; + goto var_L3; + } + UNREACHABLE; + var_B4:; + var_i0 = var_l16; + if (var_i0) { + var_i0 = 12848u; + instance->w2c_g32 = var_i0; + var_i0 = 12848u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12852u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12856u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12860u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12864u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12868u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12872u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12876u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12880u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12884u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f293(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3, u32 var_p4, u32 var_p5, u32 var_p6, u32 var_p7) { + u32 var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0; + v128 var_l12 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_L0: + var_i0 = var_p2; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l10; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 123u; + var_i2 = 125u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l10; + } + } else { + var_i0 = instance->w2c_g3; + } + var_l10 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_l10; + var_i2 = var_p0; + var_i3 = 1u; + var_i4 = var_p4; + var_i4 = !(var_i4); + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i1 = var_p0; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p3; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = var_p0; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 2u); + var_i2 = var_p0; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + goto var_B1; + } + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + goto var_B1; + } + } + var_i0 = var_p4; + var_i0 = !(var_i0); + var_i1 = var_l8; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l8; + var_i3 = 13u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_l8; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l8 = var_i0; + var_i0 = var_p1; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_p5; + var_i1 = 0u; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_l11 = var_i0; + var_i1 = 117u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l11; + var_i2 = 85u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l8; + var_i1 = 4u; + var_i2 = var_p5; + var_i3 = var_l11; + var_i4 = 117u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l8 = var_i0; + } + } + var_i0 = 44u; + var_i1 = var_p6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_l8; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l8; + var_p6 = var_i0; + } + var_i0 = var_l8; + instance->w2c_g4 = var_i0; + var_i0 = 2u; + var_i1 = var_l9; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 -= var_i3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l8 = var_i2; + var_i3 = 10u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l8; + var_i4 = 13u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = instance->w2c_g4; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + goto var_L0; + } + var_i0 = var_p2; + var_i1 = var_l8; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l8; + var_i3 = 125u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p7; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = var_l8; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + } + var_i0 = var_p7; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_p7; + var_i2 = 1u; + var_i1 -= var_i2; + var_i2 = var_p7; + var_i3 = var_p7; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l8; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p7 = var_i0; + var_i0 = 44u; + var_i1 = var_p6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_p6 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_p6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_p6 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L0; + var_B1:; + var_i0 = 44u; + var_i1 = var_p6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l9; + var_i1 = var_p7; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f294(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + u32 var_l4 = 0, var_l5 = 0; + v128 var_l6 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7; + var_i0 = instance->w2c_g4; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_p0; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = var_p1; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 2u); + var_i2 = var_p1; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = var_p1; + var_i1 = var_p2; + var_i2 = var_p3; + var_i3 = var_l4; + var_i4 = var_l4; + var_i5 = 0u; + var_i6 = var_l5; + var_i7 = 0u; + var_i0 = w2c_highlights_f293(instance, var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = instance->w2c_g22; + var_i1 = var_l4; + var_i2 = var_p0; + var_i3 = 3u; + var_i2 &= var_i3; + var_l5 = var_i2; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l5; + var_i3 = 1u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 10u; + instance->w2c_g25 = var_i0; + var_i0 = var_p1; + instance->w2c_g26 = var_i0; + var_i0 = var_p2; + var_i1 = var_p3; + var_i2 = 1u; + var_i1 <<= (var_i2 & 31); + var_i2 = var_l4; + var_i3 = 2u; + var_i2 <<= (var_i3 & 31); + var_i1 |= var_i2; + var_i0 |= var_i1; + instance->w2c_g27 = var_i0; + var_i0 = var_p0; + var_i1 = 2u; + var_i0 >>= (var_i1 & 31); + instance->w2c_g28 = var_i0; + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f295(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0; + v128 var_l16 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + u64 var_j2, var_j3, var_j4; + var_i0 = instance->w2c_g7; + var_l13 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12888u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l11 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } + var_l4 = var_i0; + } + var_i0 = 1u; + } + var_l2 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l13; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i2 = 10u; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g0; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = var_l1; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 1u; + var_l2 = var_i0; + } + } + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 0u; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = instance->w2c_g41; + var_i1 = instance->w2c_g42; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 91u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = 0u; + instance->w2c_g41 = var_i0; + } + } + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = var_l0; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L12: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B13;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B13;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L12; + var_B13:; + var_i0 = 1u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 2u); + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 2u); + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g3; + var_i2 = var_l1; + var_i3 = 2u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 8224u; + var_i0 |= var_i1; + var_l3 = var_i0; + var_i1 = 29282u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 25202u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 29286u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = 26226u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 29300u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = 29810u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = var_l1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 2u); + var_i2 = 1u; + var_i3 = var_l3; + var_i4 = 29282u; + var_i3 = var_i3 != var_i4; + var_i4 = var_l3; + var_i5 = 25202u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + w2c_highlights_f294(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = 0u; + var_i3 = 0u; + w2c_highlights_f294(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l6; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_l12 = var_i0; + var_i0 = var_l0; + var_i1 = 32u; + var_i0 |= var_i1; + var_l0 = var_i0; + var_i1 = 114u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 117u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 102u; + var_i1 = var_i1 == var_i2; + var_l14 = var_i1; + var_i2 = var_l0; + var_i3 = 98u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 116u; + var_i1 = var_i1 == var_i2; + var_l15 = var_i1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 114u; + var_i0 = var_i0 == var_i1; + var_l6 = var_i0; + var_i0 = var_l14; + var_i1 = var_l15; + var_i0 |= var_i1; + var_l12 = var_i0; + var_i0 = 1u; + var_l3 = var_i0; + } + var_i0 = var_l3; + var_i1 = var_l1; + var_i2 = var_l3; + var_i1 += var_i2; + var_l0 = var_i1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 39u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l0; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = var_l6; + var_i3 = var_l12; + w2c_highlights_f294(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l4; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + var_l0 = var_i1; + var_i2 = 25408u; + var_i3 = 31u; + var_i4 = 78u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i1 = 4294967295u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 18u; + var_i1 = var_l0; + var_i2 = var_l1; + var_i1 -= var_i2; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 435727982962ull; + var_j2 ^= var_j3; + var_j3 = 24ull; + var_j2 <<= (var_j3 & 63); + var_i2 = !(var_j2); + var_i1 &= var_i2; + if (var_i1) {goto var_B22;} + var_i0 = 0u; + goto var_B22; + } + var_i0 = var_l3; + var_B22:; + } + var_l3 = var_i0; + var_i1 = 255u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + var_i1 = instance->w2c_g4; + var_l0 = var_i1; + var_i2 = var_l1; + var_i1 -= var_i2; + var_l6 = var_i1; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 448345170285ull; + var_j2 ^= var_j3; + var_j3 = 24ull; + var_j2 <<= (var_j3 & 63); + var_i2 = !(var_j2); + var_i1 &= var_i2; + var_i2 = var_l6; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i3 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 1702060387u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + if (var_i1) {goto var_B25;} + var_i0 = var_l0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + if (var_i1) {goto var_B25;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4752u); + var_i2 = 4u; + var_i1 >>= (var_i2 & 31); + var_i2 = 1u; + var_i1 &= var_i2; + var_i0 |= var_i1; + var_B25:; + var_i1 = var_l2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 18u; + var_l0 = var_i0; + } else { + var_i0 = var_l10; + if (var_i0) { + var_i0 = 57u; + var_i1 = 15u; + var_i2 = var_l10; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = var_l10; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g41 = var_i0; + var_i0 = 0u; + instance->w2c_g42 = var_i0; + } + } else { + var_i0 = var_l4; + if (var_i0) { + var_i0 = 16u; + var_i1 = 29u; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g39; + var_i0 &= var_i1; + var_i1 = instance->w2c_g38; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 59u; + } else { + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 6u; + } else { + var_i0 = var_l8; + var_i1 = var_l1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 65u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 55u; + } else { + var_i0 = 14u; + var_i1 = 58u; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + } + var_l0 = var_i0; + } + } + } + var_i0 = var_l0; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i0 = !(var_i0); + var_i1 = var_l0; + var_i2 = 18u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = var_l4; + var_i3 = var_l5; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i2 = var_l0; + var_i3 = 59u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + var_l5 = var_i0; + var_i0 = 1u; + var_i1 = var_l9; + var_i2 = instance->w2c_g4; + var_i3 = var_l1; + var_i2 -= var_i3; + var_i3 = 6u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 107083775959404ull; + var_j3 ^= var_j4; + var_j4 = 16ull; + var_j3 <<= (var_j4 & 63); + var_i3 = !(var_j3); + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = var_l3; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l10 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + instance->w2c_g39 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g36; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g36 = var_i0; + var_i0 = instance->w2c_g42; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g41; + if (var_i0) { + w2c_highlights_f38(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + instance->w2c_g41 = var_i0; + } + var_i0 = 1u; + instance->w2c_g39 = var_i0; + } else { + var_i0 = 0u; + instance->w2c_g39 = var_i0; + var_i0 = var_l0; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f39(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g36; + if (var_i0) { + var_i0 = instance->w2c_g36; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g36 = var_i0; + } + } else { + var_i0 = instance->w2c_g41; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g42; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g42 = var_i0; + } else { + var_i0 = var_l0; + var_i1 = 93u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + w2c_highlights_f41(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + instance->w2c_g41 = var_i0; + } + } + } else { + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g38; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g38 = var_i0; + } else { + var_i0 = instance->w2c_g38; + if (var_i0) { + var_i0 = instance->w2c_g38; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g38 = var_i0; + } + } + } + } + } + } + var_i0 = var_l0; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l7; + var_i1 = 1u; + var_i0 += var_i1; + } else { + var_i0 = var_l7; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_l7; + var_i2 = var_l7; + var_i3 = var_l0; + var_i4 = 93u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i5 = 125u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l7 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + } else { + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_l4 = var_i0; + var_i1 = var_l0; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_l3 = var_i1; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_l2 = var_i1; + var_i2 = var_l6; + var_i3 = 61u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i2 = var_l0; + var_i3 = 59u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = var_l5; + var_i2 = var_l7; + var_i3 = var_l9; + var_i2 |= var_i3; + var_i2 = I32_CLZ(var_i2); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + var_i1 &= var_i2; + var_i0 &= var_i1; + var_l8 = var_i0; + var_i0 = 0u; + var_i1 = var_l9; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = var_l3; + instance->w2c_g39 = var_i0; + var_i0 = var_l5; + var_i1 = 0u; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4752u); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = var_l6; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l6; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = 25u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_l8 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = instance->w2c_g39; + var_i1 = var_l0; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + instance->w2c_g39 = var_i0; + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + } + } + var_l5 = var_i0; + } + goto var_L3; + var_B4:; + var_i0 = var_l11; + if (var_i0) { + var_i0 = 12888u; + instance->w2c_g32 = var_i0; + var_i0 = 12888u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12892u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12896u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12900u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12904u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12908u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f296(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + u64 var_j0, var_j1, var_j2, var_j3, var_j4; + var_i0 = var_p1; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_p1; + var_i2 = var_p0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 7u); + var_i3 = 105u; + var_i2 = var_i2 == var_i3; + var_i3 = var_p0; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 125823019607382ull; + var_j3 ^= var_j4; + var_j4 = 16ull; + var_j3 <<= (var_j4 & 63); + var_i3 = !(var_j3); + var_i2 &= var_i3; + var_i3 = var_p1; + var_i4 = var_p0; + var_i3 -= var_i4; + var_p1 = var_i3; + var_i4 = 8u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = var_p0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 7u); + var_i1 = 1144221042u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 8245922088697819732ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + var_i1 = var_p1; + var_i2 = 11u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 56u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 110386756149584ull; + var_j0 ^= var_j1; + var_j1 = 16ull; + var_j0 <<= (var_j1 & 63); + var_i0 = !(var_j0); + var_i1 = var_l2; + var_i2 = 5u; + var_i1 -= var_i2; + var_l3 = var_i1; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 521325933121ull; + var_j1 ^= var_j2; + var_j2 = 24ull; + var_j1 <<= (var_j2 & 63); + var_i1 = !(var_j1); + var_i0 &= var_i1; + var_i1 = var_p1; + var_i2 = 15u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 6u; + var_i0 += var_i1; + var_i1 = var_l3; + var_i2 = 18400u; + var_i3 = 3u; + var_i4 = 10u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = var_l2; + var_i2 = 18240u; + var_i3 = 7u; + var_i4 = 27u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f297(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0; + v128 var_l12 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7, + var_i8, var_i9, var_i10; + var_i0 = instance->w2c_g7; + var_l11 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12912u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l1 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + } + } else { + var_i0 = 0u; + } + } + var_l7 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l11; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = var_l7; + if (var_i0) {goto var_B6;} + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f81(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + } + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 0u; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l3; + var_i4 = 35u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 114u; + var_i0 = var_i0 == var_i1; + var_l8 = var_i0; + var_i0 = var_l3; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4752u); + var_i2 = 6u; + var_i1 >>= (var_i2 & 31); + var_i2 = 1u; + var_i1 &= var_i2; + var_i2 = var_l1; + var_i2 = !(var_i2); + var_i3 = var_l0; + var_i4 = 37u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l3; + var_l0 = var_i0; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 1u; + var_i3 = var_l0; + var_l7 = var_i3; + var_i4 = instance->w2c_g4; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4) + 1u); + var_i3 = var_i3 == var_i4; + var_i4 = instance->w2c_g4; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4) + 2u); + var_i5 = var_l0; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i4 = instance->w2c_g3; + var_i5 = instance->w2c_g4; + var_i6 = 2u; + var_i5 += var_i6; + var_i4 = var_i4 > var_i5; + var_i3 &= var_i4; + var_l6 = var_i3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_B6; + } + var_i0 = var_l0; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = !(var_i0); + var_i1 = var_l3; + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 37u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_L13: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B14;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 47u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B14;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L13; + var_B14:; + var_i0 = 60u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l1 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l1 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_l3 = var_i0; + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_i2 = 18464u; + var_i3 = 15u; + var_i4 = 40u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = 255u; + var_i0 &= var_i1; + var_l10 = var_i0; + var_i0 = 16u; + var_i1 = 29u; + var_i2 = var_l3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 15u; + var_i2 = 55u; + var_i3 = var_l4; + var_i4 = 1u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l1; + var_i3 = 0u; + var_i2 = (u32)((s32)var_i2 < (s32)var_i3); + if (var_i2) { + var_i2 = var_l2; + var_i3 = instance->w2c_g4; + var_i2 = w2c_highlights_f296(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l10 = var_i2; + var_i3 = 0u; + var_i2 = (u32)((s32)var_i2 < (s32)var_i3); + if (var_i2) { + var_i2 = var_l2; + var_i3 = instance->w2c_g4; + var_i2 = w2c_highlights_f82(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i2) { + var_i2 = 6u; + } else { + var_i2 = 55u; + var_i3 = 14u; + var_i4 = 58u; + var_i5 = var_l3; + var_i3 = var_i5 ? var_i3 : var_i4; + var_i4 = var_l0; + var_i5 = 65u; + var_i4 -= var_i5; + var_i5 = 25u; + var_i4 = var_i4 <= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + } + } else { + var_i2 = var_l10; + } + } else { + var_i2 = var_l10; + } + var_i3 = var_l4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l5; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_i1 = 0u; + var_i2 = var_l0; + var_i3 = 19u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = var_l0; + var_i1 = 18u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l0; + var_i2 = 19u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 21u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 32u; + } else { + var_i0 = 35u; + var_i1 = 25u; + var_i2 = var_l0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 4752u); + var_i3 = 128u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + } else { + var_i0 = var_l1; + } + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4752u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_l5 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + var_B6:; + var_i0 = 0u; + var_i1 = var_l7; + var_i2 = var_l6; + var_i2 = !(var_i2); + var_i3 = var_l7; + var_i4 = var_l8; + var_i5 = 0u; + var_i6 = var_l6; + var_i7 = var_l6; + var_i8 = 6u; + var_i9 = var_l2; + var_i10 = 0u; + var_i3 = w2c_highlights_f293(instance, var_i3, var_i4, var_i5, var_i6, var_i7, var_i8, var_i9, var_i10); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i3; + var_i4 = 2u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i3 = var_l0; + var_i4 = 1u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i0 = 1u; + var_l1 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l9; + if (var_i0) { + var_i0 = 12912u; + instance->w2c_g32 = var_i0; + var_i0 = 12912u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12916u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12920u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12924u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12928u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12932u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f298(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0; + v128 var_l8 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7, + var_i8, var_i9; + var_i0 = instance->w2c_g7; + var_l7 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12936u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l6 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } + } else { + var_i0 = 0u; + } + } + var_l4 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l7; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = var_l4; + if (var_i0) {goto var_B6;} + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 0u; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 38u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l3; + var_l1 = var_i0; + } + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_B6; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l0; + var_i0 = w2c_highlights_f58(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_L12: + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B13;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i1 = 47u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l5; + var_i2 = 58u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B13;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L12; + var_B13:; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 29u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + } + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_L17: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B18;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 47u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B18;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L17; + var_B18:; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = var_l2; + var_i0 = !(var_i0); + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + var_i3 = 19488u; + var_i4 = 3u; + var_i5 = 18u; + var_i1 = w2c_highlights_f76(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i1; + var_i2 = 49u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 4294967295u; + var_l3 = var_i0; + } + var_i0 = var_l3; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 < (s32)var_i1); + if (var_i0) { + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f296(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + } + var_i0 = 29u; + var_i1 = 55u; + var_i2 = 58u; + var_i3 = var_l1; + var_i4 = 65u; + var_i3 -= var_i4; + var_i4 = 25u; + var_i3 = var_i3 <= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l3; + var_i3 = var_l3; + var_i4 = 0u; + var_i3 = (u32)((s32)var_i3 < (s32)var_i4); + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l5; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l5; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = var_l1; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = w2c_highlights_f58(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + var_l2 = var_i0; + } + var_i0 = 35u; + var_i1 = 32u; + var_i2 = 25u; + var_i3 = var_l1; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 3728u); + var_i4 = 8u; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 4240u); + var_i3 = 128u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + instance->w2c_g4 = var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + var_B6:; + var_i0 = var_l4; + var_i1 = 0u; + var_i2 = var_l4; + var_i3 = 0u; + var_i4 = 0u; + var_i5 = 0u; + var_i6 = 1u; + var_i7 = 6u; + var_i8 = var_l0; + var_i9 = 0u; + var_i2 = w2c_highlights_f293(instance, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7, var_i8, var_i9); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 1u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l6; + if (var_i0) { + var_i0 = 12936u; + instance->w2c_g32 = var_i0; + var_i0 = 12936u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12940u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f299(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 0u; + w2c_highlights_f300(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f300(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, var_l8 = 0, + var_l9 = 0, var_l10 = 0; + u64 var_l11 = 0; + v128 var_l12 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + u64 var_j1, var_j2, var_j3, var_j4; + var_i0 = instance->w2c_g7; + var_l10 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12944u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l1 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + var_l4 = var_i0; + } + var_i0 = var_l8; + var_i0 = w2c_highlights_f59(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_l8 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l10; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L7: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B8;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 32u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l1; + var_i2 = 9u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B8;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L7; + var_B8:; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i0 -= var_i1; + var_i1 = 7u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 28539428140183145ull; + var_j1 ^= var_j2; + var_j2 = 8ull; + var_j1 <<= (var_j2 & 63); + var_i1 = !(var_j1); + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = 27u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = var_l3; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L10: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B11;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_B11; + } + var_i0 = var_l1; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B11;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L10; + var_B11:; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 0u; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + if (var_i1) { + var_i1 = 5u; + var_i2 = 4u; + var_i3 = instance->w2c_g4; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 2u); + var_l2 = var_i3; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l2; + var_i5 = 33u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + } else { + var_i1 = 4u; + } + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l7; + var_i1 = 42u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + if (var_i1) { + var_i1 = 5u; + var_i2 = 4u; + var_i3 = instance->w2c_g4; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 2u); + var_l2 = var_i3; + var_i4 = 42u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l2; + var_i5 = 33u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + } else { + var_i1 = 4u; + } + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + } + var_i0 = var_l6; + if (var_i0) { + var_i0 = var_l3; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_l6 = var_i0; + } + var_i0 = var_l3; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f57(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l8 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i2 = instance->w2c_g4; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 1u); + var_i2 = w2c_highlights_f44(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 &= var_i2; + var_i2 = var_l3; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + w2c_highlights_f50(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = var_p0; + if (var_i0) { + var_i0 = var_l6; + if (var_i0) { + var_i0 = 17u; + } else { + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_i2 = 18656u; + var_i3 = 31u; + var_i4 = 95u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l1; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l6 = var_i0; + var_i0 = var_l1; + var_i1 = 255u; + var_i0 &= var_i1; + } else { + var_i0 = 7u; + var_i1 = 0u; + var_i2 = instance->w2c_g4; + var_i3 = var_l2; + var_i2 -= var_i3; + var_l7 = var_i2; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l3; + var_i4 = 69u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = var_l7; + var_i1 = 18u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l1; + var_i2 = var_l2; + var_i2 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 16u); + var_i3 = 25970u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 8u); + var_j4 = 8463521976875444340ull; + var_i3 = var_j3 == var_j4; + var_i2 &= var_i3; + var_i3 = var_l2; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 8098989866033768808ull; + var_i3 = var_j3 == var_j4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + } + var_i0 = var_l7; + var_i1 = 32u; + var_i0 -= var_i1; + var_i1 = 1u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 4u; + var_i0 -= var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 1667854447u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 12u; + var_i1 -= var_i2; + var_l3 = var_i1; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 8247339359102984543ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l1; + var_i2 = var_l2; + var_i3 = var_l3; + var_i4 = 18656u; + var_i5 = 31u; + var_i6 = 95u; + var_i2 = w2c_highlights_f76(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l1; + } + } else { + var_i0 = var_l1; + } + } + } + var_l1 = var_i0; + } + var_i0 = var_l1; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_l3 = var_i1; + var_i2 = 19744u; + var_i3 = 31u; + var_i4 = 81u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = 4294967295u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_l1; + goto var_B29; + } + var_i0 = var_l3; + var_i1 = var_l2; + var_i0 -= var_i1; + var_l1 = var_i0; + var_i1 = 7u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 4u; + var_i0 -= var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i1 = 1952396849u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l7; + var_i2 = 1952395827u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l7; + var_i2 = 1952396342u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 9u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 499850898534ull; + var_j2 ^= var_j3; + var_j3 = 24ull; + var_j2 <<= (var_j3 & 63); + var_i2 = !(var_j2); + var_i1 &= var_i2; + var_i2 = var_l1; + var_i3 = 7u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_i3 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 7630441u; + var_i3 ^= var_i4; + var_i4 = 8u; + var_i3 <<= (var_i4 & 31); + var_i3 = !(var_i3); + var_i2 &= var_i3; + var_i3 = var_l1; + var_i4 = 8u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l2; + var_i4 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_i5 = 1953393013u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B31;} + } + var_i0 = 18u; + var_i1 = var_l2; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 8386105380227409268ull; + var_i1 = var_j1 == var_j2; + var_i2 = var_l2; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 7u); + var_j3 = 6077684084762633588ull; + var_i2 = var_j2 == var_j3; + var_i1 &= var_i2; + var_i2 = var_l1; + var_i3 = 15u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B29;} + var_i0 = var_l3; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 50u; + var_i0 -= var_i1; + var_i1 = 2u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 16777215u; + var_i0 &= var_i1; + var_l3 = var_i0; + var_i1 = 6514038u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 7627117u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B31;} + } + var_i0 = var_l1; + var_i1 = 5u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i1 = 1667593826u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 1667593833u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 1667593828u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = 1952542052u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l3; + var_i3 = 1667593845u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B31;} + } + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_i1 = 120u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 3u); + var_i2 = 50u; + var_i1 -= var_i2; + var_i2 = 2u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + var_i1 = var_l2; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 7627117u; + var_i1 ^= var_i2; + var_i2 = 8u; + var_i1 <<= (var_i2 & 31); + var_i1 = !(var_i1); + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 6u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B31;} + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5u); + var_i1 = 120u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i2 = 50u; + var_i1 -= var_i2; + var_i2 = 2u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + var_i1 = var_l2; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 1952542052u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 7u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B31;} + } + var_i0 = var_l1; + var_i1 = 5u; + var_i0 = var_i0 >= var_i1; + var_i1 = var_l2; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 435526135145ull; + var_j1 ^= var_j2; + var_j2 = 24ull; + var_j1 <<= (var_j2 & 63); + var_i1 = !(var_j1); + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 6u; + var_i1 = var_i1 >= var_i2; + var_i2 = var_l2; + var_i3 = var_l2; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 105u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l2; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_i5 = 117u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_l3 = var_i3; + var_i2 += var_i3; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 72057594037927935ull; + var_j2 &= var_j3; + var_l11 = var_j2; + var_j3 = 435526135145ull; + var_j2 ^= var_j3; + var_j3 = 24ull; + var_j2 <<= (var_j3 & 63); + var_i2 = !(var_j2); + var_i1 &= var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i1 = !(var_i1); + var_j2 = var_l11; + var_j3 = 32758219964116835ull; + var_i2 = var_j2 == var_j3; + var_i1 &= var_i2; + var_j2 = var_l11; + var_j3 = 32199663762104691ull; + var_i2 = var_j2 == var_j3; + var_i1 |= var_i2; + var_i2 = var_l1; + var_i3 = var_l3; + var_i2 -= var_i3; + var_i3 = 7u; + var_i2 = var_i2 >= var_i3; + var_i1 &= var_i2; + var_i2 = var_l1; + var_i3 = 8u; + var_i2 = var_i2 >= var_i3; + var_j3 = var_l11; + var_j4 = 28554821438563700ull; + var_i3 = var_j3 == var_j4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B31;} + var_i0 = 0u; + goto var_B29; + var_B31:; + var_i0 = 56u; + var_B29:; + var_l1 = var_i0; + } + var_i0 = var_l1; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_l5; + if (var_i0) { + var_i0 = 55u; + } else { + var_i0 = var_l2; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 6253671u; + var_i0 ^= var_i1; + var_i1 = 8u; + var_i0 <<= (var_i1 & 31); + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = var_l2; + var_i1 -= var_i2; + var_i2 = 3u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 60u; + } else { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 16u; + var_i1 = 14u; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l4; + if (var_i0) { + var_i0 = 29u; + } else { + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 6u; + } else { + var_i0 = 55u; + var_i1 = 58u; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + } + } + var_l1 = var_i0; + } + var_i0 = var_l1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 19u; + var_i0 = var_i0 == var_i1; + var_l5 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_l4 = var_i1; + var_i2 = var_l3; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5008u); + var_i1 = 1u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3984u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l1 = var_i1; + var_i2 = var_l3; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = 62u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + } + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L48: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B49;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 9u; + var_i0 -= var_i1; + var_i1 = 4u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l1; + var_i2 = 32u; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B49;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L48; + var_B49:; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l9; + if (var_i0) { + var_i0 = 12944u; + instance->w2c_g32 = var_i0; + var_i0 = 12944u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12948u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12952u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12956u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12960u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f301(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 1u; + w2c_highlights_f300(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f302(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5008u); + var_i1 = 1u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f303(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0; + v128 var_l12 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + var_i0 = instance->w2c_g7; + var_l11 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12968u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l2 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + } + } else { + var_i0 = 0u; + } + } + var_l4 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l11; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i1 = 0u; + var_i2 = var_l0; + var_i3 = instance->w2c_g4; + var_i4 = 10u; + var_i5 = 0u; + var_i6 = 1u; + var_i2 = w2c_highlights_f5(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = instance->w2c_g4; + var_i2 = var_i2 >= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l8 = var_i0; + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l8; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 34u; + var_i1 = 1u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l6; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l8 = var_i0; + var_i0 = 4294967295u; + var_i1 = var_l1; + var_i2 = var_l6; + var_i3 = 19616u; + var_i4 = 7u; + var_i5 = 25u; + var_i1 = w2c_highlights_f76(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l2; + var_i3 = var_l3; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l10 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l7; + var_i2 = var_l10; + var_i3 = 8u; + var_i2 >>= (var_i3 & 31); + var_l5 = var_i2; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i0 = 1u; + var_i1 = var_l4; + var_i2 = var_l5; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = 1u; + var_i1 = var_l3; + var_i2 = var_l10; + var_i3 = 255u; + var_i2 &= var_i3; + var_l0 = var_i2; + var_i3 = 20u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l6; + var_i4 = var_l1; + var_i3 -= var_i4; + var_i4 = 6u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + } else { + var_i0 = var_l3; + if (var_i0) { + var_i0 = 23u; + var_l0 = var_i0; + } else { + var_i0 = var_l5; + if (var_i0) { + var_i0 = 15u; + var_i1 = 55u; + var_i2 = var_l5; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + } else { + var_i0 = var_l0; + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 8u; + var_i1 = 55u; + var_i2 = var_l4; + var_i2 = !(var_i2); + var_i3 = var_l6; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 40u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l2; + if (var_i0) { + var_i0 = 16u; + var_i1 = 29u; + var_i2 = var_l8; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l6; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 14u; + } else { + var_i0 = 59u; + var_i1 = 58u; + var_i2 = var_l8; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l8; + var_i4 = 1u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 58u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + var_l0 = var_i0; + } + } + } + var_i0 = var_l0; + var_i1 = var_l1; + var_i2 = var_l6; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = var_l4; + var_i1 = 0u; + var_i2 = var_l0; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = var_l0; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 125u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 1u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l6; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l6; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f302(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L26: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f302(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B27;} + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B27;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L26; + var_B27:; + var_i0 = 25u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i0 -= var_i1; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l7; + var_i1 = var_l4; + var_i2 = var_l1; + var_i2 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 15917u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l4; + } + var_i1 = 0u; + var_i2 = var_l0; + var_i3 = 61u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + } + goto var_L3; + var_B4:; + var_i0 = var_l9; + if (var_i0) { + var_i0 = 12968u; + instance->w2c_g32 = var_i0; + var_i0 = 12968u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12972u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12976u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12980u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12984u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f304(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5008u); + var_i1 = 2u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f305(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0; + v128 var_l11 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + var_i0 = instance->w2c_g7; + var_l9 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12992u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l8 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l2 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + } else { + var_i0 = 0u; + } + } + var_l1 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l9; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = var_l1; + var_i2 = var_l0; + var_i3 = instance->w2c_g4; + var_i4 = 10u; + var_i5 = 0u; + var_i6 = 1u; + var_i2 = w2c_highlights_f5(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = instance->w2c_g4; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + } + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = var_l4; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_l10 = var_i0; + var_i1 = var_l4; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 5u; + var_i1 = 4u; + var_i2 = var_l4; + var_i3 = var_l5; + var_i2 = var_i2 == var_i3; + var_i3 = var_l5; + var_i4 = 33u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = var_l10; + if (var_i0) { + var_i0 = 2u; + var_i1 = var_l0; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 2u; + var_i1 = var_l0; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 96u; + var_i1 = 1u; + var_i2 = 44u; + w2c_highlights_f55(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l7; + var_i1 = instance->w2c_g4; + var_l4 = var_i1; + var_i2 = 20032u; + var_i3 = 15u; + var_i4 = 51u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l5; + var_i1 = 255u; + var_i0 &= var_i1; + var_l2 = var_i0; + var_i0 = var_l1; + var_i1 = 0u; + var_i2 = var_l1; + var_i3 = 4u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = var_l5; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l0 = var_i0; + if (var_i0) { + var_i0 = var_l0; + var_l1 = var_i0; + } + } else { + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = var_l1; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l4; + var_i3 = w2c_highlights_f73(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i3; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 40u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + if (var_i0) { + var_i0 = 15u; + var_i1 = 23u; + var_i2 = 55u; + var_i3 = var_l1; + var_i4 = 3u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l1; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 4u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + } else { + var_i0 = var_l5; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 16u; + var_i1 = 14u; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l2; + if (var_i0) { + var_i0 = 29u; + } else { + var_i0 = 6u; + var_i1 = 55u; + var_i2 = 58u; + var_i3 = var_l0; + var_i4 = 65u; + var_i3 -= var_i4; + var_i4 = 25u; + var_i3 = var_i3 <= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l7; + var_i3 = var_l4; + var_i2 = w2c_highlights_f82(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + var_l2 = var_i0; + } + } + var_i0 = var_l2; + var_i1 = var_l7; + var_i2 = var_l4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + w2c_highlights_f50(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l7; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l7; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = var_l3; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 93u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 125u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 41u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 0u; + var_i2 = var_l3; + var_i3 = 1u; + var_i2 -= var_i3; + var_l3 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + } else { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + } + } + var_i0 = var_l0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l3; + var_i2 = var_l3; + var_i2 = !(var_i2); + var_i3 = var_l1; + var_i4 = 2u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = var_l1; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + var_l6 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + } + var_i0 = var_l0; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 4u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + } + var_i0 = var_l0; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 125u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l5 = var_i0; + var_i1 = var_l0; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_l2 = var_i1; + var_i2 = var_l0; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l7; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l5; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + } + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f304(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3984u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = var_l4; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l4; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = 25u; + var_i1 = var_l7; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l7; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l8; + if (var_i0) { + var_i0 = 12992u; + instance->w2c_g32 = var_i0; + var_i0 = 12992u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12996u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13000u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13004u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f306(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0; + v128 var_l9 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g7; + var_l8 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13008u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l7 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + } else { + var_i0 = 0u; + } + } + var_l4 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l8; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + var_l0 = var_i0; + var_L9: + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + goto var_B10; + } + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 1u; + var_i2 -= var_i3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 92u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + } else { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L9; + } + var_l1 = var_i0; + var_B10:; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 2236962u; + var_i1 = 3u; + var_i2 = 44u; + w2c_highlights_f63(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g25; + var_i1 = 20u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 92u; + instance->w2c_g27 = var_i0; + } + } + } else { + var_i0 = 34u; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 58u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 3u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l5 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = 4294967295u; + var_i1 = var_l1; + var_i2 = var_l5; + var_i3 = 20224u; + var_i4 = 7u; + var_i5 = 24u; + var_i1 = w2c_highlights_f76(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i1; + var_i2 = var_l2; + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l2; + var_i4 = 123u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l2; + var_i4 = 64u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l2; + var_i5 = 40u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l2; + var_i5 = 38u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 |= var_i3; + var_i2 = I32_CLZ(var_i2); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + var_i3 = var_l6; + var_i4 = 255u; + var_i3 &= var_i4; + var_i4 = 17u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l6; + var_i1 = 255u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i0 = var_l6; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l4 = var_i0; + } else { + var_i0 = var_l4; + if (var_i0) { + var_i0 = 14u; + var_i1 = 15u; + var_i2 = 6u; + var_i3 = 55u; + var_i4 = var_l1; + var_i5 = var_l5; + var_i4 = w2c_highlights_f82(instance, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l4; + var_i4 = 2u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l4; + var_i3 = 3u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } else { + var_i0 = var_l0; + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 6u; + var_i1 = 55u; + var_i2 = var_l1; + var_i3 = var_l5; + var_i2 = w2c_highlights_f82(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 59u; + var_i1 = 29u; + var_i2 = var_l3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 14u; + var_i2 = 29u; + var_i3 = var_l2; + var_i4 = 40u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l2; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l0 = var_i0; + } + } + var_i0 = var_l0; + var_i1 = var_l1; + var_i2 = var_l5; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_l3; + var_i3 = var_l0; + var_i4 = 40u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l3 = var_i1; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 -= var_i1; + var_l3 = var_i0; + } + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 33u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 124u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 38u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + var_B4:; + var_i0 = var_l7; + if (var_i0) { + var_i0 = 13008u; + instance->w2c_g32 = var_i0; + var_i0 = 13008u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13012u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f307(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5008u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f308(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, + var_l16 = 0, var_l17 = 0; + v128 var_l18 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + var_i0 = instance->w2c_g7; + var_l16 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l14 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62340u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + var_i0 = 1u; + var_l1 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13016u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l14 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l13 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 32u); + var_l1 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + } else { + var_i0 = 0u; + } + } + var_l8 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l16; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62340u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l8; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l4 = var_i0; + goto var_B4; + } + var_i0 = 34u; + var_i1 = 39u; + var_i2 = var_l8; + var_i3 = 3u; + var_i2 = var_i2 >= var_i3; + var_l17 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = var_l8; + var_i1 = 1u; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_l12 = var_i0; + var_i0 = var_l4; + var_i1 = instance->w2c_g4; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_L9: + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i3 = var_l3; + var_i4 = 1u; + var_i5 = var_l12; + var_i5 = !(var_i5); + var_i1 = w2c_highlights_f5(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i1; + var_i2 = var_l17; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = var_l4; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i2 = 36u; + var_i3 = 0u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + } + var_i0 = var_l4; + var_i1 = var_l2; + var_i2 = var_l2; + var_i3 = var_l4; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l15 = var_i0; + var_i1 = var_l3; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l12; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l3; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l3; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 1u; + var_i3 = var_l12; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l6 = var_i0; + goto var_B10; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + var_i0 = var_l15; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l15; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = var_l15; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 3u; + var_i1 = var_l6; + var_i2 = var_l0; + var_i2 = w2c_highlights_f84(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + goto var_L9; + } + var_i0 = var_l0; + var_i1 = 16u; + var_i2 = var_l10; + var_i0 = w2c_highlights_f85(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) {goto var_L9;} + var_i0 = 2u; + goto var_B8; + var_B10:; + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l6; + var_B8:; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = var_l0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l8; + var_l13 = var_i0; + var_i0 = 1u; + var_l10 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l0; + var_i0 = !(var_i0); + var_i1 = var_l8; + var_i2 = 1u; + var_i1 &= var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l8; + } + } + var_l8 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f81(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 1u; + var_l1 = var_i0; + } + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l6; + var_i4 = 42u; + var_i3 = var_i3 == var_i4; + var_i4 = instance->w2c_g4; + var_i5 = 3u; + var_i4 += var_i5; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 47u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g1; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_l12 = var_i0; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 3u; + var_i1 = 1u; + var_i2 = var_l12; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + var_i0 = var_l0; + var_i1 = var_l3; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = var_l6; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l8; + var_i1 = 1u; + var_i0 += var_i1; + var_l8 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l11 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 46u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = 4294967295u; + var_i1 = var_l2; + var_i2 = var_l6; + var_i3 = 20320u; + var_i4 = 15u; + var_i5 = 60u; + var_i1 = w2c_highlights_f76(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l7; + var_i3 = var_l9; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l12 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l12; + var_i1 = 255u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = var_l12; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l0 = var_i0; + if (var_i0) { + var_i0 = var_l0; + var_l5 = var_i0; + } + var_i0 = 1u; + var_i1 = var_l9; + var_i2 = var_l1; + var_i3 = 20u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = var_l1; + var_i1 = 56u; + var_i0 = var_i0 == var_i1; + } else { + var_i0 = var_l9; + if (var_i0) { + var_i0 = 23u; + var_l1 = var_i0; + } else { + var_i0 = var_l5; + if (var_i0) { + var_i0 = 55u; + var_i1 = 15u; + var_i2 = 58u; + var_i3 = var_l3; + var_i4 = 40u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l5; + var_i3 = 1u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + } else { + var_i0 = var_l7; + if (var_i0) { + var_i0 = 16u; + var_i1 = 55u; + var_i2 = 29u; + var_i3 = var_l0; + var_i4 = 65u; + var_i3 -= var_i4; + var_i4 = 25u; + var_i3 = var_i3 <= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l3; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l3; + var_i4 = 123u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l2; + var_i1 = var_l6; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 6u; + } else { + var_i0 = var_l0; + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 55u; + } else { + var_i0 = var_l3; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 15u; + var_i1 = 14u; + var_i2 = var_l11; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l6; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 58u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 29u; + } else { + var_i0 = 14u; + var_i1 = 58u; + var_i2 = var_l1; + var_i3 = var_l11; + var_i3 = !(var_i3); + var_i4 = var_l3; + var_i4 = w2c_highlights_f46(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = var_l3; + var_i5 = w2c_highlights_f44(instance, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 |= var_i5; + var_i5 = var_l3; + var_i5 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i5) + 5008u); + var_i6 = 4u; + var_i5 >>= (var_i6 & 31); + var_i6 = 1u; + var_i5 &= var_i6; + var_i4 |= var_i5; + var_i3 &= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + } + } + var_l1 = var_i0; + } + } + var_i0 = var_l1; + var_i1 = 55u; + var_i0 = var_i0 == var_i1; + } + var_l11 = var_i0; + var_i0 = var_l1; + var_i1 = var_l2; + var_i2 = var_l6; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l11 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l10; + if (var_i0) { + var_i0 = var_l10; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l10; + var_i2 = var_l0; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l10 = var_i0; + var_i0 = var_l0; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l10; + var_i1 = 1u; + var_i0 -= var_i1; + var_l10 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l13; + var_l8 = var_i0; + var_i0 = 0u; + var_l13 = var_i0; + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + } + } + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = var_l0; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 93u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = 0u; + var_l11 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + } + var_i0 = var_l0; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_l2 = var_i0; + var_i1 = var_l0; + var_i2 = 125u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_l1 = var_i0; + var_i0 = 0u; + var_i1 = var_l9; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l6 = var_i0; + var_i1 = var_l0; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = var_l6; + if (var_i0) { + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 0u; + var_l11 = var_i0; + var_i0 = 1u; + var_l1 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 46u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l7 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f307(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_L45: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f307(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B46;} + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 42u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B46;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L45; + var_B46:; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_l2; + var_i1 -= var_i2; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f80(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + var_l11 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + } + var_i0 = var_l9; + var_i1 = 0u; + var_i2 = var_l0; + var_i3 = 61u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + } + goto var_L3; + var_B4:; + var_i0 = var_l14; + if (var_i0) { + var_i0 = 13016u; + instance->w2c_g32 = var_i0; + var_i0 = 13016u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13020u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13024u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13028u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13032u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13036u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13040u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13044u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13048u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f309(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5008u); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f310(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0; + v128 var_l14 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7; + var_i0 = instance->w2c_g7; + var_l13 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13056u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l10 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + } + var_l4 = var_i0; + } + var_i0 = 1u; + } + var_l1 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l13; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i2 = 10u; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 1u; + var_l1 = var_i0; + } + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 0u; + var_i3 = instance->w2c_g3; + var_i4 = instance->w2c_g4; + var_i5 = 1u; + var_i4 += var_i5; + var_i3 = var_i3 > var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l11 = var_i1; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 2u); + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 11643u; + var_i1 = 32045u; + var_i2 = 27u; + w2c_highlights_f71(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 11643u; + var_i1 = 32045u; + var_i2 = 5u; + var_i3 = 4u; + var_i4 = instance->w2c_g4; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4) + 2u); + var_i5 = 124u; + var_i4 = var_i4 == var_i5; + var_i5 = instance->w2c_g4; + var_i5 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i5) + 2u); + var_i6 = 94u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i5 = instance->w2c_g3; + var_i6 = instance->w2c_g4; + var_i7 = 2u; + var_i6 += var_i7; + var_i5 = var_i5 > var_i6; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + w2c_highlights_f71(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l11; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_L11: + var_i0 = var_l3; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B12;} + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 45u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B12;} + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + goto var_L11; + var_B12:; + var_i0 = var_l3; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + var_i1 = var_l3; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f309(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = 2u; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_l0 = var_i1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + if (var_i1) { + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l0; + var_i4 = 1u; + var_i3 += var_i4; + var_i4 = var_l0; + var_i5 = var_l0; + var_i5 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i5)); + var_i6 = 32u; + var_i5 = var_i5 == var_i6; + var_i6 = var_l0; + var_i7 = instance->w2c_g3; + var_i6 = var_i6 < var_i7; + var_i5 &= var_i6; + var_i3 = var_i5 ? var_i3 : var_i4; + var_l0 = var_i3; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 124u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_i5 = 94u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l0; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_i5 = 36u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = var_l0; + var_i5 = instance->w2c_g3; + var_i4 = var_i4 < var_i5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + } else { + var_i1 = 4u; + } + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + var_B10:; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 34u; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_l3 = var_i2; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 <= var_i2; + if (var_i1) {goto var_B16;} + var_i0 = 1u; + var_i1 = var_l3; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_l12 = var_i1; + var_i2 = 92u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B16;} + var_i0 = 0u; + var_i1 = var_l12; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l12; + var_i3 = 13u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B16;} + var_i0 = var_l3; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_B16:; + } else { + var_i0 = 0u; + } + if (var_i0) { + var_i0 = 39u; + var_i1 = 0u; + var_i2 = 47u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l7; + var_i0 = !(var_i0); + var_l7 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l11; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 39u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_i2 = 20544u; + var_i3 = 15u; + var_i4 = 59u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i1 = 255u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i0 = var_l3; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 < (s32)var_i1); + if (var_i0) { + var_i0 = var_l5; + var_i1 = var_l4; + var_i2 = var_l8; + var_i3 = var_l2; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 65u; + var_i3 -= var_i4; + var_i4 = 25u; + var_i3 = var_i3 <= var_i4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 55u; + } else { + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 8u; + } else { + var_i0 = var_l7; + var_i1 = var_l1; + var_i2 = var_l9; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 14u; + var_i1 = 15u; + var_i2 = var_l7; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 14u; + var_i1 = 58u; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + var_l0 = var_i0; + } + var_i0 = var_l0; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 19u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l5 = var_i0; + } else { + var_i0 = var_l0; + var_i1 = 20u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l8 = var_i0; + } else { + var_i0 = 0u; + var_l5 = var_i0; + } + } + var_i0 = var_l3; + var_i1 = 255u; + var_i0 = (u32)((s32)var_i0 > (s32)var_i1); + var_l9 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l6; + var_i1 = 1u; + var_i0 >>= (var_i1 & 31); + var_i1 = var_l6; + var_i2 = 1u; + var_i1 <<= (var_i2 & 31); + var_i2 = var_l0; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 4752u); + var_i3 = 8u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = var_l6; + var_i3 = 1u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f309(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L31: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B32;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f309(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B32;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L31; + var_B32:; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 -= var_i1; + var_l0 = var_i0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l4; + var_i2 = var_l2; + var_i2 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l1 = var_i2; + var_i3 = 14906u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 0u; + var_i2 = var_l1; + var_i3 = 15677u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + } + var_i0 = var_l0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l10; + if (var_i0) { + var_i0 = 13056u; + instance->w2c_g32 = var_i0; + var_i0 = 13056u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13060u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13064u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13068u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13072u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13076u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f311(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0; + v128 var_l14 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + u64 var_j1, var_j2, var_j3, var_j4; + var_i0 = instance->w2c_g7; + var_l13 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + var_i0 = 1u; + var_l8 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13080u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l12 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + } + var_l7 = var_i0; + } + var_i0 = var_l11; + var_i0 = w2c_highlights_f59(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_l11 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l13; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i2 = 10u; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 1u; + var_l8 = var_i0; + } + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l10 = var_i0; + var_i0 = var_l8; + var_l0 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = var_l1; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l10; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l10; + var_i5 = 33u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l10; + var_i4 = 42u; + var_i3 = var_i3 == var_i4; + var_i4 = instance->w2c_g4; + var_i5 = 3u; + var_i4 += var_i5; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 47u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i4 = var_l10; + var_i5 = 33u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i0 -= var_i1; + var_i1 = 7u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 28539428140183145ull; + var_j1 ^= var_j2; + var_j2 = 8ull; + var_j1 <<= (var_j2 & 63); + var_i1 = !(var_j1); + var_i0 &= var_i1; + var_l9 = var_i0; + var_i0 = 27u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l9; + var_i1 = var_l1; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L11: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B12;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B12;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 62u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_L11;} + var_B12:; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l9 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f57(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l11 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l10 = var_i0; + var_i0 = 4294967295u; + var_i1 = var_l2; + var_i2 = var_l1; + var_i3 = 20768u; + var_i4 = 15u; + var_i5 = 67u; + var_i1 = w2c_highlights_f76(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i1; + var_i2 = 0u; + var_i1 = (u32)((s32)var_i1 < (s32)var_i2); + if (var_i1) { + var_i1 = 0u; + var_i2 = var_l1; + var_i3 = var_l2; + var_i2 -= var_i3; + var_l0 = var_i2; + var_i3 = 4u; + var_i2 = var_i2 < var_i3; + if (var_i2) {goto var_B17;} + var_i1 = 56u; + var_i2 = var_l0; + var_i3 = 7u; + var_i2 = var_i2 >= var_i3; + var_i3 = var_l2; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 32199663762104691ull; + var_j3 ^= var_j4; + var_j4 = 8ull; + var_j3 <<= (var_j4 & 63); + var_i3 = !(var_j3); + var_i2 &= var_i3; + if (var_i2) {goto var_B17;} + var_i1 = 56u; + var_i2 = var_l1; + var_i3 = 4u; + var_i2 -= var_i3; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l5 = var_i2; + var_i3 = 1952396849u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l5; + var_i4 = 1952395827u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l5; + var_i4 = 1952396342u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l0; + var_i4 = 7u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l2; + var_i4 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_i5 = 7630441u; + var_i4 ^= var_i5; + var_i5 = 8u; + var_i4 <<= (var_i5 & 31); + var_i4 = !(var_i4); + var_i3 &= var_i4; + var_i4 = var_l0; + var_i5 = 8u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l2; + var_i5 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i5)); + var_i6 = 1953393013u; + var_i5 = var_i5 == var_i6; + var_i4 &= var_i5; + var_i3 |= var_i4; + var_i2 &= var_i3; + if (var_i2) {goto var_B17;} + var_i1 = 56u; + var_i2 = var_l2; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 829319533u; + var_i2 = var_i2 == var_i3; + if (var_i2) {goto var_B17;} + var_i1 = var_l1; + var_l0 = var_i1; + var_i2 = 1u; + var_i1 -= var_i2; + var_l5 = var_i1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 49u; + var_i1 -= var_i2; + var_i2 = 3u; + var_i1 = var_i1 <= var_i2; + if (var_i1) { + var_i1 = var_l1; + var_i2 = 2u; + var_i1 -= var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 120u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 3u; + var_i2 -= var_i3; + var_l0 = var_i2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 49u; + var_i2 -= var_i3; + var_i3 = 3u; + var_i2 = var_i2 <= var_i3; + var_i1 &= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + if (var_i1) { + var_i1 = var_l5; + var_l0 = var_i1; + } + } + var_i1 = 0u; + var_i2 = var_l0; + var_i3 = var_l1; + var_i2 = var_i2 == var_i3; + if (var_i2) {goto var_B17;} + var_i1 = 56u; + var_i2 = var_l2; + var_i3 = var_l0; + var_i4 = 20768u; + var_i5 = 15u; + var_i6 = 67u; + var_i2 = w2c_highlights_f76(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 56u; + var_i2 = var_i2 == var_i3; + if (var_i2) {goto var_B17;} + var_i1 = 0u; + var_B17:; + var_l0 = var_i1; + var_i2 = 4294967295u; + var_i3 = var_l0; + var_i1 = var_i3 ? var_i1 : var_i2; + goto var_B15; + } + var_i1 = var_l0; + var_B15:; + var_i2 = var_l3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l0; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l6 = var_i0; + var_i0 = var_l0; + var_i1 = 255u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i1 = 56u; + var_i0 = var_i0 == var_i1; + } else { + var_i0 = var_l7; + if (var_i0) { + var_i0 = 1u; + var_l0 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l6; + if (var_i0) { + var_i0 = 55u; + var_i1 = 23u; + var_i2 = var_l6; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_l5 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = var_l5; + } else { + var_i0 = var_l2; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 6248019u; + var_i0 ^= var_i1; + var_i1 = 8u; + var_i0 <<= (var_i1 & 31); + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 60u; + var_l0 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l3; + if (var_i0) { + var_i0 = 16u; + var_i1 = 29u; + var_i2 = var_l10; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l10; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + if (var_i0) { + var_i0 = 15u; + } else { + var_i0 = 55u; + var_i1 = 14u; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l0 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l2; + var_i1 = var_l1; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 6u; + var_l0 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l4; + var_i1 = 55u; + var_i2 = 58u; + var_i3 = var_l2; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 65u; + var_i3 -= var_i4; + var_i4 = 25u; + var_i3 = var_i3 <= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l0 = var_i1; + var_i2 = 55u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 58u; + var_i1 = var_l0; + var_i2 = var_l2; + var_i2 = w2c_highlights_f58(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + var_i3 = 60u; + var_i2 = var_i2 != var_i3; + var_i3 = var_l0; + var_i4 = 44u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + } + var_i0 = var_l0; + var_i1 = 55u; + var_i0 = var_i0 == var_i1; + } + } + } + } + } + } + } + var_l4 = var_i0; + var_i0 = var_l0; + var_i1 = var_l2; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l5; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = var_l7; + var_i2 = var_l1; + var_i3 = 91u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 0u; + var_i2 = var_l1; + var_i3 = 93u; + var_i2 = var_i2 != var_i3; + var_l0 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = var_l0; + var_i1 = var_l1; + var_i2 = 91u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l0 = var_i0; + var_i1 = var_l1; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = var_l0; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + goto var_L3; + } else { + var_i0 = var_l1; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l5; + var_i4 = 58u; + var_i3 = var_i3 == var_i4; + var_l3 = var_i3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + } else { + var_i0 = var_l1; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_l0 = var_i0; + var_i1 = var_l5; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l0; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = 35u; + var_i2 = var_l0; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l3 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l1; + var_i0 = w2c_highlights_f244(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3984u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = var_l5; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l5; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = var_l4; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = instance->w2c_g4; + var_i2 = w2c_highlights_f80(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + } + } + } + var_l4 = var_i0; + goto var_L3; + } + UNREACHABLE; + var_B4:; + var_i0 = var_l12; + if (var_i0) { + var_i0 = 13080u; + instance->w2c_g32 = var_i0; + var_i0 = 13080u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13084u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13088u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13092u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13096u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13100u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13104u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f312(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0; + v128 var_l12 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + var_i0 = instance->w2c_g7; + var_l10 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13112u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l8 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + } + } else { + var_i0 = 0u; + } + } + var_l1 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l10; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l7; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = 0u; + var_i1 = var_l7; + var_i2 = instance->w2c_g4; + var_l0 = var_i2; + var_L8: + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i4 = 34u; + var_i5 = 1u; + var_i6 = 0u; + var_i2 = w2c_highlights_f5(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 >= var_i3; + if (var_i2) {goto var_B9;} + var_i2 = instance->w2c_g4; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 34u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 34u; + var_i2 = var_i2 == var_i3; + var_i3 = instance->w2c_g4; + var_i4 = 2u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 34u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = instance->w2c_g4; + var_i3 = 3u; + var_i2 += var_i3; + instance->w2c_g4 = var_i2; + var_i2 = 44u; + var_i3 = var_l0; + var_i4 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 1u; + goto var_B7; + } + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + instance->w2c_g4 = var_i2; + } else { + var_i2 = var_l0; + var_i2 = w2c_highlights_f84(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = instance->w2c_g4; + var_l0 = var_i2; + } + goto var_L8; + var_B9:; + var_i2 = 44u; + var_i3 = var_l0; + var_i4 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 0u; + var_B7:; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_l9 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l9; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l2; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l2; + var_i4 = 42u; + var_i3 = var_i3 == var_i4; + var_i4 = instance->w2c_g4; + var_i5 = 3u; + var_i4 += var_i5; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 47u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l4; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l7 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l4; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l5; + var_i1 = instance->w2c_g4; + var_l4 = var_i1; + var_i2 = 21024u; + var_i3 = 15u; + var_i4 = 61u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i1 = 1023u; + var_i0 = (u32)((s32)var_i0 > (s32)var_i1); + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1023u; + var_i0 &= var_i1; + var_i1 = 4294967295u; + var_i2 = var_l4; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i2; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l3; + var_i3 = !(var_i3); + var_i4 = var_l2; + var_i5 = var_l4; + var_i4 = var_i4 > var_i5; + var_i3 &= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + } + var_i0 = var_l2; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l6; + var_i1 = var_l2; + var_i2 = 8u; + var_i1 >>= (var_i2 & 31); + var_i2 = var_l3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = var_l2; + var_i1 = 255u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i1 = 56u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + } else { + var_i0 = var_l4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = var_l6; + if (var_i0) { + var_i0 = 55u; + var_i1 = 23u; + var_i2 = var_l6; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_l1 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_i1 = var_l6; + var_i2 = var_l2; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 46u; + var_i2 = var_i2 != var_i3; + var_i3 = var_l1; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + } else { + var_i0 = var_l3; + if (var_i0) { + var_i0 = var_l2; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 16u; + } else { + var_i0 = 55u; + var_i1 = 29u; + var_i2 = var_l0; + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_l1 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l0 = var_i0; + } else { + var_i0 = var_l2; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 55u; + var_i1 = 15u; + var_i2 = 14u; + var_i3 = var_l1; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + } else { + var_i0 = var_l5; + var_i1 = var_l4; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 6u; + } else { + var_i0 = 55u; + var_i1 = 58u; + var_i2 = var_l0; + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_l1 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l0 = var_i0; + } + } + } + } + var_i0 = var_l0; + var_i1 = var_l5; + var_i2 = var_l4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + w2c_highlights_f50(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = var_l0; + var_i1 = 91u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l0; + var_i2 = 93u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l11 = var_i0; + var_i1 = var_l0; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = var_l11; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l4; + var_i4 = 58u; + var_i3 = var_i3 == var_i4; + var_l3 = var_i3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + } else { + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 1u; + var_i3 = var_l4; + var_i4 = 46u; + var_i3 = var_i3 == var_i4; + var_l0 = var_i3; + var_i4 = var_l2; + var_i5 = 46u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = 35u; + var_i2 = var_l0; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l4; + var_i1 = 46u; + var_i0 = var_i0 != var_i1; + var_l3 = var_i0; + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = var_l0; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f244(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } else { + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3984u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = var_l4; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l4; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = var_l0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + } + var_i0 = 25u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = var_l5; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f80(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l0; + var_i4 = 62u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i3 = var_l5; + var_i4 = var_l9; + var_i3 = var_i3 != var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 0u; + } + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + } + } + var_l1 = var_i0; + } + goto var_L3; + var_B4:; + var_i0 = var_l8; + if (var_i0) { + var_i0 = 13112u; + instance->w2c_g32 = var_i0; + var_i0 = 13112u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13116u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13120u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13124u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f313(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 0u; + w2c_highlights_f316(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f314(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 1u; + w2c_highlights_f316(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f315(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 2u; + w2c_highlights_f316(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f316(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, var_l8 = 0, + var_l9 = 0; + v128 var_l10 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = instance->w2c_g7; + var_l8 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13128u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l7 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + var_l2 = var_i0; + } + var_i0 = var_p0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + var_l5 = var_i0; + var_i0 = var_l6; + if (var_i0) { + var_i0 = var_l6; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_i1 = var_l6; + var_i2 = 255u; + var_i1 &= var_i2; + var_i2 = var_l5; + var_i3 = instance->w2c_g4; + var_i0 = w2c_highlights_f318(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l6; + } + } + var_l6 = var_i0; + var_L4: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l8; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_L8: + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L8; + } + } else { + var_i0 = var_l2; + } + var_l2 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B5;} + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 30u; + var_i1 = 44u; + var_i2 = var_l3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l1; + var_i2 = var_l5; + var_i3 = var_l4; + var_i0 = w2c_highlights_f318(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L4; + } + var_i0 = var_l1; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = 9u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l5; + if (var_i0) { + var_i0 = w2c_highlights_f319(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f320(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L4; + } + var_i0 = var_l1; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_l9 = var_i0; + var_i1 = var_l1; + var_i2 = 91u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1024u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 36544u; + var_i0 += var_i1; + var_i1 = var_l9; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = var_l1; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l1; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 93u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_l2; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l1; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = var_l2; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l2; + var_i2 = 1024u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 36543u; + var_i0 += var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l1; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l1; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 0u; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 4u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l1; + var_i1 = 42u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l1; + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 97u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = var_l5; + if (var_i0) { + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 92u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 117u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + } else { + var_i0 = 0u; + } + } + if (var_i0) { + var_i0 = var_l5; + if (var_i0) { + var_L27: + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 117u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = 4u; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + goto var_L27; + } + } else { + var_L29: + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B30;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 97u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_L29;} + var_B30:; + } + var_i0 = 30u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + var_i3 = var_l5; + var_i1 = w2c_highlights_f317(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l3; + var_i3 = var_l5; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + var_i0 = var_l5; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 30u; + var_i1 = 44u; + var_i2 = var_l3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l1; + var_i2 = 1u; + var_i3 = var_l4; + var_i0 = w2c_highlights_f318(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L4; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 48u; + var_i0 -= var_i1; + var_i1 = 9u; + var_i0 = var_i0 <= var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 43u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f319(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + } + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L4; + var_B5:; + var_i0 = var_l2; + instance->w2c_g33 = var_i0; + var_i0 = var_l7; + if (var_i0) { + var_i0 = 13128u; + instance->w2c_g32 = var_i0; + var_i0 = 13128u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13132u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13136u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f317(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + u64 var_j2, var_j3; + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 -= var_i1; + var_p1 = var_i0; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 1702195828u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 3u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 1819047278u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 7u; + goto var_Bfunc; + } + } + var_i0 = var_p1; + var_i1 = 5u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 1936482662u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_i1 = 101u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 3u; + goto var_Bfunc; + } + } + var_i0 = var_p2; + var_i1 = var_p1; + var_i2 = 8u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 8751735898823355977ull; + var_i2 = var_j2 == var_j3; + var_i1 &= var_i2; + var_i2 = var_p1; + var_i3 = 3u; + var_i2 = var_i2 == var_i3; + var_i3 = var_p0; + var_i3 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 5136718u; + var_i3 ^= var_i4; + var_i4 = 8u; + var_i3 <<= (var_i4 & 31); + var_i3 = !(var_i3); + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 7u; + goto var_Bfunc; + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f318(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + u32 var_l4 = 0; + v128 var_l5 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_L0: + var_i0 = var_p1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = 34u; + var_i3 = 1u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = 39u; + var_i3 = 1u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i1 = var_p1; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_B1; + } + var_i0 = var_l4; + var_i1 = 92u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = var_p3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p2; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 0u; + var_i3 = instance->w2c_g3; + var_i4 = instance->w2c_g4; + var_i5 = 1u; + var_i4 += var_i5; + var_i3 = var_i3 > var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_p3 = var_i1; + var_i2 = 120u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_p3; + var_i2 = 117u; + var_i1 = var_i1 == var_i2; + var_p3 = var_i1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = 4u; + var_i2 = 2u; + var_i3 = var_p3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_p3 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_p3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p3; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_p3 = var_i0; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 -= var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l4 = var_i1; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l4; + var_i3 = 13u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_L0;} + var_i0 = var_p1; + var_i1 = var_p0; + var_i2 = 8u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + goto var_Bfunc; + var_B1:; + var_i0 = var_p0; + var_i1 = var_p3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f319(w2c_highlights* instance) { + u32 var_l0 = 0; + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 43u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 0u; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + } + var_i0 = var_l0; + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 97u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 36u; + w2c_highlights_f7(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i0 = w2c_highlights_f317(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 120u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 48u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i1 -= var_i2; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 24u; + goto var_Bfunc; + } + w2c_highlights_f320(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f320(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = 9u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 43u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l1; + var_i3 = 32u; + var_i2 |= var_i3; + var_i3 = 101u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l0; + var_i3 = 32u; + var_i2 |= var_i3; + var_i3 = 101u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B1;} + var_i0 = var_l0; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + var_B1:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f321(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5008u); + var_i1 = 7u; + var_i0 >>= (var_i1 & 31); + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f322(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, + var_l16 = 0, var_l17 = 0, var_l18 = 0, var_l19 = 0; + v128 var_l20 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + u64 var_j3, var_j4; + var_i0 = instance->w2c_g7; + var_l19 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l17 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l14 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62340u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62344u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62348u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + var_i0 = 1u; + var_l9 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13144u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l17 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l14 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l2 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + var_l12 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 32u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 36u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 40u); + var_l13 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + } else { + var_i0 = 0u; + } + } + var_l6 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l19; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l17; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62340u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62344u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62348u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l6; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + goto var_B4; + } + var_i0 = 96u; + var_i1 = 34u; + var_i2 = var_l6; + var_i3 = 5u; + var_i2 = var_i2 == var_i3; + var_l0 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = var_l6; + var_i1 = 1u; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_l15 = var_i0; + var_i0 = var_l6; + var_i1 = 2u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l0; + var_i0 |= var_i1; + var_l16 = var_i0; + var_i0 = var_l6; + var_i1 = 7u; + var_i0 = var_i0 >= var_i1; + var_l18 = var_i0; + var_i0 = var_l7; + var_i1 = instance->w2c_g4; + var_i2 = var_l7; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_L9: + var_i0 = instance->w2c_g4; + var_i1 = var_l3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i3 = var_l4; + var_i4 = 1u; + var_i5 = 0u; + var_i1 = w2c_highlights_f5(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i1; + var_i2 = var_l16; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + } + var_i0 = var_l16; + var_i1 = instance->w2c_g4; + var_i2 = var_l1; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l3; + var_i2 = 36u; + var_i3 = 0u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + } + var_i0 = var_l1; + var_i1 = var_l3; + var_i2 = var_l1; + var_i3 = var_l3; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i1 = var_l4; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l15; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l4; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l4; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 1u; + var_i3 = var_l15; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l11; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + goto var_B8; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + var_i0 = var_l11; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = var_l7; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l18; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l7; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 5008u); + var_i4 = 6u; + var_i3 >>= (var_i4 & 31); + var_i4 = 1u; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + goto var_L9; + } + var_i0 = var_l10; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i1; + var_i2 = 40u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + goto var_B8; + } + var_i0 = var_l7; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l7; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 58u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L9; + var_B10:; + var_i0 = var_l11; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_B8:; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = var_l0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l6; + var_l14 = var_i0; + var_i0 = 1u; + var_l10 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l6; + } + } + var_l6 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + var_i2 = 10u; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 0u; + var_l12 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + } + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l15 = var_i0; + var_i0 = var_l3; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 15651u; + var_i1 = 9021u; + var_i2 = 4u; + w2c_highlights_f71(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + } + var_i0 = var_l3; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_l18 = var_i0; + var_i1 = var_l3; + var_i2 = 96u; + var_i1 = var_i1 == var_i2; + var_l16 = var_i1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 5u; + var_i1 = 1u; + var_i2 = var_l16; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = 47u; + var_i1 = 44u; + var_i2 = var_l16; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l11 = var_i0; + var_i0 = var_l18; + var_i1 = var_l4; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l15; + var_i3 = 34u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 2u; + var_l6 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l11; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = var_l0; + var_i2 = var_l1; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l4; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_l1 = var_i0; + var_L29: + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + var_i2 = 12u; + var_i1 += var_i2; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B30;} + var_i0 = var_l1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f45(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B30;} + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L29; + var_B30:; + var_i0 = var_l1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 32u; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + } + var_l5 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l4; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 33u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 14u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 33u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = var_l4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 14u; + var_i1 = var_l0; + var_i2 = var_l4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 46u; + var_i1 = 44u; + var_i2 = var_l4; + var_i3 = var_l0; + var_i2 -= var_i3; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l3; + var_i4 = 114u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l11 = var_i0; + var_i0 = 3u; + var_l6 = var_i0; + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 4u; + var_l6 = var_i0; + } + var_i0 = var_l4; + var_i1 = var_l0; + var_i0 -= var_i1; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l6; + var_i1 = 4u; + var_i0 += var_i1; + var_i1 = var_l6; + var_i2 = var_l0; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 7823730u; + var_i2 ^= var_i3; + var_i3 = 8u; + var_i2 <<= (var_i3 & 31); + var_i2 = !(var_i2); + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l11; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = 4294967295u; + var_i1 = var_l0; + var_i2 = var_l4; + var_i3 = 21248u; + var_i4 = 15u; + var_i5 = 47u; + var_i1 = w2c_highlights_f76(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i1; + var_i2 = 0u; + var_i1 = (u32)((s32)var_i1 >= (s32)var_i2); + if (var_i1) { + var_i1 = var_l5; + goto var_B38; + } + var_i1 = 21u; + var_i2 = var_l0; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 1919248503u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 4u); + var_i4 = 101u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i3 = var_l4; + var_i4 = var_l0; + var_i3 -= var_i4; + var_i4 = 5u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + if (var_i2) {goto var_B38;} + var_i1 = 4294967295u; + var_B38:; + var_i2 = var_l2; + var_i3 = var_l12; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l5; + var_i1 = 255u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = var_l5; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l2 = var_i0; + if (var_i0) { + var_i0 = var_l2; + var_l8 = var_i0; + } + var_i0 = 1u; + var_i1 = var_l12; + var_i2 = var_l1; + var_i3 = 20u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l12 = var_i0; + var_i0 = var_l1; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 7u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l4; + var_i2 = var_l0; + var_i1 -= var_i2; + var_l2 = var_i1; + var_i2 = 3u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 6581861u; + var_i2 ^= var_i3; + var_i3 = 8u; + var_i2 <<= (var_i3 & 31); + var_i2 = !(var_i2); + var_i1 &= var_i2; + var_i2 = var_l2; + var_i3 = 5u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 474214786402ull; + var_j3 ^= var_j4; + var_j4 = 24ull; + var_j3 <<= (var_j4 & 63); + var_i3 = !(var_j3); + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_l5 = var_i0; + } else { + var_i0 = 1u; + var_l5 = var_i0; + var_i0 = var_l12; + if (var_i0) { + var_i0 = 23u; + var_l1 = var_i0; + } else { + var_i0 = var_l8; + if (var_i0) { + var_i0 = var_l4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 23u; + var_l1 = var_i0; + } else { + var_i0 = 23u; + var_i1 = 55u; + var_i2 = 15u; + var_i3 = var_l8; + var_i4 = 2u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l8; + var_i3 = 3u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + } + } else { + var_i0 = var_l2; + if (var_i0) { + var_i0 = 16u; + var_i1 = 29u; + var_i2 = var_l1; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 0u; + var_i1 = var_l0; + var_l2 = var_i1; + var_i2 = var_l4; + var_i1 = w2c_highlights_f82(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + if (var_i1) {goto var_B46;} + var_L47: + var_i0 = var_l2; + var_i1 = var_l4; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 95u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B46;} + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + goto var_L47; + } + var_i0 = 0u; + var_B46:; + if (var_i0) { + var_i0 = 6u; + } else { + var_i0 = var_l3; + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 55u; + } else { + var_i0 = var_l1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l9; + if (var_i0) { + var_i0 = 15u; + var_i1 = 14u; + var_i2 = var_l1; + var_l2 = var_i2; + var_i2 = 0u; + var_l1 = var_i2; + var_L54: + var_i2 = var_l2; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 >= var_i3; + if (var_i2) {goto var_B55;} + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l3 = var_i2; + var_i3 = 10u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l3; + var_i4 = 13u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + if (var_i2) {goto var_B55;} + var_i2 = var_l2; + var_i3 = 1u; + var_i2 += var_i3; + var_l2 = var_i2; + var_i2 = var_l1; + var_i3 = 1u; + var_i2 += var_i3; + var_i3 = var_l1; + var_i4 = var_l3; + var_i5 = 40u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_l1 = var_i2; + var_i2 = var_l3; + var_i3 = 41u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_l1; + var_i3 = 1u; + var_i2 -= var_i3; + var_l1 = var_i2; + var_i2 = !(var_i2); + if (var_i2) { + var_i2 = var_l2; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i2; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_i4 = 1u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 61u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + goto var_B53; + } + } + goto var_L54; + var_B55:; + var_i2 = 0u; + var_B53:; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 14u; + } + } else { + var_i0 = 58u; + } + } + } + } + var_l1 = var_i0; + } + } + } + var_i0 = var_l1; + var_i1 = var_l0; + var_i2 = var_l4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l9 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l3; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + var_i0 = 0u; + var_l9 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l10; + if (var_i0) { + var_i0 = var_l10; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l10; + var_i2 = var_l3; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l10 = var_i0; + var_i0 = var_l3; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l10; + var_i1 = 1u; + var_i0 -= var_i1; + var_l10 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 40u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l14; + var_l6 = var_i0; + var_i0 = 0u; + var_l14 = var_i0; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + } + } + var_i0 = var_l13; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_l13; + var_i2 = var_l13; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l13; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_l3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 4752u); + var_i3 = 8u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l13 = var_i0; + var_i0 = 32u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4752u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_l5 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = var_l8; + var_i1 = 0u; + var_i2 = var_l3; + var_i3 = 40u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i1 = var_l3; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = var_l1; + if (var_i0) { + var_i0 = 0u; + var_l12 = var_i0; + var_i0 = var_l13; + var_i0 = !(var_i0); + var_l9 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + } + goto var_L3; + } + var_i0 = var_l4; + var_i0 = w2c_highlights_f321(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + var_i1 = var_l3; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l15; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 25u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l2 = var_i0; + var_i0 = 0u; + } + var_l5 = var_i0; + var_i0 = 0u; + var_l9 = var_i0; + goto var_L3; + } + var_i0 = var_l5; + var_i0 = !(var_i0); + var_i1 = var_l4; + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l4; + var_i3 = 36u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 33u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 48u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l5 = var_i0; + } else { + var_i0 = var_l3; + var_i0 = w2c_highlights_f321(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_L70: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f321(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B71;} + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_B71;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L70; + var_B71:; + var_i0 = 25u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + } + var_l2 = var_i0; + } + var_i0 = 0u; + var_l9 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l17; + if (var_i0) { + var_i0 = 13144u; + instance->w2c_g32 = var_i0; + var_i0 = 13144u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13148u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13152u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13156u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13160u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13164u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13168u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13172u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13176u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13180u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13184u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f323(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5264u); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f324(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0; + u64 var_l14 = 0; + v128 var_l15 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + u64 var_j1, var_j2; + var_i0 = instance->w2c_g7; + var_l13 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13192u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l12 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + } + } else { + var_i0 = 0u; + } + } + var_l8 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l13; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l8; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + goto var_B4; + } + var_i0 = var_l8; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i0 = var_l6; + var_i1 = instance->w2c_g4; + var_i2 = var_l6; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_L9: + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = 34u; + var_i3 = var_l1; + var_i3 = !(var_i3); + var_i4 = var_l1; + var_i4 = !(var_i4); + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = var_l5; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i2 = 36u; + var_i3 = 0u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + } + var_i0 = var_l5; + var_i1 = var_l2; + var_i2 = var_l2; + var_i3 = var_l5; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 34u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 1u; + var_i3 = var_l1; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l6 = var_i0; + goto var_B10; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + var_i0 = var_l10; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l10; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = var_l10; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 3u; + var_i1 = var_l6; + var_i2 = var_l0; + var_i2 = w2c_highlights_f84(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + goto var_L9; + } + var_i0 = var_l0; + var_i1 = 0u; + var_i2 = var_l9; + var_i0 = w2c_highlights_f85(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) {goto var_L9;} + var_i0 = 2u; + goto var_B8; + var_B10:; + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l6; + var_B8:; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = var_l0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l8; + var_l11 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l0; + var_i0 = !(var_i0); + var_i1 = var_l8; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l8; + } + } + var_l8 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = var_l1; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l5; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 10799u; + var_i1 = 12074u; + var_i2 = 5u; + var_i3 = 4u; + var_i4 = var_l5; + var_i5 = 42u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + w2c_highlights_f71(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l8 = var_i0; + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 2u; + var_l8 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 39u; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_l5 = var_i1; + var_l0 = var_i1; + var_i2 = 21440u; + var_i3 = 15u; + var_i4 = 72u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l10 = var_i0; + var_i1 = 4294967295u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = var_l2; + var_i1 -= var_i2; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 56u; + var_i1 = var_l2; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 1099511627775ull; + var_j1 &= var_j2; + var_l14 = var_j1; + var_j2 = 500136110163ull; + var_i1 = var_j1 == var_j2; + if (var_i1) {goto var_B25;} + var_i0 = 17u; + var_j1 = var_l14; + var_j2 = 435710945399ull; + var_i1 = var_j1 == var_j2; + if (var_i1) {goto var_B25;} + } + var_i0 = var_l10; + var_B25:; + var_l0 = var_i0; + var_i1 = 1023u; + var_i0 = (u32)((s32)var_i0 > (s32)var_i1); + if (var_i0) { + var_i0 = var_l0; + var_i1 = 4294967295u; + var_i2 = var_l5; + var_l0 = var_i2; + var_L29: + var_i2 = var_l0; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l10 = var_i2; + var_i3 = 32u; + var_i2 = var_i2 != var_i3; + var_i3 = var_l10; + var_i4 = 9u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i2 = I32_CLZ(var_i2); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + if (var_i2) { + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_l0 = var_i2; + goto var_L29; + } + var_i2 = 0u; + var_i3 = var_l0; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = w2c_highlights_f46(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = !(var_i3); + if (var_i3) {goto var_B28;} + var_i2 = 1u; + var_i3 = var_l0; + var_i4 = 2u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = w2c_highlights_f47(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i3) {goto var_B28;} + var_i2 = var_l0; + var_i2 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l0 = var_i2; + var_i3 = 29545u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 29537u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l0; + var_i4 = 28265u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i2 = I32_CLZ(var_i2); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + var_B28:; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + } + var_i0 = var_l0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l0; + var_i1 = 255u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = 768u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_i1 = 3u; + var_i0 &= var_i1; + var_l7 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } + } else { + var_i0 = var_l5; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l7; + if (var_i0) { + var_i0 = var_l4; + if (var_i0) { + var_i0 = 55u; + var_l1 = var_i0; + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 63u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i1 = var_l7; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 55u; + var_l1 = var_i0; + } else { + var_i0 = 15u; + var_i1 = 55u; + var_i2 = var_l7; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + } + } + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = var_l1; + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 > var_i3; + var_i1 |= var_i2; + var_i2 = var_l0; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 16u; + var_i1 = 14u; + var_i2 = var_l3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l3; + if (var_i0) { + var_i0 = 29u; + } else { + var_i0 = 6u; + var_i1 = 55u; + var_i2 = 58u; + var_i3 = var_l1; + var_i4 = 65u; + var_i3 -= var_i4; + var_i4 = 25u; + var_i3 = var_i3 <= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l2; + var_i3 = var_l5; + var_i2 = w2c_highlights_f82(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + var_l1 = var_i0; + } + } + var_i0 = var_l1; + var_i1 = var_l2; + var_i2 = var_l5; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l9; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l9; + var_i2 = var_l1; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = var_l1; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 1u; + var_i0 -= var_i1; + var_l9 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l11; + var_l8 = var_i0; + var_i0 = 0u; + var_l11 = var_i0; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + } + } + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l5 = var_i0; + var_i1 = var_l1; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = var_l5; + var_i1 = var_l4; + var_i1 = !(var_i1); + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l0; + var_i4 = 58u; + var_i3 = var_i3 == var_i4; + var_l3 = var_i3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = 35u; + var_i2 = var_l3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l0; + var_i4 = 46u; + var_i3 = var_i3 == var_i4; + var_l5 = var_i3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = 35u; + var_i2 = var_l5; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 != var_i1; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f323(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L49: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f323(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B50;} + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 42u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B50;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L49; + var_B50:; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = var_l7; + if (var_i0) { + var_L52: + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_l4; + var_i3 = var_l2; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 60u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l4 = var_i1; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 1u; + var_i0 -= var_i1; + var_l4 = var_i0; + } + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + goto var_L52; + } + } + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } + goto var_L3; + var_B4:; + var_i0 = var_l12; + if (var_i0) { + var_i0 = 13192u; + instance->w2c_g32 = var_i0; + var_i0 = 13192u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13196u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13200u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13204u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13208u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13212u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13216u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f325(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_L0: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5264u); + var_i1 = 2u; + var_i0 &= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f326(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = var_p1; + var_i3 = 1u; + var_i2 -= var_i3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 42u; + var_i2 = var_i2 == var_i3; + var_i3 = var_p0; + var_i4 = var_p1; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_p0 = var_i2; + var_i1 -= var_i2; + var_i2 = 21696u; + var_i3 = 31u; + var_i4 = 64u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i2 = 12u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f327(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, + var_l16 = 0; + v128 var_l17 = simde_wasm_i64x2_make(0, 0), var_l18 = simde_wasm_i64x2_make(0, 0), var_l19 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + v128 var_o0, var_o1, var_o2, var_o3, var_o4, var_o5; + var_i0 = instance->w2c_g7; + var_l16 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l14 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62340u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62344u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13224u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l14 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 32u); + var_l12 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 36u); + var_l13 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + } + } else { + var_i0 = 0u; + } + } + var_l8 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l16; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62340u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62344u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l9; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_L7: + var_i0 = var_l0; + var_i1 = 92u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B8;} + var_i0 = var_l0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 1684956508u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 5u; + var_i1 += var_i2; + var_l3 = var_i1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i0 = w2c_highlights_f325(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + var_i1 = var_l1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 125u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = var_l1; + var_i2 = w2c_highlights_f326(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l9; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B8;} + } + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L7; + var_B8:; + var_i0 = var_l9; + var_i1 = 255u; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = 0u; + var_l9 = var_i0; + } + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_l0 = var_i0; + var_L10: + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l13; + if (var_i0) { + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = 0u; + var_l11 = var_i0; + var_i0 = 0u; + var_l12 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + } + var_i0 = 1u; + var_l13 = var_i0; + } + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L10; + } + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = 0u; + var_l13 = var_i0; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 0u; + var_i2 = instance->w2c_g3; + var_i3 = var_l3; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 35u; + var_i0 -= var_i1; + switch (var_i0) { + case 0: goto var_B18; + case 1: goto var_B24; + case 2: goto var_B25; + case 3: goto var_B19; + case 4: goto var_B15; + case 5: goto var_B15; + case 6: goto var_B15; + case 7: goto var_B15; + case 8: goto var_B15; + case 9: goto var_B15; + case 10: goto var_B15; + case 11: goto var_B15; + case 12: goto var_B15; + case 13: goto var_B15; + case 14: goto var_B15; + case 15: goto var_B15; + case 16: goto var_B15; + case 17: goto var_B15; + case 18: goto var_B15; + case 19: goto var_B15; + case 20: goto var_B15; + case 21: goto var_B15; + case 22: goto var_B15; + case 23: goto var_B15; + case 24: goto var_B15; + case 25: goto var_B15; + case 26: goto var_B17; + case 27: goto var_B15; + case 28: goto var_B15; + case 29: goto var_B15; + case 30: goto var_B15; + case 31: goto var_B15; + case 32: goto var_B15; + case 33: goto var_B15; + case 34: goto var_B15; + case 35: goto var_B15; + case 36: goto var_B15; + case 37: goto var_B15; + case 38: goto var_B15; + case 39: goto var_B15; + case 40: goto var_B15; + case 41: goto var_B15; + case 42: goto var_B15; + case 43: goto var_B15; + case 44: goto var_B15; + case 45: goto var_B15; + case 46: goto var_B15; + case 47: goto var_B15; + case 48: goto var_B15; + case 49: goto var_B15; + case 50: goto var_B15; + case 51: goto var_B15; + case 52: goto var_B15; + case 53: goto var_B15; + case 54: goto var_B15; + case 55: goto var_B15; + case 56: goto var_B21; + case 57: goto var_B16; + case 58: goto var_B20; + case 59: goto var_B17; + case 60: goto var_B17; + case 61: goto var_B15; + case 62: goto var_B15; + case 63: goto var_B15; + case 64: goto var_B15; + case 65: goto var_B15; + case 66: goto var_B15; + case 67: goto var_B15; + case 68: goto var_B15; + case 69: goto var_B15; + case 70: goto var_B15; + case 71: goto var_B15; + case 72: goto var_B15; + case 73: goto var_B15; + case 74: goto var_B15; + case 75: goto var_B15; + case 76: goto var_B15; + case 77: goto var_B15; + case 78: goto var_B15; + case 79: goto var_B15; + case 80: goto var_B15; + case 81: goto var_B15; + case 82: goto var_B15; + case 83: goto var_B15; + case 84: goto var_B15; + case 85: goto var_B15; + case 86: goto var_B15; + case 87: goto var_B15; + case 88: goto var_B23; + case 89: goto var_B15; + case 90: goto var_B22; + default: goto var_B15; + } + var_B25:; + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + var_B24:; + var_i0 = var_l4; + var_i1 = var_l6; + var_i0 *= var_i1; + var_l4 = var_i0; + var_i0 = 1u; + var_l1 = var_i0; + var_i0 = var_l2; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = 1u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 2u; + var_l1 = var_i0; + } + } else { + var_i0 = var_l5; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + var_l2 = var_i0; + } + var_i0 = var_l1; + var_i1 = var_l3; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + var_B23:; + var_i0 = var_l7; + var_i1 = 1u; + var_i0 += var_i1; + var_l7 = var_i0; + var_i0 = var_l6; + var_i0 = !(var_i0); + var_i1 = var_l4; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l10; + var_l11 = var_i0; + var_i0 = var_l8; + var_l12 = var_i0; + var_i0 = var_l4; + var_i1 = 256u; + var_i2 = 0u; + var_i3 = var_l2; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 |= var_i1; + var_l10 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = var_l7; + var_l8 = var_i0; + } + goto var_B14; + var_B22:; + var_i0 = var_l7; + var_i1 = var_l8; + var_i0 = var_i0 == var_i1; + var_i1 = var_l8; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l11; + var_l10 = var_i0; + var_i0 = var_l12; + var_l8 = var_i0; + var_i0 = 0u; + var_l12 = var_i0; + var_i0 = 0u; + var_l11 = var_i0; + } + var_i0 = var_l7; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_l7; + var_i2 = var_l7; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + goto var_B14; + var_B21:; + var_i0 = var_l4; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + var_l6 = var_i0; + goto var_B14; + var_B20:; + var_i0 = 0u; + var_l6 = var_i0; + goto var_B14; + var_B19:; + var_i0 = var_l4; + var_i1 = var_l6; + var_i0 *= var_i1; + var_l4 = var_i0; + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + var_B18:; + var_i0 = var_l4; + var_i1 = var_l6; + var_i0 *= var_i1; + var_l4 = var_i0; + var_i0 = var_l5; + var_i1 = 49u; + var_i0 -= var_i1; + var_i1 = 8u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 59u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + goto var_B15; + var_B17:; + var_i0 = var_l2; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + goto var_B15; + var_B16:; + var_i0 = var_l4; + var_i1 = var_l6; + var_i0 *= var_i1; + var_l4 = var_i0; + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i0 = var_l5; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = 14u; + var_l1 = var_i0; + var_i0 = var_l5; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_l15 = var_i0; + var_i1 = var_l5; + var_i2 = 91u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 3u; + var_i2 = 4u; + var_i3 = var_l15; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = 32u; + var_l1 = var_i0; + } + var_i0 = var_l5; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + var_l15 = var_i0; + var_i1 = var_l5; + var_i2 = 93u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = 3u; + var_i4 = 4u; + var_i5 = var_l15; + var_i3 = var_i5 ? var_i3 : var_i4; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = 32u; + var_l1 = var_i0; + } + var_i0 = var_l5; + var_i1 = 10u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l5; + var_i2 = 13u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + } + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i1 = var_l3; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_l1 = var_i0; + var_L36: + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_L36;} + } + var_i0 = var_l0; + var_i1 = var_l1; + var_i2 = 21696u; + var_i3 = 31u; + var_i4 = 64u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l1; + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 42u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 17u; + var_i1 = var_l0; + var_i2 = 8u; + var_i1 = (u32)((s32)var_i1 >> (var_i2 & 31)); + var_l1 = var_i1; + var_i2 = 3u; + var_i1 = var_i1 <= var_i2; + if (var_i1) { + var_i1 = var_l4; + var_i2 = var_l0; + var_i3 = 255u; + var_i2 &= var_i3; + var_i3 = var_l6; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l4 = var_i1; + var_i1 = 17u; + var_i2 = 20u; + var_i3 = 38u; + var_i4 = 14u; + var_i5 = var_l1; + var_i6 = 3u; + var_i5 = var_i5 == var_i6; + var_i3 = var_i5 ? var_i3 : var_i4; + var_i4 = var_l1; + var_i5 = 2u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l1; + var_i4 = 1u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + } else { + var_i1 = 14u; + } + var_i2 = var_l1; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 5u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 0u; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i1 = 33u; + var_i0 -= var_i1; + var_i1 = 93u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l5; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_l5; + var_i3 = 10u; + var_i1 = w2c_highlights_f78(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + } + var_i0 = 53u; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + } + } + var_i0 = var_l1; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l3; + var_i0 -= var_i1; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f73(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i1; + var_l1 = var_i1; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i1 &= var_i2; + if (var_i1) { + var_i1 = var_l0; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f325(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i1; + } + var_i1 = var_l1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 125u; + var_i1 = var_i1 != var_i2; + var_i2 = var_l1; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 >= var_i3; + var_i1 |= var_i2; + var_i2 = var_l0; + var_i3 = var_l1; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) { + var_i1 = 55u; + var_l4 = var_i1; + goto var_L3; + } + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + w2c_highlights_f22(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 32u; + var_i2 = var_l0; + var_i3 = var_l0; + var_i4 = 1u; + var_i3 += var_i4; + var_l0 = var_i3; + w2c_highlights_f21(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 55u; + var_i2 = var_l0; + var_i3 = var_l1; + w2c_highlights_f21(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 1u; + var_i1 += var_i2; + instance->w2c_g4 = var_i1; + var_i1 = 32u; + var_i2 = var_l1; + var_i3 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 4294967295u; + var_i2 = var_l0; + var_i3 = var_l1; + var_i2 = w2c_highlights_f326(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + var_i3 = 4095u; + var_i2 &= var_i3; + var_i3 = 8u; + var_i2 >>= (var_i3 & 31); + var_i3 = var_l0; + var_i4 = 0u; + var_i3 = (u32)((s32)var_i3 < (s32)var_i4); + var_i1 = var_i3 ? var_i1 : var_i2; + var_l1 = var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = var_l1; + var_i3 = 6u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_i4 = 5u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = 5u; + var_i1 = var_l2; + var_i2 = var_l2; + var_i2 = !(var_i2); + var_i3 = var_l1; + var_i4 = 6u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = var_l1; + var_i1 = 7u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l0; + var_l9 = var_i0; + var_L47: + var_i0 = var_l1; + var_i1 = 8u; + var_i0 = (u32)((s32)var_i0 < (s32)var_i1); + var_i1 = var_l1; + var_i2 = 10u; + var_i1 = (u32)((s32)var_i1 > (s32)var_i2); + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B48;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 91u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l0; + var_i2 = 123u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B48;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l0; + var_i2 = 2u; + var_i1 += var_i2; + var_i2 = 10u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B48;} + var_i0 = 32u; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L47; + var_B48:; + } + } + goto var_L3; + var_B15:; + var_i0 = var_l4; + var_i1 = var_l6; + var_i0 *= var_i1; + var_l4 = var_i0; + var_i0 = 4u; + var_o0 = simde_wasm_i8x16_splat(var_i0); + var_i1 = 2u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_i2 = var_l2; + var_o0 = var_i2 ? var_o0 : var_o1; + var_l18 = var_o0; + var_i0 = 61u; + var_o0 = simde_wasm_i8x16_splat(var_i0); + var_i1 = 10u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_i2 = var_l2; + var_o0 = var_i2 ? var_o0 : var_o1; + var_l19 = var_o0; + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i0 = instance->w2c_g3; + var_L49: + var_i1 = instance->w2c_g3; + var_i2 = var_l0; + var_i1 = var_i1 > var_i2; + if (var_i1) { + var_i1 = var_l0; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l17 = var_o1; + var_i2 = 35u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_sub(var_o1, var_o2); + var_i2 = 3u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_u8x16_le(var_o1, var_o2); + var_o2 = var_l17; + var_i3 = 91u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_sub(var_o2, var_o3); + var_o3 = var_l18; + var_o2 = simde_wasm_u8x16_le(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o2 = var_l17; + var_i3 = 123u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o3 = var_l17; + var_i4 = 125u; + var_o4 = simde_wasm_i8x16_splat(var_i4); + var_o3 = simde_wasm_i8x16_eq(var_o3, var_o4); + var_o2 = simde_wasm_v128_or(var_o2, var_o3); + var_o3 = var_l17; + var_i4 = 10u; + var_o4 = simde_wasm_i8x16_splat(var_i4); + var_o3 = simde_wasm_i8x16_eq(var_o3, var_o4); + var_o4 = var_l17; + var_o5 = var_l19; + var_o4 = simde_wasm_i8x16_eq(var_o4, var_o5); + var_o3 = simde_wasm_v128_or(var_o3, var_o4); + var_o2 = simde_wasm_v128_or(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_i1 = v128_i8x16_bitmask(var_o1); + var_l1 = var_i1; + if (var_i1) { + var_i1 = var_l0; + var_i2 = var_l1; + var_i2 = I32_CTZ(var_i2); + var_i1 += var_i2; + } else { + var_i1 = var_l0; + var_i2 = 16u; + var_i1 += var_i2; + var_l0 = var_i1; + goto var_L49; + } + } else { + var_i1 = var_l0; + } + var_l0 = var_i1; + var_i2 = var_l0; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + instance->w2c_g4 = var_i0; + var_i0 = var_l10; + var_i1 = 255u; + var_i0 &= var_i1; + var_i1 = 24u; + var_i2 = 0u; + var_i3 = var_l2; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l2; + var_i2 = !(var_i2); + var_i3 = var_l10; + var_i4 = 256u; + var_i3 = var_i3 >= var_i4; + var_i2 |= var_i3; + var_i3 = var_l8; + var_i4 = 0u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + var_B14:; + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + var_B4:; + var_i0 = var_l14; + if (var_i0) { + var_i0 = 13224u; + instance->w2c_g32 = var_i0; + var_i0 = 13224u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13228u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13232u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13236u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13240u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13244u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13248u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13252u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13256u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13260u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f328(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5264u); + var_i1 = 2u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + var_B1:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f329(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5264u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f330(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0; + v128 var_l12 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + u64 var_j2, var_j3; + var_i0 = instance->w2c_g7; + var_l11 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13264u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } + } else { + var_i0 = 0u; + } + } + var_l1 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l11; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l2; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 124u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 31779u; + var_i1 = 9084u; + var_i2 = 4u; + w2c_highlights_f71(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 34u; + var_i1 = 1u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 4294967167u; + var_i0 &= var_i1; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_i1 = var_l5; + var_i2 = var_l2; + var_i3 = 41u; + var_i2 = var_i2 != var_i3; + var_l0 = var_i2; + var_i3 = var_l2; + var_i4 = 40u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 0u; + var_i2 = var_l0; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i0 = var_l1; + var_i1 = 99u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 91u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 3u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_l1; + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = 3u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i1 = 256u; + var_i0 |= var_i1; + var_i1 = 0u; + var_i2 = var_l0; + var_i0 = var_i2 ? var_i0 : var_i1; + goto var_B12; + } + var_i0 = var_l0; + var_i1 = 512u; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 8u; + var_i1 >>= (var_i2 & 31); + var_i2 = 1u; + var_i1 += var_i2; + var_l3 = var_i1; + var_i2 = 2u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B12;} + var_i0 = var_l3; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 768u; + var_i0 |= var_i1; + var_i1 = 3u; + var_i2 = var_l1; + var_i3 = 3u; + var_i2 >>= (var_i3 & 31); + var_i3 = 3u; + var_i2 &= var_i3; + var_l3 = var_i2; + var_i3 = 1u; + var_i2 += var_i3; + var_i3 = var_l3; + var_i4 = 3u; + var_i3 = var_i3 >= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = 3u; + var_i1 <<= (var_i2 & 31); + var_i2 = 4u; + var_i3 = 0u; + var_i4 = var_l0; + var_i5 = 3u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l3; + var_i6 = 1u; + var_i5 = var_i5 == var_i6; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + goto var_B12; + } + var_i0 = var_l1; + var_i1 = 31u; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 8u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + var_B12:; + var_l1 = var_i0; + } + var_i0 = var_l2; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 93u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = 3u; + var_i1 &= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + if (var_i1) {goto var_B16;} + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = 8u; + var_i1 >>= (var_i2 & 31); + var_i2 = 1u; + var_i1 -= var_i2; + var_l0 = var_i1; + var_i1 = !(var_i1); + if (var_i1) {goto var_B16;} + var_i0 = var_l1; + var_i1 = 27u; + var_i2 = 31u; + var_i3 = var_l0; + var_i4 = 2u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 8u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + var_B16:; + } else { + var_i0 = var_l1; + } + } else { + var_i0 = var_l1; + } + var_i1 = 4294967167u; + var_i0 &= var_i1; + var_i1 = var_l2; + var_i2 = 40u; + var_i1 = var_i1 == var_i2; + var_i2 = 7u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_l3 = var_i0; + var_i1 = var_l2; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_i3 = 96u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l0; + var_i4 = 64u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l3; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 4294967167u; + var_i0 &= var_i1; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 2u; + var_i0 += var_i1; + var_l0 = var_i0; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + w2c_highlights_f328(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 47u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 4294967167u; + var_i0 &= var_i1; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 32u; + var_i0 |= var_i1; + var_l3 = var_i0; + var_i1 = 98u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 111u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 120u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f328(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 4294967167u; + var_i0 &= var_i1; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 43u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f328(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 27u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 4294967167u; + var_i0 &= var_i1; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 40u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 4294967167u; + var_i0 &= var_i1; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 92u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 13u; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 47u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 4294967167u; + var_i0 &= var_i1; + var_l1 = var_i0; + goto var_L3; + } + } + var_i0 = 0u; + var_l7 = var_i0; + w2c_highlights_f328(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l4; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = var_l2; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 48u; + var_l0 = var_i0; + } else { + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = var_l4; + var_l8 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 43u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + var_l8 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + } + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 48u; + var_i2 -= var_i3; + var_i3 = 9u; + var_i2 = var_i2 <= var_i3; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + if (var_i1) {goto var_B28;} + var_L30: + var_i0 = var_l6; + var_i1 = var_l8; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l8; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 1u; + var_l10 = var_i0; + } else { + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 47u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l0; + var_i2 = w2c_highlights_f329(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l3; + var_i3 = w2c_highlights_f329(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = var_l0; + var_i5 = 43u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l0; + var_i6 = 45u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i3 &= var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + if (var_i1) {goto var_B28;} + } + var_i0 = var_l0; + var_l3 = var_i0; + var_i0 = var_l8; + var_i1 = 1u; + var_i0 += var_i1; + var_l8 = var_i0; + goto var_L30; + } + var_i0 = var_l10; + var_B28:; + if (var_i0) { + var_i0 = 24u; + var_l0 = var_i0; + } else { + var_i0 = var_l2; + var_i1 = 38u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 17u; + var_l0 = var_i0; + } else { + var_i0 = var_l6; + var_i1 = var_l4; + var_i0 -= var_i1; + var_l0 = var_i0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 7u; + var_i1 = var_l4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 116u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B35;} + var_i0 = 4294967295u; + goto var_B35; + } + var_i0 = var_l4; + var_i1 = var_l6; + var_i2 = 21984u; + var_i3 = 31u; + var_i4 = 86u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 < (s32)var_i1); + if (var_i0) { + var_i0 = var_l0; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 2065u; + var_i1 = var_l4; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 712271212u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B35;} + var_i0 = 17u; + var_i1 = var_l4; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 561276275u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B35;} + } + var_i0 = 17u; + var_i1 = var_l0; + var_i2 = 7u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l4; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 28554735403623780ull; + var_j2 ^= var_j3; + var_j3 = 8ull; + var_j2 <<= (var_j3 & 63); + var_i2 = !(var_j2); + var_i1 &= var_i2; + if (var_i1) {goto var_B35;} + var_i0 = 4294967295u; + goto var_B35; + } + var_i0 = var_l3; + var_B35:; + var_l3 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l3; + var_i1 = 255u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i0 = var_l1; + var_i1 = 128u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 10u; + var_i0 >>= (var_i1 & 31); + var_l7 = var_i0; + var_i0 = var_l3; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_i1 = 3u; + var_i0 &= var_i1; + var_l5 = var_i0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 3u); + var_i2 = 105u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 5u; + } else { + var_i0 = var_l5; + } + var_l5 = var_i0; + } + } else { + var_i0 = 4294967295u; + var_l0 = var_i0; + var_i0 = var_l1; + var_i1 = 99u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 15u; + var_i1 = 4294967295u; + var_i2 = var_l1; + var_i3 = 4294967167u; + var_i2 &= var_i3; + var_i3 = 64u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l1; + var_i2 = 3u; + var_i1 &= var_i2; + var_l3 = var_i1; + var_i1 = !(var_i1); + if (var_i1) {goto var_B43;} + var_i0 = 58u; + var_i1 = var_l1; + var_i2 = 8u; + var_i1 >>= (var_i2 & 31); + var_l0 = var_i1; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B43;} + var_i0 = 15u; + var_i1 = 58u; + var_i2 = var_l3; + var_i3 = 3u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l1; + var_i2 = 24u; + var_i1 &= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + var_i2 = var_l0; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B43;} + var_i0 = 58u; + var_i1 = var_l0; + var_i2 = 3u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 4u; + var_i2 &= var_i3; + var_i3 = 0u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B43;} + var_i0 = 4294967295u; + var_B43:; + var_l0 = var_i0; + } + var_i0 = var_l0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 < (s32)var_i1); + if (var_i0) { + var_i0 = var_l5; + if (var_i0) { + var_i0 = 15u; + var_i1 = 58u; + var_i2 = 55u; + var_i3 = var_l5; + var_i4 = 3u; + var_i3 &= var_i4; + var_l0 = var_i3; + var_i4 = 2u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = var_l1; + var_i1 = 128u; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = var_l5; + var_i2 = 4u; + var_i1 &= var_i2; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_l7 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + } else { + var_i0 = var_l1; + var_i1 = 128u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 14u; + } else { + var_i0 = var_l2; + var_i1 = 42u; + var_i0 = var_i0 == var_i1; + var_l0 = var_i0; + var_i1 = var_l2; + var_i2 = 43u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = var_l6; + var_i3 = 1u; + var_i2 -= var_i3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l6; + var_i2 = var_l4; + var_i1 -= var_i2; + var_i2 = 2u; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 60u; + var_i1 = 6u; + var_i2 = var_l0; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 55u; + var_i1 = 58u; + var_i2 = var_l2; + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 25u; + var_i2 = var_l2; + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + var_l0 = var_i0; + } + } + } + } + } + } + var_i0 = var_l0; + var_i1 = var_l4; + var_i2 = var_l6; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 4294967167u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i1 = 99u; + var_i0 &= var_i1; + var_i1 = var_l7; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 3u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l1; + var_i2 = 8u; + var_i1 >>= (var_i2 & 31); + var_i2 = 2u; + var_i1 = var_i1 != var_i2; + if (var_i1) {goto var_B49;} + var_i0 = var_l1; + var_i1 = 8u; + var_i0 += var_i1; + var_i1 = var_l1; + var_i2 = var_l1; + var_i3 = 24u; + var_i2 &= var_i3; + var_i3 = 24u; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + goto var_B49; + } + var_i0 = var_l7; + var_i1 = 5u; + var_i0 <<= (var_i1 & 31); + var_i1 = var_l7; + if (var_i1) {goto var_B49;} + var_i0 = var_l1; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 4294967167u; + var_i3 &= var_i4; + var_i4 = 64u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_B49:; + var_l1 = var_i0; + } + goto var_L3; + var_B4:; + var_i0 = var_l9; + if (var_i0) { + var_i0 = 13264u; + instance->w2c_g32 = var_i0; + var_i0 = 13264u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13268u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f331(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0; + v128 var_l6 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_i1 = var_p0; + var_i0 += var_i1; + var_p0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 91u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + var_L2: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B3;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 61u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B3;} + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L2; + var_B3:; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 91u; + var_i0 = var_i0 != var_i1; + var_i1 = var_p0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L5: + var_i0 = instance->w2c_g4; + var_i1 = 93u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B6;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + var_L7: + var_i0 = var_l2; + var_i1 = var_l3; + var_i0 = var_i0 <= var_i1; + var_i1 = var_p0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B8;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 61u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B8;} + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L7; + var_B8:; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 93u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_i1 = var_l2; + var_i2 = var_l3; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L5; + } + var_l5 = var_i0; + var_B6:; + var_i0 = var_p1; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l5; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g22; + var_i2 = var_l2; + var_i3 = 2u; + var_i2 += var_i3; + var_p0 = var_i2; + var_i3 = 32u; + var_i2 = var_i2 <= var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12416u; + var_i1 = 93u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12417u; + var_i1 = 61u; + var_i2 = var_l2; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l2; + var_i1 = 12417u; + var_i0 += var_i1; + var_i1 = 93u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12416u; + var_i1 = var_p0; + var_i2 = var_p1; + w2c_highlights_f62(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f332(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0; + v128 var_l7 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + var_i0 = instance->w2c_g7; + var_l6 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13272u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l1 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + } else { + var_i0 = 0u; + } + } + var_l2 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l6; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 0u; + var_i3 = instance->w2c_g3; + var_i4 = instance->w2c_g4; + var_i5 = 1u; + var_i4 += var_i5; + var_i3 = var_i3 > var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l4 = var_i1; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + var_i0 = w2c_highlights_f331(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) {goto var_L3;} + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = instance->w2c_g4; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 2u); + var_i4 = 45u; + var_i3 = var_i3 == var_i4; + var_i4 = instance->w2c_g3; + var_i5 = instance->w2c_g4; + var_i6 = 2u; + var_i5 += var_i6; + var_i4 = var_i4 > var_i5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = 44u; + var_i0 = w2c_highlights_f331(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + w2c_highlights_f50(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 58u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + var_i3 = 22304u; + var_i4 = 7u; + var_i5 = 22u; + var_i1 = w2c_highlights_f76(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i1; + var_i2 = 255u; + var_i1 &= var_i2; + var_i2 = var_l4; + var_i3 = 0u; + var_i2 = (u32)((s32)var_i2 < (s32)var_i3); + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = var_l2; + if (var_i0) { + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 15u; + } else { + var_i0 = var_l1; + if (var_i0) { + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 16u; + var_i1 = 29u; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 14u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l0; + } + } + } + var_l0 = var_i0; + var_i1 = 19u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 255u; + var_i1 = (u32)((s32)var_i1 > (s32)var_i2); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l2 = var_i0; + } + var_i0 = 6u; + var_i1 = var_l0; + var_i2 = var_l3; + var_i3 = instance->w2c_g4; + var_i2 = w2c_highlights_f82(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 0u; + var_i4 = var_l0; + var_i5 = 58u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i1 = var_l0; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_l0; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 25u; + var_i1 = 35u; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + } else { + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + } + var_l1 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l5; + if (var_i0) { + var_i0 = 13272u; + instance->w2c_g32 = var_i0; + var_i0 = 13272u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13276u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f333(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 1701080677u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i2 = 102u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_p1; + var_i2 = var_p0; + var_i1 -= var_i2; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f334(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5264u); + var_i1 = 4u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f335(w2c_highlights* instance) { + u32 var_l0 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = w2c_highlights_f334(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) {goto var_B1;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5264u); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + var_B1:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f336(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0; + v128 var_l6 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + u64 var_j3, var_j4; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 58u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = var_l3; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5264u); + var_i1 = 64u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 60u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 58u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = 41u; + var_i1 = 125u; + var_i2 = var_l3; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f73(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i1; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5264u); + var_i1 = 64u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 2u; + var_i0 |= var_i1; + var_i1 = 70u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 60u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 45u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + var_l2 = var_i1; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l5; + var_i0 = var_i0 != var_i1; + var_i1 = var_l1; + var_i2 = var_l2; + var_i3 = 22400u; + var_i4 = 15u; + var_i5 = 53u; + var_i1 = w2c_highlights_f75(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 8u); + var_i3 = 120u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 7594869363793224801ull; + var_i3 = var_j3 == var_j4; + var_i2 &= var_i3; + var_i3 = var_l2; + var_i4 = var_l1; + var_i3 -= var_i4; + var_i4 = 9u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 14u; + var_i1 = var_l1; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 58u; + var_i1 = var_l1; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + } + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_L9: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = var_l2; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 64u; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + w2c_highlights_f336(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + goto var_L9; + } + var_i0 = var_l4; + var_i0 = !(var_i0); + var_i1 = var_l2; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + goto var_L9; + } + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l4; + var_i2 = var_l2; + var_i3 = var_l3; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = var_l2; + var_i1 = var_l5; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = var_l4; + var_i1 = 1u; + var_i0 -= var_i1; + var_l4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + goto var_L9; + var_B10:; + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f337(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5264u); + var_i1 = 7u; + var_i0 >>= (var_i1 & 31); + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f338(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, + var_l16 = 0; + v128 var_l17 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g7; + var_l16 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l15 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + var_i0 = 1u; + var_l8 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13280u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l15 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l13 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } + } else { + var_i0 = 0u; + } + } + var_l4 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l16; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l15; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l10 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_L6: + var_i0 = var_l0; + var_i1 = var_l10; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B7;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 -= var_i1; + var_l1 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l11; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B7;} + var_i0 = var_l1; + var_l0 = var_i0; + goto var_L6; + var_B7:; + var_i0 = 1u; + var_i1 = var_l8; + var_i2 = var_l0; + var_i3 = var_l10; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + var_i0 = var_l10; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l14 = var_i0; + var_i0 = var_l8; + if (var_i0) { + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 4u; + var_l4 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = var_l3; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 9u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 5u; + var_i1 = var_l13; + if (var_i1) { + var_i1 = 1u; + var_l5 = var_i1; + var_i1 = 1u; + } else { + var_i1 = 4u; + } + var_i2 = var_l9; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + } + var_i0 = var_l4; + var_i1 = 1u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = 0u; + var_l11 = var_i0; + var_L14: + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B15;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l12; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l12; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B15;} + var_i0 = var_l1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l1; + var_i2 = var_l10; + var_i3 = var_l12; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_l1; + var_i2 = var_l11; + var_i3 = var_l12; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L14; + } + var_i0 = var_l12; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l10 = var_i0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l10; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 41u; + var_i1 = 125u; + var_i2 = var_l10; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l11 = var_i0; + var_i0 = 1u; + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = 2u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L14; + } + } + var_i0 = 2u; + var_i1 = var_l12; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B13;} + var_i0 = var_l12; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 += var_i2; + var_l0 = var_i1; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i1; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = var_l0; + var_i2 = 1u; + var_i1 += var_i2; + var_l0 = var_i1; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i1 = var_l1; + } + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B13;} + var_i0 = 3u; + var_i1 = 1u; + var_i2 = var_l0; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i2; + var_l0 = var_i2; + var_L22: + var_i2 = var_l0; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 >= var_i3; + if (var_i2) {goto var_B23;} + var_i2 = var_l0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l11 = var_i2; + var_i2 = w2c_highlights_f47(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l11; + var_i4 = 45u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l11; + var_i5 = 46u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 |= var_i3; + var_i2 = I32_CLZ(var_i2); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + if (var_i2) {goto var_B23;} + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_l0 = var_i2; + goto var_L22; + var_B23:; + var_i2 = 0u; + var_i3 = var_l0; + var_i4 = var_l1; + var_i3 = var_i3 == var_i4; + if (var_i3) {goto var_B21;} + var_i2 = var_l0; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 5264u); + var_i3 = 32u; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_l0 = var_i2; + } + var_i2 = var_l1; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_l1 = var_i2; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_l1; + var_i3 = 1u; + var_i2 += var_i3; + } else { + var_i2 = var_l1; + } + } else { + var_i2 = var_l0; + } + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_B21:; + var_i0 = var_i2 ? var_i0 : var_i1; + goto var_B13; + } else { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L14; + } + UNREACHABLE; + var_B15:; + var_i0 = 0u; + var_B13:; + var_l1 = var_i0; + var_i0 = var_l9; + if (var_i0) { + var_i0 = 5u; + var_l4 = var_i0; + w2c_highlights_f335(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f333(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 17u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l9 = var_i0; + } else { + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 = var_i0 > var_i1; + if (var_i0) {goto var_L3;} + } else { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + var_l13 = var_i0; + if (var_i0) { + var_i0 = 3u; + var_l4 = var_i0; + var_i0 = 1u; + var_l7 = var_i0; + } + var_i0 = var_l1; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 6u; + var_l4 = var_i0; + var_i0 = 1u; + var_l7 = var_i0; + } + var_i0 = var_l1; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 2u; + var_l4 = var_i0; + var_i0 = 1u; + var_l6 = var_i0; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f335(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_i2 = 22400u; + var_i3 = 15u; + var_i4 = 53u; + var_i0 = w2c_highlights_f75(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l1; + var_i2 = 4u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 18u; + var_i1 = 20u; + var_i2 = 17u; + var_i3 = var_l1; + var_i4 = 2u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l1; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l13 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = var_l1; + var_i1 = 3u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 4u; + var_i1 = var_l4; + var_i2 = var_l4; + var_i3 = 2u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = 1u; + var_l6 = var_i0; + } + var_i0 = 1u; + var_i1 = var_l9; + var_i2 = var_l1; + var_i3 = 3u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 -= var_i1; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 1702063205u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_l8 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f333(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 17u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + } + } + } + } + var_i0 = var_l3; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f268(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) {goto var_L3;} + var_i0 = var_l14; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 45u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l3; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l3; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + w2c_highlights_f336(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5520u); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l14; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l14; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l4; + var_i2 = 2u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L41: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L41; + } + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + goto var_L3; + } + var_i0 = var_l4; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 6u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 38u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = var_l4; + var_i1 = 6u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 2u; + var_l4 = var_i0; + var_i0 = 1u; + var_l6 = var_i0; + } + goto var_L3; + } + var_i0 = var_l3; + var_i1 = 124u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l3; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l4 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + goto var_L3; + } + } + var_i0 = var_l4; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5520u); + var_i1 = 1u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l5; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l3; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 39u; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f55(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L54: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B55;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B55;} + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_B55; + } + var_i0 = var_l1; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + goto var_L54; + } + var_i0 = var_l1; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + w2c_highlights_f336(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + } + goto var_L54; + var_B55:; + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f337(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L60: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f337(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L60; + } + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l5; + var_i2 = var_l3; + var_i3 = 38u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l3; + var_i4 = 124u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l3; + var_i4 = 59u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 64u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + } + var_i0 = var_l3; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5520u); + var_i1 = 4u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = 32u; + var_i2 = var_l3; + var_i3 = 44u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f334(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + } else { + w2c_highlights_f335(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + } + var_i0 = 0u; + var_l0 = var_i0; + var_i0 = var_l6; + if (var_i0) { + var_i0 = 58u; + var_l0 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + } else { + var_i0 = var_l7; + if (var_i0) { + var_i0 = 17u; + var_i1 = 14u; + var_i2 = var_l3; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l14; + var_i4 = 65u; + var_i3 -= var_i4; + var_i4 = 25u; + var_i3 = var_i3 <= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + } else { + var_i0 = var_l4; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 14u; + var_l0 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = var_l3; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = w2c_highlights_f47(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + var_i0 &= var_i1; + var_i1 = var_l4; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 24u; + var_l0 = var_i0; + } else { + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + } + } + } + } + } + var_i0 = var_l0; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + var_B4:; + var_i0 = var_l15; + if (var_i0) { + var_i0 = 13280u; + instance->w2c_g32 = var_i0; + var_i0 = 13280u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13284u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13288u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13292u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13296u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13300u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13304u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f339(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f340(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5520u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f341(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0; + v128 var_l15 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g7; + var_l14 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + var_i0 = 1u; + var_l8 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13312u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l12 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + } + } else { + var_i0 = 0u; + } + } + var_l6 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l14; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l13 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l13; + var_i1 = instance->w2c_g4; + var_i2 = 10u; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = 1u; + var_l8 = var_i0; + } + var_i0 = var_l13; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l11 = var_i0; + var_i0 = var_l8; + var_l1 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = var_l0; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f339(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = var_l11; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_L10: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 125u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 2u; + var_i2 += var_i3; + var_l0 = var_i2; + var_i2 = w2c_highlights_f339(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 4u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B9; + } else { + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L10; + } + UNREACHABLE; + } + var_i0 = 4u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 12416u; + var_i1 = 32037u; + i32_store16_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12416u; + var_i1 = 2u; + var_i2 = 2u; + var_i3 = 4u; + w2c_highlights_f67(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_B9:; + } else { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + } + var_i0 = var_l11; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 3u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i1 = var_l0; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l3; + var_i2 = var_l2; + var_i3 = var_l13; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L16: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = var_l0; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B17;} + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_l0; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B17;} + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B17;} + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 45u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + goto var_L16; + var_B17:; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 1u; + var_l3 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + var_i1 = var_l4; + var_i2 = var_l11; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = var_l11; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = 46u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 14u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = 4294967295u; + var_i1 = var_l2; + var_i2 = var_l1; + var_i3 = 22592u; + var_i4 = 7u; + var_i5 = 37u; + var_i1 = w2c_highlights_f76(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l5; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l4; + var_i2 = var_l3; + var_i3 = 8u; + var_i2 >>= (var_i3 & 31); + var_l0 = var_i2; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = 1u; + var_i1 = var_l10; + var_i2 = var_l0; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l10 = var_i0; + var_i0 = var_l1; + var_i1 = var_l2; + var_i0 -= var_i1; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 6581861u; + var_i1 ^= var_i2; + var_i2 = 8u; + var_i1 <<= (var_i2 & 31); + var_i1 = !(var_i1); + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 255u; + var_i1 &= var_i2; + var_l0 = var_i1; + var_i2 = 3u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 7u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_l3 = var_i0; + } else { + var_i0 = 1u; + var_l3 = var_i0; + var_i0 = 55u; + var_i1 = var_l5; + if (var_i1) { + var_i1 = 16u; + var_i2 = 29u; + var_i3 = var_l0; + var_i4 = 40u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + } else { + var_i1 = var_l4; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = var_l9; + var_i2 = var_l0; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) { + var_i1 = 58u; + } else { + var_i1 = 2u; + var_l4 = var_i1; + var_i1 = 15u; + } + } else { + var_i1 = var_l6; + var_i2 = var_l7; + var_i1 = var_i1 == var_i2; + var_i2 = var_l7; + var_i3 = 0u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + if (var_i1) { + var_i1 = 59u; + } else { + var_i1 = 6u; + var_i2 = 14u; + var_i3 = 58u; + var_i4 = var_l0; + var_i5 = 40u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l2; + var_i4 = var_l1; + var_i3 = w2c_highlights_f82(instance, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_i3 ? var_i1 : var_i2; + } + } + } + var_i2 = var_l10; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + } + var_i0 = var_l0; + var_i1 = var_l2; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l11; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l3 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l6; + var_i1 = 1u; + var_i0 += var_i1; + var_l6 = var_i0; + var_i0 = var_l4; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = var_l6; + } else { + var_i0 = var_l7; + } + var_l7 = var_i0; + } + var_i0 = var_l0; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l7; + var_i1 = 0u; + var_i2 = var_l6; + var_i3 = var_l7; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i0 = var_l6; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_l6; + var_i2 = var_l6; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + } + var_i0 = var_l4; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l9; + var_i2 = var_l0; + var_i3 = 91u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 0u; + var_i2 = var_l0; + var_i3 = 93u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4752u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_l3 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l11; + var_i0 = w2c_highlights_f340(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l11; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_l1 = var_i1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l5 = var_i0; + var_i0 = 0u; + } + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f340(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L35: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f340(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L35; + } + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l12; + if (var_i0) { + var_i0 = 13312u; + instance->w2c_g32 = var_i0; + var_i0 = 13312u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13316u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13320u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13324u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13328u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13332u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13336u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13340u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f342(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g3; + var_i1 = var_p1; + instance->w2c_g3 = var_i1; + var_i1 = var_p0; + instance->w2c_g4 = var_i1; + w2c_highlights_f229(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g3 = var_i0; + var_i0 = var_p1; + instance->w2c_g4 = var_i0; + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f343(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g3; + var_i1 = var_p0; + var_i2 = 1u; + var_i1 += var_i2; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = var_p0; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_l1 = var_i0; + var_i1 = 42u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l1; + var_i2 = 47u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = var_p0; + var_i2 = 2u; + var_i1 += var_i2; + instance->w2c_g4 = var_i1; + var_i1 = var_l1; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + w2c_highlights_f4(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i1 = instance->w2c_g4; + var_p0 = var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_p0; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f344(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0; + v128 var_l6 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = instance->w2c_g2; + var_i1 = instance->w2c_g22; + var_l3 = var_i1; + var_i1 = 1u; + instance->w2c_g22 = var_i1; + var_L0: + var_i1 = var_p0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + if (var_i1) {goto var_B1;} + var_i1 = var_p0; + var_i1 = w2c_highlights_f204(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i1; + var_i1 = var_p0; + var_i1 = w2c_highlights_f73(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i1; + var_i1 = var_p1; + if (var_i1) { + var_i1 = instance->w2c_g57; + var_i2 = instance->w2c_g60; + var_i1 |= var_i2; + var_i2 = instance->w2c_g62; + var_i3 = instance->w2c_g55; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + var_i2 = var_l2; + var_i3 = var_l5; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B1;} + } + var_i1 = var_l2; + var_i1 = w2c_highlights_f205(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i1; + instance->w2c_g2 = var_i1; + var_i1 = 74u; + var_i2 = var_p0; + var_i3 = var_l2; + var_i4 = var_p1; + w2c_highlights_f214(instance, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g74; + var_p1 = var_i1; + var_i1 = var_l2; + var_p0 = var_i1; + goto var_L0; + var_B1:; + instance->w2c_g2 = var_i0; + var_i0 = var_l3; + instance->w2c_g22 = var_i0; + var_i0 = var_l3; + var_i1 = var_p0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 0u; + var_i2 = var_p1; + var_i3 = 8u; + var_i2 <<= (var_i3 & 31); + var_i3 = 74u; + var_i2 |= var_i3; + w2c_highlights_f212(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + w2c_highlights_f224(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f345(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0; + v128 var_l13 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + var_i0 = instance->w2c_g7; + var_l11 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13344u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + instance->w2c_g24 = var_i0; + } + var_i0 = w2c_highlights_f206(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + if (var_i0) { + var_i0 = var_l0; + var_i0 = w2c_highlights_f207(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f205(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + w2c_highlights_f342(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = instance->w2c_g4; + } + var_l5 = var_i0; + var_L4: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l11; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l0; + var_i1 = 123u; + var_i2 = 60u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = var_l5; + var_i1 = var_l6; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f205(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + } + var_L8: + var_i0 = var_l2; + var_i1 = var_l6; + var_i0 = var_i0 < var_i1; + var_i1 = var_l6; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B9;} + var_i0 = var_l6; + var_l0 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_L11: + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B12;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l8; + var_i1 = 1u; + var_i0 += var_i1; + var_l8 = var_i0; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + } else { + var_i0 = var_l3; + var_i1 = 32u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f221(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = var_l0; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_B12;} + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + var_i1 = var_l1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f43(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + var_i0 |= var_i1; + if (var_i0) {goto var_B12;} + var_i0 = var_l4; + var_i1 = var_l0; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + } + } + var_i0 = var_l1; + var_l0 = var_i0; + goto var_L11; + var_B12:; + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + if (var_i1) {goto var_B10;} + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = 96u; + var_i1 = var_i1 != var_i2; + var_i2 = var_l3; + var_i3 = 126u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B10;} + var_i0 = var_l0; + var_l1 = var_i0; + var_L15: + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B16;} + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_l3; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B16;} + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L15; + var_B16:; + var_i0 = 0u; + var_i1 = var_l1; + var_i2 = var_l0; + var_i1 -= var_i2; + var_l12 = var_i1; + var_i2 = 3u; + var_i1 = var_i1 < var_i2; + if (var_i1) {goto var_B10;} + var_i0 = var_l1; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f205(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = var_l12; + var_i3 = var_l8; + var_i4 = var_l0; + var_i5 = var_l4; + var_i4 -= var_i5; + var_i5 = 0u; + var_i6 = var_l4; + var_i4 = var_i6 ? var_i4 : var_i5; + var_i0 = w2c_highlights_f223(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = instance->w2c_g75; + if (var_i1) {goto var_B10;} + var_i0 = instance->w2c_g3; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + if (var_i1) {goto var_B10;} + var_i0 = var_l0; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f205(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_B10:; + var_l0 = var_i0; + if (var_i0) { + var_i0 = var_l0; + var_l6 = var_i0; + var_i1 = var_l2; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = 1u; + var_l10 = var_i0; + goto var_B9; + } + } else { + var_i0 = 0u; + var_i1 = instance->w2c_g3; + var_i2 = var_l6; + var_i3 = 7u; + var_i2 += var_i3; + var_i1 = var_i1 < var_i2; + if (var_i1) {goto var_B19;} + var_i0 = 0u; + var_i1 = var_l6; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i2 = 29810u; + var_i1 = var_i1 == var_i2; + var_l0 = var_i1; + var_i2 = var_l6; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l1 = var_i2; + var_i3 = 1869639017u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l0; + var_i3 = var_l1; + var_i4 = 1869641829u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + if (var_i1) {goto var_B19;} + var_i0 = 0u; + var_i1 = var_l6; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 6u); + var_l0 = var_i1; + var_i2 = 32u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 9u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l0; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 42u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + if (var_i1) {goto var_B19;} + var_i0 = 1u; + var_B19:; + if (var_i0) { + var_i0 = var_l5; + var_i1 = var_l6; + w2c_highlights_f342(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l6; + var_i1 = 0u; + var_i0 = w2c_highlights_f344(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_l5 = var_i0; + var_i0 = var_l6; + var_i1 = var_l2; + var_i2 = var_l2; + var_i3 = var_l6; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + goto var_L4; + } + var_i0 = var_l6; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f205(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + } + goto var_L8; + var_B9:; + var_i0 = var_l2; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B5;} + var_i0 = var_l10; + if (var_i0) { + var_i0 = var_l6; + var_l0 = var_i0; + goto var_L4; + } + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = var_l2; + w2c_highlights_f342(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_i1 = 1u; + var_i2 = 8u; + var_i3 = 0u; + var_i0 = w2c_highlights_f195(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 32u; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + goto var_L4; + } + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 757932348u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = var_l2; + var_i3 = 4u; + var_i2 += var_i3; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = var_l2; + var_i2 = var_l2; + var_i2 = w2c_highlights_f204(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = w2c_highlights_f226(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i1; + w2c_highlights_f342(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l5; + var_l0 = var_i0; + goto var_L4; + } + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_l8 = var_i0; + var_i0 = var_l7; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i2 = var_l0; + var_i1 = var_i1 <= var_i2; + if (var_i1) {goto var_B27;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l4 = var_i0; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B28;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B28;} + var_i0 = var_l4; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 62u; + var_i2 = 60u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + goto var_B27; + } + goto var_B28; + } + var_L32: + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B33;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l4 = var_i1; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B27;} + var_i0 = var_l4; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_B33;} + var_i0 = var_l4; + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + var_i1 = var_l3; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l4; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l0; + var_i2 = var_l0; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L32; + } + var_i0 = var_l4; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = w2c_highlights_f144(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L32; + } + var_i0 = 2u; + var_l3 = var_i0; + } + var_i0 = var_l3; + var_i0 = !(var_i0); + var_i1 = var_l4; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = w2c_highlights_f144(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + goto var_L32; + } + var_i0 = var_l3; + var_i0 = !(var_i0); + var_i1 = var_l4; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = w2c_highlights_f343(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = var_l0; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_l1; + var_l0 = var_i0; + goto var_L32; + } + } + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = var_l4; + var_i2 = w2c_highlights_f43(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l3; + var_i4 = 2u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = !(var_i0); + var_i1 = var_l4; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l3 = var_i0; + } + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L32; + var_B33:; + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + goto var_B27; + var_B28:; + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_B27:; + var_l0 = var_i0; + var_i1 = var_l8; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l7; + var_i2 = var_l8; + var_i3 = 62u; + var_i2 = w2c_highlights_f79(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 >= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + } + } + var_i0 = var_l0; + var_i1 = var_l2; + var_i2 = 1u; + var_i1 += var_i2; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = var_l2; + w2c_highlights_f342(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_l5 = var_i1; + var_i2 = var_l2; + var_i3 = 2u; + var_i2 += var_i3; + var_l1 = var_i2; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 34u; + var_i1 = var_l2; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_L45: + var_i0 = instance->w2c_g4; + var_i1 = var_l5; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B46;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_l4 = var_i1; + var_i2 = var_l2; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_i4 = 45u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B46;} + var_i0 = 1u; + var_i1 = var_l3; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L45; + var_B46:; + var_i0 = 67u; + var_i1 = 51u; + var_i2 = var_l3; + var_i3 = var_l1; + var_i4 = instance->w2c_g4; + var_i3 = var_i3 < var_i4; + var_i4 = var_l1; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_i5 = 65u; + var_i4 -= var_i5; + var_i5 = 25u; + var_i4 = var_i4 <= var_i5; + var_i3 &= var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_L47: + var_i0 = var_l5; + var_i1 = instance->w2c_g4; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L50: + var_i0 = instance->w2c_g4; + var_i1 = var_l5; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B51;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B51;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L50; + var_B51:; + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 34u; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = 62u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L47; + } + goto var_B43; + } + var_i0 = instance->w2c_g3; + var_i1 = var_l5; + instance->w2c_g3 = var_i1; + var_i1 = var_l2; + instance->w2c_g4 = var_i1; + var_i1 = 3u; + w2c_highlights_f191(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g3 = var_i0; + var_B43:; + var_i0 = var_l5; + instance->w2c_g4 = var_i0; + goto var_L4; + } + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g3; + var_i2 = var_l2; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 1u); + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + var_l4 = var_i0; + var_i0 = var_l2; + var_l0 = var_i0; + var_L54: + var_i0 = var_l0; + var_i1 = instance->w2c_g0; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l4 = var_i0; + goto var_B55; + } + var_i0 = var_l0; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l4 = var_i0; + goto var_B55; + } + var_i0 = var_l1; + var_i1 = 32u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l1; + var_i2 = 9u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B55;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 -= var_i1; + var_l0 = var_i0; + goto var_L54; + var_B55:; + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_L58: + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B59;} + var_i0 = 1u; + var_i1 = var_l4; + var_i2 = var_l0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l3 = var_i2; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = var_l3; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l3; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B59;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L58; + } + var_i0 = var_l3; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = w2c_highlights_f144(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + goto var_L58; + } + var_i0 = var_l3; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = w2c_highlights_f343(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = var_l0; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_l1; + var_l0 = var_i0; + goto var_L58; + } + } + var_i0 = 0u; + var_i1 = var_l3; + var_i1 = w2c_highlights_f43(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l3; + var_i2 = w2c_highlights_f47(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 |= var_i2; + var_i2 = var_l3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 5520u); + var_i3 = 4u; + var_i2 >>= (var_i3 & 31); + var_i3 = 1u; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + if (var_i1) {goto var_B53;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L58; + var_B59:; + var_i0 = var_l4; + var_B53:; + } else { + var_i0 = 0u; + } + if (var_i0) { + var_i0 = var_l5; + var_i1 = var_l2; + w2c_highlights_f342(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + var_i0 = 5u; + w2c_highlights_f68(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g3; + var_l5 = var_i0; + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + w2c_highlights_f194(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l5; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + instance->w2c_g31 = var_i0; + var_i0 = var_l5; + var_l0 = var_i0; + goto var_L4; + } + } + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L4; + var_B5:; + var_i0 = var_l5; + var_i1 = instance->w2c_g3; + w2c_highlights_f342(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + var_i0 = var_l9; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f346(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_l1 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l2; + goto var_Bfunc; + } + var_i0 = var_l1; + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 120u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = 2u; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = var_l1; + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 117u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 2u; + var_i0 += var_i1; + var_p0 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 123u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 4u; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = 8u; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_p0; + var_i2 = var_p0; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 125u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + goto var_Bfunc; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 2u; + var_i0 += var_i1; + var_p0 = var_i0; + var_L6: + var_i0 = var_p0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L6; + } + var_i0 = var_p0; + goto var_Bfunc; + } + } + var_i0 = var_p0; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f347(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = 1u; + var_l1 = var_i0; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = 34u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_L2: + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_L2;} + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 -= var_i1; + var_i1 = 3u; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L0;} + var_i0 = 0u; + var_l1 = var_i0; + var_B1:; + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f348(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p1; + var_i1 = 65535u; + var_i0 &= var_i1; + var_i1 = 23331u; + var_i2 = 9053u; + var_i0 = w2c_highlights_f70(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p1; + var_i3 = 65536u; + var_i2 &= var_i3; + var_p1 = var_i2; + var_i3 = 0u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 5u; + var_i1 = 4u; + var_i2 = var_p1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p1; + var_i1 = var_l2; + var_i0 |= var_i1; + var_i1 = 0u; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f349(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, + var_l16 = 0; + v128 var_l17 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + u64 var_j2, var_j3; + var_i0 = instance->w2c_g7; + var_l16 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l15 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l14 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62340u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13344u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l15 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + var_l8 = var_i0; + } + var_i0 = var_l6; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l6; + var_i0 = w2c_highlights_f348(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + } + var_i0 = var_l10; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f347(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l10; + } + } + var_l10 = var_i0; + var_L5: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l16; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l15; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62340u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = var_l0; + var_i3 = instance->w2c_g4; + var_i2 = w2c_highlights_f81(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l7; + var_i3 = !(var_i3); + var_i2 &= var_i3; + var_i3 = var_l4; + var_i4 = 1u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B6;} + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = var_l1; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 = w2c_highlights_f348(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + goto var_L5; + } + var_i0 = var_l3; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 91u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 65537u; + var_i0 = w2c_highlights_f348(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + goto var_L5; + } + var_i0 = 1u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l3; + var_i4 = 35u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L5; + } + var_i0 = var_l8; + var_l2 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = var_l11; + var_l12 = var_i0; + var_i0 = 0u; + var_l11 = var_i0; + var_i0 = instance->w2c_g41; + var_i1 = instance->w2c_g42; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5520u); + var_i1 = 32u; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = 0u; + instance->w2c_g41 = var_i0; + } + } + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i0 = w2c_highlights_f347(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l10 = var_i0; + goto var_L5; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L15: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = 34u; + var_i3 = 1u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B16;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_B16; + } + var_i0 = var_l2; + var_i1 = 92u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B16;} + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f346(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + goto var_L15; + var_B16:; + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L5; + } + var_i0 = var_l1; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l3; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f346(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_l2 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 5520u); + var_i2 = 64u; + var_i1 &= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 45u; + var_i1 = 44u; + var_i2 = var_l3; + var_i3 = 92u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L5; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 24u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L5; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i1 = var_l0; + var_i0 -= var_i1; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 114u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = 14u; + var_i1 = var_l0; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_l0 = var_i0; + } + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i0 = w2c_highlights_f347(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l10 = var_i0; + } else { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L27: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = 34u; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B28;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 34u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B28;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B28;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L27; + var_B28:; + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L5; + } + var_i0 = 4294967295u; + var_l3 = var_i0; + var_i0 = var_l12; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i2 = 22752u; + var_i3 = 31u; + var_i4 = 105u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i1 = 4294967295u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + var_i1 -= var_i2; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 18u; + var_i1 = var_l3; + var_i2 = var_l0; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 435727982962ull; + var_j2 ^= var_j3; + var_j3 = 24ull; + var_j2 <<= (var_j3 & 63); + var_i2 = !(var_j2); + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + } + var_i0 = var_l3; + var_i1 = 4294967295u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + var_i1 -= var_i2; + var_i2 = 6u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 532u; + var_i1 = var_l3; + var_i2 = var_l0; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 128034844735589ull; + var_j2 ^= var_j3; + var_j3 = 16ull; + var_j2 <<= (var_j3 & 63); + var_i2 = !(var_j2); + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + } + } + var_i0 = var_l3; + var_i1 = 255u; + var_i0 &= var_i1; + var_l9 = var_i0; + var_i0 = var_l3; + var_i1 = 4294967295u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g41 = var_i0; + var_i0 = 0u; + instance->w2c_g42 = var_i0; + var_i0 = 1u; + var_l8 = var_i0; + } + var_i0 = 1u; + var_i1 = var_l4; + var_i2 = var_l3; + var_i3 = 8u; + var_i2 >>= (var_i3 & 31); + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + goto var_B32; + } + var_i0 = instance->w2c_g4; + var_l14 = var_i0; + var_i0 = 15u; + var_l9 = var_i0; + var_i0 = var_l2; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l13 = var_i0; + var_i0 = 1u; + instance->w2c_g41 = var_i0; + var_i0 = 0u; + instance->w2c_g42 = var_i0; + goto var_B32; + } + var_i0 = 23u; + var_l9 = var_i0; + var_i0 = var_l4; + if (var_i0) { + var_i0 = 1u; + var_l4 = var_i0; + goto var_B32; + } + var_i0 = 1u; + var_l9 = var_i0; + var_i0 = var_l5; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 2u; + var_l5 = var_i0; + goto var_B32; + } + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_l2 = var_i0; + var_i0 = var_l12; + if (var_i0) { + var_i0 = 16u; + var_i1 = 29u; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + goto var_B32; + } + var_i0 = 59u; + var_l9 = var_i0; + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g39; + var_i0 &= var_i1; + var_i1 = instance->w2c_g38; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) {goto var_B32;} + var_i0 = var_l1; + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 6u; + var_i1 = 55u; + var_i2 = var_l0; + var_i3 = instance->w2c_g4; + var_i2 = w2c_highlights_f82(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + goto var_B32; + } + var_i0 = 14u; + var_i1 = 58u; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_B32:; + var_i0 = var_l9; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + instance->w2c_g39 = var_i0; + goto var_L5; + } + var_i0 = var_l1; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i2 = 96u; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l12 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l12; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l0; + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + if (var_i0) { + var_i0 = 15u; + } else { + var_i0 = 14u; + var_i1 = 58u; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_i1 = var_l0; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_l12; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 40u; + var_i1 = var_l12; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l14 = var_i0; + var_i0 = var_l2; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g41 = var_i0; + var_i0 = 0u; + instance->w2c_g42 = var_i0; + var_i0 = instance->w2c_g4; + var_l13 = var_i0; + } + goto var_L5; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L5; + } + var_i0 = var_l1; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 46u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l5 = var_i0; + goto var_L5; + } + var_i0 = var_l1; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 125u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l5; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L5; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g36; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g36 = var_i0; + var_i0 = instance->w2c_g42; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g41; + if (var_i0) { + w2c_highlights_f38(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + instance->w2c_g41 = var_i0; + } + var_i0 = 1u; + instance->w2c_g39 = var_i0; + } else { + var_i0 = 0u; + instance->w2c_g39 = var_i0; + var_i0 = var_l1; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f39(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g36; + if (var_i0) { + var_i0 = instance->w2c_g36; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g36 = var_i0; + } + } else { + var_i0 = instance->w2c_g41; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g42; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g42 = var_i0; + } else { + var_i0 = var_l1; + var_i1 = 93u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + w2c_highlights_f41(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + instance->w2c_g41 = var_i0; + } + } + } else { + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5520u); + var_i1 = 128u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g38; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g38 = var_i0; + } else { + var_i0 = instance->w2c_g38; + if (var_i0) { + var_i0 = instance->w2c_g38; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g38 = var_i0; + } + } + } + } + } + } + var_i0 = var_l7; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l7; + var_i2 = 1u; + var_i1 -= var_i2; + var_i2 = var_l7; + var_i3 = var_l7; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 5776u); + var_i3 = 1u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L5; + } + var_i0 = var_l1; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_l2 = var_i0; + var_i1 = var_l1; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + instance->w2c_g39 = var_i0; + var_i0 = 1u; + var_i1 = var_l5; + var_i2 = var_l5; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i0 = 2u; + var_i1 = 0u; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l4; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + goto var_L5; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5776u); + var_i1 = 2u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g39 = var_i0; + var_i0 = var_l1; + var_i1 = 42u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = var_l14; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 5776u); + var_i2 = 2u; + var_i1 >>= (var_i2 & 31); + var_i2 = 1u; + var_i1 &= var_i2; + var_i2 = var_l0; + var_i3 = var_l13; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L5; + } + var_L62: + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5776u); + var_i1 = 2u; + var_i0 &= var_i1; + if (var_i0) {goto var_L62;} + var_i0 = var_l1; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_l2 = var_i0; + var_i1 = var_l1; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + var_i1 -= var_i2; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 35u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_l11 = var_i0; + } else { + var_i0 = 25u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L5; + var_B6:; + var_i0 = var_l15; + if (var_i0) { + var_i0 = 13344u; + instance->w2c_g32 = var_i0; + var_i0 = 13344u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13348u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13352u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13356u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13360u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13364u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13368u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f350(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 5776u); + var_i2 = 3u; + var_i1 >>= (var_i2 & 31); + var_i2 = 1u; + var_i1 &= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f351(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5776u); + var_i1 = 6u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f352(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, + var_l16 = 0; + v128 var_l17 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + var_i0 = instance->w2c_g7; + var_l16 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l15 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62340u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13376u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l15 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l1 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l13 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 32u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } + } else { + var_i0 = 0u; + } + } + var_l8 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l16; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l15; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62340u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l8; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l1 = var_i0; + goto var_B4; + } + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + var_i2 = var_l1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_L10: + var_i0 = var_l8; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 34u; + var_i2 = 92u; + var_i3 = 36u; + var_i0 = w2c_highlights_f8(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 39u; + var_i2 = 36u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_l1 = var_i0; + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + goto var_B11; + } + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l5 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i0 = var_l2; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l5; + instance->w2c_g4 = var_i0; + goto var_B9; + } + var_i0 = var_l2; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 45u; + var_i1 = var_l1; + var_i2 = var_l1; + var_i2 = w2c_highlights_f51(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + goto var_L10; + } + var_i0 = var_l2; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 39u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L10; + } + var_i0 = var_l1; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 3u; + var_i0 += var_i1; + } else { + var_i0 = var_l2; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l1; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_B9; + } + } + var_l2 = var_i0; + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 45u; + var_i1 = var_l1; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_l0 = var_i0; + goto var_L10; + } + var_i0 = var_l7; + var_i0 = !(var_i0); + var_i1 = var_l4; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + goto var_B8; + } else { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L10; + } + UNREACHABLE; + var_B11:; + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + goto var_B8; + var_B9:; + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_B8:; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l8; + var_l13 = var_i0; + var_i0 = 1u; + var_l7 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 1u; + var_l6 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l8; + } + } + var_l8 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l12 = var_i0; + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l8 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_l8 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + goto var_L3; + } + var_i0 = var_l5; + var_i0 = w2c_highlights_f350(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l5; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_l4 = var_i1; + var_i2 = var_l5; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l12; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l4; + var_i3 = var_l0; + var_i4 = 126u; + var_i3 = var_i3 == var_i4; + var_l14 = var_i3; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l14; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_L30: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B31;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f350(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B31;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L30; + var_B31:; + var_i0 = 47u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l6 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l5; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_l4 = var_i0; + var_L33: + var_i0 = var_l4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f350(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + var_l4 = var_i0; + goto var_L33; + } + var_i0 = var_l4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 47u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l6 = var_i0; + goto var_L3; + } + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_L37: + var_i0 = 45u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L37; + } + var_i0 = instance->w2c_g4; + var_l5 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l5; + var_i3 = 2u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 47u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_L40: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B41;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 5776u); + var_i2 = 4u; + var_i1 >>= (var_i2 & 31); + var_i2 = 1u; + var_i1 &= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B41;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L40; + var_B41:; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l6 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l10; + var_i1 = 3u; + var_i0 &= var_i1; + var_l14 = var_i0; + var_i0 = var_l5; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l12 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = 4294967295u; + var_i1 = var_l2; + var_i2 = var_l5; + var_i3 = 23136u; + var_i4 = 3u; + var_i5 = 29u; + var_i1 = w2c_highlights_f76(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l3; + var_i3 = var_l9; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l9; + var_i2 = var_l5; + var_i3 = var_l2; + var_i2 -= var_i3; + var_i3 = 7u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_i3 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 1701342825u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i3 = var_l4; + var_i4 = 17u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = var_l4; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 7u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + } else { + var_i0 = var_l9; + if (var_i0) { + var_i0 = 29u; + } else { + var_i0 = var_l0; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l12; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 29u; + } else { + var_i0 = var_l3; + var_i0 = !(var_i0); + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 5776u); + var_i2 = 7u; + var_i1 >>= (var_i2 & 31); + var_i0 &= var_i1; + var_i1 = var_l14; + var_i2 = 3u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 59u; + } else { + var_i0 = 14u; + var_i1 = 29u; + var_i2 = 58u; + var_i3 = var_l3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l6; + var_i2 = !(var_i2); + var_i3 = var_l12; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i3; + var_i3 = var_l12; + var_i4 = 1u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i3; + var_i3 = 1u; + var_i4 = var_l0; + var_i4 = w2c_highlights_f46(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = var_l0; + var_i5 = w2c_highlights_f44(instance, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 |= var_i5; + var_i5 = var_l0; + var_i5 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i5) + 5776u); + var_i6 = 5u; + var_i5 >>= (var_i6 & 31); + var_i6 = 1u; + var_i5 &= var_i6; + var_i4 |= var_i5; + if (var_i4) {goto var_B46;} + var_i3 = var_l3; + var_i4 = 39u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i5 = 39u; + var_i4 = var_i4 == var_i5; + if (var_i4) {goto var_B46;} + var_i3 = var_l0; + var_i4 = 60u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i5 = 126u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + if (var_i3) { + var_i3 = var_l3; + var_i3 = w2c_highlights_f46(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = var_l3; + var_i5 = 47u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + goto var_B46; + } + var_i3 = var_l0; + var_i4 = 46u; + var_i3 = var_i3 == var_i4; + if (var_i3) { + var_i3 = var_l3; + var_i4 = 46u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l12; + var_i5 = 2u; + var_i4 += var_i5; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 47u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i4 = var_l3; + var_i5 = 47u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + goto var_B46; + } + var_i3 = var_l0; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + if (var_i3) { + var_i3 = var_l3; + var_i3 = w2c_highlights_f350(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = var_l3; + var_i5 = 47u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + goto var_B46; + } + var_i3 = 0u; + var_B46:; + var_i4 = var_l14; + var_i5 = 2u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + var_l4 = var_i0; + var_i0 = 1u; + } + var_l6 = var_i0; + var_i0 = var_l4; + var_i1 = var_l2; + var_i2 = var_l5; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l6 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l7; + if (var_i0) { + var_i0 = var_l7; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l7; + var_i2 = var_l0; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i0 = var_l0; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l7; + var_i1 = 1u; + var_i0 -= var_i1; + var_l7 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l13; + var_l8 = var_i0; + var_i0 = 0u; + var_l13 = var_i0; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + } + } + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 5776u); + var_i1 = 1u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l10; + var_i1 = 2u; + var_i0 <<= (var_i1 & 31); + var_i1 = 1u; + var_i2 = 2u; + var_i3 = 3u; + var_i4 = var_l0; + var_i5 = 91u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l0; + var_i4 = 40u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 |= var_i1; + var_l10 = var_i0; + var_i0 = var_l11; + var_i1 = 1u; + var_i0 += var_i1; + var_l11 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l11; + if (var_i0) { + var_i0 = var_l11; + var_i1 = 1u; + var_i0 -= var_i1; + var_l11 = var_i0; + var_i0 = var_l10; + var_i1 = 2u; + var_i0 >>= (var_i1 & 31); + var_l10 = var_i0; + } + var_i0 = 1u; + } + var_l6 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l4 = var_i0; + var_i1 = var_l0; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_i1 = var_l9; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l12; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 60u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l3 = var_i0; + var_i0 = 0u; + } + var_l6 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f351(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L61: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f351(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B62;} + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B62;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L61; + var_B62:; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l15; + if (var_i0) { + var_i0 = 13376u; + instance->w2c_g32 = var_i0; + var_i0 = 13376u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13380u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13384u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13388u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13392u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13396u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13400u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13404u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13408u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f353(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + u32 var_l4 = 0, var_l5 = 0; + v128 var_l6 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + u64 var_j1, var_j2, var_j3; + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = 23264u; + var_i3 = 31u; + var_i4 = 76u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l4 = var_i0; + var_i0 = var_p2; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 -= var_i1; + var_p1 = var_i0; + var_i1 = 9u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 7161117524010233449ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + var_i1 = var_p1; + var_i2 = 14u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 7954884599198281065ull; + var_i2 = var_j2 == var_j3; + var_i1 &= var_i2; + var_i0 |= var_i1; + var_i1 = var_p1; + var_i2 = 8u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p0; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 7813573208857080432ull; + var_i2 = var_j2 == var_j3; + var_i1 &= var_i2; + var_i2 = var_p1; + var_i3 = 5u; + var_i2 = var_i2 == var_i3; + var_i3 = var_p0; + var_i3 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 1935764579u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 273u; + goto var_Bfunc; + } + var_i0 = var_p1; + var_i1 = 8u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 8751745755891331696ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 529u; + goto var_Bfunc; + } + } + var_i0 = 17u; + goto var_Bfunc; + } + var_i0 = var_p3; + var_i0 = !(var_i0); + var_i1 = var_l4; + var_i2 = 6u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l4; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l4; + var_i3 = 6u; + var_i2 = var_i2 > var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 4294967295u; + goto var_Bfunc; + } + var_i0 = var_l5; + var_i1 = 255u; + var_i0 &= var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f354(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, + var_l16 = 0, var_l17 = 0; + v128 var_l18 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g7; + var_l17 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l15 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62340u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13416u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l15 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 32u); + var_l12 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + } + var_l1 = var_i0; + } + var_i0 = var_l12; + var_i0 = w2c_highlights_f59(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_l12 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l17; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l15; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62340u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l14 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l14; + var_i1 = instance->w2c_g4; + var_i2 = 10u; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i0 = var_i0 < var_i1; + var_l13 = var_i0; + if (var_i0) { + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + } + var_i0 = var_l14; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i0; + var_i0 = var_l14; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 0u; + var_i2 = var_l13; + var_i2 = !(var_i2); + var_i3 = var_l14; + var_i4 = instance->w2c_g0; + var_i3 = var_i3 > var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l13 = var_i0; + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l7; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l7; + var_i5 = 33u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l7; + var_i4 = 42u; + var_i3 = var_i3 == var_i4; + var_i4 = instance->w2c_g4; + var_i5 = 3u; + var_i4 += var_i5; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 47u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i4 = var_l7; + var_i5 = 33u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l10; + var_i0 = !(var_i0); + var_i1 = var_l0; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f74(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 27u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 1u; + var_l10 = var_i0; + goto var_L3; + } + var_i0 = 1u; + var_l10 = var_i0; + var_i0 = var_l0; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f57(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l12 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i3 = 0u; + var_i0 = w2c_highlights_f353(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 255u; + var_i0 &= var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_l8 = var_i0; + var_i0 = var_l0; + var_i1 = 9u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_l9 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f57(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l12 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l16 = var_i0; + var_i0 = var_l3; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i0; + var_i0 = var_l0; + var_i1 = 117u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 85u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 76u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l16; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l16; + var_i3 = 39u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = var_l2; + var_i1 -= var_i2; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f57(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l12 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = 4294967295u; + var_i1 = var_l2; + var_i2 = var_l3; + var_i3 = 0u; + var_i4 = var_l9; + var_i1 = w2c_highlights_f353(instance, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 < (s32)var_i1); + if (var_i0) { + var_i0 = var_l8; + if (var_i0) { + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 55u; + } else { + var_i0 = var_l16; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 58u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l11; + var_i2 = var_l5; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l11 = var_i0; + var_i0 = 15u; + var_i1 = 16u; + var_i2 = var_l5; + var_i3 = var_l4; + var_i3 = !(var_i3); + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l5; + var_i1 = var_l4; + var_i1 = !(var_i1); + var_i0 &= var_i1; + var_i1 = var_l11; + var_i1 = !(var_i1); + var_i2 = var_l7; + var_i3 = 59u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l7; + var_i4 = 123u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 15u; + } else { + var_i0 = var_l7; + var_i1 = 93u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l13; + var_i1 = w2c_highlights_f47(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l13; + var_i3 = 93u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l13; + var_i4 = 41u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i2 = var_l2; + var_i3 = var_l14; + var_i2 = var_i2 > var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 16u; + } else { + var_i0 = var_l1; + if (var_i0) { + var_i0 = 16u; + var_i1 = 29u; + var_i2 = var_l7; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l2; + var_i1 = var_l3; + var_i0 = w2c_highlights_f240(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + } + } + } + } else { + var_i0 = var_l0; + } + var_i1 = var_l2; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + w2c_highlights_f50(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l4; + var_i2 = var_l0; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = var_l0; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 0u; + var_i2 = var_l4; + var_i3 = 1u; + var_i2 -= var_i3; + var_i3 = var_l4; + var_i4 = var_l4; + var_i2 = var_i4 ? var_i2 : var_i3; + var_l4 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + } + var_i0 = var_l0; + var_i1 = 93u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_l6; + var_i3 = var_l0; + var_i4 = 91u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l6 = var_i1; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l6; + var_i1 = 1u; + var_i0 -= var_i1; + var_l6 = var_i0; + } + var_i0 = var_l0; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 125u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i1 = var_l0; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + if (var_i0) { + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + } + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i1 = var_l3; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l1; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = 35u; + var_i2 = var_l1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l13; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f73(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 40u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 43u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l5 = var_i0; + var_i0 = 0u; + var_l11 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f241(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3984u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = var_l3; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l15; + if (var_i0) { + var_i0 = 13416u; + instance->w2c_g32 = var_i0; + var_i0 = 13416u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13420u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13424u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13428u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13432u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13436u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13440u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13444u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13448u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f355(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 6032u); + var_i1 = 1u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f356(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0; + v128 var_l15 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + u64 var_j1, var_j2; + var_i0 = instance->w2c_g7; + var_l14 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13456u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l12 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + var_l1 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + } + } else { + var_i0 = 0u; + } + } + var_l6 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l14; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i1; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_l5 = var_i0; + var_i1 = var_l3; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_l13 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l5; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 27u; + var_i1 = 4u; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 36u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = var_l5; + if (var_i0) { + var_L9: + var_i0 = instance->w2c_g4; + var_i1 = 42u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = var_l3; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + goto var_B10; + } + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 41u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_L9;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l0 = var_i0; + var_B10:; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 125u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l0 = var_i0; + } + } + var_i0 = var_l2; + var_i1 = var_l13; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 10538u; + var_i1 = 125u; + var_i2 = var_l5; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l5; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_l2; + w2c_highlights_f63(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L15: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = 39u; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B16;} + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 39u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B16;} + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 39u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B16;} + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 45u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + goto var_L15; + var_B16:; + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 47u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f45(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 37u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 38u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l10; + var_i0 = !(var_i0); + var_i1 = 4294967295u; + var_i2 = 3408u; + var_i3 = var_l2; + var_i4 = var_l3; + var_i3 = w2c_highlights_f77(instance, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i3; + var_i4 = 3408u; + var_i3 += var_i4; + var_i4 = 23808u; + var_i5 = 63u; + var_i6 = 153u; + var_i2 = w2c_highlights_f76(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l13 = var_i2; + var_i3 = 0u; + var_i2 = (u32)((s32)var_i2 >= (s32)var_i3); + if (var_i2) { + var_i2 = var_l13; + goto var_B20; + } + var_i2 = 60u; + var_i3 = 3408u; + var_i3 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 1970496882u; + var_i3 = var_i3 == var_i4; + var_i4 = 3412u; + var_i4 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_i5 = 29804u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i4 = var_l5; + var_i5 = 6u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + if (var_i3) {goto var_B20;} + var_i2 = 4294967295u; + var_B20:; + var_i3 = var_l1; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l5 = var_i1; + var_i2 = 4096u; + var_i1 &= var_i2; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l5; + var_i2 = 0u; + var_i1 = (u32)((s32)var_i1 >= (s32)var_i2); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 4294967295u; + var_l5 = var_i0; + } + var_i0 = var_l5; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l5; + var_i1 = 255u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = var_l5; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_i1 = 15u; + var_i0 &= var_i1; + var_l0 = var_i0; + if (var_i0) { + var_i0 = var_l0; + var_l4 = var_i0; + } + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = var_l3; + var_i1 = var_l2; + var_i0 -= var_i1; + var_l0 = var_i0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + var_i1 = 3408u; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 26223u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_l8 = var_i0; + var_i0 = var_l0; + var_i1 = 8u; + var_i0 = var_i0 == var_i1; + var_i1 = 3408u; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 8751745755891331696ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l11 = var_i0; + var_i0 = 1u; + var_l10 = var_i0; + } + var_i0 = var_l5; + var_i1 = 4096u; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = var_l1; + var_i2 = 17u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } + } else { + var_i0 = var_l1; + if (var_i0) { + var_i0 = 16u; + var_i1 = 29u; + var_i2 = var_l0; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l4; + var_i1 = 1u; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = 23u; + } else { + var_i0 = var_l4; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 55u; + } else { + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + var_i0 = 15u; + } + } else { + var_i0 = var_l8; + if (var_i0) { + var_i0 = 55u; + } else { + var_i0 = var_l6; + var_i1 = var_l7; + var_i0 = var_i0 == var_i1; + var_i1 = var_l7; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 59u; + } else { + var_i0 = var_l11; + if (var_i0) { + var_i0 = 0u; + var_l11 = var_i0; + var_i0 = 29u; + } else { + var_i0 = var_l0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 14u; + } else { + var_i0 = var_l2; + var_i1 = var_l3; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 6u; + } else { + var_i0 = 55u; + var_i1 = 58u; + var_i2 = var_l3; + var_i3 = var_l2; + var_i2 -= var_i3; + var_i3 = 2u; + var_i2 = var_i2 < var_i3; + if (var_i2) { + var_i2 = 0u; + } else { + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 6032u); + var_i3 = 1u; + var_i2 &= var_i3; + var_i3 = var_l2; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 1u); + var_i4 = 65u; + var_i3 -= var_i4; + var_i4 = 25u; + var_i3 = var_i3 <= var_i4; + var_i2 &= var_i3; + } + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + } + } + } + } + } + var_l1 = var_i0; + } + var_i0 = var_l1; + var_i1 = var_l2; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4496u); + var_i1 = 128u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l6; + var_i1 = 1u; + var_i0 += var_i1; + var_l6 = var_i0; + var_i0 = var_l9; + if (var_i0) { + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = var_l6; + var_l7 = var_i0; + } + var_i0 = var_l4; + var_i1 = 0u; + var_i2 = var_l4; + var_i3 = 3u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + } + var_i0 = var_l0; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l7; + var_i1 = 0u; + var_i2 = var_l6; + var_i3 = var_l7; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = var_l6; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_l6; + var_i2 = var_l6; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + } + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l5 = var_i0; + var_i1 = var_l0; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = var_l5; + if (var_i0) { + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = 0u; + var_l11 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l4; + var_i0 = !(var_i0); + var_l1 = var_i0; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l8 = var_i0; + var_i0 = 0u; + var_l9 = var_i0; + } + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f355(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L49: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f355(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B50;} + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B50;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L49; + var_B50:; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l8; + var_i1 = 0u; + var_i2 = var_l0; + var_i3 = 61u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l12; + if (var_i0) { + var_i0 = 13456u; + instance->w2c_g32 = var_i0; + var_i0 = 13456u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13460u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13464u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13468u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13472u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13476u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13480u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13484u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f357(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + u32 var_l4 = 0, var_l5 = 0, var_l6 = 0; + v128 var_l7 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = instance->w2c_g4; + var_l5 = var_i0; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = var_p2; + var_i1 = 1u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + } + var_i0 = var_p1; + var_i1 = var_l4; + var_i0 += var_i1; + var_l6 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l4; + var_i2 = var_p0; + var_i3 = var_p1; + var_i1 = w2c_highlights_f237(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l6; + var_i1 = var_p2; + var_i0 = w2c_highlights_f66(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + } + if (var_i0) { + var_i0 = var_p3; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = var_p3; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L0; + } + var_i0 = var_p3; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = var_p2; + var_i3 = 12u; + var_i2 &= var_i3; + var_i3 = var_p2; + var_i4 = 1u; + var_i3 &= var_i4; + var_i4 = 1u; + var_i3 <<= (var_i4 & 31); + var_i2 |= var_i3; + var_i3 = var_p3; + w2c_highlights_f67(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f358(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 6032u); + var_i1 = 2u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f359(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, + var_l16 = 0, var_l17 = 0, var_l18 = 0, var_l19 = 0, var_l20 = 0, var_l21 = 0, var_l22 = 0, var_l23 = 0; + v128 var_l24 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + u64 var_j1, var_j2, var_j3; + var_i0 = instance->w2c_g7; + var_l23 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l22 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l18 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62340u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62344u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62348u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l15 = var_i0; + var_i0 = 62352u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l14 = var_i0; + var_i0 = 62356u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l19 = var_i0; + var_i0 = 62360u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l16 = var_i0; + var_i0 = 62364u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l20 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + var_i0 = 1u; + var_l5 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13488u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l22 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l12 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l13 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l18 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 32u); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 36u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 40u); + var_l15 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 44u); + var_l14 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 48u); + var_l19 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 52u); + var_l16 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 56u); + var_l20 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + } + } else { + var_i0 = 1u; + } + } + var_l17 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l23; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l22; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l17; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l18; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62340u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62344u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62348u; + var_i1 = var_l15; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62352u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62356u; + var_i1 = var_l19; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62360u; + var_i1 = var_l16; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62364u; + var_i1 = var_l20; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = var_l20; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + var_i0 = 4u; + var_i1 = var_l7; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B4; + } + var_i0 = var_l14; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_l0 = var_i1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = var_l7; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l19; + var_i1 = var_l14; + var_i2 = var_l16; + var_i3 = 44u; + w2c_highlights_f357(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l14 = var_i0; + var_i0 = 1u; + var_l17 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + goto var_L3; + } + } + var_i0 = var_l18; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + goto var_B4; + } + var_i0 = var_l6; + var_i1 = instance->w2c_g4; + var_i2 = var_l6; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 46u; + var_i1 = 44u; + var_i2 = var_l11; + var_i3 = 2u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_L12: + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_i0 = var_i0 > var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_l2; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l3; + var_i2 = var_l8; + var_i3 = var_l3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = 36u; + var_i3 = var_l8; + var_i4 = var_l11; + var_i5 = 1u; + var_i4 &= var_i5; + var_l1 = var_i4; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = 64u; + var_i4 = var_l8; + var_i5 = var_l1; + var_i3 = var_i5 ? var_i3 : var_i4; + var_i0 = w2c_highlights_f8(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = var_l8; + var_i3 = var_l11; + var_i4 = 1u; + var_i3 &= var_i4; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + } + var_i0 = var_l1; + var_i1 = var_l2; + var_i2 = var_l1; + var_i3 = var_l2; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B13;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i1 = var_l8; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l10; + if (var_i0) { + var_i0 = var_l10; + var_i1 = 1u; + var_i0 -= var_i1; + var_l10 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L12; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + goto var_B13; + } + var_i0 = var_l3; + var_i1 = var_l6; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l10; + var_i1 = 1u; + var_i0 += var_i1; + var_l10 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L12; + } + var_i0 = var_l6; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + goto var_L12; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l7; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_l7 = var_i1; + var_i2 = var_l6; + var_i3 = 36u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l7; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 125u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } else { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 58u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L12; + var_B13:; + var_i0 = var_l4; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l9; + var_i1 = var_l10; + var_i2 = 1u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + var_l0 = var_i0; + var_i1 = 1u; + var_i0 >>= (var_i1 & 31); + var_l10 = var_i0; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l15; + if (var_i0) { + var_i0 = 0u; + var_l15 = var_i0; + var_i0 = var_l3; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = var_l6; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = w2c_highlights_f272(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l8 = var_i0; + var_i1 = var_l3; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l18 = var_i0; + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 46u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + } + } else { + var_i0 = var_l6; + } + } else { + var_i0 = var_l11; + var_i1 = 2u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 46u; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l18 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + } + var_l6 = var_i0; + } + goto var_L3; + } + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l7; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f81(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l14 = var_i0; + var_i0 = 1u; + var_l17 = var_i0; + } + var_i0 = var_l7; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l9 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = var_l17; + var_l1 = var_i0; + var_i0 = 0u; + var_l17 = var_i0; + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = var_l0; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l9; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12416u; + var_i1 = 1953850173u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12416u; + var_i1 = 4u; + var_i2 = 8u; + var_i3 = 5u; + w2c_highlights_f357(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l17 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = var_l0; + var_i2 = 95u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l4; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 26844869763096415ull; + var_j1 ^= var_j2; + var_j2 = 8ull; + var_j1 <<= (var_j2 & 63); + var_i1 = !(var_j1); + var_i2 = var_l4; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 6872283386518724447ull; + var_i2 = var_j2 == var_j3; + var_i1 |= var_i2; + var_i2 = var_l4; + var_i3 = 8u; + var_i4 = 7u; + var_i5 = var_l2; + var_i6 = 68u; + var_i5 = var_i5 == var_i6; + var_i3 = var_i5 ? var_i3 : var_i4; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f47(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = !(var_i2); + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l20 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l9; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_l16 = var_i0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l16; + var_i2 = var_l2; + var_i3 = 126u; + var_i2 = var_i2 == var_i3; + var_l16 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l21 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l21; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l21; + var_i2 = 65u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i1 = !(var_i1); + var_i2 = var_l4; + var_i3 = var_l7; + var_i2 = var_i2 > var_i3; + var_i1 &= var_i2; + var_i2 = var_l7; + var_i3 = 1u; + var_i2 -= var_i3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 48u; + var_i2 -= var_i3; + var_i3 = 9u; + var_i2 = var_i2 > var_i3; + var_i1 &= var_i2; + if (var_i1) { + var_i1 = var_l2; + var_i1 = w2c_highlights_f65(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i1 = 0u; + } + var_i2 = var_l5; + var_i3 = var_l16; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l21; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l21; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l19 = var_i0; + var_i1 = var_l21; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_l19; + var_i0 -= var_i1; + var_l14 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } else { + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_l19 = var_i1; + var_i0 -= var_i1; + var_l14 = var_i0; + } + var_i0 = 44u; + var_l0 = var_i0; + goto var_B34; + } + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 96u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = var_l0; + var_l8 = var_i0; + var_i1 = 39u; + var_i0 = var_i0 != var_i1; + var_l11 = var_i0; + var_i0 = 0u; + var_l15 = var_i0; + goto var_B40; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 47u; + var_l8 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 3u; + var_l11 = var_i0; + var_i0 = 0u; + var_l15 = var_i0; + goto var_B40; + } + var_i0 = var_l0; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_l2 = var_i0; + var_i1 = var_l0; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 37u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 38u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_l7 = var_i0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l7; + var_i2 = var_l9; + var_i3 = 35u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = var_l2; + var_i2 = w2c_highlights_f44(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l2; + var_i4 = 123u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l2; + var_i3 = w2c_highlights_f43(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = !(var_i3); + var_i4 = var_l2; + var_i5 = 0u; + var_i4 = var_i4 != var_i5; + var_i5 = var_l9; + var_i6 = 35u; + var_i5 = var_i5 != var_i6; + var_i4 &= var_i5; + var_i3 &= var_i4; + var_i2 |= var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l7; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L46: + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 &= var_i2; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L46; + } + } else { + var_i0 = var_l2; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 125u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = 14u; + var_i1 = 58u; + var_i2 = 60u; + var_i3 = var_l2; + var_i3 = w2c_highlights_f46(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i3 = 38u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + goto var_B34; + } + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l13; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = var_l4; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 65535u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = var_l2; + var_i1 = var_l4; + var_i0 -= var_i1; + var_l9 = var_i0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l1; + var_i2 = 255u; + var_i1 &= var_i2; + var_l1 = var_i1; + var_i2 = 113u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B52;} + var_i0 = 3u; + var_i1 = var_l1; + var_i2 = 109u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B52;} + var_i0 = 4u; + var_i1 = var_l1; + var_i2 = 115u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 121u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B52;} + var_i0 = 0u; + goto var_B52; + } + var_i0 = var_l9; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l1; + var_i2 = 30577u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B52;} + var_i0 = 2u; + var_i1 = var_l1; + var_i2 = 29041u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B52;} + var_i0 = 3u; + var_i1 = var_l1; + var_i2 = 29297u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B52;} + var_i0 = 4u; + var_i1 = var_l1; + var_i2 = 29300u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B52;} + } + var_i0 = 0u; + var_B52:; + } + var_l1 = var_i0; + if (var_i0) { + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i1 = 128u; + var_i0 = var_i0 < var_i1; + var_i1 = var_l3; + var_i2 = 32u; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i1 = w2c_highlights_f47(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l3; + var_i3 = 44u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l3; + var_i4 = 59u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = var_l3; + var_i4 = 35u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i5 = var_l2; + var_i4 = var_i4 > var_i5; + var_i3 &= var_i4; + var_i4 = var_l3; + var_i5 = 61u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l3; + var_i6 = 41u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i3 |= var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l3; + var_i1 = 0u; + var_i2 = var_l3; + var_i3 = var_l3; + var_i3 = w2c_highlights_f272(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l8 = var_i3; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = 3u; + var_i1 = 1u; + var_i2 = var_l1; + var_i3 = 3u; + var_i2 = var_i2 >= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 0u; + var_i2 = var_l1; + var_i3 = 1u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l11 = var_i0; + var_i0 = var_l1; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + var_l15 = var_i0; + goto var_B40; + } + } + var_i0 = var_l13; + if (var_i0) { + var_i0 = 4294967295u; + } else { + var_i0 = var_l4; + var_i1 = var_l2; + var_i2 = 24384u; + var_i3 = 31u; + var_i4 = 73u; + var_i0 = w2c_highlights_f75(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 21u; + var_i1 = var_l2; + var_i2 = var_l4; + var_i1 -= var_i2; + var_l1 = var_i1; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l4; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 120u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B58;} + var_i0 = 14u; + var_i1 = var_l1; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l4; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 439787744885ull; + var_j2 ^= var_j3; + var_j3 = 24ull; + var_j2 <<= (var_j3 & 63); + var_i2 = !(var_j2); + var_i1 &= var_i2; + if (var_i1) {goto var_B58;} + var_i0 = 60u; + var_i1 = var_l4; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 24415u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_i3 = 2u; + var_i2 -= var_i3; + var_i2 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 24415u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l1; + var_i3 = 5u; + var_i2 = var_i2 >= var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B58;} + var_i0 = 4294967295u; + goto var_B58; + } + var_i0 = 18u; + var_i1 = var_l1; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B58;} + var_i0 = 275u; + var_i1 = var_l1; + var_i2 = 2u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B58;} + var_i0 = 531u; + var_i1 = var_l1; + var_i2 = 3u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B58;} + var_i0 = 19u; + var_i1 = var_l1; + var_i2 = 4u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B58;} + var_i0 = 20u; + var_i1 = var_l1; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B58;} + var_i0 = 21u; + var_i1 = var_l1; + var_i2 = 6u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B58;} + var_i0 = 17u; + var_i1 = var_l1; + var_i2 = 8u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B58;} + var_i0 = 14u; + var_B58:; + } + var_l1 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l1; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l12 = var_i0; + var_i0 = var_l1; + var_i1 = 255u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i1 = 60u; + var_i0 = var_i0 != var_i1; + var_l5 = var_i0; + } else { + var_i0 = var_l12; + if (var_i0) { + var_i0 = 15u; + var_i1 = 23u; + var_i2 = var_l12; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_i1 = var_l12; + var_i2 = var_l2; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_i4 = 1u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 58u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i2 = I32_CLZ(var_i2); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + var_i0 = var_i2 ? var_i0 : var_i1; + var_l12 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + } else { + var_i0 = var_l13; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 16u; + var_i1 = 29u; + var_i2 = var_l0; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l2; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 23u; + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l5 = var_i0; + var_i0 = 14u; + } else { + var_i0 = var_l4; + var_i1 = var_l2; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 6u; + } else { + var_i0 = 1u; + var_l5 = var_i0; + var_i0 = var_l4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 23u; + var_i1 = 55u; + var_i2 = var_l13; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 48u; + var_i1 = 14u; + var_i2 = var_l0; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 1u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 62u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i3 = var_l0; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 125u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l4; + var_i5 = 1u; + var_i4 -= var_i5; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_i5 = 123u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + } + } + var_l0 = var_i0; + } + } + goto var_B32; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l9; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_l0 = var_i0; + goto var_B34; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 91u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_l5 = var_i0; + var_i0 = 0u; + var_l12 = var_i0; + var_i0 = 32u; + var_l0 = var_i0; + goto var_B32; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l12 = var_i0; + var_i0 = 35u; + var_l0 = var_i0; + goto var_B33; + } + var_i0 = var_l0; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l9; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_l2 = var_i1; + var_i2 = var_l9; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + var_i1 = 1u; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l13 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_l0 = var_i0; + goto var_B33; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f358(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L73: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f358(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B74;} + var_i0 = instance->w2c_g4; + var_i1 = var_l4; + var_i0 = var_i0 > var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = var_l4; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i2 = I32_CLZ(var_i2); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B74;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L73; + var_B74:; + var_i0 = 25u; + var_l0 = var_i0; + goto var_B33; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l0 = var_i0; + goto var_B33; + var_B40:; + var_i0 = 46u; + var_i1 = 44u; + var_i2 = var_l11; + var_i3 = 2u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 1u; + var_l18 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + goto var_B32; + var_B34:; + var_i0 = 0u; + var_l5 = var_i0; + goto var_B32; + var_B33:; + var_i0 = 1u; + var_l5 = var_i0; + var_B32:; + var_i0 = var_l0; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l13 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l22; + if (var_i0) { + var_i0 = 13488u; + instance->w2c_g32 = var_i0; + var_i0 = 13488u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13492u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13496u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13500u; + var_i1 = var_l17; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13504u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13508u; + var_i1 = var_l18; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13512u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13516u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13520u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13524u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13528u; + var_i1 = var_l15; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13532u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13536u; + var_i1 = var_l19; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13540u; + var_i1 = var_l16; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13544u; + var_i1 = var_l20; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f360(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_L0: + var_i0 = var_p0; + var_i1 = 60u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = 0u; + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i3 = 3u; + var_i2 += var_i3; + var_i1 = var_i1 < var_i2; + if (var_i1) {goto var_B2;} + var_i0 = 0u; + var_i1 = var_p0; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 16188u; + var_i1 = var_i1 != var_i2; + if (var_i1) {goto var_B2;} + var_i0 = 1u; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 2u); + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B2;} + var_i0 = 0u; + var_i1 = var_p0; + var_i2 = 5u; + var_i1 += var_i2; + var_l1 = var_i1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 > var_i2; + if (var_i1) {goto var_B2;} + var_i0 = 0u; + var_i1 = var_p0; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 2u); + var_i2 = 2105376u; + var_i1 |= var_i2; + var_i2 = 7366768u; + var_i1 ^= var_i2; + var_i2 = 8u; + var_i1 <<= (var_i2 & 31); + var_i1 = !(var_i1); + var_i1 = !(var_i1); + if (var_i1) {goto var_B2;} + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 5u); + var_i1 = w2c_highlights_f43(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 |= var_i1; + var_B2:; + if (var_i0) { + var_i0 = var_p0; + goto var_Bfunc; + } else { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + } + UNREACHABLE; + var_B1:; + var_i0 = instance->w2c_g3; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f361(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0; + u64 var_l8 = 0; + v128 var_l9 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + u64 var_j1, var_j2, var_j3; + var_i0 = var_p0; + var_l3 = var_i0; + var_L1: + var_i0 = instance->w2c_g3; + var_i1 = var_l3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i0 = w2c_highlights_f196(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_l5 = var_i0; + var_i0 = var_p1; + var_l4 = var_i0; + var_i0 = 0u; + var_i1 = instance->w2c_g3; + var_i2 = var_p2; + var_l7 = var_i2; + var_i3 = var_l5; + var_i2 += var_i3; + var_i1 = var_i1 < var_i2; + if (var_i1) {goto var_B3;} + var_i0 = 1u; + var_i1 = var_p2; + var_i1 = !(var_i1); + if (var_i1) {goto var_B3;} + var_L4: + var_i0 = var_l7; + var_i1 = 8u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 0u; + var_j1 = 18446744073709551615ull; + var_i2 = 8u; + var_i3 = var_l7; + var_i2 -= var_i3; + var_i3 = 3u; + var_i2 <<= (var_i3 & 31); + var_j2 = (u64)(var_i2); + var_j1 >>= (var_j2 & 63); + var_l8 = var_j1; + var_i2 = var_l5; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j1 &= var_j2; + var_i2 = var_l4; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = var_l8; + var_j2 &= var_j3; + var_i1 = var_j1 != var_j2; + if (var_i1) {goto var_B3;} + goto var_B5; + } + var_i0 = 0u; + var_i1 = var_l5; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = var_l4; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i1 = var_j1 != var_j2; + if (var_i1) {goto var_B3;} + var_i0 = var_l5; + var_i1 = 8u; + var_i0 += var_i1; + var_l5 = var_i0; + var_i0 = var_l4; + var_i1 = 8u; + var_i0 += var_i1; + var_l4 = var_i0; + var_i0 = var_l7; + var_i1 = 8u; + var_i0 -= var_i1; + var_l7 = var_i0; + if (var_i0) {goto var_L4;} + var_B5:; + var_i0 = 1u; + var_B3:; + if (var_i0) { + var_i0 = var_p2; + var_i1 = var_l6; + var_i0 += var_i1; + var_l4 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + var_i1 = var_l4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f47(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + var_i0 |= var_i1; + if (var_i0) {goto var_B0;} + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f205(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + goto var_L1; + } + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g22; + var_i1 = var_p2; + var_i2 = 32u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 12416u; + var_i1 = var_p1; + var_i2 = var_p2; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 14u; + instance->w2c_g25 = var_i0; + var_i0 = var_p2; + instance->w2c_g26 = var_i0; + } + var_i0 = 0u; + goto var_Bfunc; + var_B0:; + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = var_l3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i1 = var_l6; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 44u; + var_i1 = var_l6; + var_i2 = var_p2; + var_i3 = var_l6; + var_i2 += var_i3; + var_p0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f362(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = 39u; + var_i3 = 1u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l1 = var_i0; + goto var_B1; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_l2 = var_i0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 92u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_p0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L0; + var_B1:; + var_i0 = 44u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g22; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g2; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 15u; + instance->w2c_g25 = var_i0; + } + var_i0 = var_l1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f363(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, var_l8 = 0, + var_l9 = 0; + u64 var_l10 = 0; + v128 var_l11 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7, + var_i8; + u64 var_j1, var_j2, var_j3, var_j4; + v128 var_o1, var_o2, var_o3; + var_i0 = var_p0; + if (var_i0) { + var_i0 = instance->w2c_g82; + var_l5 = var_i0; + var_i0 = instance->w2c_g81; + var_l3 = var_i0; + } + var_L1: + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B2;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 0u; + var_i3 = instance->w2c_g3; + var_i4 = instance->w2c_g4; + var_i5 = 1u; + var_i4 += var_i5; + var_i3 = var_i3 > var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l7 = var_i1; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B2;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = var_l1; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_p0 = var_i0; + var_i1 = var_l7; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l7; + var_i3 = 91u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_p0; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 10u; + var_i2 = 13u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = instance->w2c_g3; + var_i1 = var_p0; + instance->w2c_g3 = var_i1; + var_L5: + var_i1 = instance->w2c_g4; + var_i2 = 63u; + var_i1 = w2c_highlights_f79(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i1; + var_i2 = var_p0; + var_i1 = var_i1 < var_i2; + if (var_i1) { + var_i1 = var_l4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l4; + var_i3 = 1u; + var_i2 += var_i3; + var_i3 = var_p0; + var_i2 = var_i2 < var_i3; + var_i1 &= var_i2; + if (var_i1) { + var_i1 = var_l4; + } else { + var_i1 = var_l4; + var_i2 = 1u; + var_i1 += var_i2; + instance->w2c_g4 = var_i1; + goto var_L5; + } + } else { + var_i1 = var_p0; + } + var_p0 = var_i1; + instance->w2c_g3 = var_i0; + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + var_i0 = 4u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L1; + } + var_i0 = var_l1; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l7; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L1; + } + var_i0 = var_l1; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l7; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 2u); + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 2u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l8 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f196(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = 0u; + var_i1 = var_p0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + if (var_i1) {goto var_B10;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + } else { + var_i0 = 0u; + var_l6 = var_i0; + } + var_i0 = 0u; + var_i1 = var_p0; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + if (var_i1) {goto var_B10;} + var_i0 = 0u; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l4 = var_i1; + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + var_i2 = var_l4; + var_i3 = 36u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B10;} + var_i0 = var_p0; + var_l4 = var_i0; + var_L12: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B13;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + var_i1 = var_l9; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B13;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L12; + var_B13:; + var_i0 = var_p0; + var_i1 = var_l4; + var_i0 -= var_i1; + var_l9 = var_i0; + var_i0 = var_l6; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = var_l6; + var_i1 = var_i1 != var_i2; + var_i2 = var_p0; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 >= var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B10;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + } + var_i0 = 0u; + var_i1 = var_p0; + var_i1 = w2c_highlights_f196(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 10u; + var_i1 = var_i1 != var_i2; + var_i2 = var_l6; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 13u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i2 = var_l6; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B10;} + var_i0 = 25u; + var_i1 = var_l8; + var_i2 = var_l8; + var_i3 = 3u; + var_i2 += var_i3; + var_l8 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 44u; + var_i1 = var_l8; + var_i2 = var_p0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + var_i1 = var_l6; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l6; + var_i1 = var_l6; + var_i1 = w2c_highlights_f205(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i1; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + var_i1 = var_l4; + var_i2 = var_l9; + var_i0 = w2c_highlights_f361(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_B10:; + if (var_i0) { + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L1; + } + } + var_i0 = var_l1; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + var_p0 = var_i0; + var_i1 = var_l1; + var_i2 = 96u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_p0; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_i0 = w2c_highlights_f362(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l1; + var_i1 = 1u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L1; + } + var_i0 = var_l1; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 58u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + instance->w2c_g39 = var_i0; + goto var_L1; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l7; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L1; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 58u; + var_i1 = instance->w2c_g4; + var_i2 = var_l2; + var_i1 -= var_i2; + var_p0 = var_i1; + var_i2 = 2u; + var_i1 -= var_i2; + var_i2 = 10u; + var_i1 = var_i1 > var_i2; + if (var_i1) {goto var_B21;} + var_i0 = var_p0; + var_i1 = 2u; + var_i0 -= var_i1; + switch (var_i0) { + case 0: goto var_B25; + case 1: goto var_B24; + case 2: goto var_B23; + default: goto var_B22; + } + var_B25:; + var_i0 = 18u; + var_i1 = var_l2; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 2314885530818453536ull; + var_j1 |= var_j2; + var_j2 = 65535ull; + var_j1 &= var_j2; + var_l10 = var_j1; + var_j2 = 26217ull; + var_i1 = var_j1 == var_j2; + var_j2 = var_l10; + var_j3 = 28516ull; + var_i2 = var_j2 == var_j3; + var_i1 |= var_i2; + if (var_i1) {goto var_B21;} + var_i0 = 17u; + var_j1 = var_l10; + var_j2 = 29537ull; + var_i1 = var_j1 == var_j2; + var_j2 = var_l10; + var_j3 = 28262ull; + var_i2 = var_j2 == var_j3; + var_i1 |= var_i2; + if (var_i1) {goto var_B21;} + var_i0 = 58u; + goto var_B21; + var_B24:; + var_i0 = 17u; + var_i1 = var_l2; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 2314885530818453536ull; + var_j1 |= var_j2; + var_j2 = 16777215ull; + var_j1 &= var_j2; + var_l10 = var_j1; + var_j2 = 6648693ull; + var_i1 = var_j1 == var_j2; + var_j2 = var_l10; + var_j3 = 7496054ull; + var_i2 = var_j2 == var_j3; + var_i1 |= var_i2; + var_j2 = var_l10; + var_j3 = 7824750ull; + var_i2 = var_j2 == var_j3; + var_i1 |= var_i2; + if (var_i1) {goto var_B21;} + var_i0 = 18u; + var_j1 = var_l10; + var_j2 = 7499622ull; + var_i1 = var_j1 == var_j2; + var_j2 = var_l10; + var_j3 = 7959156ull; + var_i2 = var_j2 == var_j3; + var_i1 |= var_i2; + if (var_i1) {goto var_B21;} + var_i0 = 56u; + var_j1 = var_l10; + var_j2 = 7630441ull; + var_i1 = var_j1 == var_j2; + if (var_i1) {goto var_B21;} + var_i0 = 58u; + goto var_B21; + var_B23:; + var_i0 = 3u; + var_i1 = var_l2; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 2314885530818453536ull; + var_j1 |= var_j2; + var_j2 = 4294967295ull; + var_j1 &= var_j2; + var_l10 = var_j1; + var_j2 = 1702195828ull; + var_i1 = var_j1 == var_j2; + if (var_i1) {goto var_B21;} + var_i0 = 7u; + var_j1 = var_l10; + var_j2 = 1819047278ull; + var_i1 = var_j1 == var_j2; + if (var_i1) {goto var_B21;} + var_i0 = 18u; + var_j1 = var_l10; + var_j2 = 1702063205ull; + var_i1 = var_j1 == var_j2; + var_j2 = var_l10; + var_j3 = 1702060387ull; + var_i2 = var_j2 == var_j3; + var_i1 |= var_i2; + var_j2 = var_l10; + var_j3 = 1869112165ull; + var_i2 = var_j2 == var_j3; + var_j3 = var_l10; + var_j4 = 1869901671ull; + var_i3 = var_j3 == var_j4; + var_i2 |= var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B21;} + var_i0 = 19u; + var_j1 = var_l10; + var_j2 = 1836412517ull; + var_i1 = var_j1 == var_j2; + if (var_i1) {goto var_B21;} + var_i0 = 56u; + var_j1 = var_l10; + var_j2 = 1819242338ull; + var_i1 = var_j1 == var_j2; + var_j2 = var_l10; + var_j3 = 1684631414ull; + var_i2 = var_j2 == var_j3; + var_i1 |= var_i2; + if (var_i1) {goto var_B21;} + var_i0 = 58u; + goto var_B21; + var_B22:; + var_i0 = 3408u; + var_i1 = var_l2; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l11 = var_o1; + var_o2 = var_l11; + var_i3 = 65u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_sub(var_o2, var_o3); + var_i3 = 25u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_u8x16_le(var_o2, var_o3); + var_i3 = 32u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_v128_and(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + v128_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_o1); + var_i0 = 58u; + var_i1 = 3408u; + var_i2 = var_p0; + var_i3 = 3408u; + var_i2 += var_i3; + var_i3 = 24640u; + var_i4 = 15u; + var_i5 = 51u; + var_i1 = w2c_highlights_f76(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i1; + var_i2 = var_p0; + var_i3 = 0u; + var_i2 = (u32)((s32)var_i2 < (s32)var_i3); + var_i0 = var_i2 ? var_i0 : var_i1; + var_B21:; + var_p0 = var_i0; + var_i0 = var_l3; + if (var_i0) { + var_i0 = 15u; + var_i1 = 57u; + var_i2 = var_l3; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_p0; + var_i2 = var_p0; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l3; + var_i4 = 3u; + var_i3 = var_i3 < var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p0 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_i1 = var_l3; + var_i2 = 3u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 23u; + var_p0 = var_i0; + } else { + var_i0 = 0u; + var_l3 = var_i0; + } + } else { + var_i0 = var_l5; + if (var_i0) { + var_i0 = 16u; + var_i1 = 29u; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i3 = var_p0; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p0 = var_i0; + var_i1 = 29u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 65u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + var_i1 = var_l5; + var_i2 = 2u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 6u; + var_i1 = var_p0; + var_i2 = var_l2; + var_i3 = instance->w2c_g4; + var_i2 = w2c_highlights_f82(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p0 = var_i0; + } + var_i0 = 0u; + var_l5 = var_i0; + } else { + var_i0 = var_p0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 59u; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f73(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 40u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i1 &= var_i2; + if (var_i1) { + var_i1 = 14u; + } else { + var_i1 = var_l1; + var_i2 = 65u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + if (var_i1) { + var_i1 = 55u; + var_i2 = instance->w2c_g4; + var_p0 = var_i2; + var_i2 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 14906u; + var_i2 = var_i2 == var_i3; + var_i3 = instance->w2c_g3; + var_i4 = var_p0; + var_i5 = 1u; + var_i4 += var_i5; + var_i3 = var_i3 > var_i4; + var_i2 &= var_i3; + if (var_i2) {goto var_B33;} + var_i1 = 58u; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 1u); + var_i3 = 97u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + if (var_i2) {goto var_B33;} + var_i1 = 6u; + var_i2 = var_l2; + var_i3 = var_p0; + var_i2 = w2c_highlights_f82(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i2) {goto var_B33;} + var_i1 = 58u; + var_B33:; + } else { + var_i1 = var_p0; + } + } + var_i2 = instance->w2c_g39; + var_i3 = var_l4; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 58u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l4; + var_i5 = instance->w2c_g3; + var_i4 = var_i4 < var_i5; + var_i3 &= var_i4; + var_i4 = var_l4; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4) + 1u); + var_i5 = 0u; + var_i6 = instance->w2c_g3; + var_i7 = var_l4; + var_i8 = 1u; + var_i7 += var_i8; + var_i6 = var_i6 > var_i7; + var_i4 = var_i6 ? var_i4 : var_i5; + var_i5 = 58u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p0 = var_i0; + } else { + var_i0 = var_p0; + var_i1 = 19u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 2u; + var_i2 = instance->w2c_g4; + var_i3 = var_l2; + var_i2 -= var_i3; + var_i3 = 8u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 2314885530818453536ull; + var_j3 |= var_j4; + var_j4 = 7957695015192261990ull; + var_i3 = var_j3 == var_j4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 3u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + var_i3 = var_l2; + var_i2 -= var_i3; + var_i3 = 3u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_i3 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 2105376u; + var_i3 |= var_i4; + var_i4 = 7824750u; + var_i3 ^= var_i4; + var_i4 = 8u; + var_i3 <<= (var_i4 & 31); + var_i3 = !(var_i3); + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l3 = var_i0; + } + } + } + var_i0 = var_p0; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + instance->w2c_g39 = var_i0; + goto var_L1; + } + var_i0 = var_l1; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l7; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_p0 = var_i1; + var_i2 = var_l7; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 2u; + var_i1 = 1u; + var_i2 = var_p0; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i0 = 0u; + instance->w2c_g39 = var_i0; + goto var_L1; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = var_l1; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + instance->w2c_g39 = var_i0; + } else { + var_i0 = var_l1; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_p0 = var_i0; + var_i1 = var_l1; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = var_p0; + instance->w2c_g39 = var_i0; + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_i1 = 25u; + var_i2 = var_l1; + var_i3 = 35u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l7; + var_i4 = 91u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = var_l3; + var_i3 = 0u; + var_i4 = var_l1; + var_i5 = 38u; + var_i4 = var_i4 != var_i5; + var_i5 = var_l1; + var_i6 = 92u; + var_i5 = var_i5 != var_i6; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l3 = var_i0; + } + goto var_L1; + var_B2:; + var_i0 = instance->w2c_g22; + if (var_i0) { + var_i0 = var_l3; + instance->w2c_g81 = var_i0; + var_i0 = var_l5; + instance->w2c_g82 = var_i0; + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f364(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13552u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l3 = var_i0; + instance->w2c_g24 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f360(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g80; + var_i2 = 2u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + w2c_highlights_f118(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B1; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_L4: + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B5;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B5;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L4; + var_B5:; + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + goto var_B1; + } + var_i0 = 0u; + var_i1 = instance->w2c_g3; + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 <= var_i2; + if (var_i1) {goto var_B7;} + var_i0 = 0u; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 60u; + var_i1 = var_i1 != var_i2; + if (var_i1) {goto var_B7;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_l0 = var_i0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 47u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_B7:; + if (var_i0) { + var_i0 = 2u; + instance->w2c_g80 = var_i0; + w2c_highlights_f118(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B1; + } + var_i0 = 1u; + var_l0 = var_i0; + } + var_i0 = var_l0; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = var_l1; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + var_i1 = var_l1; + instance->w2c_g3 = var_i1; + w2c_highlights_f118(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g3 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B10;} + var_L11: + var_i0 = var_l0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 5u; + var_i3 = instance->w2c_g4; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 2u); + var_i4 = 61u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 27u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l0 = var_i0; + var_i0 = 0u; + w2c_highlights_f363(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 15935u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 27u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + instance->w2c_g80 = var_i0; + } else { + var_i0 = 1u; + instance->w2c_g80 = var_i0; + goto var_B10; + } + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f360(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = instance->w2c_g4; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + var_i1 = var_l1; + instance->w2c_g3 = var_i1; + w2c_highlights_f118(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g3 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L11;} + var_B10:; + var_B1:; + var_i0 = var_l3; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f365(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = 3408u; + var_i1 = var_p0; + var_i2 = var_p1; + var_i1 = w2c_highlights_f77(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 3408u; + var_i1 += var_i2; + var_i2 = 24896u; + var_i3 = 31u; + var_i4 = 101u; + var_i0 = w2c_highlights_f75(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f366(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + var_L0: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + } + var_i0 = var_l1; + var_i1 = 58u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) {goto var_B1;} + var_i0 = var_l1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f367(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 6032u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f368(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0; + v128 var_l14 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + var_i0 = instance->w2c_g7; + var_l13 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + var_i0 = 1u; + var_l5 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13552u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l12 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + } + } else { + var_i0 = 0u; + } + } + var_l9 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l13; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l9; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + goto var_B4; + } + var_i0 = var_l7; + var_i1 = instance->w2c_g4; + var_i2 = var_l7; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 34u; + var_i1 = 39u; + var_i2 = var_l9; + var_i3 = 1u; + var_i2 &= var_i3; + var_l7 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_L9: + var_i0 = var_l7; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l3; + var_i2 = 96u; + var_i3 = 36u; + var_i0 = w2c_highlights_f8(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = var_l3; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_l1 = var_i0; + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + goto var_B10; + } + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = var_l3; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 3u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 1u; + var_i1 -= var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l2 = var_i1; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_i3 = 13u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l1; + var_i3 = instance->w2c_g0; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l4 = var_i0; + goto var_B10; + } + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 45u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + goto var_L9; + } + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l4 = var_i0; + goto var_B10; + } + var_i0 = var_l2; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 45u; + var_i1 = var_l1; + var_i2 = var_l1; + var_i3 = 2u; + var_i2 += var_i3; + var_l2 = var_i2; + var_i3 = instance->w2c_g3; + var_i2 = w2c_highlights_f9(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i2; + var_i3 = 1u; + var_i2 += var_i3; + var_i3 = var_l0; + var_i4 = var_l1; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4) + 1u); + var_i5 = 13u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l0; + var_i5 = w2c_highlights_f83(instance, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i6 = 10u; + var_i5 = var_i5 == var_i6; + var_i4 &= var_i5; + var_i5 = var_l0; + var_i6 = var_l2; + var_i5 = var_i5 == var_i6; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_l0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + goto var_L9; + } + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + goto var_B8; + } + var_i0 = var_l2; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i2 = 125u; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + } + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 58u; + var_i1 = var_l1; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_l0 = var_i0; + goto var_L9; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = w2c_highlights_f366(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 58u; + var_i1 = var_l1; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_l0 = var_i0; + goto var_L9; + } + var_i0 = var_l2; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 63u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l2; + var_i2 = 94u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 60u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + } else { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L9; + var_B10:; + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l4; + var_B8:; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = var_l0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l9; + var_l11 = var_i0; + var_i0 = 1u; + var_l8 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l9; + } + } + var_l9 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f81(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + } + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = var_l10; + var_l2 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = var_l1; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + var_L28: + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B29;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L28; + } + var_l2 = var_i0; + var_B29:; + var_i0 = var_l0; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 4u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 15907u; + var_i1 = 2u; + var_i2 = 4u; + w2c_highlights_f63(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_l0 = var_i0; + var_i1 = var_l1; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_i1 = 2u; + var_i2 = var_l0; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = 44u; + goto var_B33; + } + var_i0 = var_l3; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_l0 = var_i0; + var_i1 = var_l3; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 3u; + var_i1 = 4u; + var_i2 = var_l0; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = 44u; + goto var_B33; + } + var_i0 = var_l1; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 40u; + var_l0 = var_i0; + goto var_B32; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f366(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 58u; + var_l0 = var_i0; + goto var_B32; + } + } + var_i0 = var_l1; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = var_l3; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l8; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l8; + var_i2 = var_l8; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + var_i0 = 1u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l3; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i2 = 125u; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 58u; + var_l0 = var_i0; + goto var_B32; + } + var_i0 = var_l3; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 63u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 94u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 60u; + var_l0 = var_i0; + goto var_B32; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f366(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 60u; + var_i1 = 7u; + var_i2 = 3u; + var_i3 = 58u; + var_i4 = var_l4; + var_i5 = 1u; + var_i4 += var_i5; + var_i5 = instance->w2c_g4; + var_i4 = w2c_highlights_f365(instance, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i4; + var_i5 = 7u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l0; + var_i4 = 8u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l3; + var_i3 = 95u; + var_i2 = var_i2 == var_i3; + var_i3 = instance->w2c_g4; + var_i4 = var_l4; + var_i3 -= var_i4; + var_i4 = 2u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i3 = var_l0; + var_i4 = 9u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + goto var_B32; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l0 = var_i0; + goto var_B32; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 91u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = 46u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 55u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 32u; + var_i1 |= var_i2; + var_l0 = var_i1; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 95u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f365(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = 21u; + var_i1 = 59u; + var_i2 = instance->w2c_g4; + var_i3 = var_l4; + var_i2 -= var_i3; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 102u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i3 = var_l5; + var_i4 = 6u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_B32; + } + var_i0 = var_l1; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = var_l3; + var_i1 = 13u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 45u; + var_l0 = var_i0; + goto var_B32; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 45u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_l0 = var_i0; + var_L51: + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i1 = 32u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l3; + var_i2 = 9u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L51; + } + var_i0 = 29u; + var_i1 = var_l3; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 61u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B33;} + var_i0 = var_l2; + var_i1 = 0u; + var_i2 = var_l2; + var_i3 = 3u; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = var_l4; + var_i1 = var_l1; + var_i2 = 45u; + var_i3 = 0u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 15u; + var_i1 = 14u; + var_i2 = var_l0; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l6; + if (var_i0) { + var_i0 = 16u; + var_i1 = 29u; + var_i2 = var_l1; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l0; + if (var_i0) { + var_i0 = 3u; + var_i1 = 0u; + var_i2 = var_l0; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l10 = var_i0; + var_i0 = 15u; + var_i1 = 55u; + var_i2 = var_l0; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 18u; + var_i1 = 0u; + var_i2 = var_l4; + var_i3 = var_l1; + var_i2 = w2c_highlights_f365(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i2; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = var_l2; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l10 = var_i0; + var_i0 = 19u; + var_l0 = var_i0; + } + var_i0 = 21u; + var_i1 = 20u; + var_i2 = 19u; + var_i3 = var_l2; + var_i4 = 3u; + var_i3 = var_i3 == var_i4; + if (var_i3) { + var_i3 = 2u; + var_l10 = var_i3; + var_i3 = 19u; + } else { + var_i3 = var_l0; + } + var_i4 = var_l2; + var_i5 = 4u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l2; + var_i4 = 5u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l2; + var_i3 = 6u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = var_l4; + var_i3 -= var_i4; + var_i4 = 2u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = !(var_i0); + var_i1 = var_l5; + var_i2 = var_l1; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 14u; + } else { + var_i0 = var_l0; + } + } + } + } + goto var_B33; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + goto var_B33; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l8; + if (var_i0) { + var_i0 = var_l8; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l8; + var_i2 = var_l1; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + var_i0 = var_l1; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l8; + var_i1 = 1u; + var_i0 -= var_i1; + var_l8 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 40u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l11; + var_l9 = var_i0; + var_i0 = 0u; + var_l11 = var_i0; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + goto var_L3; + } + } + } + var_i0 = 32u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = var_l1; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l0 = var_i0; + var_i1 = var_l1; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = var_l0; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l6 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + } + var_l6 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f367(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L69: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f367(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L69; + } + var_i0 = 25u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = var_l1; + var_i1 = 124u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 38u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 2u; + var_i1 = 0u; + var_i2 = var_l1; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_i4 = 3u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l10 = var_i0; + var_i0 = 0u; + var_B33:; + var_l0 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_B32:; + var_i0 = var_l0; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + var_B4:; + var_i0 = var_l12; + if (var_i0) { + var_i0 = 13552u; + instance->w2c_g32 = var_i0; + var_i0 = 13552u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13556u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13560u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13564u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13568u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13572u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13576u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f369(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0; + u64 var_l8 = 0; + v128 var_l9 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + u64 var_j2, var_j3, var_j4; + var_i0 = instance->w2c_g7; + var_l7 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13584u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l6 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } + } else { + var_i0 = 0u; + } + } + var_l1 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l7; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i1; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i0 = 4294967295u; + var_i1 = var_l0; + var_i2 = var_l3; + var_i1 -= var_i2; + var_i2 = 8u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = var_l0; + var_i4 = 25248u; + var_i5 = 15u; + var_i6 = 39u; + var_i2 = w2c_highlights_f76(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i2; + var_i3 = 0u; + var_i2 = (u32)((s32)var_i2 < (s32)var_i3); + var_i1 &= var_i2; + if (var_i1) { + var_i1 = 17u; + var_i2 = var_l3; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l8 = var_j2; + var_j3 = 7234314173708068210ull; + var_i2 = var_j2 == var_j3; + var_j3 = var_l8; + var_j4 = 7234318610140980594ull; + var_i3 = var_j3 == var_j4; + var_i2 |= var_i3; + if (var_i2) {goto var_B10;} + } + var_i1 = var_l5; + var_B10:; + var_i2 = var_l1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l5; + var_i1 = 255u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = var_l5; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l2 = var_i0; + } else { + var_i0 = var_l2; + if (var_i0) { + var_i0 = 55u; + var_i1 = 15u; + var_i2 = 23u; + var_i3 = var_l2; + var_i4 = 2u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l2; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = var_l2; + var_i3 = 3u; + var_i2 = var_i2 != var_i3; + var_i3 = var_l4; + var_i4 = 46u; + var_i3 = var_i3 != var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + } else { + var_i0 = var_l3; + var_i1 = var_l0; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 6u; + } else { + var_i0 = var_l4; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 29u; + } else { + var_i0 = 55u; + var_i1 = 23u; + var_i2 = 58u; + var_i3 = var_l1; + var_i4 = var_l4; + var_i5 = 46u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + var_l1 = var_i0; + } + } + var_i0 = var_l1; + var_i1 = var_l3; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 43u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 6032u); + var_i1 = 16u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + } else { + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + } else { + var_i0 = var_l0; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + } + } + var_l1 = var_i0; + } + goto var_L3; + var_B4:; + var_i0 = var_l6; + if (var_i0) { + var_i0 = 13584u; + instance->w2c_g32 = var_i0; + var_i0 = 13584u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13588u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f370(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 6032u); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f371(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0; + v128 var_l15 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + u64 var_j0, var_j1; + var_i0 = instance->w2c_g7; + var_l12 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13592u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l11 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + } + } else { + var_i0 = 0u; + } + } + var_l8 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l12; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = var_l8; + var_l2 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l7; + var_i4 = 39u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 96u; + var_i1 = 0u; + var_i2 = 58u; + w2c_highlights_f55(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l7; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l7; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 40u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = 91u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l3; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l3; + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 114u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = instance->w2c_g4; + var_l13 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l14 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_l10 = var_i0; + var_L11: + var_i0 = var_l10; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l10; + var_i1 = 1u; + var_i0 += var_i1; + var_l10 = var_i0; + var_i0 = var_l9; + var_i1 = 1u; + var_i0 += var_i1; + var_l9 = var_i0; + goto var_L11; + } + var_i0 = 0u; + var_i1 = var_l9; + var_i2 = 30u; + var_i1 = var_i1 > var_i2; + if (var_i1) {goto var_B10;} + var_i0 = var_l10; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 41u; + var_l3 = var_i0; + } + var_i0 = var_l3; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 93u; + var_l3 = var_i0; + } + var_i0 = var_l3; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 125u; + var_l3 = var_i0; + } + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = 41u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = 93u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l3; + var_i3 = 125u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + if (var_i1) {goto var_B10;} + var_i0 = 12416u; + var_i1 = var_l3; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12417u; + var_i1 = 45u; + var_i2 = var_l9; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l9; + var_i1 = 12417u; + var_i0 += var_i1; + var_i1 = var_l14; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l10; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l13; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l9; + var_i1 = 2u; + var_i0 += var_i1; + var_l3 = var_i0; + instance->w2c_g26 = var_i0; + var_i0 = 44u; + instance->w2c_g29 = var_i0; + var_i0 = w2c_highlights_f69(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 12416u; + var_i1 = var_l3; + var_i2 = 44u; + w2c_highlights_f62(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 0u; + instance->w2c_g26 = var_i0; + var_i0 = 0u; + instance->w2c_g29 = var_i0; + } + var_i0 = 1u; + var_B10:; + if (var_i0) { + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + } + var_i0 = var_l0; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i2 = 37u; + var_i3 = 0u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + } + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l7; + var_i2 = 40u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 19u; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l8 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l7; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 46u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 60u; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l7; + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l7; + var_i3 = 36u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 46u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = 0u; + var_i1 = var_l6; + var_i2 = var_l0; + var_i3 = 25696u; + var_i4 = 7u; + var_i5 = 20u; + var_i1 = w2c_highlights_f75(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + if (var_i0) { + var_i0 = 18u; + var_l1 = var_i0; + var_i0 = var_l2; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 19u; + var_l1 = var_i0; + var_i0 = 1u; + var_l8 = var_i0; + } + var_i0 = 21u; + var_i1 = 7u; + var_i2 = 3u; + var_i3 = var_l1; + var_i4 = var_l2; + var_i5 = 3u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l2; + var_i4 = 4u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l2; + var_i3 = 5u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l1; + if (var_i0) { + var_i0 = 16u; + var_i1 = 29u; + var_i2 = var_l3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 23u; + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + } + var_i0 = 0u; + var_i1 = var_l2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 45u; + var_i1 = var_i1 != var_i2; + if (var_i1) {goto var_B27;} + } else { + var_i0 = 0u; + var_i1 = var_l2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 != var_i2; + var_i2 = var_l2; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B27;} + } + var_i0 = 1u; + var_i1 = var_l2; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f73(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i1; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 92u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B27;} + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = 8u; + var_i1 += var_i2; + var_l1 = var_i1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 > var_i2; + if (var_i1) {goto var_B27;} + var_i0 = var_l2; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 7957695015192261990ull; + var_i0 = var_j0 == var_j1; + var_i1 = var_l1; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = w2c_highlights_f47(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + var_i0 &= var_i1; + var_B27:; + if (var_i0) { + var_i0 = 15u; + } else { + var_i0 = var_l3; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 14u; + } else { + var_i0 = 59u; + var_i1 = 58u; + var_i2 = var_l4; + var_i3 = var_l5; + var_i2 = var_i2 == var_i3; + var_i3 = var_l5; + var_i4 = 0u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i3 = var_l3; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 61u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l3; + var_i5 = 1u; + var_i4 += var_i5; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 61u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i4 = var_l4; + var_i5 = 0u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + } + } + var_i1 = var_l6; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l7; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + w2c_highlights_f50(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + var_l4 = var_i0; + var_i1 = var_l5; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + } + var_i0 = var_l0; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 0u; + var_i2 = var_l4; + var_i3 = var_l5; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i0 = var_l4; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_l4; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + } + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l1 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f370(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L39: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f370(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L39; + } + var_i0 = 25u; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l1 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l11; + if (var_i0) { + var_i0 = 13592u; + instance->w2c_g32 = var_i0; + var_i0 = 13592u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13596u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13600u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13604u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f372(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, + var_l16 = 0, var_l17 = 0, var_l18 = 0, var_l19 = 0, var_l20 = 0, var_l21 = 0, var_l22 = 0, var_l23 = 0, + var_l24 = 0, var_l25 = 0, var_l26 = 0, var_l27 = 0, var_l28 = 0; + v128 var_l29 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7; + u64 var_j1, var_j2, var_j3; + var_i0 = instance->w2c_g7; + var_l28 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l26 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l14 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l16 = var_i0; + var_i0 = 62340u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62344u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62348u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62352u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l21 = var_i0; + var_i0 = 62356u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l22 = var_i0; + var_i0 = 62360u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l23 = var_i0; + var_i0 = 62364u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l24 = var_i0; + var_i0 = 62368u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l15 = var_i0; + var_i0 = 62372u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l17 = var_i0; + var_i0 = 62376u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l18 = var_i0; + var_i0 = 62380u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l25 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + var_i0 = 1u; + var_l14 = var_i0; + var_i0 = 1u; + var_l3 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13608u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l26 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l13 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l14 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l12 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l16 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 32u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 36u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 40u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 44u); + var_l21 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 48u); + var_l22 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 52u); + var_l23 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 56u); + var_l24 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 60u); + var_l15 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 64u); + var_l17 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 68u); + var_l18 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 72u); + var_l25 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + } + } else { + var_i0 = 0u; + } + } + var_l11 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l28; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l26; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l16; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62340u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62344u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62348u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62352u; + var_i1 = var_l21; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62356u; + var_i1 = var_l22; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62360u; + var_i1 = var_l23; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62364u; + var_i1 = var_l24; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62368u; + var_i1 = var_l15; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62372u; + var_i1 = var_l17; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62376u; + var_i1 = var_l18; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62380u; + var_i1 = var_l25; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l19 = var_i0; + var_i0 = var_l25; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + var_i0 = 4u; + var_i1 = var_l19; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B4; + } + var_i0 = var_l15; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_l0 = var_i1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = var_l19; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l17; + var_i1 = var_l15; + var_i2 = var_l18; + var_i3 = 44u; + w2c_highlights_f357(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l15 = var_i0; + var_i0 = 1u; + var_l14 = var_i0; + var_i0 = 1u; + var_l3 = var_i0; + goto var_L3; + } + } + var_i0 = var_l16; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l8 = var_i0; + goto var_B4; + } + var_i0 = var_l8; + var_i1 = instance->w2c_g4; + var_i2 = var_l8; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 46u; + var_i1 = 48u; + var_i2 = 44u; + var_i3 = var_l5; + var_i4 = 4u; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l5; + var_i3 = 2u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_l10 = var_i0; + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_L13: + var_i0 = instance->w2c_g4; + var_i1 = var_l10; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l4; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 35u; + var_i2 = var_l11; + var_i3 = var_l5; + var_i4 = 1u; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l6; + var_i3 = var_l11; + var_i4 = var_l6; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = var_l4; + var_i2 = var_l11; + var_i3 = var_l5; + var_i4 = 1u; + var_i3 &= var_i4; + var_i4 = var_l5; + var_i5 = 3u; + var_i4 >>= (var_i5 & 31); + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l10 = var_i0; + } + var_i0 = var_l10; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B14;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = var_l11; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l9; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 1u; + var_i0 -= var_i1; + var_l9 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L13; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l5; + var_i1 = 2u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 1u; + var_l8 = var_i0; + goto var_B14; + } + var_i0 = var_l1; + var_i1 = var_l6; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 1u; + var_i0 += var_i1; + var_l9 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L13; + } + var_i0 = var_l1; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B14;} + var_i0 = var_l1; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + goto var_L13; + } + var_i0 = var_l12; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 -= var_i2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l9; + var_i1 = 2u; + var_i0 <<= (var_i1 & 31); + var_i1 = 2u; + var_i0 |= var_i1; + goto var_B12; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L13; + } + UNREACHABLE; + var_B14:; + var_i0 = var_l2; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l8; + var_i1 = var_l9; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + var_B12:; + var_l0 = var_i0; + var_i1 = 2u; + var_i0 >>= (var_i1 & 31); + var_l9 = var_i0; + var_i0 = instance->w2c_g4; + var_l8 = var_i0; + var_i0 = var_l0; + var_i1 = 3u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l11; + var_l21 = var_i0; + var_i0 = var_l6; + var_l22 = var_i0; + var_i0 = var_l9; + var_l23 = var_i0; + var_i0 = var_l5; + var_l24 = var_i0; + var_i0 = 1u; + var_l12 = var_i0; + var_i0 = 0u; + var_l16 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 1u; + } else { + var_i0 = var_l5; + var_i1 = 8u; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l16 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l3; + } + } + var_l3 = var_i0; + goto var_L3; + } + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l19; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f81(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 1u; + var_l3 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l15 = var_i0; + var_i0 = 1u; + var_l14 = var_i0; + } + var_i0 = var_l19; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l27 = var_i0; + var_i0 = var_l14; + var_l10 = var_i0; + var_i0 = 0u; + var_l14 = var_i0; + var_i0 = var_l0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l10; + var_i1 = var_l0; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 6644285u; + var_i0 ^= var_i1; + var_i1 = 8u; + var_i0 <<= (var_i1 & 31); + var_i0 = !(var_i0); + var_i1 = var_l4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 6907749u; + var_i1 ^= var_i2; + var_i2 = 8u; + var_i1 <<= (var_i2 & 31); + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + w2c_highlights_f3(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 4u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 12416u; + var_i1 = 1684956477u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 12416u; + var_i1 = 4u; + var_i2 = 4u; + var_i3 = 4u; + w2c_highlights_f357(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l14 = var_i0; + goto var_L3; + } + } + var_i0 = var_l10; + var_i1 = var_l0; + var_i2 = 95u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l4; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 26844869763096415ull; + var_j1 ^= var_j2; + var_j2 = 8ull; + var_j1 <<= (var_j2 & 63); + var_i1 = !(var_j1); + var_i2 = var_l4; + var_i3 = 7u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f47(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = !(var_i2); + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l25 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l2; + var_i2 = var_l27; + var_i3 = 126u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l27; + var_i4 = 45u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_l18 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l20 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l20; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l20; + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l18; + var_i1 &= var_i2; + var_i2 = var_l20; + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i1 = var_l10; + var_i1 = !(var_i1); + var_i2 = var_l4; + var_i3 = var_l19; + var_i2 = var_i2 > var_i3; + var_i1 &= var_i2; + var_i2 = var_l19; + var_i3 = 1u; + var_i2 -= var_i3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 48u; + var_i2 -= var_i3; + var_i3 = 9u; + var_i2 = var_i2 > var_i3; + var_i1 &= var_i2; + if (var_i1) { + var_i1 = var_l2; + var_i1 = w2c_highlights_f65(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i1 = 0u; + } + var_i2 = var_l3; + var_i3 = var_l18; + var_i2 |= var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l20; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l20; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l17 = var_i0; + var_i1 = var_l20; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_l17; + var_i0 -= var_i1; + var_l15 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } else { + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_l17 = var_i1; + var_i0 -= var_i1; + var_l15 = var_i0; + } + var_i0 = 44u; + var_l0 = var_i0; + goto var_B33; + } + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 96u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = var_l0; + var_l11 = var_i0; + var_i1 = 39u; + var_i0 = var_i0 != var_i1; + var_l5 = var_i0; + goto var_B39; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 47u; + var_l11 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 11u; + var_l5 = var_i0; + goto var_B39; + } + var_i0 = var_l0; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = 1u; + var_i4 = var_l1; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4) + 6032u); + var_i5 = 64u; + var_i4 &= var_i5; + if (var_i4) {goto var_B43;} + var_i3 = 2u; + var_i4 = var_l1; + var_i5 = 113u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l1; + var_i6 = 119u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i5 = var_l1; + var_i6 = 105u; + var_i5 = var_i5 == var_i6; + var_i6 = var_l1; + var_i7 = 115u; + var_i6 = var_i6 == var_i7; + var_i5 |= var_i6; + var_i4 |= var_i5; + if (var_i4) {goto var_B43;} + var_i3 = 0u; + var_B43:; + var_l2 = var_i3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + var_l10 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + var_i1 = var_l6; + var_i2 = 128u; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_i1 = var_l6; + var_i2 = 32u; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l10; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l6; + var_i1 = 0u; + var_i2 = var_l6; + var_i3 = var_l6; + var_i3 = w2c_highlights_f272(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l11 = var_i3; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = 5u; + var_i1 = 3u; + var_i2 = var_l2; + var_i3 = 2u; + var_i2 = var_i2 != var_i3; + var_i3 = var_l1; + var_i4 = 114u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l5 = var_i1; + var_i2 = 4u; + var_i1 |= var_i2; + var_i2 = var_l5; + var_i3 = var_l1; + var_i4 = 115u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l1; + var_i5 = 105u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l1; + var_i3 = 73u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + goto var_B39; + } + } + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 58u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = var_l1; + var_l11 = var_i0; + var_i1 = 39u; + var_i0 = var_i0 != var_i1; + var_i1 = 12u; + var_i0 |= var_i1; + var_l5 = var_i0; + goto var_B39; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 48u; + var_l0 = var_i0; + goto var_B33; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f244(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L50: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f244(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L50; + } + var_i0 = 48u; + var_l0 = var_i0; + goto var_B33; + } + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l27; + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 64u; + var_i2 = var_i2 == var_i3; + var_l2 = var_i2; + var_i1 &= var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 32u; + var_i2 = var_i2 > var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 60u; + var_l0 = var_i0; + goto var_B33; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l13; + var_i1 = !(var_i1); + var_i2 = var_l1; + var_i3 = 1u; + var_i2 += var_i3; + var_l2 = var_i2; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 58u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_i0 = 48u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l3 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + goto var_L3; + } + var_i0 = var_l13; + var_i1 = var_l7; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 4294967295u; + } else { + var_i0 = var_l4; + var_i1 = var_l1; + var_i2 = 25792u; + var_i3 = 15u; + var_i4 = 56u; + var_i0 = w2c_highlights_f75(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 14u; + var_i1 = var_l1; + var_i2 = var_l4; + var_i1 -= var_i2; + var_l2 = var_i1; + var_i2 = 6u; + var_i1 = var_i1 >= var_i2; + var_i2 = var_l4; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 409942127713ull; + var_j2 ^= var_j3; + var_j3 = 24ull; + var_j2 <<= (var_j3 & 63); + var_i2 = !(var_j2); + var_i1 &= var_i2; + if (var_i1) {goto var_B59;} + var_i0 = 60u; + var_i1 = var_l4; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 24415u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 2u; + var_i2 -= var_i3; + var_i2 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 24415u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l2; + var_i3 = 5u; + var_i2 = var_i2 >= var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B59;} + var_i0 = 4294967295u; + goto var_B59; + } + var_i0 = 18u; + var_i1 = var_l2; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B59;} + var_i0 = 275u; + var_i1 = var_l2; + var_i2 = 2u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B59;} + var_i0 = 531u; + var_i1 = var_l2; + var_i2 = 3u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B59;} + var_i0 = 19u; + var_i1 = var_l2; + var_i2 = 4u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B59;} + var_i0 = 21u; + var_i1 = var_l2; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B59;} + var_i0 = 3u; + var_i1 = var_l2; + var_i2 = 6u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B59;} + var_i0 = 7u; + var_i1 = var_l2; + var_i2 = 7u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B59;} + var_i0 = 60u; + var_i1 = var_l2; + var_i2 = 8u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B59;} + var_i0 = 14u; + var_B59:; + } + var_l2 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l2; + var_i2 = 8u; + var_i1 >>= (var_i2 & 31); + var_i2 = var_l2; + var_i3 = 255u; + var_i2 &= var_i3; + var_l0 = var_i2; + var_i3 = 60u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 46u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i0 = 2u; + var_i1 = var_l0; + var_i2 = 19u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 21u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l0; + var_i3 = 18u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l0; + var_i3 = 14u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + } else { + var_i0 = var_l7; + if (var_i0) { + var_i0 = 15u; + var_i1 = 55u; + var_i2 = var_l7; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_i1 = var_l7; + var_i2 = var_l1; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 1u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 58u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i2 = I32_CLZ(var_i2); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + } else { + var_i0 = var_l13; + if (var_i0) { + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = var_l13; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 65u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 6u; + var_i1 = 55u; + var_i2 = var_l4; + var_i3 = var_l1; + var_i2 = w2c_highlights_f82(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 16u; + } + } else { + var_i0 = var_l4; + var_i1 = var_l1; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 6u; + } else { + var_i0 = var_l4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 55u; + } else { + var_i0 = 2u; + var_l3 = var_i0; + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = var_l1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = var_l0; + var_i1 = var_l1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l2; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l2; + var_i3 = 64u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = var_l2; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l0; + var_l1 = var_i0; + var_L71: + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B72;} + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B72;} + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L71; + var_B72:; + var_i0 = var_l0; + var_i1 = var_l1; + var_i2 = 25792u; + var_i3 = 15u; + var_i4 = 56u; + var_i0 = w2c_highlights_f75(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + } else { + var_i0 = 0u; + } + } + } else { + var_i0 = 0u; + } + } + if (var_i0) { + var_i0 = 1u; + var_l3 = var_i0; + var_i0 = 14u; + } else { + var_i0 = 58u; + } + } + } + } + var_l0 = var_i0; + } + } + goto var_B31; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_l0 = var_i0; + goto var_B33; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l12; + if (var_i0) { + var_i0 = var_l12; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l12; + var_i2 = var_l0; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l12 = var_i0; + var_i0 = var_l0; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l12; + var_i1 = 1u; + var_i0 -= var_i1; + var_l12 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 40u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l21; + var_l11 = var_i0; + var_i0 = var_l22; + var_l6 = var_i0; + var_i0 = var_l23; + var_l9 = var_i0; + var_i0 = var_l24; + var_l5 = var_i0; + var_i0 = 1u; + var_l16 = var_i0; + var_i0 = instance->w2c_g4; + var_l8 = var_i0; + var_i0 = 0u; + var_l13 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + goto var_L3; + } + } + } + var_i0 = var_l0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 91u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_l3 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 32u; + var_l0 = var_i0; + goto var_B31; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 35u; + var_l0 = var_i0; + goto var_B32; + } + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_l2 = var_i0; + var_i1 = var_l1; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_l10 = var_i1; + var_i2 = var_l1; + var_i3 = 46u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i2 = var_l0; + var_i3 = 38u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 46u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i2 = 2u; + var_i3 = var_l10; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + var_i1 = 1u; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l13 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_l0 = var_i0; + goto var_B32; + } + var_i0 = var_l0; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l1; + var_i4 = 92u; + var_i3 = var_i3 == var_i4; + var_l10 = var_i3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + var_l1 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 32u; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = var_l10; + var_i1 = var_l1; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = w2c_highlights_f47(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + var_i2 = var_l2; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f47(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = !(var_i2); + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_l0 = var_i0; + goto var_B33; + } + } + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f244(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_L86: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f244(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L86; + } + var_i0 = var_l7; + var_i1 = 0u; + var_i2 = var_l7; + var_i3 = 1u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + var_i0 = 25u; + var_l0 = var_i0; + goto var_B32; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l0 = var_i0; + goto var_B32; + var_B39:; + var_i0 = 46u; + var_i1 = 48u; + var_i2 = 44u; + var_i3 = var_l5; + var_i4 = 4u; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l5; + var_i3 = 2u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 1u; + var_l16 = var_i0; + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = instance->w2c_g4; + var_l8 = var_i0; + goto var_B31; + var_B33:; + var_i0 = 0u; + var_l3 = var_i0; + goto var_B31; + var_B32:; + var_i0 = 1u; + var_l3 = var_i0; + var_B31:; + var_i0 = var_l0; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l13 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l26; + if (var_i0) { + var_i0 = 13608u; + instance->w2c_g32 = var_i0; + var_i0 = 13608u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13612u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13616u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13620u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13624u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13628u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13632u; + var_i1 = var_l16; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13636u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13640u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13644u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13648u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13652u; + var_i1 = var_l21; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13656u; + var_i1 = var_l22; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13660u; + var_i1 = var_l23; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13664u; + var_i1 = var_l24; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13668u; + var_i1 = var_l15; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13672u; + var_i1 = var_l17; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13676u; + var_i1 = var_l18; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13680u; + var_i1 = var_l25; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f373(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0; + v128 var_l11 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + u64 var_j2, var_j3; + var_i0 = instance->w2c_g7; + var_l10 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13688u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } + } else { + var_i0 = 0u; + } + } + var_l2 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l10; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l6; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l5 = var_i0; + var_i0 = 0u; + var_i1 = var_l6; + var_i2 = var_l6; + var_i3 = 1u; + var_i2 -= var_i3; + var_l1 = var_i2; + var_L8: + var_i2 = instance->w2c_g4; + var_i3 = 34u; + var_i2 = w2c_highlights_f79(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 >= var_i3; + if (var_i2) {goto var_B9;} + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_l0 = var_i2; + var_i2 = 0u; + var_l3 = var_i2; + var_L10: + var_i2 = var_l1; + var_i3 = var_l3; + var_i2 = var_i2 <= var_i3; + if (var_i2) {goto var_B11;} + var_i2 = var_l0; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 35u; + var_i2 = var_i2 != var_i3; + if (var_i2) {goto var_B11;} + var_i2 = var_l3; + var_i3 = 1u; + var_i2 += var_i3; + var_l3 = var_i2; + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_l0 = var_i2; + goto var_L10; + var_B11:; + var_i2 = var_l1; + var_i3 = var_l3; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_l0; + instance->w2c_g4 = var_i2; + var_i2 = 1u; + goto var_B7; + } else { + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + instance->w2c_g4 = var_i2; + goto var_L8; + } + UNREACHABLE; + var_B9:; + var_i2 = 0u; + var_B7:; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = 44u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = var_l1; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_l7 = var_i0; + var_i1 = var_l1; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 5u; + var_i1 = 4u; + var_i2 = var_l1; + var_i3 = var_l5; + var_i2 = var_i2 == var_i3; + var_i3 = var_l5; + var_i4 = 33u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = var_l7; + if (var_i0) { + var_i0 = 2u; + var_i1 = var_l0; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 10799u; + var_i1 = 12074u; + var_i2 = var_l0; + w2c_highlights_f71(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + } + var_i0 = 1u; + var_i1 = var_l0; + var_i2 = 98u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 99u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l1; + var_i3 = 114u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = 1u; + var_i1 <<= (var_i2 & 31); + var_i2 = var_l0; + var_i3 = 114u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l7; + var_i0 += var_i1; + var_l6 = var_i0; + var_L17: + var_i0 = var_l6; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l6; + var_i1 = 1u; + var_i0 += var_i1; + var_l6 = var_i0; + goto var_L17; + } + var_i0 = 0u; + var_i1 = var_l6; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 != var_i2; + if (var_i1) {goto var_B16;} + var_i0 = 44u; + var_i1 = instance->w2c_g4; + var_i2 = var_l6; + var_i3 = 1u; + var_i2 += var_i3; + var_l6 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l6; + var_i1 = instance->w2c_g4; + var_i0 -= var_i1; + var_i1 = var_l7; + var_i0 -= var_i1; + var_i1 = var_l6; + instance->w2c_g4 = var_i1; + var_B16:; + var_l6 = var_i0; + if (var_i0) { + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + } + var_i0 = var_l0; + var_i1 = 98u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 99u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 39u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 34u; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_L23: + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f47(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L23; + } + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i0 = var_i0 > var_i1; + var_i1 = var_l0; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 39u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 22u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 39u; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 33u; + var_i0 = var_i0 == var_i1; + var_l7 = var_i0; + var_i1 = var_l5; + var_i2 = 91u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 91u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l7; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l8 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g41; + var_i1 = instance->w2c_g42; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g41 = var_i0; + } + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = var_l8; + if (var_i0) { + var_i0 = 1u; + var_l2 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + } else { + var_i0 = var_l3; + var_i1 = var_l1; + var_i2 = 25984u; + var_i3 = 15u; + var_i4 = 56u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i1 = 4294967295u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 17u; + var_i1 = var_l1; + var_i2 = var_l3; + var_i1 -= var_i2; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 435710945399ull; + var_j2 ^= var_j3; + var_j3 = 24ull; + var_j2 <<= (var_j3 & 63); + var_i2 = !(var_j2); + var_i1 &= var_i2; + if (var_i1) {goto var_B30;} + } + var_i0 = var_l5; + var_B30:; + var_l5 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l5; + var_i1 = 255u; + var_i0 &= var_i1; + var_l2 = var_i0; + var_i0 = var_l5; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l0 = var_i0; + if (var_i0) { + var_i0 = var_l0; + var_l4 = var_i0; + } + } else { + var_i0 = var_l1; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = var_l4; + if (var_i0) { + var_i0 = 15u; + var_i1 = 55u; + var_i2 = var_l4; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_l4 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = var_l4; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g41 = var_i0; + var_i0 = 0u; + instance->w2c_g42 = var_i0; + } + var_i0 = 0u; + var_l4 = var_i0; + } else { + var_i0 = var_l5; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 33u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 14u; + } else { + var_i0 = var_l5; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 16u; + var_i1 = 14u; + var_i2 = var_l2; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l2; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 65u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 6u; + var_i1 = 55u; + var_i2 = var_l3; + var_i3 = var_l1; + var_i2 = w2c_highlights_f82(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 29u; + } + } else { + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g39; + var_i0 &= var_i1; + var_i1 = instance->w2c_g38; + var_i1 = !(var_i1); + var_i2 = var_l5; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l5; + var_i4 = 1u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 58u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 59u; + } else { + var_i0 = 6u; + var_i1 = 55u; + var_i2 = 58u; + var_i3 = var_l0; + var_i4 = 65u; + var_i3 -= var_i4; + var_i4 = 25u; + var_i3 = var_i3 <= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l3; + var_i3 = var_l1; + var_i2 = w2c_highlights_f82(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + } + var_l2 = var_i0; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 23u; + var_i1 = var_l2; + var_i2 = var_l1; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 58u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 2u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 60u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i3 = var_l0; + var_i4 = 65u; + var_i3 -= var_i4; + var_i4 = 25u; + var_i3 = var_i3 > var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + } + } + } + var_i0 = var_l2; + var_i1 = var_l3; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g39; + var_i1 = var_l1; + var_i2 = var_l3; + var_i1 -= var_i2; + var_i2 = 3u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 7632237u; + var_i2 ^= var_i3; + var_i3 = 8u; + var_i2 <<= (var_i3 & 31); + var_i2 = !(var_i2); + var_i1 &= var_i2; + var_i0 &= var_i1; + instance->w2c_g39 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_L44: + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) {goto var_L44;} + } else { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 24u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g36; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g36 = var_i0; + var_i0 = instance->w2c_g42; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g41; + if (var_i0) { + w2c_highlights_f38(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + instance->w2c_g41 = var_i0; + } + var_i0 = 1u; + instance->w2c_g39 = var_i0; + } else { + var_i0 = 0u; + instance->w2c_g39 = var_i0; + var_i0 = var_l0; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f39(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g36; + if (var_i0) { + var_i0 = instance->w2c_g36; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g36 = var_i0; + } + } else { + var_i0 = instance->w2c_g41; + var_i1 = instance->w2c_g42; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g41 = var_i0; + } + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g38; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g38 = var_i0; + } else { + var_i0 = instance->w2c_g38; + if (var_i0) { + var_i0 = instance->w2c_g38; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g38 = var_i0; + } + } + } + } + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = 0u; + var_i2 = var_l8; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_l5 = var_i0; + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_l7 = var_i1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = var_l5; + instance->w2c_g39 = var_i0; + var_i0 = var_l7; + var_i1 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = instance->w2c_g38; + var_i2 = !(var_i2); + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + w2c_highlights_f39(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l1; + var_i4 = 58u; + var_i3 = var_i3 == var_i4; + var_l4 = var_i3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + var_i1 = 0u; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + instance->w2c_g39 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l1; + var_i4 = 46u; + var_i3 = var_i3 == var_i4; + var_l4 = var_i3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 25u; + var_i1 = 35u; + var_i2 = var_l1; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 46u; + var_i0 = var_i0 != var_i1; + var_l2 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = 0u; + instance->w2c_g39 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f304(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_l4 = var_i0; + var_i1 = var_l0; + var_i2 = 124u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 38u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = var_l1; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = 25u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = instance->w2c_g41; + if (var_i0) { + var_i0 = var_l3; + var_i1 = instance->w2c_g4; + w2c_highlights_f42(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + instance->w2c_g39 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } + goto var_L3; + var_B4:; + var_i0 = var_l9; + if (var_i0) { + var_i0 = 13688u; + instance->w2c_g32 = var_i0; + var_i0 = 13688u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13692u; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13696u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13700u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f374(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 6032u); + var_i1 = 7u; + var_i0 >>= (var_i1 & 31); + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f375(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0; + v128 var_l16 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + u64 var_j3, var_j4; + var_i0 = instance->w2c_g7; + var_l13 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13704u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l12 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + } + } else { + var_i0 = 0u; + } + } + var_l4 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l13; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l4; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + goto var_B4; + } + var_i0 = var_l4; + var_i1 = 1u; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_l1 = var_i0; + var_i0 = var_l4; + var_i1 = 3u; + var_i0 = var_i0 >= var_i1; + var_l14 = var_i0; + var_i0 = var_l4; + var_i1 = 5u; + var_i0 = var_i0 >= var_i1; + var_l15 = var_i0; + var_i0 = var_l7; + var_i1 = instance->w2c_g4; + var_i2 = var_l7; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_L9: + var_i0 = instance->w2c_g4; + var_i1 = var_l7; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i3 = 34u; + var_i4 = var_l1; + var_i4 = !(var_i4); + var_i5 = var_l1; + var_i5 = !(var_i5); + var_i1 = w2c_highlights_f5(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i1; + var_i2 = var_l14; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l7; + var_i2 = 36u; + var_i3 = 0u; + var_i4 = 0u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + } + var_i0 = var_l2; + var_i1 = var_l7; + var_i2 = var_l2; + var_i3 = var_l7; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 34u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 1u; + var_i3 = var_l1; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l6 = var_i0; + goto var_B10; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + var_i0 = var_l11; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l11; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B10;} + var_i0 = var_l11; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l15; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l11 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l11; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 5008u); + var_i4 = 6u; + var_i3 >>= (var_i4 & 31); + var_i4 = 1u; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L9; + } + var_i0 = 3u; + var_i1 = var_l6; + var_i2 = var_l0; + var_i2 = w2c_highlights_f84(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + goto var_L9; + } + var_i0 = var_l0; + var_i1 = 8u; + var_i2 = var_l9; + var_i0 = w2c_highlights_f85(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) {goto var_L9;} + var_i0 = 2u; + goto var_B8; + var_B10:; + var_i0 = 44u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l6; + var_B8:; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = var_l0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_l10 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l0; + var_i0 = !(var_i0); + var_i1 = var_l4; + var_i2 = 1u; + var_i1 &= var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l4; + } + } + var_l4 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l5; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l5; + var_i2 = var_l0; + var_i3 = instance->w2c_g4; + var_i2 = w2c_highlights_f81(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + } + var_i0 = var_l0; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 10799u; + var_i1 = 12074u; + var_i2 = 5u; + var_i3 = 4u; + var_i4 = var_l6; + var_i5 = 42u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + w2c_highlights_f71(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l4 = var_i0; + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 2u; + var_l4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_l0 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 48u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 96u; + var_i1 = 0u; + var_i2 = 58u; + w2c_highlights_f55(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 46u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 14u; + var_i1 = var_l2; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 3u; + var_l4 = var_i0; + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 4u; + var_l4 = var_i0; + } + var_i0 = var_l1; + var_i1 = var_l2; + var_i0 -= var_i1; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = var_l4; + var_i2 = var_l2; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 7823730u; + var_i2 ^= var_i3; + var_i3 = 8u; + var_i2 <<= (var_i3 & 31); + var_i2 = !(var_i2); + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + goto var_L3; + } + var_i0 = 4294967295u; + var_l6 = var_i0; + var_i0 = var_l5; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l5; + var_i2 = var_l1; + var_i3 = var_l2; + var_i2 -= var_i3; + var_i3 = 6u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 127970252055151ull; + var_j3 ^= var_j4; + var_j4 = 16ull; + var_j3 <<= (var_j4 & 63); + var_i3 = !(var_j3); + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + } + var_i0 = var_l3; + var_i1 = var_l5; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_l2; + var_i1 = var_l1; + var_i2 = 26208u; + var_i3 = 15u; + var_i4 = 55u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + } + var_i0 = var_l6; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l6; + var_i1 = 255u; + var_i0 &= var_i1; + var_l3 = var_i0; + var_i0 = var_l6; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l0 = var_i0; + if (var_i0) { + var_i0 = var_l0; + var_l8 = var_i0; + } + var_i0 = 1u; + var_i1 = var_l5; + var_i2 = var_l3; + var_i3 = 20u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + } else { + var_i0 = var_l1; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_i0 = var_l5; + if (var_i0) { + var_i0 = 23u; + var_l3 = var_i0; + } else { + var_i0 = var_l8; + if (var_i0) { + var_i0 = 15u; + var_i1 = 55u; + var_i2 = var_l8; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + } else { + var_i0 = var_l3; + if (var_i0) { + var_i0 = 16u; + var_i1 = 55u; + var_i2 = 29u; + var_i3 = var_l0; + var_i4 = 65u; + var_i3 -= var_i4; + var_i4 = 25u; + var_i3 = var_i3 <= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l6; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l6; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 123u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l2; + var_i1 = var_l1; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 6u; + } else { + var_i0 = var_l0; + var_i1 = 65u; + var_i0 -= var_i1; + var_i1 = 25u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 55u; + } else { + var_i0 = 14u; + var_i1 = 58u; + var_i2 = var_l6; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l6; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 123u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + var_l3 = var_i0; + } + } + } + var_i0 = var_l3; + var_i1 = var_l2; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l9; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l9; + var_i2 = var_l0; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = var_l0; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 1u; + var_i0 -= var_i1; + var_l9 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l10; + var_l4 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + goto var_L3; + } + } + } + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_i1 = var_l8; + var_i2 = var_l0; + var_i3 = 91u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 93u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i2 = I32_CLZ(var_i2); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + var_i0 = var_l5; + var_i1 = 0u; + var_i2 = var_l0; + var_i3 = 123u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_l6 = var_i0; + var_i1 = var_l0; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = var_l6; + if (var_i0) { + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + } + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l3 = var_i0; + } else { + var_i0 = var_l1; + var_i0 = w2c_highlights_f374(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + var_i1 = var_l0; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f374(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L53: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f374(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B54;} + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 42u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B54;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L53; + var_B54:; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = var_l5; + var_i1 = 0u; + var_i2 = var_l0; + var_i3 = 61u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + } + } + var_l3 = var_i0; + } + goto var_L3; + var_B4:; + var_i0 = var_l12; + if (var_i0) { + var_i0 = 13704u; + instance->w2c_g32 = var_i0; + var_i0 = 13704u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13708u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13712u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13716u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13720u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13724u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13728u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f376(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0; + v128 var_l11 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + u64 var_j3, var_j4, var_j5; + var_i0 = instance->w2c_g7; + var_l9 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13736u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l8 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } + } else { + var_i0 = 0u; + } + } + var_l7 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l9; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i1; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l1; + var_i4 = 2u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l1; + var_i4 = 2u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 42u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i1 = var_l1; + var_i0 -= var_i1; + var_l0 = var_i0; + var_i0 = var_l4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 3u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 7890280u; + var_i2 ^= var_i3; + var_i3 = 8u; + var_i2 <<= (var_i3 & 31); + var_i2 = !(var_i2); + var_i1 &= var_i2; + var_i2 = var_l0; + var_i3 = 7u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 28539402219777653ull; + var_j3 ^= var_j4; + var_j4 = 8ull; + var_j3 <<= (var_j4 & 63); + var_i3 = !(var_j3); + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = var_l4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = 14u; + var_i1 = 17u; + var_i2 = var_l1; + var_i3 = var_l4; + var_i4 = 26432u; + var_i5 = 31u; + var_i6 = 110u; + var_i2 = w2c_highlights_f76(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l0; + var_i4 = 8u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l1; + var_j4 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_j5 = 8389750308618530659ull; + var_i4 = var_j4 == var_j5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i3 = 7u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 28554769915274610ull; + var_j3 ^= var_j4; + var_j4 = 8ull; + var_j3 <<= (var_j4 & 63); + var_i3 = !(var_j3); + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = var_l1; + var_i1 = 5u; + var_i0 += var_i1; + var_i1 = var_l1; + var_i2 = 4u; + var_i1 += var_i2; + var_i2 = var_l1; + var_i3 = 3u; + var_i2 += var_i3; + var_i3 = var_l1; + var_i4 = var_l1; + var_i4 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_i5 = 7630441u; + var_i4 ^= var_i5; + var_i5 = 8u; + var_i4 <<= (var_i5 & 31); + var_i4 = !(var_i4); + var_i5 = var_l0; + var_i6 = 3u; + var_i5 = var_i5 > var_i6; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l1; + var_i3 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 1953393013u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i5 = 4u; + var_i4 = var_i4 > var_i5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i3 = 5u; + var_i2 = var_i2 > var_i3; + var_i3 = var_l1; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 495623371106ull; + var_j3 ^= var_j4; + var_j4 = 24ull; + var_j3 <<= (var_j4 & 63); + var_i3 = !(var_j3); + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 48u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l4; + var_i2 = var_l5; + var_i1 -= var_i2; + var_i2 = 3u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = var_l5; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = var_l1; + var_i0 -= var_i1; + var_i1 = 5u; + var_i0 = var_i0 == var_i1; + var_l10 = var_i0; + var_i0 = 0u; + var_l0 = var_i0; + var_L12: + var_i0 = var_l4; + var_i1 = var_l5; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B13;} + var_i0 = var_l5; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B13;} + var_i0 = var_l5; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 48u; + var_i0 -= var_i1; + var_i1 = var_l0; + var_i2 = 10u; + var_i1 *= var_i2; + var_i0 += var_i1; + var_l0 = var_i0; + var_i0 = var_l5; + var_i1 = 1u; + var_i0 += var_i1; + var_l5 = var_i0; + goto var_L12; + var_B13:; + var_i0 = 56u; + var_i1 = var_l6; + var_i2 = var_l4; + var_i3 = var_l5; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 32u; + var_i3 = var_i3 <= var_i4; + var_i4 = var_l0; + var_i5 = 7u; + var_i4 &= var_i5; + var_i4 = I32_CLZ(var_i4); + var_i5 = 5u; + var_i4 >>= (var_i5 & 31); + var_i5 = var_l0; + var_i6 = 256u; + var_i5 = var_i5 <= var_i6; + var_i4 &= var_i5; + var_i5 = var_l10; + var_i3 = var_i5 ? var_i3 : var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + } + var_i0 = var_l4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l7; + if (var_i0) { + var_i0 = 16u; + var_i1 = 29u; + var_i2 = var_l0; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + } else { + var_i0 = var_l6; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l6; + var_i1 = 255u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i0 = var_l6; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l2 = var_i0; + if (var_i0) { + var_i0 = var_l2; + var_l3 = var_i0; + } + } else { + var_i0 = var_l3; + if (var_i0) { + var_i0 = 15u; + var_i1 = 55u; + var_i2 = var_l3; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + } else { + var_i0 = 14u; + var_i1 = 55u; + var_i2 = 58u; + var_i3 = var_l2; + var_i4 = 65u; + var_i3 -= var_i4; + var_i4 = 25u; + var_i3 = var_i3 <= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + } + } + } + var_i0 = var_l0; + var_i1 = var_l1; + var_i2 = var_l4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l7 = var_i0; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l2; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l0 = var_i0; + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 32u; + var_l0 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + } + var_i0 = var_l2; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_l7 = var_i0; + var_i0 = 25u; + var_i1 = 35u; + var_i2 = var_l0; + var_i3 = var_l2; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 4752u); + var_i4 = 128u; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 3984u); + var_i3 = 16u; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + var_B4:; + var_i0 = var_l8; + if (var_i0) { + var_i0 = 13736u; + instance->w2c_g32 = var_i0; + var_i0 = 13736u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13740u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f377(w2c_highlights* instance) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, var_l8 = 0, + var_l9 = 0, var_l10 = 0; + u64 var_l0 = 0; + v128 var_l11 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + u64 var_j0, var_j1, var_j2, var_j4, var_j5; + var_i0 = instance->w2c_g7; + var_l10 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13744u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + instance->w2c_g24 = var_i0; + } + } + var_L2: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l10; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B3;} + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 0u; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + var_l2 = var_i0; + var_i1 = var_l4; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 < var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 25u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l4; + var_i4 = 35u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + var_l2 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + var_l5 = var_i0; + } + var_i0 = var_l1; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_l2 = var_i0; + var_i1 = var_l4; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l5; + var_i1 = !(var_i1); + var_i2 = var_l1; + var_i3 = 35u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 1u; + var_i2 = var_l2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = var_l1; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i2 = 44u; + w2c_highlights_f55(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = var_l1; + var_i1 = 96u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i2 = 44u; + w2c_highlights_f55(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = var_l1; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = instance->w2c_g4; + var_l6 = var_i1; + var_i2 = 1u; + var_i1 += var_i2; + var_l2 = var_i1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + if (var_i1) {goto var_B13;} + var_i0 = 0u; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = !(var_i2); + var_i1 &= var_i2; + if (var_i1) {goto var_B13;} + var_L14: + var_i0 = var_l2; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B15;} + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_B15;} + var_i0 = 0u; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f47(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + if (var_i1) {goto var_B13;} + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + goto var_L14; + var_B15:; + var_i0 = 0u; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i2 = var_l2; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 >= var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B13;} + var_j0 = 18446744073709551615ull; + var_i1 = 8u; + var_i2 = var_l2; + var_i3 = 1u; + var_i2 += var_i3; + var_l2 = var_i2; + var_i3 = var_l6; + var_i2 -= var_i3; + var_l7 = var_i2; + var_i1 -= var_i2; + var_i2 = 3u; + var_i1 <<= (var_i2 & 31); + var_j1 = (u64)(var_i1); + var_j0 >>= (var_j1 & 63); + var_l0 = var_j0; + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_L16: + var_i0 = instance->w2c_g4; + var_i1 = 36u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l8 = var_i0; + var_i0 = instance->w2c_g3; + var_i1 = var_l7; + var_i2 = var_l8; + var_i1 += var_i2; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + goto var_B17; + } + var_i0 = var_l7; + var_i1 = 8u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = var_l6; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = var_l0; + var_j0 &= var_j1; + var_i1 = var_l8; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = var_l0; + var_j1 &= var_j2; + var_i0 = var_j0 == var_j1; + } else { + var_i0 = 0u; + var_l2 = var_i0; + var_L20: + var_i0 = var_l2; + var_i1 = var_l7; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = var_l6; + var_i0 += var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_l2; + var_i2 = var_l8; + var_i1 += var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + goto var_L20; + } + } else { + var_i0 = 1u; + } + } + var_l2 = var_i0; + if (var_i0) { + var_i0 = var_l7; + var_i1 = var_l8; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } else { + var_i0 = var_l8; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L16; + } + var_B17:; + var_i0 = 44u; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = var_l6; + var_i1 = var_l7; + var_i2 = 44u; + w2c_highlights_f62(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 1u; + var_B13:; + if (var_i0) {goto var_L2;} + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l5; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 58u; + var_l1 = var_i0; + var_i0 = var_l5; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l4; + var_i4 = 35u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l3; + var_i0 -= var_i1; + var_l1 = var_i0; + var_i1 = 2u; + var_i0 -= var_i1; + var_i1 = 6u; + var_i0 = var_i0 > var_i1; + if (var_i0) {goto var_B32;} + var_i0 = var_l3; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 2314885530818453536ull; + var_j0 |= var_j1; + var_j1 = 18446744073709551615ull; + var_i2 = 8u; + var_i3 = var_l1; + var_i2 -= var_i3; + var_i3 = 3u; + var_i2 <<= (var_i3 & 31); + var_j2 = (u64)(var_i2); + var_j1 >>= (var_j2 & 63); + var_j0 &= var_j1; + var_l0 = var_j0; + var_i0 = (u32)(var_j0); + var_i1 = 255u; + var_i0 &= var_i1; + var_i1 = 97u; + var_i0 -= var_i1; + switch (var_i0) { + case 0: goto var_B53; + case 1: goto var_B52; + case 2: goto var_B51; + case 3: goto var_B50; + case 4: goto var_B49; + case 5: goto var_B48; + case 6: goto var_B47; + case 7: goto var_B46; + case 8: goto var_B45; + case 9: goto var_B44; + case 10: goto var_B33; + case 11: goto var_B43; + case 12: goto var_B33; + case 13: goto var_B42; + case 14: goto var_B41; + case 15: goto var_B40; + case 16: goto var_B33; + case 17: goto var_B39; + case 18: goto var_B38; + case 19: goto var_B37; + case 20: goto var_B36; + case 21: goto var_B35; + case 22: goto var_B34; + default: goto var_B33; + } + var_B53:; + var_j0 = var_l0; + var_j1 = 29537ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l0; + var_j2 = 6517601ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + var_j1 = var_l0; + var_j2 = 7105633ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + if (var_i0) {goto var_B31;} + var_j0 = var_l0; + var_j1 = 6581857ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B30;} + goto var_B32; + var_B52:; + var_j0 = var_l0; + var_j1 = 31074ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B31;} + var_j0 = var_l0; + var_j1 = 31073733908391266ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B30;} + var_j0 = var_l0; + var_j1 = 1651469410ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l0; + var_j2 = 31069335677005666ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + var_j1 = var_l0; + var_j2 = 128017563609442ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + if (var_i0) {goto var_B29;} + goto var_B32; + var_B51:; + var_j0 = var_l0; + var_j1 = 111550524650083ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B31;} + var_i0 = 18u; + var_j1 = var_l0; + var_j2 = 1702060387ull; + var_i1 = var_j1 == var_j2; + if (var_i1) {goto var_B28;} + var_j0 = var_l0; + var_j1 = 1918986339ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B29;} + goto var_B32; + var_B50:; + var_j0 = var_l0; + var_j1 = 1668506980ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l0; + var_j2 = 8386668330298337636ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + var_j1 = var_l0; + var_j2 = 111550592214372ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + var_j1 = var_l0; + var_j2 = 32770348699510116ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + if (var_i0) {goto var_B31;} + var_j0 = var_l0; + var_j1 = 30506420032202084ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l0; + var_j2 = 111516182736740ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + var_j1 = var_l0; + var_j2 = 1702125924ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + if (var_i0) {goto var_B29;} + goto var_B32; + var_B49:; + var_j0 = var_l0; + var_j1 = 6581861ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B31;} + var_j0 = var_l0; + var_j1 = 126943989692517ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B30;} + var_i0 = 18u; + var_j1 = var_l0; + var_j2 = 1702063205ull; + var_i1 = var_j1 == var_j2; + if (var_i1) {goto var_B28;} + goto var_B32; + var_B48:; + var_j0 = var_l0; + var_j1 = 1836020326ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l0; + var_j2 = 1819047270ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + var_j1 = var_l0; + var_j2 = 31075949809397606ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + if (var_i0) {goto var_B31;} + var_i0 = 3u; + var_j1 = var_l0; + var_j2 = 435728179558ull; + var_i1 = var_j1 == var_j2; + if (var_i1) {goto var_B28;} + goto var_B32; + var_B47:; + var_j0 = var_l0; + var_j1 = 483006575207ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B31;} + goto var_B32; + var_B46:; + var_j0 = var_l0; + var_j1 = 113723913429352ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B31;} + goto var_B32; + var_B45:; + var_j0 = var_l0; + var_j1 = 128034677157481ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l0; + var_j2 = 1869901417ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + var_j1 = var_l0; + var_j2 = 491328007785ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + if (var_i0) {goto var_B31;} + var_j0 = var_l0; + var_j1 = 28265ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l0; + var_j2 = 29545ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + if (var_i0) {goto var_B30;} + var_j0 = var_l0; + var_j1 = 32199642103180905ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B29;} + goto var_B32; + var_B44:; + var_j0 = var_l0; + var_j1 = 1852403562ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B31;} + var_j0 = var_l0; + var_j1 = 1852797802ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l0; + var_j2 = 422759592810ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + if (var_i0) {goto var_B29;} + goto var_B32; + var_B43:; + var_j0 = var_l0; + var_j1 = 1952867692ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l0; + var_j2 = 499984984428ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + if (var_i0) {goto var_B31;} + var_j0 = var_l0; + var_j1 = 1701538156ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B30;} + goto var_B32; + var_B42:; + var_j0 = var_l0; + var_j1 = 7630702ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B30;} + var_j0 = var_l0; + var_j1 = 491260502894ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B29;} + var_i0 = 7u; + var_j1 = var_l0; + var_j2 = 1819047278ull; + var_i1 = var_j1 == var_j2; + if (var_i1) {goto var_B28;} + goto var_B32; + var_B41:; + var_j0 = var_l0; + var_j1 = 491327353455ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l0; + var_j2 = 491328402799ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + var_j1 = var_l0; + var_j2 = 28271ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + if (var_i0) {goto var_B31;} + var_j0 = var_l0; + var_j1 = 29295ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B30;} + goto var_B32; + var_B40:; + var_j0 = var_l0; + var_j1 = 34184234955010672ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B31;} + goto var_B32; + var_B39:; + var_j0 = var_l0; + var_j1 = 499967814002ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B31;} + var_j0 = var_l0; + var_j1 = 1818322290ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B29;} + goto var_B32; + var_B38:; + var_j0 = var_l0; + var_j1 = 127970252186995ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l0; + var_j2 = 7628147ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + if (var_i0) {goto var_B31;} + goto var_B32; + var_B37:; + var_j0 = var_l0; + var_j1 = 435610083700ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l0; + var_j2 = 28532ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + if (var_i0) {goto var_B31;} + var_i0 = 18u; + var_j1 = var_l0; + var_j2 = 1852139636ull; + var_i1 = var_j1 == var_j2; + if (var_i1) {goto var_B28;} + var_j0 = var_l0; + var_j1 = 1954047348ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B29;} + var_i0 = 3u; + var_j1 = var_l0; + var_j2 = 1702195828ull; + var_i1 = var_j1 == var_j2; + if (var_i1) {goto var_B28;} + goto var_B32; + var_B36:; + var_j0 = var_l0; + var_j1 = 111550524584053ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l0; + var_j2 = 444234036085ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + var_j1 = var_l0; + var_j2 = 474315583093ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + if (var_i0) {goto var_B31;} + var_j0 = var_l0; + var_j1 = 1684632949ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B29;} + goto var_B32; + var_B35:; + var_j0 = var_l0; + var_j1 = 126879598928246ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B31;} + var_j0 = var_l0; + var_j1 = 32195248317948278ull; + var_i0 = var_j0 == var_j1; + if (var_i0) {goto var_B29;} + goto var_B32; + var_B34:; + var_j0 = var_l0; + var_j1 = 435710945399ull; + var_i0 = var_j0 == var_j1; + var_j1 = var_l0; + var_j2 = 1752459639ull; + var_i1 = var_j1 == var_j2; + var_i0 |= var_i1; + if (var_i0) {goto var_B31;} + var_i0 = 18u; + var_j1 = var_l0; + var_j2 = 1852139639ull; + var_i1 = var_j1 == var_j2; + if (var_i1) {goto var_B28;} + goto var_B32; + var_B33:; + var_i0 = 58u; + goto var_B28; + var_B32:; + var_i0 = 58u; + goto var_B28; + var_B31:; + var_i0 = 17u; + goto var_B28; + var_B30:; + var_i0 = 21u; + goto var_B28; + var_B29:; + var_i0 = 56u; + var_B28:; + var_l1 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 14u; + var_i2 = var_l3; + var_l1 = var_i2; + var_i3 = 1u; + var_i2 -= var_i3; + var_l2 = var_i2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = instance->w2c_g0; + var_i3 = var_i3 > var_i4; + var_i2 &= var_i3; + if (var_i2) { + var_i2 = var_l2; + var_l1 = var_i2; + var_L56: + var_i2 = var_l1; + var_i3 = instance->w2c_g0; + var_i2 = var_i2 <= var_i3; + if (var_i2) {goto var_B57;} + var_i2 = var_l1; + var_i3 = 1u; + var_i2 -= var_i3; + var_l2 = var_i2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i2 = w2c_highlights_f47(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = !(var_i2); + if (var_i2) {goto var_B57;} + var_i2 = var_l2; + var_l1 = var_i2; + goto var_L56; + var_B57:; + } + var_L58: + var_i2 = var_l1; + var_i3 = instance->w2c_g0; + var_i2 = var_i2 <= var_i3; + if (var_i2) {goto var_B59;} + var_i2 = var_l1; + var_i3 = 1u; + var_i2 -= var_i3; + var_l2 = var_i2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l4 = var_i2; + var_i3 = 32u; + var_i2 = var_i2 != var_i3; + var_i3 = var_l4; + var_i4 = 9u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + if (var_i2) {goto var_B59;} + var_i2 = var_l2; + var_l1 = var_i2; + goto var_L58; + var_B59:; + var_i2 = var_l1; + var_L60: + var_i3 = var_l1; + var_i4 = instance->w2c_g0; + var_i3 = var_i3 <= var_i4; + if (var_i3) {goto var_B61;} + var_i3 = var_l1; + var_i4 = 1u; + var_i3 -= var_i4; + var_l2 = var_i3; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i3 = w2c_highlights_f47(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = !(var_i3); + if (var_i3) {goto var_B61;} + var_i3 = var_l2; + var_l1 = var_i3; + goto var_L60; + var_B61:; + var_i3 = var_l1; + var_i2 -= var_i3; + var_l2 = var_i2; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i3 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 538976288u; + var_i3 |= var_i4; + var_i4 = 1869901417u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i3 = var_l2; + var_i4 = 5u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l1; + var_j4 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_j5 = 137977929760ull; + var_j4 |= var_j5; + var_j5 = 435610083700ull; + var_j4 ^= var_j5; + var_j5 = 24ull; + var_j4 <<= (var_j5 & 63); + var_i4 = !(var_j4); + var_i3 &= var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l1; + } + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = var_l1; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 63u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 60u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = var_l1; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 41u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 91u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 93u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = var_l1; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 6288u); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 43u; + var_i1 -= var_i2; + var_i2 = 3u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 60u; + var_i1 -= var_i2; + var_i2 = 2u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = var_l1; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 25u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L2; + var_B3:; + var_i0 = var_l9; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f378(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_L0: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 1u; + var_i3 = var_l1; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = 1u; + var_i0 <<= (var_i1 & 31); + var_i1 = var_l1; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f379(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0; + v128 var_l16 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + u64 var_j0, var_j1, var_j2, var_j3; + var_i0 = instance->w2c_g7; + var_l15 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13744u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l13 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l12 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } + } else { + var_i0 = 0u; + } + } + var_l4 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l15; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l13; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l11; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = 0u; + var_i1 = var_l11; + var_i2 = var_l11; + var_i3 = 1u; + var_i2 >>= (var_i3 & 31); + var_i3 = 1u; + var_i2 -= var_i3; + var_l1 = var_i2; + var_i2 = var_l11; + var_i3 = 1u; + var_i2 &= var_i3; + var_l3 = var_i2; + var_L8: + var_i2 = instance->w2c_g4; + var_i3 = 34u; + var_i4 = 92u; + var_i2 = w2c_highlights_f78(instance, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 >= var_i3; + if (var_i2) {goto var_B9;} + var_i2 = instance->w2c_g4; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 92u; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + instance->w2c_g4 = var_i2; + var_i2 = instance->w2c_g4; + var_l2 = var_i2; + var_i2 = 0u; + var_l0 = var_i2; + var_L11: + var_i2 = var_l0; + var_i3 = var_l1; + var_i2 = var_i2 >= var_i3; + if (var_i2) {goto var_B12;} + var_i2 = var_l2; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 35u; + var_i2 = var_i2 != var_i3; + if (var_i2) {goto var_B12;} + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_l0 = var_i2; + var_i2 = var_l2; + var_i3 = 1u; + var_i2 += var_i3; + var_l2 = var_i2; + goto var_L11; + var_B12:; + var_i2 = var_l0; + var_i3 = var_l1; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_l2; + var_i3 = 1u; + var_i2 += var_i3; + var_i3 = instance->w2c_g3; + var_i2 = w2c_highlights_f9(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i2; + } + goto var_L8; + } + var_i2 = var_l3; + var_i2 = !(var_i2); + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = 34u; + var_i3 = var_i3 == var_i4; + var_i4 = instance->w2c_g4; + var_i5 = 2u; + var_i4 += var_i5; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 34u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i2 |= var_i3; + if (var_i2) { + var_i2 = instance->w2c_g4; + var_i3 = 3u; + var_i4 = 1u; + var_i5 = var_l3; + var_i3 = var_i5 ? var_i3 : var_i4; + var_i2 += var_i3; + var_l2 = var_i2; + var_i2 = 0u; + var_l0 = var_i2; + var_L15: + var_i2 = var_l0; + var_i3 = var_l1; + var_i2 = var_i2 >= var_i3; + if (var_i2) {goto var_B16;} + var_i2 = var_l2; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 35u; + var_i2 = var_i2 != var_i3; + if (var_i2) {goto var_B16;} + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_l0 = var_i2; + var_i2 = var_l2; + var_i3 = 1u; + var_i2 += var_i3; + var_l2 = var_i2; + goto var_L15; + var_B16:; + var_i2 = var_l0; + var_i3 = var_l1; + var_i2 = var_i2 == var_i3; + if (var_i2) { + var_i2 = var_l2; + instance->w2c_g4 = var_i2; + var_i2 = 1u; + goto var_B7; + } + } + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + instance->w2c_g4 = var_i2; + goto var_L8; + var_B9:; + var_i2 = 0u; + var_B7:; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l11 = var_i0; + var_i0 = 44u; + var_i1 = var_l7; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l12; + if (var_i0) { + var_i0 = var_l6; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + } + var_i0 = 0u; + var_l12 = var_i0; + var_i0 = 0u; + var_l0 = var_i0; + var_L20: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = 34u; + var_i3 = 1u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B21;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_B21; + } + var_i0 = var_l2; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B21;} + var_i0 = var_l2; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l9; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 40u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 40u; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_l0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + var_i0 = 1u; + var_l0 = var_i0; + goto var_B21; + } + var_i0 = var_l6; + var_i0 = w2c_highlights_f84(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + var_l6 = var_i1; + if (var_i0) { + var_i0 = 1u; + var_l12 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + goto var_B21; + } + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L20; + var_B21:; + var_i0 = var_l0; + var_i0 = !(var_i0); + var_i1 = var_l6; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l6; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + } + goto var_L3; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i0; + var_i0 = var_l1; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l7; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 10799u; + var_i1 = 12074u; + var_i2 = 5u; + var_i3 = 4u; + var_i4 = var_l7; + var_i5 = 42u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + w2c_highlights_f71(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_L30: + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L30; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f378(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l11 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + } + var_i0 = var_l2; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l7; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f378(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l11 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l12 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 27u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g41; + var_i1 = instance->w2c_g42; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g41 = var_i0; + } + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i1 = instance->w2c_g4; + var_l2 = var_i1; + var_i2 = 26880u; + var_i3 = 15u; + var_i4 = 64u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 4294967295u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 17u; + var_i1 = var_l2; + var_i2 = var_l3; + var_i1 -= var_i2; + var_i2 = 5u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 435710945399ull; + var_j2 ^= var_j3; + var_j3 = 24ull; + var_j2 <<= (var_j3 & 63); + var_i2 = !(var_j2); + var_i1 &= var_i2; + if (var_i1) {goto var_B39;} + } + var_i0 = var_l0; + var_B39:; + var_l0 = var_i0; + var_i1 = 2047u; + var_i0 = (u32)((s32)var_i0 > (s32)var_i1); + if (var_i0) { + var_i0 = var_l0; + var_i1 = 4294967295u; + var_i2 = var_l2; + var_l0 = var_i2; + var_L42: + var_i2 = var_l0; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i2; + var_i3 = 32u; + var_i2 = var_i2 != var_i3; + var_i3 = var_l7; + var_i4 = 9u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i2 = I32_CLZ(var_i2); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + if (var_i2) { + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_l0 = var_i2; + goto var_L42; + } + var_i2 = var_l7; + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + } + var_i0 = var_l0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l0; + var_i1 = 255u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = var_l0; + var_i1 = 768u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_i1 = 3u; + var_i0 &= var_i1; + var_l10 = var_i0; + } else { + var_i0 = var_l0; + var_i1 = 19u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = var_l2; + var_i1 = var_l3; + var_i0 -= var_i1; + var_i1 = 9u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 8100131176265708915ull; + var_i1 = var_j1 == var_j2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g41 = var_i0; + var_i0 = 0u; + instance->w2c_g42 = var_i0; + } + } + } + var_i0 = var_l8; + var_i1 = 1u; + var_i2 = var_l5; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + var_i1 = var_l8; + var_i2 = var_l0; + var_i3 = 1024u; + var_i2 &= var_i3; + var_i3 = 0u; + var_i2 = var_i2 != var_i3; + var_i3 = var_l5; + var_i4 = 32u; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + } else { + var_i0 = var_l2; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l7 = var_i0; + var_i0 = var_l10; + if (var_i0) { + var_i0 = 15u; + var_i1 = 55u; + var_i2 = var_l10; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_l0 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = var_l0; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g41 = var_i0; + var_i0 = 0u; + instance->w2c_g42 = var_i0; + } + var_i0 = 0u; + var_l10 = var_i0; + } else { + var_i0 = var_l7; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = var_l0; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = var_l3; + var_i0 -= var_i1; + var_l0 = var_i0; + var_i0 = var_l7; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l14 = var_i0; + var_i1 = 63u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l14; + var_i2 = 33u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i0 = !(var_i0); + var_i1 = var_l7; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 40u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 4u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 1953066601u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + goto var_B52; + } + var_i0 = 0u; + var_i1 = var_l14; + var_i2 = 123u; + var_i1 = var_i1 != var_i2; + var_i2 = var_l8; + var_i3 = 1u; + var_i4 = var_l5; + var_i3 <<= (var_i4 & 31); + var_i2 &= var_i3; + var_i3 = 0u; + var_i4 = var_l5; + var_i5 = 32u; + var_i4 = var_i4 < var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B52;} + var_i0 = 1u; + var_i1 = var_l4; + if (var_i1) {goto var_B52;} + var_i0 = 0u; + var_i1 = var_l3; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 65u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + if (var_i1) {goto var_B52;} + var_i0 = var_l0; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 16777215u; + var_i0 &= var_i1; + var_l0 = var_i0; + var_i1 = 7628135u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 7628147u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + goto var_B52; + } + var_i0 = var_l0; + var_i1 = 6u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 127978539608420ull; + var_j0 ^= var_j1; + var_j1 = 16ull; + var_j0 <<= (var_j1 & 63); + var_i0 = !(var_j0); + var_i0 = !(var_i0); + goto var_B52; + } + var_i0 = var_l0; + var_i1 = 7u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_j1 = 32762506274171255ull; + var_j0 ^= var_j1; + var_j1 = 8ull; + var_j0 <<= (var_j1 & 63); + var_i0 = !(var_j0); + var_i0 = !(var_i0); + goto var_B52; + } + var_i0 = 1u; + var_B52:; + } else { + var_i0 = 0u; + } + } + if (var_i0) { + var_i0 = 16u; + var_i1 = 14u; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = var_l4; + var_i0 = !(var_i0); + var_i1 = var_l2; + var_i2 = var_l3; + var_i1 -= var_i2; + var_i2 = 4u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 1953066601u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g41 = var_i0; + var_i0 = 0u; + instance->w2c_g42 = var_i0; + } + } else { + var_i0 = var_l4; + if (var_i0) { + var_i0 = 29u; + } else { + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g39; + var_i0 &= var_i1; + var_i1 = instance->w2c_g38; + var_i1 = !(var_i1); + var_i2 = var_l2; + var_i3 = var_l3; + var_i2 -= var_i3; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 95u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i2 = I32_CLZ(var_i2); + var_i3 = 5u; + var_i2 >>= (var_i3 & 31); + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 59u; + } else { + var_i0 = var_l3; + var_i1 = var_l2; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 6u; + } else { + var_i0 = 55u; + var_i1 = 58u; + var_i2 = var_l3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + var_l1 = var_i0; + } + } + } + var_i0 = var_l1; + var_i1 = var_l3; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + w2c_highlights_f50(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l1; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l9; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 40u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = instance->w2c_g4; + var_l6 = var_i0; + var_i0 = 1u; + var_l12 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l9; + if (var_i0) { + var_i0 = var_l9; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l9; + var_i2 = var_l1; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_l0; + var_i2 = var_l1; + var_i3 = 41u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + } + var_i0 = var_l8; + var_i1 = 4294967294u; + var_i2 = var_l5; + var_i1 = I32_ROTL(var_i1, var_i2); + var_i0 &= var_i1; + var_i1 = var_l8; + var_i2 = var_l1; + var_i3 = 41u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 93u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_l0 = var_i2; + var_i3 = var_l1; + var_i4 = 123u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l1; + var_i5 = 125u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 |= var_i3; + var_i3 = var_l5; + var_i4 = 32u; + var_i3 = var_i3 < var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + var_i0 = var_l5; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l5; + var_i2 = var_l1; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i4 = 91u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l0; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 1u; + var_i0 -= var_i1; + var_l5 = var_i0; + } + var_i0 = var_l1; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g36; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g36 = var_i0; + var_i0 = instance->w2c_g42; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g41; + if (var_i0) { + w2c_highlights_f38(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + instance->w2c_g41 = var_i0; + } + var_i0 = 1u; + instance->w2c_g39 = var_i0; + } else { + var_i0 = 0u; + instance->w2c_g39 = var_i0; + var_i0 = var_l1; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f39(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g36; + if (var_i0) { + var_i0 = instance->w2c_g36; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g36 = var_i0; + } + } else { + var_i0 = instance->w2c_g41; + var_i1 = instance->w2c_g42; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g41 = var_i0; + } + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g38; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g38 = var_i0; + } else { + var_i0 = instance->w2c_g38; + if (var_i0) { + var_i0 = instance->w2c_g38; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g38 = var_i0; + } + } + } + } + } + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_l0 = var_i0; + var_i1 = var_l1; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_l7 = var_i1; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = var_l0; + instance->w2c_g39 = var_i0; + var_i0 = var_l7; + if (var_i0) { + var_i0 = var_l8; + var_i1 = 4294967294u; + var_i2 = var_l5; + var_i1 = I32_ROTL(var_i1, var_i2); + var_i0 &= var_i1; + var_i1 = var_l8; + var_i2 = var_l5; + var_i3 = 32u; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g38; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + w2c_highlights_f39(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + var_i0 = 25u; + var_i1 = 35u; + var_i2 = var_l2; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = 46u; + var_i0 = var_i0 != var_i1; + var_l4 = var_i0; + var_i0 = 0u; + instance->w2c_g39 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f244(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L84: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f244(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B85;} + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 42u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B85;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L84; + var_B85:; + var_i0 = 25u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = var_l10; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = 1u; + instance->w2c_g41 = var_i0; + var_i0 = 0u; + instance->w2c_g42 = var_i0; + } else { + var_i0 = instance->w2c_g41; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l3; + var_i0 -= var_i1; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 63u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 33u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_l3; + var_i1 = instance->w2c_g4; + w2c_highlights_f42(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + } + var_i0 = 0u; + instance->w2c_g39 = var_i0; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l4 = var_i0; + } + goto var_L3; + var_B4:; + var_i0 = var_l13; + if (var_i0) { + var_i0 = 13744u; + instance->w2c_g32 = var_i0; + var_i0 = 13744u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13748u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13752u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13756u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13760u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13764u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13768u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13772u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f380(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0; + v128 var_l16 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + var_i0 = instance->w2c_g7; + var_l15 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l14 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62336u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13776u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l14 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l6 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + var_l12 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } + } else { + var_i0 = 1u; + } + } + var_l10 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l15; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = var_l9; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l11; + var_i2 = var_l9; + var_i3 = var_l12; + var_i0 = w2c_highlights_f267(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 1u; + var_l10 = var_i0; + goto var_L3; + } + } + var_i0 = var_l8; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l4 = var_i0; + goto var_B4; + } + var_i0 = var_l4; + var_i1 = instance->w2c_g4; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_L11: + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = 34u; + var_i3 = 1u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 36u; + var_i2 = 37u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 36u; + var_i2 = 37u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l2; + } + } + var_l2 = var_i0; + var_i1 = var_l0; + var_i2 = var_l0; + var_i3 = var_l2; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B12;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l7 = var_i0; + goto var_B12; + } + var_i0 = var_l4; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B12;} + var_i0 = var_l4; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f51(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_l1; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = 3u; + var_i1 = var_l7; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 -= var_i3; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_l7 = var_i2; + var_i3 = 10u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l7; + var_i4 = 13u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i3 = instance->w2c_g4; + var_i4 = instance->w2c_g3; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l7 = var_i0; + goto var_L11; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L11; + } + var_i0 = var_l6; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 40u; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 -= var_i2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + goto var_B10; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L11; + } + UNREACHABLE; + var_B12:; + var_i0 = 44u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l7; + var_B10:; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_l7 = var_i0; + var_i0 = var_l1; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l6 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l1; + var_i1 = 3u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + } else { + var_i0 = var_l7; + } + } + var_l4 = var_i0; + goto var_L3; + } + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f81(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 1u; + var_l10 = var_i0; + } + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l13 = var_i0; + var_i0 = var_l10; + var_l7 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 35u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f61(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l8 = var_i0; + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l13; + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = instance->w2c_g4; + var_i3 = 3u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f46(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l13; + var_i4 = 45u; + var_i3 = var_i3 == var_i4; + var_l1 = var_i3; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l1; + var_l12 = var_i1; + var_i2 = 2u; + var_i1 += var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_l11 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = var_l11; + var_i0 -= var_i1; + var_l9 = var_i0; + var_i0 = 44u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 36u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 45u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l5 = var_i0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l13 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = var_l5; + var_i3 = 27136u; + var_i4 = 7u; + var_i5 = 28u; + var_i1 = w2c_highlights_f75(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 18u; + } else { + var_i0 = var_l0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 3u; + } else { + var_i0 = var_l0; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 7u; + } else { + var_i0 = var_l0; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 61u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 56u; + } else { + var_i0 = var_l0; + var_i1 = 5u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 60u; + } else { + var_i0 = var_l3; + if (var_i0) { + var_i0 = 29u; + } else { + var_i0 = var_l1; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l13; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 29u; + } else { + var_i0 = var_l1; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 14u; + } else { + var_i0 = 19u; + var_i1 = 58u; + var_i2 = var_l7; + var_i3 = var_l1; + var_i3 = w2c_highlights_f46(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i4 = var_l1; + var_i5 = 34u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l1; + var_i6 = 123u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i3 |= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + } + } + } + } + } + var_i1 = var_l2; + var_i2 = var_l5; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l5; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + w2c_highlights_f48(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l6; + if (var_i0) { + var_i0 = var_l6; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l6; + var_i2 = var_l0; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l6 = var_i0; + var_i0 = var_l0; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l6; + var_i1 = 1u; + var_i0 -= var_i1; + var_l6 = var_i0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 40u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l8 = var_i0; + var_i0 = instance->w2c_g4; + var_l4 = var_i0; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + } + } + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 1u; + var_i3 = var_l5; + var_i4 = 46u; + var_i3 = var_i3 == var_i4; + var_l1 = var_i3; + var_i4 = var_l13; + var_i5 = 46u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = 35u; + var_i2 = var_l1; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l5; + var_i1 = 46u; + var_i0 = var_i0 != var_i1; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 6288u); + var_i1 = 1u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 38u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 124u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l0; + var_i3 = var_l5; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + var_i1 = var_l5; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l14; + if (var_i0) { + var_i0 = 13776u; + instance->w2c_g32 = var_i0; + var_i0 = 13776u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13780u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13784u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13788u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13792u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13796u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13800u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13804u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f381(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B0;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = w2c_highlights_f45(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = var_p1; + var_i1 = var_i1 < var_i2; + var_i2 = var_p1; + var_i3 = 16u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i0 = !(var_i0); + if (var_i0) {goto var_B0;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + var_L1: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B0;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = w2c_highlights_f45(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = var_p1; + var_i1 = var_i1 < var_i2; + var_i2 = var_p1; + var_i3 = 16u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L1; + } + var_i0 = var_l2; + var_i1 = 95u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B0;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B0;} + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i0 = w2c_highlights_f45(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = var_p1; + var_i1 = var_i1 < var_i2; + var_i2 = var_p1; + var_i3 = 16u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i0 = !(var_i0); + if (var_i0) {goto var_B0;} + var_i0 = var_p0; + var_i1 = 2u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L1; + UNREACHABLE; + var_B0:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f382(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 6288u); + var_i1 = 2u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_p0; + var_i2 = 9u; + var_i1 -= var_i2; + var_i2 = 1u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f383(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g3; + var_i1 = var_p0; + var_i2 = 2u; + var_i1 += var_i2; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 4294967295u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = 4294967295u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 10u; + var_i1 *= var_i2; + var_i0 += var_i1; + var_i1 = 528u; + var_i0 -= var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f384(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i0 = w2c_highlights_f383(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p1; + var_i0 -= var_i1; + var_i1 = var_p2; + var_i2 = var_p1; + var_i1 -= var_i2; + var_i0 = var_i0 <= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f385(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 0u; + var_i2 = 23u; + var_i0 = w2c_highlights_f384(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i2 = 3u; + var_i1 += var_i2; + var_i2 = 0u; + var_i3 = 59u; + var_i1 = w2c_highlights_f384(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + } else { + var_i0 = 0u; + } + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f386(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_L0: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 32u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 9u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + } + var_i0 = var_l1; + var_i1 = 13u; + var_i0 = var_i0 != var_i1; + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 10u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 2u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f387(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + u32 var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0; + v128 var_l8 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = var_p3; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f386(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p2 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_p2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p2; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 2u; + goto var_Bfunc; + } + var_i0 = 0u; + var_p3 = var_i0; + } + var_L2: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B3;} + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = 34u; + var_i3 = 1u; + var_i4 = var_p0; + var_i4 = !(var_i4); + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B3;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i1 = 34u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l4; + var_i2 = 92u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B3;} + var_i0 = var_l4; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l7 = var_i0; + goto var_B3; + } + var_i0 = 0u; + var_l4 = var_i0; + var_L6: + var_i0 = var_l4; + var_i1 = 5u; + var_i0 = var_i0 >= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B7;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 34u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B7;} + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L6; + var_B7:; + var_i0 = var_l4; + var_i1 = 3u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l7 = var_i0; + goto var_B3; + } + } else { + var_i0 = var_p1; + var_i1 = var_p2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = 0u; + var_p3 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_p2 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_l4 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 6288u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l6 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_p2 = var_i0; + } + var_i0 = 2u; + var_i1 = 4u; + var_i2 = 8u; + var_i3 = 0u; + var_i4 = var_l4; + var_i5 = 85u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l4; + var_i4 = 117u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l4; + var_i3 = 120u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = var_l4; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = var_l5; + var_i1 = instance->w2c_g4; + var_i2 = var_l4; + var_i3 = 2u; + var_i2 += var_i3; + var_i1 += var_i2; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l6 = var_i0; + var_i0 = var_l5; + } else { + var_i0 = var_p2; + } + var_p2 = var_i0; + } + var_i0 = var_p0; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_l4 = var_i0; + var_L14: + var_i0 = var_l4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B15;} + var_i0 = var_l4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i1 = 9u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l5; + var_i2 = 32u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) {goto var_B15;} + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + var_l4 = var_i0; + goto var_L14; + var_B15:; + var_i0 = var_l4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + var_l4 = var_i0; + var_i0 = 1u; + var_p3 = var_i0; + } + var_i0 = var_l4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = var_l4; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + var_i1 = var_l5; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 2u; + var_i0 += var_i1; + var_l4 = var_i0; + var_i0 = 1u; + } else { + var_i0 = var_p3; + } + } else { + var_i0 = 0u; + } + if (var_i0) { + var_i0 = var_l4; + var_i0 = w2c_highlights_f386(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p2 = var_i0; + var_i0 = 1u; + var_l6 = var_i0; + var_i0 = var_p2; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 == var_i1; + } else { + var_i0 = 0u; + } + } else { + var_i0 = 0u; + } + var_p3 = var_i0; + } + var_i0 = 45u; + var_i1 = var_p1; + var_i2 = var_l6; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = instance->w2c_g4; + var_i2 = var_p2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p2; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_p2 = var_i0; + } + goto var_L2; + var_B3:; + var_i0 = var_p1; + var_i1 = var_p2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = 2u; + var_i2 = 0u; + var_i3 = var_p3; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l7; + var_i0 = var_i2 ? var_i0 : var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f388(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13u; + instance->w2c_g25 = var_i0; + var_i0 = var_p0; + instance->w2c_g26 = var_i0; + var_i0 = var_p1; + instance->w2c_g27 = var_i0; + var_i0 = var_p2; + instance->w2c_g29 = var_i0; + } + FUNC_EPILOGUE; +} + +void w2c_highlights_f389(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 1u; + var_i3 = var_p0; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + var_i0 = var_p0; + var_i1 = var_p0; + var_i2 = var_p1; + var_i3 = var_l2; + var_i4 = 0u; + var_i1 = w2c_highlights_f387(instance, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i1; + var_i2 = 1u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 34u; + var_i1 = var_l2; + var_i2 = 2u; + var_i1 = var_i1 == var_i2; + var_i2 = var_p1; + w2c_highlights_f388(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f390(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = 39u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = 0u; + var_l2 = var_i0; + var_L2: + var_i0 = var_l2; + var_i1 = 5u; + var_i0 = var_i0 >= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B3;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 39u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B3;} + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L2; + var_B3:; + var_i0 = var_l2; + var_i1 = 3u; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L0;} + var_i0 = 1u; + var_l3 = var_i0; + var_B1:; + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f391(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0; + v128 var_l13 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + u64 var_j1, var_j2; + v128 var_o1, var_o2, var_o3, var_o4; + var_i0 = instance->w2c_g7; + var_l12 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + var_i0 = 1u; + var_l4 = var_i0; + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13808u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l9 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } + } else { + var_i0 = 0u; + } + } + var_l7 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l12; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + var_i1 = 0u; + var_l0 = var_i1; + var_L6: + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 >= var_i2; + if (var_i1) {goto var_B7;} + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l2 = var_i1; + var_i2 = 9u; + var_i1 = var_i1 != var_i2; + var_i2 = var_l2; + var_i3 = 10u; + var_i2 = var_i2 != var_i3; + var_i1 &= var_i2; + var_i2 = var_l2; + var_i3 = 13u; + var_i2 = var_i2 != var_i3; + var_i3 = var_l2; + var_i4 = 32u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B7;} + var_i1 = 1u; + var_i2 = var_l0; + var_i3 = var_l2; + var_i4 = 10u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l0 = var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + instance->w2c_g4 = var_i1; + goto var_L6; + var_B7:; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = var_l4; + var_i1 = 1u; + var_i2 = var_l3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i1 = var_l0; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 29u; + var_i1 = 44u; + var_i2 = var_l4; + var_i3 = var_l7; + var_i2 |= var_i3; + var_l5 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + var_i0 = instance->w2c_g3; + var_i1 = instance->w2c_g4; + var_i2 = 3u; + var_i1 += var_i2; + var_i0 = var_i0 >= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l0; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + var_i1 = var_l5; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l2; + w2c_highlights_f389(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + var_i0 = var_l2; + var_i1 = var_l0; + var_i0 = w2c_highlights_f390(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 39u; + var_i1 = 0u; + var_i2 = var_l2; + w2c_highlights_f388(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + } else { + var_i0 = var_l0; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l2; + w2c_highlights_f389(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 39u; + var_i1 = 0u; + var_i2 = var_l2; + w2c_highlights_f55(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 95u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l0; + var_i3 = 32u; + var_i2 |= var_i3; + var_i3 = 97u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i1 = var_l4; + var_i2 = var_l7; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g3; + var_L17: + var_i1 = instance->w2c_g3; + var_i2 = var_l0; + var_i1 = var_i1 > var_i2; + if (var_i1) { + var_i1 = var_l0; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l13 = var_o1; + var_i2 = 32u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_i2 = 97u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_sub(var_o1, var_o2); + var_i2 = 25u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_u8x16_le(var_o1, var_o2); + var_o2 = var_l13; + var_i3 = 48u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_sub(var_o2, var_o3); + var_i3 = 9u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_u8x16_le(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_o2 = var_l13; + var_i3 = 95u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_eq(var_o2, var_o3); + var_o3 = var_l13; + var_i4 = 45u; + var_o4 = simde_wasm_i8x16_splat(var_i4); + var_o3 = simde_wasm_i8x16_eq(var_o3, var_o4); + var_o2 = simde_wasm_v128_or(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_i1 = v128_i8x16_bitmask(var_o1); + var_i2 = 65535u; + var_i1 ^= var_i2; + var_l1 = var_i1; + if (var_i1) { + var_i1 = var_l0; + var_i2 = var_l1; + var_i2 = I32_CTZ(var_i2); + var_i1 += var_i2; + } else { + var_i1 = var_l0; + var_i2 = 16u; + var_i1 += var_i2; + var_l0 = var_i1; + goto var_L17; + } + } else { + var_i1 = var_l0; + } + var_l0 = var_i1; + var_i2 = var_l0; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 29u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = var_l3; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l7 = var_i0; + } else { + var_i0 = var_l3; + var_i1 = 1024u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 45136u; + var_i0 += var_i1; + var_i1 = 0u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l7; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 91u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 93u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l7; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 93u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = var_l7; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } else { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_l3; + var_i2 = var_l3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + } + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1024u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 45136u; + var_i0 += var_i1; + var_i1 = 1u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = 1u; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = var_l3; + var_i2 = var_l3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_l1 = var_i0; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l3; + var_i2 = 1024u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 45135u; + var_i0 += var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + var_i0 = 0u; + } + var_l4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 4u; + var_i0 += var_i1; + var_l1 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l2; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 1702195828u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i2 = w2c_highlights_f382(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = 6u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = 5u; + var_i0 += var_i1; + var_l1 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l2; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 435728179558ull; + var_j1 ^= var_j2; + var_j2 = 24ull; + var_j1 <<= (var_j2 & 63); + var_i1 = !(var_j1); + var_i2 = var_l1; + var_i2 = w2c_highlights_f382(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = 6u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + var_i1 = var_l0; + var_i2 = 43u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 += var_i1; + var_l5 = var_i0; + var_i1 = 3u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l5; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 16777215u; + var_i1 &= var_i2; + var_l1 = var_i1; + var_i2 = 6712937u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 7233902u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l0; + var_i2 = w2c_highlights_f382(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = 1u; + var_l11 = var_i0; + var_i0 = instance->w2c_g3; + var_i1 = var_l2; + var_l0 = var_i1; + var_i2 = 10u; + var_i1 += var_i2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 7u); + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + } else { + var_i0 = 0u; + } + if (var_i0) { + var_i0 = var_l2; + var_i0 = w2c_highlights_f383(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_i0 = var_l2; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f383(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = var_l2; + var_i1 = 5u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f383(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l8 = var_i0; + var_i1 = 1u; + var_i0 -= var_i1; + var_i1 = 11u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l1; + var_i2 = var_l6; + var_i1 |= var_i2; + var_i2 = 0u; + var_i1 = (u32)((s32)var_i1 >= (s32)var_i2); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 8u; + var_i0 += var_i1; + var_i1 = 1u; + var_i2 = 62648012u; + var_i3 = var_l8; + var_i4 = 1u; + var_i3 <<= (var_i4 & 31); + var_i2 >>= (var_i3 & 31); + var_i3 = 3u; + var_i2 &= var_i3; + var_i3 = 28u; + var_i2 += var_i3; + var_i3 = var_l1; + var_i4 = var_l6; + var_i5 = var_l1; + var_i3 = var_i5 ? var_i3 : var_i4; + var_i4 = 3u; + var_i3 &= var_i4; + var_i3 = I32_CLZ(var_i3); + var_i4 = 5u; + var_i3 >>= (var_i4 & 31); + var_i4 = var_l8; + var_i5 = 2u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i2 += var_i3; + var_i0 = w2c_highlights_f384(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 10u; + var_i0 += var_i1; + var_l6 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l8 = var_i0; + var_i0 = var_l6; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + var_i0 = w2c_highlights_f385(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l8; + var_i2 = 32u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l8; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 116u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l10 = var_i0; + var_i0 = var_l1; + var_l0 = var_i0; + } else { + var_i0 = 0u; + var_l11 = var_i0; + var_i0 = var_l6; + var_i0 = w2c_highlights_f382(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l6; + instance->w2c_g4 = var_i0; + var_i0 = 47u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + } + } + } + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f385(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l11; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = var_l0; + var_i1 = 5u; + var_i0 += var_i1; + var_l1 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = 0u; + var_i3 = 60u; + var_i1 = w2c_highlights_f384(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l6 = var_i0; + var_i0 = var_l1; + var_i1 = 3u; + var_i0 += var_i1; + var_l1 = var_i0; + } + var_i0 = var_l6; + var_i1 = var_l1; + var_i2 = 1u; + var_i1 += var_i2; + var_l0 = var_i1; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l1; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 1u); + var_i3 = w2c_highlights_f44(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 &= var_i3; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_l1 = var_i0; + var_L46: + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B47;} + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = !(var_i0); + if (var_i0) {goto var_B47;} + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L46; + var_B47:; + } + var_i0 = var_l10; + if (var_i0) { + var_i0 = var_l1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 122u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + } else { + var_i0 = var_l1; + var_i1 = 6u; + var_i0 += var_i1; + var_i1 = var_l1; + var_i2 = var_l1; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f385(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l0; + var_i4 = 43u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i5 = 45u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + var_l1 = var_i0; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f382(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l1; + instance->w2c_g4 = var_i0; + var_i0 = 47u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + } + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 48u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = var_l2; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 8u; + var_i2 = 16u; + var_i3 = 0u; + var_i4 = var_l2; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4) + 1u); + var_l0 = var_i4; + var_i5 = 120u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l0; + var_i4 = 111u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i3 = 98u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l1 = var_i0; + } + var_i0 = var_l1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 2u; + var_i0 += var_i1; + var_l6 = var_i0; + var_i1 = var_l1; + var_i0 = w2c_highlights_f381(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l0; + var_i1 = var_l6; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + } + var_i0 = var_l5; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + var_i1 = var_l5; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 48u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = 1u; + var_i0 += var_i1; + } else { + var_i0 = var_l5; + var_i1 = 10u; + var_i0 = w2c_highlights_f381(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_l1 = var_i0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + var_i1 = var_l1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 1u); + var_i2 = w2c_highlights_f44(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 &= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 10u; + var_i0 = w2c_highlights_f381(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 32u; + var_i0 |= var_i1; + var_i1 = 101u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i1 = 43u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l5; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + } + var_i0 = var_l0; + var_i1 = var_l0; + var_i2 = 10u; + var_i1 = w2c_highlights_f381(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i1; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l5; + } else { + var_i0 = var_l1; + } + } else { + var_i0 = var_l1; + } + instance->w2c_g4 = var_i0; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_L60: + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f382(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) {goto var_B61;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 39u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 91u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B61;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L60; + var_B61:; + var_i0 = instance->w2c_g4; + var_i1 = var_l2; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + var_B4:; + var_i0 = var_l3; + instance->w2c_g33 = var_i0; + var_i0 = var_l9; + if (var_i0) { + var_i0 = 13808u; + instance->w2c_g32 = var_i0; + var_i0 = 13808u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13812u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13816u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f392(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g3; + var_i1 = var_p1; + instance->w2c_g3 = var_i1; + var_i1 = var_p0; + instance->w2c_g4 = var_i1; + w2c_highlights_f118(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g3 = var_i0; + var_i0 = var_p1; + instance->w2c_g4 = var_i0; + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f393(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0; + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g3; + var_i1 = var_p1; + instance->w2c_g3 = var_i1; + var_i1 = var_p0; + instance->w2c_g4 = var_i1; + var_i1 = 3u; + w2c_highlights_f191(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g3 = var_i0; + var_i0 = var_p1; + instance->w2c_g4 = var_i0; + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f394(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = instance->w2c_g3; + var_i1 = var_p1; + instance->w2c_g3 = var_i1; + var_i1 = var_p0; + instance->w2c_g4 = var_i1; + var_i1 = var_p2; + w2c_highlights_f194(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g3 = var_i0; + var_i0 = var_p1; + instance->w2c_g4 = var_i0; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f395(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + u32 var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0; + v128 var_l8 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = var_p0; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p1; + var_i0 &= var_i1; + var_l6 = var_i0; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g2; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 11u; + w2c_highlights_f68(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p3; + instance->w2c_g26 = var_i0; + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = 4u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + instance->w2c_g27 = var_i0; + var_i0 = var_p2; + instance->w2c_g28 = var_i0; + } + var_i0 = 0u; + goto var_B1; + } + var_i0 = var_p0; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = var_p2; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i0 = var_p1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l6; + if (var_i0) { + var_i0 = var_l5; + var_i1 = var_l4; + var_i2 = 0u; + w2c_highlights_f394(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l5; + var_i1 = var_l4; + w2c_highlights_f393(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l4; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_p0 = var_i0; + var_i0 = 0u; + var_l6 = var_i0; + } else { + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g2; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = instance->w2c_g3; + var_i2 = var_l6; + var_i2 = !(var_i2); + w2c_highlights_f394(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l6 = var_i0; + } else { + var_i0 = var_l5; + var_i1 = instance->w2c_g3; + w2c_highlights_f393(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + } else { + var_i0 = var_l4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_p0 = var_i0; + } else { + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + } + var_i0 = 44u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p3; + var_i1 = 64u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p3; + var_i1 = var_l5; + var_i2 = var_l4; + var_i3 = var_l5; + var_i4 = var_l7; + var_i5 = var_p0; + var_i5 = !(var_i5); + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i0 = w2c_highlights_f111(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p3 = var_i0; + } + } + var_i0 = 0u; + var_l7 = var_i0; + goto var_L0; + } + var_i0 = instance->w2c_g4; + var_l5 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l5; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L0; + } + var_i0 = var_l4; + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 33u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p3; + var_i1 = 63u; + var_i0 &= var_i1; + var_i1 = 8u; + var_i0 <<= (var_i1 & 31); + var_i1 = 1u; + var_i0 |= var_i1; + goto var_B1; + } + var_i0 = 0u; + var_i1 = var_l4; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_p0 = var_i0; + var_i0 = var_l4; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + var_p0 = var_i0; + goto var_L0; + } + } + var_i0 = var_p0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_p0 = var_i0; + var_i0 = var_l4; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_p2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 44u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 3u; + var_p0 = var_i0; + var_i0 = 1u; + var_l7 = var_i0; + goto var_L0; + } + var_i0 = var_l4; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 33u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p3; + var_i1 = 63u; + var_i0 &= var_i1; + var_i1 = 8u; + var_i0 <<= (var_i1 & 31); + var_i1 = 2u; + var_i0 |= var_i1; + goto var_B1; + } + } + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f109(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = var_p1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = instance->w2c_g4; + w2c_highlights_f393(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 44u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = var_p3; + var_i1 = 64u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p3; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + var_i0 = w2c_highlights_f111(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p3 = var_i0; + } + goto var_L0; + } + var_i0 = var_l4; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 62u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 33u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p3; + var_i1 = 63u; + var_i0 &= var_i1; + var_i1 = 8u; + var_i0 <<= (var_i1 & 31); + var_i1 = 2u; + var_i0 |= var_i1; + goto var_B1; + } + var_i0 = 0u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L0; + } + var_i0 = var_l4; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l4; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l4; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i2 = instance->w2c_g3; + var_i3 = instance->w2c_g4; + var_i4 = 1u; + var_i3 += var_i4; + var_i2 = var_i2 > var_i3; + var_i1 &= var_i2; + var_i2 = var_l4; + var_i3 = 118u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l4; + var_i3 = 35u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + var_p1 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f108(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p3; + if (var_i0) { + var_i0 = var_p3; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + var_i0 = w2c_highlights_f110(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p3 = var_i0; + } + var_i0 = 1u; + var_p0 = var_i0; + } + goto var_L0; + var_B1:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f396(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0; + v128 var_l5 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + var_i0 = instance->w2c_g7; + var_l4 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13824u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l3 = var_i0; + instance->w2c_g24 = var_i0; + } + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + } + var_l0 = var_i0; + var_L2: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = var_l0; + var_i1 = 123u; + var_i2 = 60u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B3;} + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 757932348u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = var_l0; + var_i3 = 4u; + var_i2 += var_i3; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l0; + w2c_highlights_f392(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + w2c_highlights_f106(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + goto var_L2; + } + var_i0 = instance->w2c_g3; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 += var_i2; + var_i0 = var_i0 > var_i1; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i1 = w2c_highlights_f46(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 1u); + var_i3 = 47u; + var_i2 = var_i2 == var_i3; + var_i3 = instance->w2c_g3; + var_i4 = var_l0; + var_i5 = 2u; + var_i4 += var_i5; + var_i3 = var_i3 > var_i4; + var_i4 = var_l0; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4) + 2u); + var_i4 = w2c_highlights_f46(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 &= var_i4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l0; + w2c_highlights_f392(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = 0u; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 1u; + var_l1 = var_i0; + } + var_i0 = 33u; + var_i1 = var_l0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f108(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i0 = var_l1; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_l0; + var_i0 = w2c_highlights_f103(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + } + var_i0 = 49u; + var_i1 = instance->w2c_g4; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = 0u; + var_i2 = 0u; + var_i3 = var_l2; + var_i0 = w2c_highlights_f395(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f116(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_l0 = var_i0; + goto var_L2; + } + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u); + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = var_l0; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + var_i1 = var_l2; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l0; + w2c_highlights_f392(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 40u; + var_i1 = var_l0; + var_i2 = var_l0; + var_i3 = 2u; + var_i2 += var_i3; + var_l0 = var_i2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l0; + instance->w2c_g4 = var_i0; + var_i0 = 2u; + var_i1 = 0u; + var_i2 = 6u; + var_i3 = 0u; + var_i0 = w2c_highlights_f195(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 40u; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + } else { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + } + var_l0 = var_i0; + goto var_L2; + var_B3:; + var_i0 = var_l1; + var_i1 = instance->w2c_g3; + w2c_highlights_f392(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + var_i0 = var_l3; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f397(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_L0: + var_i0 = var_p0; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i0 = w2c_highlights_f43(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 40u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 41u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l1; + var_i3 = 59u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l1; + var_i3 = 34u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L0; + var_B1:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f398(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0; + v128 var_l6 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5; + u64 var_j1, var_j2; + var_i0 = instance->w2c_g7; + var_l5 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13824u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l4 = var_i0; + instance->w2c_g24 = var_i0; + } + } + var_L2: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l5; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B3;} + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 0u; + var_i3 = instance->w2c_g3; + var_i4 = instance->w2c_g4; + var_i5 = 1u; + var_i4 += var_i5; + var_i3 = var_i3 > var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l0 = var_i1; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 4u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = var_l1; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_l1 = var_i0; + var_i0 = 1u; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L7: + var_i0 = instance->w2c_g4; + var_i1 = 40u; + var_i2 = 59u; + var_i0 = w2c_highlights_f78(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B8;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 0u; + var_i3 = instance->w2c_g3; + var_i4 = instance->w2c_g4; + var_i5 = 1u; + var_i4 += var_i5; + var_i3 = var_i3 > var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_l3 = var_i1; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_L7; + } + var_i0 = var_l0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 41u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l2; + var_i1 = 1u; + var_i0 -= var_i1; + var_l2 = var_i0; + var_i0 = !(var_i0); + if (var_i0) {goto var_B8;} + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + goto var_L7; + var_B8:; + var_i0 = 4u; + var_i1 = var_l1; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = 15144u; + var_i2 = 10555u; + var_i3 = 4u; + w2c_highlights_f64(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 34u; + var_i1 = 0u; + var_i2 = 44u; + w2c_highlights_f53(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = var_l1; + var_i1 = 36u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + w2c_highlights_f397(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 58u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = var_l1; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 41u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L2; + } + var_i0 = var_l1; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 46u; + w2c_highlights_f397(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = var_l3; + var_l0 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 43u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + } + var_i0 = 24u; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = var_l2; + var_i2 = var_i2 < var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B15;} + var_i0 = 24u; + var_i1 = var_l0; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 16777215u; + var_i1 &= var_i2; + var_l1 = var_i1; + var_i2 = 6712937u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l1; + var_i3 = 7233902u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l2; + var_i3 = var_l0; + var_i2 -= var_i3; + var_l1 = var_i2; + var_i3 = 3u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B15;} + var_i0 = var_l1; + var_i1 = 6u; + var_i0 = var_i0 > var_i1; + var_i1 = var_l0; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 132148534075758ull; + var_j1 ^= var_j2; + var_j2 = 16ull; + var_j1 <<= (var_j2 & 63); + var_i1 = !(var_j1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = 6u; + var_i0 += var_i1; + var_l0 = var_i0; + var_L18: + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = w2c_highlights_f45(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 24u; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 += var_i2; + var_l0 = var_i1; + var_i2 = var_l2; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B15;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l0; + var_i2 = var_l0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 95u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i1 = var_l2; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_L18;} + } + } + var_i0 = 56u; + var_i1 = var_l3; + var_i2 = var_l2; + var_i3 = 27776u; + var_i4 = 7u; + var_i5 = 28u; + var_i1 = w2c_highlights_f75(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i1; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B15;} + var_i0 = 18u; + var_i1 = var_l0; + var_i2 = 2u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B15;} + var_i0 = 17u; + var_i1 = var_l0; + if (var_i1) {goto var_B15;} + var_i0 = var_l3; + var_l0 = var_i0; + var_L20: + var_i0 = var_l0; + var_i1 = var_l2; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 14u; + var_i1 = var_l0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B15;} + var_i0 = var_l0; + var_i1 = 1u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L20; + } + var_i0 = 17u; + var_B15:; + var_i1 = var_l3; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L2; + var_B3:; + var_i0 = var_l4; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f399(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0; + v128 var_l10 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + u64 var_j2, var_j3; + var_i0 = instance->w2c_g7; + var_l8 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13824u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l6 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + } + } else { + var_i0 = 0u; + } + } + var_l3 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l8; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = var_l5; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l5; + var_i5 = 33u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 42u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 10799u; + var_i1 = 12074u; + var_i2 = 5u; + var_i3 = 4u; + var_i4 = var_l5; + var_i5 = 42u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l5; + var_i6 = 33u; + var_i5 = var_i5 == var_i6; + var_i4 |= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + w2c_highlights_f71(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f46(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36u; + w2c_highlights_f7(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_l0 = var_i1; + var_i2 = 27872u; + var_i3 = 15u; + var_i4 = 44u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 < (s32)var_i1); + if (var_i0) { + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = var_l2; + var_i1 -= var_i2; + var_l1 = var_i1; + var_i2 = 4u; + var_i1 = var_i1 < var_i2; + if (var_i1) {goto var_B12;} + var_i0 = 56u; + var_i1 = var_l1; + var_i2 = 9u; + var_i1 = var_i1 >= var_i2; + var_i2 = var_l2; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 6874026255041717620ull; + var_i2 = var_j2 == var_j3; + var_i1 &= var_i2; + if (var_i1) {goto var_B12;} + var_i0 = 0u; + var_i1 = var_l0; + var_i2 = 1u; + var_i1 -= var_i2; + var_l9 = var_i1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l5 = var_i1; + var_i2 = 105u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l5; + var_i3 = 117u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l2; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 16777215u; + var_i2 &= var_i3; + var_l7 = var_i2; + var_i3 = 6514038u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l5; + var_i3 = 102u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l5; + var_i4 = 104u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i1 |= var_i2; + if (var_i1) { + var_i1 = var_l1; + var_i2 = 1u; + var_i1 -= var_i2; + var_l1 = var_i1; + var_i1 = var_l9; + } else { + var_i1 = var_l0; + } + var_i2 = 1u; + var_i1 -= var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 50u; + var_i1 -= var_i2; + var_i2 = 2u; + var_i1 = var_i1 > var_i2; + if (var_i1) {goto var_B12;} + var_i0 = 56u; + var_i1 = var_l1; + var_i2 = 4u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l7; + var_i3 = 6514038u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B12;} + var_i0 = 56u; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i2 = 120u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 3u); + var_i3 = 50u; + var_i2 -= var_i3; + var_i3 = 2u; + var_i2 = var_i2 <= var_i3; + var_i1 &= var_i2; + var_i2 = var_l7; + var_i3 = 7627117u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l1; + var_i3 = 6u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B12;} + var_i0 = 0u; + var_B12:; + var_l1 = var_i0; + var_i1 = 4294967295u; + var_i2 = var_l1; + var_i0 = var_i2 ? var_i0 : var_i1; + goto var_B10; + } + var_i0 = var_l1; + var_B10:; + var_l1 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = var_l1; + var_i1 = 255u; + var_i0 &= var_i1; + var_l3 = var_i0; + var_i0 = var_l1; + var_i1 = 8u; + var_i0 >>= (var_i1 & 31); + var_l4 = var_i0; + } else { + var_i0 = var_l0; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = var_l4; + if (var_i0) { + var_i0 = 15u; + var_i1 = 55u; + var_i2 = var_l4; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + } else { + var_i0 = var_l1; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l3; + if (var_i0) { + var_i0 = 16u; + } else { + var_i0 = 55u; + var_i1 = 14u; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } else { + var_i0 = var_l3; + if (var_i0) { + var_i0 = 29u; + } else { + var_i0 = var_l2; + var_i1 = var_l0; + var_i0 = w2c_highlights_f82(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 6u; + } else { + var_i0 = 55u; + var_i1 = 58u; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 65u; + var_i2 -= var_i3; + var_i3 = 25u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } + } + } + var_l3 = var_i0; + } + } + var_i0 = var_l3; + var_i1 = var_l2; + var_i2 = var_l0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i3 = 46u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = 0u; + w2c_highlights_f50(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l0; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l3 = var_i0; + var_i0 = 0u; + var_l4 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l3 = var_i0; + goto var_L3; + } + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 6288u); + var_i1 = 4u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } else { + var_i0 = var_l0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3984u); + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = var_l1; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = var_l0; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l0; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + } + } + } + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l3 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l6; + if (var_i0) { + var_i0 = 13824u; + instance->w2c_g32 = var_i0; + var_i0 = 13824u; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13828u; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f400(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 95u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 32u; + var_i1 |= var_i2; + var_i2 = 97u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f401(w2c_highlights* instance, u32 var_p0) { + u32 var_l2 = 0; + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + v128 var_o1, var_o2, var_o3, var_o4; + var_i0 = instance->w2c_g3; + var_L0: + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i1 = var_i1 > var_i2; + if (var_i1) { + var_i1 = var_p0; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l1 = var_o1; + var_i2 = 32u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_i2 = 97u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_i8x16_sub(var_o1, var_o2); + var_i2 = 25u; + var_o2 = simde_wasm_i8x16_splat(var_i2); + var_o1 = simde_wasm_u8x16_le(var_o1, var_o2); + var_o2 = var_l1; + var_i3 = 48u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_i8x16_sub(var_o2, var_o3); + var_i3 = 9u; + var_o3 = simde_wasm_i8x16_splat(var_i3); + var_o2 = simde_wasm_u8x16_le(var_o2, var_o3); + var_o3 = var_l1; + var_i4 = 95u; + var_o4 = simde_wasm_i8x16_splat(var_i4); + var_o3 = simde_wasm_i8x16_eq(var_o3, var_o4); + var_o2 = simde_wasm_v128_or(var_o2, var_o3); + var_o1 = simde_wasm_v128_or(var_o1, var_o2); + var_i1 = v128_i8x16_bitmask(var_o1); + var_i2 = 65535u; + var_i1 ^= var_i2; + var_l2 = var_i1; + if (var_i1) { + var_i1 = var_p0; + var_i2 = var_l2; + var_i2 = I32_CTZ(var_i2); + var_i1 += var_i2; + } else { + var_i1 = var_p0; + var_i2 = 16u; + var_i1 += var_i2; + var_p0 = var_i1; + goto var_L0; + } + } else { + var_i1 = var_p0; + } + var_p0 = var_i1; + var_i2 = var_p0; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f402(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + var_i0 = w2c_highlights_f45(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = var_p1; + var_i1 = var_i1 < var_i2; + var_i2 = var_p1; + var_i3 = 16u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f403(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_l2 = var_i0; + var_L0: + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p1; + var_i0 = w2c_highlights_f402(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + } + var_i0 = var_p0; + var_i1 = var_l2; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 95u; + var_i1 = var_i1 != var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = var_p1; + var_i1 = w2c_highlights_f402(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + var_i0 |= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_l3; + var_p0 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p0; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f404(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_L0: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i2 = var_p0; + var_i3 = 1u; + var_i4 = 1u; + var_i0 = w2c_highlights_f5(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i1 = var_p0; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + goto var_B1; + } + var_i0 = var_l3; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l3; + var_i2 = 92u; + var_i1 = var_i1 != var_i2; + var_i0 |= var_i1; + if (var_i0) {goto var_B1;} + var_i0 = var_p1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i1 = 10u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l3; + var_i2 = 13u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = var_l3; + var_i1 = 120u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 2u; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + } + var_i0 = var_l3; + var_i1 = 117u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = 6u; + var_i0 = w2c_highlights_f10(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 125u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + } else { + var_i0 = var_l2; + } + } else { + var_i0 = var_l2; + } + } else { + var_i0 = var_l2; + } + } else { + var_i0 = var_l2; + } + var_i1 = instance->w2c_g3; + var_i0 = w2c_highlights_f9(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = 45u; + var_i1 = instance->w2c_g4; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + goto var_L0; + var_B1:; + var_i0 = var_p1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f405(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, + var_l8 = 0, var_l9 = 0, var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, + var_l16 = 0, var_l17 = 0, var_l18 = 0; + u64 var_l19 = 0; + v128 var_l20 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7; + u64 var_j0, var_j1, var_j2, var_j3, var_j4, var_j5; + var_i0 = instance->w2c_g7; + var_l18 = var_i0; + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 62304u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l17 = var_i0; + var_i0 = 62308u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = 62312u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = 62316u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i0 = 62320u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l14 = var_i0; + var_i0 = 62324u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l15 = var_i0; + var_i0 = 62328u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l7 = var_i0; + var_i0 = 62332u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l16 = var_i0; + var_i0 = 62336u; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l19 = var_j0; + var_i0 = 62344u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l8 = var_i0; + var_i0 = 62352u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l11 = var_i0; + var_i0 = 62356u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l12 = var_i0; + var_i0 = 62348u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + } else { + w2c_highlights_f23(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g22; + var_i1 = instance->w2c_g24; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 13832u; + instance->w2c_g32 = var_i0; + var_i0 = 1u; + var_l17 = var_i0; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g23; + if (var_i0) { + var_i0 = 0u; + } else { + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l10 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l5 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_l14 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + var_l15 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l7 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l16 = var_i0; + var_i0 = instance->w2c_g32; + var_j0 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 32u); + var_l19 = var_j0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 40u); + var_l8 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 48u); + var_l11 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 52u); + var_l12 = var_i0; + var_i0 = instance->w2c_g32; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 44u); + } + } else { + var_i0 = 0u; + } + } + var_l0 = var_i0; + var_L3: + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g5; + var_i0 = var_i0 >= var_i1; + var_i1 = 0u; + var_i2 = var_l18; + var_i0 = var_i2 ? var_i0 : var_i1; + if (var_i0) { + var_i0 = 62304u; + var_i1 = var_l17; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62308u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62312u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62316u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62320u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62324u; + var_i1 = var_l15; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62328u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62332u; + var_i1 = var_l16; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62336u; + var_j1 = var_l19; + i64_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_j1); + var_i0 = 62344u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62348u; + var_i1 = var_l0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62352u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 62356u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + instance->w2c_g6 = var_i0; + goto var_Bfunc; + } + var_i0 = instance->w2c_g4; + w2c_highlights_f6(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g4; + w2c_highlights_f22(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B4;} + var_i0 = instance->w2c_g4; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i1; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 5u; + var_i2 = 4u; + var_i3 = instance->w2c_g4; + var_i4 = 2u; + var_i3 += var_i4; + var_i3 = w2c_highlights_f83(instance, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i3; + var_i4 = 47u; + var_i3 = var_i3 == var_i4; + var_i4 = instance->w2c_g4; + var_i5 = 3u; + var_i4 += var_i5; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i5 = 47u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i4 = var_l4; + var_i5 = 33u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_L3; + } + var_i0 = 0u; + var_i1 = var_l11; + var_i2 = var_l11; + var_i3 = var_l1; + var_i4 = 58u; + var_i3 = var_i3 != var_i4; + var_l4 = var_i3; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l11 = var_i0; + var_i0 = 0u; + var_i1 = var_l15; + var_i2 = var_l4; + var_i3 = var_l15; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l15 = var_i0; + var_i0 = var_l9; + var_i1 = var_l10; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i1 = w2c_highlights_f400(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l1; + var_i3 = 64u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l6; + var_i4 = 34u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i1 |= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + } + var_i0 = 0u; + var_i1 = var_l12; + var_i2 = var_l12; + var_i3 = var_l1; + var_i4 = 40u; + var_i3 = var_i3 != var_i4; + var_l4 = var_i3; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l12 = var_i0; + var_i0 = var_l4; + var_i1 = instance->w2c_g41; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g41 = var_i0; + } + var_i0 = 0u; + var_i1 = var_l8; + var_i2 = var_l8; + var_i3 = var_l6; + var_i4 = 124u; + var_i3 = var_i3 != var_i4; + var_i4 = var_l6; + var_i5 = 61u; + var_i4 = var_i4 != var_i5; + var_i3 &= var_i4; + var_i4 = var_l1; + var_i5 = 124u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i3 = I32_CLZ(var_i3); + var_i4 = 5u; + var_i3 >>= (var_i4 & 31); + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + var_i0 = var_l1; + var_i1 = 92u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 92u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = 44u; + w2c_highlights_f60(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l0 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 34u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 39u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 44u; + w2c_highlights_f404(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l0 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 64u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 34u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 29u; + var_i1 = 55u; + var_i2 = 22u; + var_i3 = var_l9; + if (var_i3) { + var_i3 = 1u; + instance->w2c_g41 = var_i3; + var_i3 = 15u; + } else { + var_i3 = 58u; + } + var_i4 = var_l10; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l5; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 34u; + var_i1 = var_l0; + w2c_highlights_f404(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l14 = var_i0; + var_i0 = 0u; + var_l0 = var_i0; + goto var_L3; + } + var_i0 = var_l6; + var_i0 = w2c_highlights_f400(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l1; + var_i2 = 64u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f401(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 20u; + var_i1 = 14u; + var_i2 = instance->w2c_g4; + var_i3 = var_l2; + var_i2 -= var_i3; + var_l0 = var_i2; + var_i3 = 7u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l2; + var_j3 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_j4 = 32776920251590976ull; + var_j3 ^= var_j4; + var_j4 = 8ull; + var_j3 <<= (var_j4 & 63); + var_i3 = !(var_j3); + var_i2 &= var_i3; + var_i3 = var_l0; + var_i4 = 8u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l2; + var_j4 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_j5 = 8390891584405201728ull; + var_i4 = var_j4 == var_j5; + var_i3 &= var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l0 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 10u; + var_l0 = var_i0; + var_i0 = var_l1; + var_i1 = 48u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 16u; + var_i1 = 8u; + var_i2 = 2u; + var_i3 = 10u; + var_i4 = var_l2; + var_i5 = 1u; + var_i4 += var_i5; + var_i4 = w2c_highlights_f83(instance, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i4; + var_i5 = 98u; + var_i4 = var_i4 == var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l0; + var_i4 = 111u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i3 = 120u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + } + var_i0 = var_l2; + var_i1 = 2u; + var_i0 += var_i1; + var_l4 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i0 = w2c_highlights_f402(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l0; + var_i2 = 10u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = var_l0; + var_i0 = w2c_highlights_f403(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + } else { + var_i0 = 10u; + var_l0 = var_i0; + var_i0 = var_l2; + var_i1 = 10u; + var_i0 = w2c_highlights_f403(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = var_l0; + var_i1 = w2c_highlights_f402(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 10u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l0; + var_i3 = 16u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l0; + var_i0 = w2c_highlights_f403(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + } + var_i0 = var_l0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 32u; + var_i1 |= var_i2; + var_l4 = var_i1; + var_i2 = 101u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = 16u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l4; + var_i3 = 112u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 43u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 45u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + } + var_i0 = var_l3; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f44(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 10u; + var_i0 = w2c_highlights_f403(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + } + } + var_i0 = 24u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l0 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f400(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f401(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = var_l2; + var_i1 = instance->w2c_g4; + var_l6 = var_i1; + var_i2 = 28064u; + var_i3 = 31u; + var_i4 = 74u; + var_i0 = w2c_highlights_f76(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 < (s32)var_i1); + if (var_i0) { + var_i0 = var_l6; + var_i1 = var_l2; + var_i0 -= var_i1; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 60u; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 99u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 95u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + if (var_i1) {goto var_B22;} + var_i0 = 4294967295u; + goto var_B22; + } + var_i0 = 17u; + var_i1 = var_l6; + var_i2 = var_l2; + var_i1 -= var_i2; + var_i2 = 8u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l2; + var_j2 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_j3 = 7308613719115525987ull; + var_i2 = var_j2 == var_j3; + var_i1 &= var_i2; + if (var_i1) {goto var_B22;} + var_i0 = var_l2; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 105u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 117u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_L26: + var_i0 = var_l3; + var_i1 = var_l6; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 4294967295u; + var_i1 = var_l3; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f44(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + if (var_i1) {goto var_B22;} + var_i0 = 4294967295u; + var_i1 = var_l1; + var_i2 = 6553u; + var_i1 = var_i1 > var_i2; + if (var_i1) {goto var_B22;} + var_i0 = 4294967295u; + var_i1 = var_l3; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 48u; + var_i1 -= var_i2; + var_i2 = var_l1; + var_i3 = 10u; + var_i2 *= var_i3; + var_i1 += var_i2; + var_l1 = var_i1; + var_i2 = 65535u; + var_i1 = var_i1 > var_i2; + if (var_i1) {goto var_B22;} + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + goto var_L26; + } + var_i0 = 56u; + goto var_B22; + } + var_i0 = 4294967295u; + goto var_B22; + } + var_i0 = var_l4; + var_B22:; + var_l4 = var_i0; + var_i1 = 0u; + var_i0 = (u32)((s32)var_i0 >= (s32)var_i1); + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l9; + var_i2 = var_l4; + var_i3 = 8u; + var_i2 >>= (var_i3 & 31); + var_l0 = var_i2; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l9 = var_i0; + var_i0 = 1u; + var_i1 = var_l14; + var_i2 = var_l0; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l14 = var_i0; + var_i0 = 1u; + var_i1 = var_l12; + var_i2 = var_l0; + var_i3 = 4u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l0; + var_i4 = 5u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l12 = var_i0; + var_i0 = 1u; + var_i1 = var_l11; + var_i2 = var_l0; + var_i3 = 7u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l11 = var_i0; + var_i0 = 1u; + var_i1 = var_l8; + var_i2 = var_l0; + var_i3 = 8u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + var_i0 = var_l4; + var_i1 = 255u; + var_i0 &= var_i1; + var_l4 = var_i0; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l0 = var_i0; + var_i0 = 0u; + var_i1 = var_l5; + var_i2 = var_l4; + var_i3 = 56u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l4; + var_i4 = 7u; + var_i3 = var_i3 == var_i4; + var_i2 |= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + goto var_L3; + } + var_i0 = 16u; + var_i1 = 29u; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i2; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i2; + var_i3 = 40u; + var_i2 = var_i2 == var_i3; + var_l4 = var_i2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 55u; + var_i2 = 22u; + var_i3 = var_l9; + if (var_i3) { + var_i3 = 1u; + instance->w2c_g41 = var_i3; + var_i3 = 15u; + } else { + var_i3 = 58u; + } + var_i4 = var_l10; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l5; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l4; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 14u; + var_l3 = var_i0; + } + var_i0 = var_l3; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 65u; + var_i1 -= var_i2; + var_i2 = 25u; + var_i1 = var_i1 <= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 6u; + var_i1 = 55u; + var_i2 = var_l2; + var_i3 = instance->w2c_g4; + var_i2 = w2c_highlights_f82(instance, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + } + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l14; + var_i1 = !(var_i1); + var_i0 |= var_i1; + var_i1 = var_l6; + var_i2 = 58u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i0 = w2c_highlights_f58(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + var_i1 = 46u; + var_i0 = var_i0 != var_i1; + var_i1 = var_l0; + var_i2 = 91u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + } else { + var_i0 = 0u; + } + if (var_i0) { + var_i0 = 0u; + var_l0 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f400(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l7; + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l1; + var_i1 = w2c_highlights_f401(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i1; + var_i2 = 28064u; + var_i3 = 31u; + var_i4 = 74u; + var_i0 = w2c_highlights_f75(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i1 = 15u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_l0 = var_i0; + var_i0 = var_l4; + var_i0 = w2c_highlights_f73(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = w2c_highlights_f83(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f400(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l1; + var_i1 = var_l1; + var_i1 = w2c_highlights_f401(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 28064u; + var_i3 = 31u; + var_i4 = 74u; + var_i0 = w2c_highlights_f75(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = var_l5; + } + var_l5 = var_i0; + } + } + var_i0 = var_l7; + var_i0 = !(var_i0); + var_i1 = var_l0; + var_i1 = !(var_i1); + var_i2 = var_l5; + var_i3 = 6u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i2 = var_l5; + var_i3 = 5u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = var_l1; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 123u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l15 = var_i0; + var_i0 = 22u; + } else { + var_i0 = var_l7; + if (var_i0) { + var_i0 = 59u; + var_i1 = var_l3; + var_i2 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = instance->w2c_g39; + var_i2 &= var_i3; + var_i3 = instance->w2c_g38; + var_i3 = !(var_i3); + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 29u; + } + } + var_l3 = var_i0; + } + var_i0 = 24u; + var_i1 = var_l3; + var_i2 = var_l14; + var_i2 = !(var_i2); + var_i3 = var_l3; + var_i4 = 58u; + var_i3 = var_i3 == var_i4; + var_i2 &= var_i3; + var_i3 = var_l2; + var_i3 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3)); + var_i4 = 16777215u; + var_i3 &= var_i4; + var_l0 = var_i3; + var_i4 = 7233902u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l0; + var_i5 = 6712937u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i4 = instance->w2c_g4; + var_i5 = var_l2; + var_i4 -= var_i5; + var_i5 = 3u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = 0u; + var_l5 = var_i0; + var_i0 = 0u; + var_l14 = var_i0; + var_i0 = 0u; + var_l0 = var_i0; + var_i0 = 0u; + instance->w2c_g39 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 3728u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 40u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_j0 = var_l19; + var_j1 = 1ull; + var_i2 = var_l7; + var_i3 = 1u; + var_i2 += var_i3; + var_l7 = var_i2; + var_j2 = (u64)(var_i2); + var_j1 <<= (var_j2 & 63); + var_j0 |= var_j1; + var_j1 = var_l19; + var_i2 = var_l12; + var_j0 = var_i2 ? var_j0 : var_j1; + var_l19 = var_j0; + var_i0 = 0u; + var_l12 = var_i0; + var_i0 = 0u; + var_l9 = var_i0; + var_i0 = instance->w2c_g36; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g36 = var_i0; + var_i0 = instance->w2c_g41; + if (var_i0) { + w2c_highlights_f38(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + instance->w2c_g41 = var_i0; + var_i0 = 1u; + instance->w2c_g39 = var_i0; + } + var_i0 = var_l1; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l7; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_j0 = var_l19; + var_i1 = var_l7; + var_j1 = (u64)(var_i1); + var_j0 >>= (var_j1 & 63); + var_j1 = 1ull; + var_j0 &= var_j1; + var_i0 = (u32)(var_j0); + var_l8 = var_i0; + var_j0 = var_l19; + var_j1 = 18446744073709551614ull; + var_i2 = var_l7; + var_j2 = (u64)(var_i2); + var_j1 = I64_ROTL(var_j1, var_j2); + var_j0 &= var_j1; + var_l19 = var_j0; + var_i0 = var_l7; + var_i1 = 1u; + var_i0 -= var_i1; + var_l7 = var_i0; + } + var_i0 = var_l1; + var_i1 = 40u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g39 = var_i0; + var_i0 = var_l1; + var_i1 = 41u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + w2c_highlights_f39(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g36; + if (var_i0) { + var_i0 = instance->w2c_g36; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g36 = var_i0; + } + } else { + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 91u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l1; + var_i2 = 123u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g38; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g38 = var_i0; + } else { + var_i0 = instance->w2c_g38; + if (var_i0) { + var_i0 = instance->w2c_g38; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g38 = var_i0; + } + } + } + } + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l0 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 61u; + var_i0 = var_i0 == var_i1; + var_l4 = var_i0; + var_i1 = var_l6; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_l0 = var_i1; + var_i0 &= var_i1; + var_i1 = var_l0; + var_i2 = var_l1; + var_i3 = 45u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l8; + var_i2 = var_l4; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + var_i0 = 0u; + var_l0 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l6; + var_i1 = 46u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 2u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 60u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l0 = var_i0; + goto var_L3; + } + var_i0 = var_l6; + var_i1 = 42u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i2 = 63u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l6; + var_i2 = 46u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l0 = var_i0; + goto var_L3; + } + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_l0 = var_i0; + var_i0 = 0u; + instance->w2c_g39 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i1 = 58u; + var_i0 = var_i0 == var_i1; + var_l0 = var_i0; + var_i1 = var_l1; + var_i2 = 44u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = var_l0; + if (var_i0) { + var_i0 = var_l11; + if (var_i0) { + var_i0 = 1u; + var_l10 = var_i0; + var_i0 = 0u; + var_l11 = var_i0; + } else { + var_i0 = var_l15; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 1u; + var_i1 = var_l5; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f73(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 40u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l5 = var_i0; + } + } + } + var_i0 = 0u; + var_l15 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 35u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_l0 = var_i0; + var_i0 = var_l1; + var_i1 = 44u; + var_i0 = var_i0 == var_i1; + instance->w2c_g39 = var_i0; + var_i0 = w2c_highlights_f37(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = instance->w2c_g38; + var_i1 = !(var_i1); + var_i0 &= var_i1; + var_i1 = var_l1; + var_i2 = 59u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + w2c_highlights_f39(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + goto var_L3; + } + var_i0 = var_l16; + var_i1 = var_l8; + var_i2 = var_l6; + var_i3 = 124u; + var_i2 = var_i2 != var_i3; + var_i3 = var_l6; + var_i4 = 61u; + var_i3 = var_i3 != var_i4; + var_i2 &= var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + var_i1 = var_l1; + var_i2 = 124u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 32u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l16; + var_i0 = !(var_i0); + var_l16 = var_i0; + var_i0 = 0u; + var_l8 = var_i0; + var_i0 = 0u; + var_l0 = var_i0; + goto var_L3; + } + var_i0 = var_l1; + var_i0 = w2c_highlights_f244(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_L61: + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l13 = var_i0; + var_i1 = 45u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l13; + var_i2 = 61u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g4; + var_i2 = 1u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f83(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i1; + var_i2 = 62u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l13; + var_i2 = 47u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l3; + var_i3 = 47u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = 3u; + var_i1 = 2u; + var_i2 = instance->w2c_g4; + var_i3 = 2u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i2; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = 2u; + var_i2 = 2u; + var_i3 = 1u; + var_i4 = var_l13; + var_i5 = 63u; + var_i4 = var_i4 != var_i5; + var_i5 = var_l13; + var_i6 = 126u; + var_i5 = var_i5 != var_i6; + var_i4 &= var_i5; + var_i5 = var_l3; + var_i6 = 61u; + var_i5 = var_i5 == var_i6; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i3 = var_l13; + var_i4 = 42u; + var_i3 = var_i3 == var_i4; + var_l6 = var_i3; + var_i4 = var_l3; + var_i5 = 42u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i4 = var_l13; + var_i5 = 43u; + var_i4 = var_i4 == var_i5; + var_l4 = var_i4; + var_i5 = var_l3; + var_i6 = 43u; + var_i5 = var_i5 == var_i6; + var_i4 &= var_i5; + var_i5 = var_l3; + var_i6 = 124u; + var_i5 = var_i5 == var_i6; + var_l0 = var_i5; + var_i6 = var_l13; + var_i7 = 124u; + var_i6 = var_i6 == var_i7; + var_i5 &= var_i6; + var_i4 |= var_i5; + var_i3 |= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l6; + var_i3 = var_l13; + var_i4 = 45u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l4; + var_i3 |= var_i4; + var_i2 |= var_i3; + var_i3 = var_l0; + var_i4 = var_l3; + var_i5 = 37u; + var_i4 = var_i4 == var_i5; + var_i3 |= var_i4; + var_i2 &= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = var_l13; + var_i1 = 60u; + var_i0 = var_i0 == var_i1; + var_i1 = var_l3; + var_i2 = 60u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 3u; + var_i1 = 2u; + var_i2 = var_l1; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l0 = var_i0; + var_i0 = var_l1; + var_i1 = 124u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 4u; + var_i1 = 3u; + var_i2 = instance->w2c_g4; + var_i3 = 3u; + var_i2 += var_i3; + var_i2 = w2c_highlights_f83(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 61u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = var_l0; + } + var_l0 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i1 = 3u; + var_i2 = 2u; + var_i3 = var_l1; + var_i4 = 61u; + var_i3 = var_i3 == var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l0; + var_i3 = var_l13; + var_i4 = 62u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l3; + var_i5 = 62u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 < var_i1; + var_i1 = instance->w2c_g4; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f244(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 &= var_i1; + if (var_i0) {goto var_L61;} + } + var_i0 = 25u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g4; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + var_i1 = var_l2; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = 0u; + var_l0 = var_i0; + goto var_L3; + var_B4:; + var_i0 = var_l17; + if (var_i0) { + var_i0 = 13832u; + instance->w2c_g32 = var_i0; + var_i0 = 13832u; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13836u; + var_i1 = var_l10; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13840u; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13844u; + var_i1 = var_l14; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13848u; + var_i1 = var_l15; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13852u; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13856u; + var_i1 = var_l16; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13864u; + var_j1 = var_l19; + i64_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_j1); + var_i0 = 13872u; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13876u; + var_i1 = var_l0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13880u; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 13884u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 0u; + instance->w2c_g24 = var_i0; + } + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f406(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = 0u; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g3; + instance->w2c_g4 = var_i0; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f407(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i1 = 35u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p1; + w2c_highlights_f152(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 2u; + var_i1 = var_p1; + w2c_highlights_f192(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 72u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = var_p1; + w2c_highlights_f192(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 74u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p1; + w2c_highlights_f194(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 73u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 7u; + var_i1 = var_p1; + w2c_highlights_f192(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f408(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0; + v128 var_l5 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7; + var_i0 = instance->w2c_g30; + if (var_i0) { + var_i0 = instance->w2c_g30; + var_p0 = var_i0; + var_i1 = 9u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 9u; + var_i0 = w2c_highlights_f120(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B1; + } + var_i0 = var_p0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g28; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g26; + var_i2 = instance->w2c_g27; + var_i0 = w2c_highlights_f100(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = instance->w2c_g27; + var_i0 = w2c_highlights_f101(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = !(var_i0); + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g2; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = 0u; + instance->w2c_g30 = var_i0; + var_i0 = 0u; + instance->w2c_g25 = var_i0; + var_i0 = 0u; + } + goto var_B1; + } + var_i0 = var_p0; + var_i1 = 11u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g27; + var_i1 = 15u; + var_i0 &= var_i1; + var_i1 = instance->w2c_g27; + var_i2 = 4u; + var_i1 >>= (var_i2 & 31); + var_i2 = instance->w2c_g28; + var_i3 = instance->w2c_g26; + var_i0 = w2c_highlights_f395(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i1 = 3u; + var_i0 &= var_i1; + var_i1 = var_p0; + var_i2 = 8u; + var_i1 >>= (var_i2 & 31); + var_i0 = w2c_highlights_f119(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_B1; + } + var_i0 = var_p0; + var_i1 = 4294967294u; + var_i0 &= var_i1; + var_i1 = 12u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g3; + var_i1 = instance->w2c_g26; + var_i1 = !(var_i1); + if (var_i1) { + var_i1 = instance->w2c_g4; + var_i1 = w2c_highlights_f122(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g3 = var_i1; + } + var_i1 = 0u; + instance->w2c_g44 = var_i1; + var_i1 = var_p0; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_l2 = var_i1; + var_i2 = 12u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f120(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i1; + instance->w2c_g3 = var_i0; + var_i0 = instance->w2c_g44; + var_p0 = var_i0; + var_i0 = 0u; + instance->w2c_g44 = var_i0; + var_i0 = instance->w2c_g4; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 123u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g4; + var_i2 = instance->w2c_g3; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + var_i1 = var_p0; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_l2; + w2c_highlights_f125(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + } else { + var_i0 = var_l3; + } + goto var_B1; + } + var_i0 = instance->w2c_g3; + var_l2 = var_i0; + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + var_i0 = instance->w2c_g30; + var_l1 = var_i0; + var_i1 = 6u; + var_i0 -= var_i1; + var_i1 = 2u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g26; + var_p0 = var_i0; + var_i0 = 3u; + instance->w2c_g47 = var_i0; + var_i0 = 1u; + instance->w2c_g61 = var_i0; + var_i0 = 2u; + var_i1 = 1u; + var_i2 = var_l1; + var_i3 = 6u; + var_i2 = var_i2 == var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l2 = var_i0; + instance->w2c_g64 = var_i0; + var_i0 = 0u; + instance->w2c_g65 = var_i0; + var_i0 = 0u; + w2c_highlights_f190(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = instance->w2c_g65; + var_i1 = !(var_i1); + if (var_i1) {goto var_B10;} + var_i0 = instance->w2c_g4; + var_l3 = var_i0; + var_i1 = var_l2; + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = 40u; + var_i1 = 32u; + var_i2 = var_l1; + var_i3 = 7u; + var_i2 = var_i2 <= var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_i1 = var_l3; + var_i2 = var_l2; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + instance->w2c_g30 = var_i0; + w2c_highlights_f230(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_l1; + var_i2 = 7u; + var_i1 = var_i1 != var_i2; + w2c_highlights_f124(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + goto var_B10; + } + var_i0 = 0u; + goto var_B10; + } + var_i0 = var_l1; + var_i1 = 5u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + instance->w2c_g68 = var_i0; + var_i0 = w2c_highlights_f155(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f171(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_p0; + instance->w2c_g68 = var_i0; + } else { + var_i0 = var_l1; + var_i1 = var_p0; + var_i2 = var_l2; + w2c_highlights_f231(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = instance->w2c_g68; + var_p0 = var_i0; + var_i0 = 0u; + instance->w2c_g68 = var_i0; + var_i0 = 1u; + var_i1 = var_p0; + var_i2 = 1u; + var_i1 = var_i1 == var_i2; + if (var_i1) {goto var_B10;} + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + instance->w2c_g30 = var_i0; + w2c_highlights_f230(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + goto var_B10; + } + var_i0 = var_l1; + var_i1 = 2u; + var_i0 = var_i0 <= var_i1; + var_i1 = var_l1; + var_i2 = 14u; + var_i1 = var_i1 >= var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_L16: + var_i0 = var_p0; + var_i1 = 60u; + var_i0 = w2c_highlights_f79(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = var_p0; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B17;} + var_i0 = var_p0; + var_i1 = var_l1; + var_i0 = w2c_highlights_f104(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 1u; + var_l3 = var_i0; + var_i0 = var_p0; + } else { + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L16; + } + var_l2 = var_i0; + var_B17:; + } else { + var_L19: + var_i0 = instance->w2c_g3; + var_i1 = var_p0; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i0; + var_i1 = var_p0; + var_i0 -= var_i1; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 2960685u; + var_i1 ^= var_i2; + var_i2 = 8u; + var_i1 <<= (var_i2 & 31); + var_i1 = !(var_i1); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + var_l3 = var_i0; + var_i0 = var_p0; + } else { + var_i0 = var_l4; + var_i0 = w2c_highlights_f205(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + goto var_L19; + } + } else { + var_i0 = var_l2; + } + var_l2 = var_i0; + } + var_i0 = var_l1; + var_i1 = instance->w2c_g4; + var_i2 = var_l2; + w2c_highlights_f231(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + var_i1 = var_l3; + var_i1 = !(var_i1); + if (var_i1) {goto var_B10;} + var_i0 = var_l2; + instance->w2c_g4 = var_i0; + var_i0 = 0u; + instance->w2c_g30 = var_i0; + w2c_highlights_f230(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + var_i1 = 3u; + var_i0 -= var_i1; + var_i1 = 1u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f204(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f205(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i0 = 40u; + var_i1 = instance->w2c_g4; + var_i2 = var_p0; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + instance->w2c_g4 = var_i0; + } + var_i0 = 0u; + var_B10:; + var_B1:; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 59u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + var_i1 = instance->w2c_g25; + var_i2 = 10u; + var_i1 = var_i1 != var_i2; + if (var_i1) {goto var_B24;} + var_i0 = instance->w2c_g26; + var_i1 = instance->w2c_g27; + var_p0 = var_i1; + var_i2 = 1u; + var_i1 &= var_i2; + var_i2 = var_p0; + var_i3 = 1u; + var_i2 >>= (var_i3 & 31); + var_i3 = 1u; + var_i2 &= var_i3; + var_i3 = var_p0; + var_i4 = 2u; + var_i3 >>= (var_i4 & 31); + var_i4 = 1u; + var_i3 &= var_i4; + var_l1 = var_i3; + var_i4 = var_l1; + var_i5 = 0u; + var_i6 = instance->w2c_g4; + var_i7 = instance->w2c_g28; + var_i0 = w2c_highlights_f293(instance, var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = 2u; + var_i0 >>= (var_i1 & 31); + instance->w2c_g28 = var_i0; + var_i0 = var_l1; + var_i1 = 3u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g25 = var_i0; + var_i0 = 0u; + goto var_B24; + } + var_i0 = 1u; + var_i1 = var_p0; + var_i2 = 2u; + var_i1 >>= (var_i2 & 31); + var_i2 = 1u; + var_i1 &= var_i2; + var_i2 = var_l1; + var_i3 = 2u; + var_i2 = var_i2 == var_i3; + var_i1 |= var_i2; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g3; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) {goto var_B24;} + var_i0 = 0u; + instance->w2c_g25 = var_i0; + var_i0 = 0u; + var_B24:; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 56u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g80; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + var_p0 = var_i0; + var_i0 = instance->w2c_g25; + var_i1 = 14u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + var_i1 = instance->w2c_g4; + var_i2 = 12416u; + var_i3 = instance->w2c_g26; + var_i1 = w2c_highlights_f361(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i1) { + var_i1 = 0u; + instance->w2c_g25 = var_i1; + var_i1 = 0u; + goto var_B29; + } + var_i1 = 1u; + var_B29:; + if (var_i1) {goto var_B27;} + var_i0 = 1u; + var_p0 = var_i0; + } + var_i0 = 0u; + var_i1 = instance->w2c_g25; + var_i2 = 15u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = 1u; + var_i2 = instance->w2c_g4; + var_i2 = w2c_highlights_f362(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = !(var_i2); + if (var_i2) {var_i0 = var_i1; goto var_B27;} + var_i1 = 0u; + instance->w2c_g25 = var_i1; + var_i1 = 1u; + } else { + var_i1 = var_p0; + } + var_i1 = !(var_i1); + if (var_i1) {goto var_B27;} + var_i0 = 1u; + w2c_highlights_f363(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g4; + var_i0 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 15935u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g3; + var_i2 = instance->w2c_g4; + var_i3 = 1u; + var_i2 += var_i3; + var_i1 = var_i1 > var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_p0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = 2u; + var_i0 += var_i1; + instance->w2c_g4 = var_i0; + var_i0 = 27u; + var_i1 = var_p0; + var_i2 = instance->w2c_g4; + w2c_highlights_f21(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2u; + instance->w2c_g80 = var_i0; + var_i0 = 0u; + goto var_B27; + } + var_i0 = 1u; + var_B27:; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 49u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f225(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 79u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g25; + var_i2 = 11u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f199(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g25; + var_i2 = 12u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g26; + if (var_i0) { + var_i0 = instance->w2c_g26; + var_i0 = w2c_highlights_f233(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g26 = var_i0; + var_i0 = 1u; + var_i1 = instance->w2c_g26; + if (var_i1) {goto var_B36;} + } + var_i0 = instance->w2c_g27; + if (var_i0) { + var_i0 = 1u; + var_i1 = w2c_highlights_f234(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = !(var_i1); + if (var_i1) {goto var_B36;} + var_i0 = 0u; + instance->w2c_g27 = var_i0; + } + var_i0 = instance->w2c_g4; + var_i0 = w2c_highlights_f236(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 0u; + instance->w2c_g25 = var_i0; + var_i0 = 0u; + goto var_B36; + } + var_i0 = 1u; + var_B36:; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 71u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g25; + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g26; + var_i1 = 39u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g29; + var_i1 = instance->w2c_g4; + var_i0 = w2c_highlights_f390(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i0 = 1u; + var_i1 = instance->w2c_g29; + var_i2 = instance->w2c_g4; + var_i3 = instance->w2c_g27; + var_i0 = w2c_highlights_f387(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_p0 = var_i0; + var_i0 = instance->w2c_g4; + var_i1 = instance->w2c_g3; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 1u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + instance->w2c_g27 = var_i0; + var_i0 = 1u; + goto var_B41; + } + var_i0 = 0u; + instance->w2c_g25 = var_i0; + var_i0 = 0u; + var_B41:; + goto var_Bfunc; + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f409(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_memory.pages; + var_i1 = 16u; + var_i0 <<= (var_i1 & 31); + var_l1 = var_i0; + var_i1 = var_p0; + var_i2 = 16u; + var_i1 += var_i2; + var_p0 = var_i1; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_l1; + var_i0 -= var_i1; + var_i1 = 16u; + var_i0 >>= (var_i1 & 31); + var_i1 = 1u; + var_i0 += var_i1; + var_i0 = wasm_rt_grow_memory(&instance->w2c_memory, var_i0); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = 4294967295u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + UNREACHABLE; + } + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f410(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + var_i1 = 64u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 3u; + var_i0 >>= (var_i1 & 31); + goto var_Bfunc; + } + var_i0 = 32u; + var_i1 = var_p0; + var_i2 = 1u; + var_i1 -= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i0 -= var_i1; + var_l1 = var_i0; + var_i1 = 17u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = 31u; + goto var_Bfunc; + } + var_i0 = var_l1; + var_i1 = 1u; + var_i0 <<= (var_i1 & 31); + var_i1 = 8u; + var_i0 -= var_i1; + var_i1 = var_p0; + var_i2 = var_l1; + var_i3 = 2u; + var_i2 -= var_i3; + var_i1 >>= (var_i2 & 31); + var_i0 += var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f411(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = 16u; + var_i1 = var_p0; + var_i2 = var_p0; + var_i3 = 16u; + var_i2 = var_i2 < var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_p0 = var_i0; + var_i1 = 64u; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B0;} + var_i0 = 32u; + var_i1 = var_p0; + var_i2 = 1u; + var_i1 -= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i0 -= var_i1; + var_l1 = var_i0; + var_i1 = 17u; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B0;} + var_i0 = var_p0; + var_i1 = 1u; + var_i2 = var_l1; + var_i3 = 2u; + var_i2 -= var_i3; + var_i1 <<= (var_i2 & 31); + var_l1 = var_i1; + var_i2 = 1u; + var_i1 -= var_i2; + var_i0 += var_i1; + var_i1 = 0u; + var_i2 = var_l1; + var_i1 -= var_i2; + var_i0 &= var_i1; + goto var_Bfunc; + var_B0:; + var_i0 = var_p0; + var_i1 = 7u; + var_i0 += var_i1; + var_i1 = 4294967288u; + var_i0 &= var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f412(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = var_p0; + var_i1 = 8u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f411(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i0 = w2c_highlights_f410(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i1 = 2u; + var_i0 <<= (var_i1 & 31); + var_i1 = 62176u; + var_i0 += var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_p0 = var_i0; + var_i0 = var_l3; + var_i1 = 31u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_p0; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 2u; + var_i0 <<= (var_i1 & 31); + var_i1 = 62176u; + var_i0 += var_i1; + var_i1 = var_p0; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + goto var_B0; + } + } else { + var_L3: + var_i0 = var_p0; + if (var_i0) { + var_i0 = var_p0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 4294967294u; + var_i0 &= var_i1; + var_i1 = var_l1; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + if (var_i0) { + var_i0 = var_l2; + var_i1 = var_p0; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + } else { + var_i0 = 62300u; + var_i1 = var_p0; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } + goto var_B0; + } else { + var_i0 = var_p0; + var_l2 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_p0 = var_i0; + goto var_L3; + } + UNREACHABLE; + } + } + var_i0 = instance->w2c_g84; + var_i1 = instance->w2c_g83; + var_i2 = var_l1; + var_i1 += var_i2; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l1; + var_i1 = 327679u; + var_i0 += var_i1; + var_i1 = 4294901760u; + var_i0 &= var_i1; + var_p0 = var_i0; + var_i1 = instance->w2c_g88; + var_i2 = instance->w2c_g84; + var_i3 = instance->w2c_g88; + var_i4 = instance->w2c_g84; + var_i3 = var_i3 > var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + var_i1 = 4294967232u; + var_i0 -= var_i1; + w2c_highlights_f409(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g88; + var_i1 = instance->w2c_g87; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g87; + var_i1 = var_p0; + var_i0 += var_i1; + var_l2 = var_i0; + var_i1 = instance->w2c_g87; + var_i2 = instance->w2c_g88; + var_i3 = instance->w2c_g87; + var_i2 -= var_i3; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l2; + instance->w2c_g87 = var_i0; + var_i0 = instance->w2c_g88; + var_i1 = var_p0; + var_i0 += var_i1; + instance->w2c_g88 = var_i0; + } + var_i0 = instance->w2c_g84; + var_i1 = var_p0; + var_i0 += var_i1; + instance->w2c_g84 = var_i0; + } + var_i0 = instance->w2c_g83; + var_p0 = var_i0; + var_i1 = var_l1; + var_i0 += var_i1; + instance->w2c_g83 = var_i0; + var_i0 = var_p0; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_p0; + var_i1 = 0u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = instance->w2c_g85; + var_i1 = var_l1; + var_i0 += var_i1; + instance->w2c_g85 = var_i0; + var_i0 = var_p0; + var_i1 = 8u; + var_i0 += var_i1; + goto var_Bfunc; + var_B0:; + var_i0 = var_p0; + var_i1 = var_l1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g86; + var_i1 = var_l1; + var_i0 -= var_i1; + instance->w2c_g86 = var_i0; + var_i0 = instance->w2c_g85; + var_i1 = var_l1; + var_i0 += var_i1; + instance->w2c_g85 = var_i0; + var_i0 = var_p0; + var_i1 = 8u; + var_i0 += var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f413(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i0 = !(var_i0); + if (var_i0) { + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 8u; + var_i0 -= var_i1; + var_p0 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 4294967294u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = w2c_highlights_f410(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i0; + var_i0 = var_p0; + var_i1 = var_l1; + var_i2 = 1u; + var_i1 |= var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_p0; + var_i1 = var_l2; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i2 = 62176u; + var_i1 += var_i2; + var_l2 = var_i1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = var_l2; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g85; + var_i1 = var_l1; + var_i0 -= var_i1; + instance->w2c_g85 = var_i0; + var_i0 = instance->w2c_g86; + var_i1 = var_l1; + var_i0 += var_i1; + instance->w2c_g86 = var_i0; + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f414(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g83; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = 65536u; + instance->w2c_g83 = var_i0; + var_i0 = 65536u; + instance->w2c_g84 = var_i0; + var_i0 = 0u; + instance->w2c_g85 = var_i0; + var_i0 = 0u; + instance->w2c_g86 = var_i0; + var_i0 = 62176u; + var_i1 = 0u; + var_i2 = 128u; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f415(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + v128 var_l3 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + v128 var_o0, var_o1; + var_i0 = var_p2; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_L1: + var_i0 = var_p0; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p1; + var_o1 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_o0 = simde_wasm_i8x16_ne(var_o0, var_o1); + var_l3 = var_o0; + var_i0 = simde_wasm_v128_any_true(var_o0); + if (var_i0) { + var_o0 = var_l3; + var_i0 = v128_i8x16_bitmask(var_o0); + var_i0 = I32_CTZ(var_i0); + var_i1 = var_p2; + var_i0 = var_i0 >= var_i1; + goto var_Bfunc; + } + var_i0 = var_p2; + var_i1 = 16u; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = 1u; + } else { + var_i0 = var_p0; + var_i1 = 16u; + var_i0 += var_i1; + var_p0 = var_i0; + var_i0 = var_p1; + var_i1 = 16u; + var_i0 += var_i1; + var_p1 = var_i0; + var_i0 = var_p2; + var_i1 = 16u; + var_i0 -= var_i1; + var_p2 = var_i0; + goto var_L1; + } + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f416(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0, var_l3 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i0 = !(var_i0); + var_i1 = var_p0; + var_i2 = 4294967295u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g89; + var_i1 = var_p0; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l1 = var_i0; + var_i1 = var_l1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i2 = 1u; + var_i1 -= var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = var_l1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g93; + var_i1 = instance->w2c_g94; + var_i2 = var_l1; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 12u); + var_i1 &= var_i2; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_l2 = var_i0; + var_L2: + var_i0 = var_l2; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_l1; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = var_l1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } else { + var_i0 = var_l2; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l2 = var_i0; + goto var_L2; + } + var_i0 = instance->w2c_g95; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g95 = var_i0; + var_i0 = instance->w2c_g96; + var_i1 = var_l1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 8u); + var_i0 -= var_i1; + instance->w2c_g96 = var_i0; + var_i0 = var_l1; + w2c_highlights_f413(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l3; + var_i1 = instance->w2c_g92; + var_i2 = 1u; + var_i1 <<= (var_i2 & 31); + var_i2 = 1u; + var_i1 |= var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_p0; + instance->w2c_g92 = var_i0; + var_Bfunc:; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f417(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 37u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 38u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = var_p0; + var_i2 = 36u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f418(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = 255u; + var_i0 &= var_i1; + var_i0 = w2c_highlights_f417(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p0; + var_i2 = 4294967040u; + var_i1 &= var_i2; + var_i2 = 256u; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 36544u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 327u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 45136u; + goto var_Bfunc; + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f419(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = instance->w2c_g97; + var_i0 = w2c_highlights_f417(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = 36544u; + goto var_Bfunc; + } + var_i0 = instance->w2c_g97; + var_i1 = 71u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 45136u; + goto var_Bfunc; + } + var_i0 = instance->w2c_g97; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g97; + var_i2 = 49u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = instance->w2c_g71; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g73; + var_i0 = w2c_highlights_f418(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l0 = var_i0; + if (var_i0) { + var_i0 = var_l0; + goto var_Bfunc; + } + var_i0 = 45040u; + var_l0 = var_i0; + var_L4: + var_i0 = var_l0; + var_i1 = 45136u; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B5;} + var_i0 = var_l0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = !(var_i0); + if (var_i0) {goto var_B5;} + var_i0 = var_l0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_i0 = w2c_highlights_f418(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + if (var_i0) { + var_i0 = var_l1; + goto var_Bfunc; + } else { + var_i0 = var_l0; + var_i1 = 12u; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L4; + } + UNREACHABLE; + var_B5:; + } + var_i0 = 38880u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f420(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = instance->w2c_g99; + var_i1 = var_p0; + var_i2 = instance->w2c_g100; + var_i3 = instance->w2c_g101; + var_i2 -= var_i3; + var_i1 += var_i2; + var_i2 = var_p0; + var_i3 = var_p0; + var_i4 = instance->w2c_g102; + var_i3 = var_i3 >= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = 5u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f421(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0, var_l2 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g100; + var_i1 = instance->w2c_g101; + var_i2 = var_p0; + var_i1 += var_i2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g101; + var_i1 = var_p0; + var_i0 += var_i1; + var_i1 = 4294967232u; + var_i0 -= var_i1; + var_l1 = var_i0; + var_i1 = instance->w2c_g100; + var_i2 = 1u; + var_i1 <<= (var_i2 & 31); + var_p0 = var_i1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l1; + var_p0 = var_i0; + } + var_i0 = var_p0; + var_i1 = 5u; + var_i0 <<= (var_i1 & 31); + var_i0 = w2c_highlights_f412(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l1 = var_i0; + var_i1 = instance->w2c_g99; + var_i2 = instance->w2c_g102; + var_i3 = 5u; + var_i2 <<= (var_i3 & 31); + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l1; + var_i1 = var_p0; + var_i2 = instance->w2c_g101; + var_i3 = instance->w2c_g102; + var_i2 -= var_i3; + var_l2 = var_i2; + var_i1 -= var_i2; + var_i2 = 5u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_i1 = instance->w2c_g99; + var_i2 = instance->w2c_g100; + var_i3 = var_l2; + var_i2 -= var_i3; + var_i3 = 5u; + var_i2 <<= (var_i3 & 31); + var_i1 += var_i2; + var_i2 = var_l2; + var_i3 = 5u; + var_i2 <<= (var_i3 & 31); + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g99; + w2c_highlights_f413(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l1; + instance->w2c_g99 = var_i0; + var_i0 = var_p0; + instance->w2c_g100 = var_i0; + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f422(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p2; + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g105; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g105 = var_i0; + var_i0 = instance->w2c_g106; + var_i1 = var_p1; + var_i0 += var_i1; + instance->w2c_g106 = var_i0; + var_i0 = instance->w2c_g105; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g103; + w2c_highlights_f413(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + instance->w2c_g103 = var_i0; + var_i0 = 0u; + instance->w2c_g106 = var_i0; + } + } else { + var_i0 = var_p0; + w2c_highlights_f413(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f423(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + v128 var_o0, var_o1, var_o3, var_o4; + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 += var_i1; + var_p1 = var_i0; + var_L0: + var_i0 = var_p1; + var_i1 = var_p0; + var_i0 -= var_i1; + var_i1 = 16u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_p0; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l4 = var_o0; + var_i1 = 4294967280u; + var_o1 = simde_wasm_i8x16_splat(var_i1); + var_o0 = simde_wasm_u8x16_ge(var_o0, var_o1); + var_i0 = v128_i8x16_bitmask(var_o0); + var_i0 = I32_POPCNT(var_i0); + var_i1 = var_l2; + var_i2 = 16u; + var_o3 = var_l4; + var_i4 = 4294967232u; + var_o4 = simde_wasm_i8x16_splat(var_i4); + var_o3 = simde_wasm_v128_and(var_o3, var_o4); + var_i4 = 4294967168u; + var_o4 = simde_wasm_i8x16_splat(var_i4); + var_o3 = simde_wasm_i8x16_eq(var_o3, var_o4); + var_i3 = v128_i8x16_bitmask(var_o3); + var_i3 = I32_POPCNT(var_i3); + var_i2 -= var_i3; + var_i1 += var_i2; + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = var_p0; + var_i1 = 16u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L0; + } + var_L2: + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i1 = 240u; + var_i0 = var_i0 >= var_i1; + var_i1 = var_l2; + var_i2 = var_l3; + var_i3 = 192u; + var_i2 &= var_i3; + var_i3 = 128u; + var_i2 = var_i2 != var_i3; + var_i1 += var_i2; + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = var_p0; + var_i1 = 1u; + var_i0 += var_i1; + var_p0 = var_i0; + goto var_L2; + } + var_i0 = var_l2; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f424(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0; + v128 var_l4 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = 1u; + w2c_highlights_f421(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g99; + var_i1 = instance->w2c_g101; + var_i2 = 5u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_l3 = var_i0; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l3; + var_i1 = var_p1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = var_l3; + var_i1 = var_p0; + var_i2 = var_p1; + var_i1 = w2c_highlights_f423(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u, var_i1); + var_i0 = var_l3; + var_i1 = 0u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u, var_i1); + var_i0 = var_l3; + var_i1 = 0u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u, var_i1); + var_i0 = var_l3; + var_i1 = 4294967295u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u, var_i1); + var_i0 = var_l3; + var_i1 = var_p2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u, var_i1); + var_i0 = var_l3; + var_i1 = 0u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u, var_i1); + var_i0 = instance->w2c_g101; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g101 = var_i0; + var_i0 = instance->w2c_g101; + instance->w2c_g102 = var_i0; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_liveStage_0(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + w2c_highlights_f414(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + var_i0 = w2c_highlights_f412(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_liveInitDoc_0(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0, var_l4 = 0; + v128 var_l5 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6; + w2c_highlights_f414(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p2; + instance->w2c_g97 = var_i0; + var_i0 = 1u; + var_i1 = 3u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_p0; + var_i1 = 8u; + var_i0 -= var_i1; + var_l3 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 4294967294u; + var_i0 &= var_i1; + var_i1 = var_p1; + var_i2 = 8u; + var_i1 += var_i2; + var_i1 = w2c_highlights_f411(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i1; + var_i0 -= var_i1; + var_p2 = var_i0; + var_i1 = 16u; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_B0;} + var_i0 = var_p2; + var_i0 = w2c_highlights_f411(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_p2; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B0;} + var_i0 = var_l3; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l3; + var_i1 = var_l4; + var_i0 += var_i1; + var_l3 = var_i0; + var_i1 = var_p2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l3; + var_i1 = 8u; + var_i0 += var_i1; + w2c_highlights_f413(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_B0:; + var_i0 = 256u; + instance->w2c_g90 = var_i0; + var_i0 = 1024u; + var_i0 = w2c_highlights_f412(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g89 = var_i0; + var_i0 = instance->w2c_g89; + var_i1 = 0u; + var_i2 = 1024u; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 1u; + instance->w2c_g91 = var_i0; + var_i0 = 0u; + instance->w2c_g92 = var_i0; + var_i0 = 255u; + instance->w2c_g94 = var_i0; + var_i0 = 1024u; + var_i0 = w2c_highlights_f412(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g93 = var_i0; + var_i0 = instance->w2c_g93; + var_i1 = 0u; + var_i2 = 1024u; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 0u; + instance->w2c_g95 = var_i0; + var_i0 = 0u; + instance->w2c_g96 = var_i0; + var_i0 = 0u; + instance->w2c_g100 = var_i0; + var_i0 = 0u; + instance->w2c_g101 = var_i0; + var_i0 = 0u; + instance->w2c_g102 = var_i0; + var_i0 = 8192u; + var_i0 = w2c_highlights_f412(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g99 = var_i0; + var_i0 = 256u; + instance->w2c_g100 = var_i0; + var_i0 = var_p1; + var_i1 = var_p0; + var_p2 = var_i1; + var_i0 += var_i1; + var_l3 = var_i0; + var_L1: + var_i0 = var_l3; + var_i1 = var_p2; + var_i2 = var_l3; + var_i3 = 10u; + var_i4 = 0u; + var_i5 = 1u; + var_i1 = w2c_highlights_f5(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p1 = var_i1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_p1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 13u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_p2; + var_i1 = var_p1; + var_i2 = var_p2; + var_i1 -= var_i2; + var_i2 = 10u; + var_i3 = 25u; + var_i4 = var_p1; + var_i5 = 1u; + var_i4 += var_i5; + var_p2 = var_i4; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_i5 = 10u; + var_i4 = var_i4 == var_i5; + var_i5 = var_p2; + var_i6 = var_l3; + var_i5 = var_i5 < var_i6; + var_l4 = var_i5; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + w2c_highlights_f424(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p1; + var_i1 = 2u; + var_i2 = 1u; + var_i3 = var_l4; + var_i4 = var_p2; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_i5 = 10u; + var_i4 = var_i4 == var_i5; + var_i3 &= var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 += var_i1; + } else { + var_i0 = var_p2; + var_i1 = var_p1; + var_i2 = var_p2; + var_i1 -= var_i2; + var_i2 = 9u; + w2c_highlights_f424(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p1; + var_i1 = 1u; + var_i0 += var_i1; + } + var_p2 = var_i0; + goto var_L1; + } + var_i0 = var_p2; + var_i1 = var_l3; + var_i2 = var_p2; + var_i1 -= var_i2; + var_i2 = 8u; + w2c_highlights_f424(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + instance->w2c_g103 = var_i0; + var_i0 = var_l3; + instance->w2c_g104 = var_i0; + var_i0 = instance->w2c_g101; + instance->w2c_g105 = var_i0; + var_i0 = 0u; + instance->w2c_g106 = var_i0; + var_i0 = 46160u; + var_i1 = 1u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 46164u; + var_i1 = 0u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 46168u; + var_i1 = 0u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 46172u; + var_i1 = 0u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 46176u; + var_i1 = instance->w2c_g101; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 8u; + var_i0 = w2c_highlights_f412(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g116 = var_i0; + var_i0 = instance->w2c_g116; + var_i1 = 0u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g116; + var_i1 = instance->w2c_g101; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = 1u; + instance->w2c_g117 = var_i0; + var_i0 = 0u; + instance->w2c_g118 = var_i0; + var_i0 = 0u; + instance->w2c_g119 = var_i0; + var_i0 = instance->w2c_g101; + instance->w2c_g120 = var_i0; + var_i0 = 0u; + instance->w2c_g121 = var_i0; + var_i0 = 0u; + instance->w2c_g107 = var_i0; + var_i0 = 4294967295u; + instance->w2c_g98 = var_i0; + var_i0 = 0u; + instance->w2c_g123 = var_i0; + var_i0 = 1u; + instance->w2c_g122 = var_i0; + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f427(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0, var_l4 = 0, var_l5 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_L0: + var_i0 = var_p2; + var_i1 = var_l3; + var_i0 = var_i0 <= var_i1; + var_i1 = var_p1; + var_i2 = var_l4; + var_i1 = var_i1 <= var_i2; + var_i0 |= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_l4; + var_i0 += var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + var_i1 = 128u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = var_l4; + var_i1 = 1u; + var_i0 += var_i1; + } else { + var_i0 = var_l5; + var_i1 = 224u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = var_l4; + var_i1 = 2u; + var_i0 += var_i1; + } else { + var_i0 = var_l5; + var_i1 = 240u; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = var_l4; + var_i1 = 3u; + var_i0 += var_i1; + } else { + var_i0 = var_l3; + var_i1 = 2u; + var_i0 += var_i1; + var_i1 = var_p2; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = 2147483648u; + var_i0 |= var_i1; + goto var_Bfunc; + } else { + var_i0 = var_l3; + var_i1 = 2u; + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = var_l4; + var_i1 = 4u; + var_i0 += var_i1; + } + } + } + } + var_l4 = var_i0; + goto var_L0; + } + var_i0 = var_l4; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f428(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 7u; + var_i0 &= var_i1; + var_i1 = 18u; + var_i0 <<= (var_i1 & 31); + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u); + var_i2 = 63u; + var_i1 &= var_i2; + var_i2 = 12u; + var_i1 <<= (var_i2 & 31); + var_i0 |= var_i1; + var_i1 = var_p0; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 3u); + var_i2 = 63u; + var_i1 &= var_i2; + var_i2 = var_p0; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 2u); + var_i3 = 63u; + var_i2 &= var_i3; + var_i3 = 6u; + var_i2 <<= (var_i3 & 31); + var_i1 |= var_i2; + var_i0 |= var_i1; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f429(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = 12u; + var_i1 >>= (var_i2 & 31); + var_i2 = 224u; + var_i1 |= var_i2; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = 6u; + var_i1 >>= (var_i2 & 31); + var_i2 = 63u; + var_i1 &= var_i2; + var_i2 = 128u; + var_i1 |= var_i2; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 1u, var_i1); + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = 63u; + var_i1 &= var_i2; + var_i2 = 128u; + var_i1 |= var_i2; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 2u, var_i1); + FUNC_EPILOGUE; +} + +void w2c_highlights_f430(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3, u32 var_p4) { + u32 var_l5 = 0; + v128 var_l6 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = var_p2; + if (var_i0) { + var_i0 = var_p2; + var_i0 = w2c_highlights_f412(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i0; + var_i1 = var_p1; + var_i2 = var_p2; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + } + var_i0 = var_p0; + var_i0 = w2c_highlights_f420(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_p0 = var_i0; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_p0; + var_i1 = var_p2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = var_p2; + var_i1 = w2c_highlights_f423(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u, var_i1); + var_i0 = var_p0; + var_i1 = 0u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u, var_i1); + var_i0 = var_p0; + var_i1 = 0u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u, var_i1); + var_i0 = var_p0; + var_i1 = var_p4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u, var_i1); + var_i0 = var_p0; + var_i1 = var_p3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u, var_i1); + var_i0 = var_p0; + var_i1 = 0u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u, var_i1); + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f431(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3) { + u32 var_l4 = 0, var_l5 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = 46160u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l5 = var_i0; + if (var_i0) { + var_i0 = var_p0; + var_i1 = var_l5; + var_i2 = 4u; + var_i1 <<= (var_i2 & 31); + var_i2 = 46148u; + var_i1 += var_i2; + var_l4 = var_i1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i0 = var_i0 <= var_i1; + if (var_i0) { + var_i0 = var_p1; + var_i1 = var_l4; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = var_p1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + } + var_i0 = var_p3; + var_i1 = var_l4; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 12u); + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = var_p3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u, var_i1); + } + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_l5; + var_i1 = 1000u; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l4; + var_i1 = var_p1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = var_l4; + var_i1 = var_p3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u, var_i1); + var_i0 = 0u; + goto var_Bfunc; + } + } + var_i0 = var_l5; + var_i1 = 4u; + var_i0 <<= (var_i1 & 31); + var_i1 = 46164u; + var_i0 += var_i1; + var_l4 = var_i0; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l4; + var_i1 = var_p1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = var_l4; + var_i1 = var_p2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u, var_i1); + var_i0 = var_l4; + var_i1 = var_p3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u, var_i1); + var_i0 = 46160u; + var_i1 = var_l5; + var_i2 = 1u; + var_i1 += var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_f432(w2c_highlights* instance, u32 var_p0) { + u32 var_l1 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = var_p0; + var_i1 = instance->w2c_g120; + var_i0 = var_i0 <= var_i1; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g119; + var_i1 = 4u; + var_i0 <<= (var_i1 & 31); + var_i1 = 46164u; + var_i0 += var_i1; + var_l1 = var_i0; + var_i1 = var_l1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i2 = var_p0; + var_i3 = instance->w2c_g120; + var_i2 -= var_i3; + var_i1 += var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = var_l1; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u, var_i1); + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_f433(w2c_highlights* instance) { + u32 var_l0 = 0, var_l1 = 0, var_l2 = 0, var_l3 = 0, var_l4 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3; + var_i0 = instance->w2c_g116; + w2c_highlights_f413(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + instance->w2c_g116 = var_i0; + var_i0 = 0u; + instance->w2c_g122 = var_i0; + var_i0 = instance->w2c_g86; + var_i1 = instance->w2c_g85; + var_i0 = var_i0 > var_i1; + var_i1 = instance->w2c_g86; + var_i2 = 1048576u; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 65536u; + var_l0 = var_i0; + var_i0 = 65536u; + var_l4 = var_i0; + var_L1: + var_i0 = instance->w2c_g83; + var_i1 = var_l0; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 4294967294u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = var_l0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 1u; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_l0; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = var_l1; + var_i1 = var_l4; + var_i0 += var_i1; + var_l4 = var_i0; + } + var_i0 = var_l0; + var_i1 = var_l1; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L1; + } + var_i0 = instance->w2c_g103; + var_i0 = w2c_highlights_f434(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i0; + var_i0 = 0u; + var_l1 = var_i0; + var_i0 = instance->w2c_g102; + var_l2 = var_i0; + var_L4: + var_i0 = var_l1; + var_i1 = var_l2; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = instance->w2c_g100; + var_i0 = var_i0 == var_i1; + if (var_i0) {goto var_B5;} + var_i0 = instance->w2c_g102; + var_i1 = instance->w2c_g100; + var_i2 = instance->w2c_g101; + var_i1 -= var_i2; + var_i0 += var_i1; + var_l1 = var_i0; + var_i1 = instance->w2c_g100; + var_l2 = var_i1; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B5;} + } + var_i0 = instance->w2c_g99; + var_i1 = var_l1; + var_i2 = 5u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_l0 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_i1 = 8u; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i1 = var_l3; + var_i2 = var_l0; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = instance->w2c_g103; + var_i2 -= var_i3; + var_i1 += var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } else { + var_i0 = var_l0; + var_i1 = var_l0; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i1 = w2c_highlights_f434(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } + var_i0 = var_l0; + var_i1 = var_l0; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 12u); + var_i1 = w2c_highlights_f434(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u, var_i1); + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L4; + var_B5:; + var_i0 = 1u; + var_l1 = var_i0; + var_L8: + var_i0 = instance->w2c_g91; + var_i1 = var_l1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g89; + var_i1 = var_l1; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i1 = 1u; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + var_i1 = var_l0; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l2; + var_i1 = var_l0; + var_i1 = w2c_highlights_f434(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L8; + } + var_i0 = 0u; + var_l1 = var_i0; + var_L11: + var_i0 = instance->w2c_g94; + var_i1 = var_l1; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g93; + var_i1 = var_l1; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l0 = var_i0; + var_i0 = var_l2; + var_i1 = var_l0; + var_i1 = w2c_highlights_f434(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_L13: + var_i0 = var_l0; + if (var_i0) { + var_i0 = var_l0; + var_i1 = var_l0; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l0 = var_i1; + var_i1 = w2c_highlights_f434(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + goto var_L13; + } + var_i0 = var_l1; + var_i1 = 1u; + var_i0 += var_i1; + var_l1 = var_i0; + goto var_L11; + } + var_i0 = instance->w2c_g103; + if (var_i0) { + var_i0 = var_l3; + var_i1 = instance->w2c_g104; + var_i2 = instance->w2c_g103; + var_i1 -= var_i2; + var_i0 += var_i1; + instance->w2c_g104 = var_i0; + var_i0 = var_l3; + instance->w2c_g103 = var_i0; + } + var_i0 = instance->w2c_g99; + var_i0 = w2c_highlights_f434(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g99 = var_i0; + var_i0 = instance->w2c_g89; + var_i0 = w2c_highlights_f434(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g89 = var_i0; + var_i0 = instance->w2c_g93; + var_i0 = w2c_highlights_f434(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g93 = var_i0; + var_i0 = 65536u; + var_l0 = var_i0; + var_L16: + var_i0 = instance->w2c_g83; + var_i1 = var_l0; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 4294967294u; + var_i0 &= var_i1; + var_l1 = var_i0; + var_i0 = var_l0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 1u; + var_i0 &= var_i1; + var_i0 = I32_CLZ(var_i0); + var_i1 = 5u; + var_i0 >>= (var_i1 & 31); + if (var_i0) { + var_i0 = var_l0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l3 = var_i0; + var_i1 = var_l0; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = var_l0; + var_i2 = var_l1; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + } + var_i0 = var_l3; + var_i1 = 0u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + } + var_i0 = var_l0; + var_i1 = var_l1; + var_i0 += var_i1; + var_l0 = var_i0; + goto var_L16; + } + var_i0 = var_l4; + instance->w2c_g83 = var_i0; + var_i0 = 62176u; + var_i1 = 0u; + var_i2 = 128u; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 0u; + instance->w2c_g86 = var_i0; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_f434(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 8u; + var_i0 -= var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_i1 = 8u; + var_i0 += var_i1; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_f435(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2, u32 var_p3, u32 var_p4) { + u32 var_l5 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = var_p4; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = var_p1; + var_i2 = var_p0; + var_i3 = var_p2; + var_i2 += var_i3; + var_p0 = var_i2; + var_i3 = var_p1; + var_i4 = var_p2; + var_i3 += var_i4; + var_l5 = var_i3; + var_i0 = w2c_highlights_f431(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_p3; + var_i1 = var_p4; + var_i2 = 3u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_p1 = var_i0; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_p1; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = var_p4; + var_i1 = 1u; + var_i0 += var_i1; + goto var_Bfunc; + } + var_i0 = var_p1; + var_i1 = var_p2; + var_i0 += var_i1; + var_p0 = var_i0; + var_i1 = var_p3; + var_i2 = var_p4; + var_i3 = 1u; + var_i2 -= var_i3; + var_i3 = 3u; + var_i2 <<= (var_i3 & 31); + var_i1 += var_i2; + var_p1 = var_i1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_p1; + var_i1 = var_p0; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + } + var_i0 = var_p4; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_liveApplyEdits_0(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + u32 var_l2 = 0, var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, var_l8 = 0, var_l9 = 0, + var_l10 = 0, var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, var_l16 = 0, var_l17 = 0, + var_l18 = 0, var_l19 = 0, var_l20 = 0, var_l21 = 0, var_l22 = 0, var_l23 = 0, var_l24 = 0, var_l25 = 0, + var_l26 = 0, var_l27 = 0; + v128 var_l28 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4, var_i5, var_i6, var_i7, + var_i8; + var_i0 = instance->w2c_g114; + w2c_highlights_f413(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g115; + w2c_highlights_f416(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + instance->w2c_g114 = var_i0; + var_i0 = 0u; + instance->w2c_g115 = var_i0; + var_i0 = 0u; + instance->w2c_g108 = var_i0; + var_i0 = 0u; + instance->w2c_g6 = var_i0; + var_i0 = 2147483647u; + instance->w2c_g5 = var_i0; + var_i0 = 0u; + instance->w2c_g87 = var_i0; + var_i0 = 0u; + instance->w2c_g88 = var_i0; + var_i0 = var_p0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l24 = var_i0; + var_i0 = instance->w2c_g122; + var_i1 = var_p1; + var_i0 |= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g120; + var_i1 = instance->w2c_g121; + var_l2 = var_i1; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = instance->w2c_g120; + var_i3 = var_l2; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i0 = var_p1; + if (var_i0) { + var_i0 = var_p1; + var_i1 = 1u; + var_i0 -= var_i1; + var_l2 = var_i0; + var_i0 = var_l3; + var_i1 = var_p1; + var_i2 = instance->w2c_g122; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + } + var_i0 = instance->w2c_g117; + var_i1 = instance->w2c_g118; + var_i0 -= var_i1; + var_i1 = 1u; + var_i2 = instance->w2c_g122; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l20 = var_i0; + var_i1 = 3u; + var_i0 <<= (var_i1 & 31); + var_i0 = w2c_highlights_f412(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l17 = var_i0; + var_i1 = var_l2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l17; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = 1u; + var_p1 = var_i0; + var_L2: + var_i0 = var_p1; + var_i1 = var_l20; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l17; + var_i1 = var_p1; + var_i2 = 3u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_l2 = var_i0; + var_i1 = instance->w2c_g116; + var_i2 = instance->w2c_g118; + var_i3 = var_p1; + var_i2 += var_i3; + var_i3 = 3u; + var_i2 <<= (var_i3 & 31); + var_i1 += var_i2; + var_l3 = var_i1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l2; + var_i1 = var_l3; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = var_p1; + var_i1 = 1u; + var_i0 += var_i1; + var_p1 = var_i0; + goto var_L2; + } + var_i0 = instance->w2c_g116; + w2c_highlights_f413(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + instance->w2c_g116 = var_i0; + var_i0 = 0u; + instance->w2c_g122 = var_i0; + } + var_i0 = var_l24; + var_p1 = var_i0; + var_L4: + var_i0 = var_p1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 4u; + var_i0 += var_i1; + var_i1 = var_p1; + var_i2 = 1u; + var_i1 -= var_i2; + var_p1 = var_i1; + var_i2 = 24u; + var_i1 *= var_i2; + var_i0 += var_i1; + var_l7 = var_i0; + var_i1 = var_l7; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_l2 = var_i1; + var_i1 = var_l7; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 8u); + var_l15 = var_i1; + var_i1 = var_l7; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 12u); + var_l3 = var_i1; + var_i1 = var_p0; + var_i2 = var_l7; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 16u); + var_i1 += var_i2; + var_l9 = var_i1; + var_i1 = var_l7; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 20u); + var_l11 = var_i1; + var_i1 = 0u; + var_l4 = var_i1; + var_i1 = 0u; + var_l25 = var_i1; + var_i1 = var_l7; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l8 = var_i1; + var_i1 = w2c_highlights_f420(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i1; + var_i1 = var_l15; + var_i1 = w2c_highlights_f420(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l5 = var_i1; + var_i1 = var_l8; + var_i2 = var_l15; + var_i1 = var_i1 == var_i2; + var_l26 = var_i1; + var_i1 = var_l6; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 24u); + var_l7 = var_i1; + var_i1 = var_l5; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l21 = var_i1; + var_i1 = var_l5; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_l22 = var_i1; + var_i1 = var_l5; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 24u); + var_l27 = var_i1; + var_i1 = var_l6; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l18 = var_i1; + var_i2 = var_l6; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 4u); + var_l19 = var_i2; + var_i3 = var_l2; + var_i1 = w2c_highlights_f427(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i1; + var_i2 = 31u; + var_i1 >>= (var_i2 & 31); + var_l6 = var_i1; + var_i1 = var_l21; + var_i2 = var_l22; + var_i3 = var_l3; + var_i1 = w2c_highlights_f427(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l3 = var_i1; + var_i2 = 31u; + var_i1 >>= (var_i2 & 31); + var_l12 = var_i1; + var_i1 = var_l22; + var_i2 = var_l3; + var_i3 = 2147483647u; + var_i2 &= var_i3; + var_l14 = var_i2; + var_i1 -= var_i2; + var_i2 = var_l12; + var_i3 = 2u; + var_i2 <<= (var_i3 & 31); + var_i1 -= var_i2; + var_i2 = var_l12; + var_i3 = 3u; + var_i2 *= var_i3; + var_i1 += var_i2; + var_i2 = var_l2; + var_i3 = 2147483647u; + var_i2 &= var_i3; + var_l10 = var_i2; + var_i3 = var_l6; + var_i4 = 3u; + var_i3 *= var_i4; + var_i2 += var_i3; + var_l3 = var_i2; + var_i3 = var_l11; + var_i2 += var_i3; + var_i1 += var_i2; + var_l5 = var_i1; + if (var_i1) { + var_i1 = var_l5; + var_i1 = w2c_highlights_f412(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l4 = var_i1; + var_l2 = var_i1; + var_i2 = var_l18; + var_i3 = var_l10; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i1, var_i2, var_i3); + var_i1 = var_l2; + var_i2 = var_l10; + var_i1 += var_i2; + var_l2 = var_i1; + var_i1 = var_l6; + if (var_i1) { + var_i1 = var_l2; + var_i2 = var_l10; + var_i3 = var_l18; + var_i2 += var_i3; + var_i2 = w2c_highlights_f428(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 65536u; + var_i2 -= var_i3; + var_i3 = 10u; + var_i2 >>= (var_i3 & 31); + var_i3 = 55296u; + var_i2 += var_i3; + w2c_highlights_f429(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = 3u; + var_i1 += var_i2; + var_l2 = var_i1; + } + var_i1 = var_l2; + var_i2 = var_l9; + var_i3 = var_l11; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i1, var_i2, var_i3); + var_i1 = var_l2; + var_i2 = var_l11; + var_i1 += var_i2; + var_l2 = var_i1; + var_i1 = var_l12; + if (var_i1) { + var_i1 = var_l2; + var_i2 = var_l14; + var_i3 = var_l21; + var_i2 += var_i3; + var_i2 = w2c_highlights_f428(instance, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = 65536u; + var_i2 -= var_i3; + var_i3 = 1023u; + var_i2 &= var_i3; + var_i3 = 56320u; + var_i2 += var_i3; + w2c_highlights_f429(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l2; + var_i2 = 3u; + var_i1 += var_i2; + } else { + var_i1 = var_l2; + } + var_i2 = var_l12; + var_i3 = 2u; + var_i2 <<= (var_i3 & 31); + var_l2 = var_i2; + var_i3 = var_l14; + var_i4 = var_l21; + var_i3 += var_i4; + var_i2 += var_i3; + var_i3 = var_l22; + var_i4 = var_l14; + var_i3 -= var_i4; + var_i4 = var_l2; + var_i3 -= var_i4; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i1, var_i2, var_i3); + } + var_i1 = var_l3; + var_i2 = var_l11; + var_i1 += var_i2; + var_l2 = var_i1; + var_L9: + var_i1 = var_l2; + var_i2 = 3u; + var_i1 += var_i2; + var_l9 = var_i1; + var_i2 = var_l5; + var_i1 = var_i1 <= var_i2; + var_i2 = var_l2; + var_i3 = 3u; + var_i2 = var_i2 >= var_i3; + var_i1 &= var_i2; + if (var_i1) { + var_i1 = var_l2; + var_i2 = var_l4; + var_i1 += var_i2; + var_l6 = var_i1; + var_i2 = 3u; + var_i1 -= var_i2; + var_i1 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 61695u; + var_i1 &= var_i2; + var_i2 = 41197u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l6; + var_i2 = i32_load16_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 61695u; + var_i2 &= var_i3; + var_i3 = 45293u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) { + var_i1 = var_l6; + var_i2 = 3u; + var_i1 -= var_i2; + var_l10 = var_i1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 5u); + var_i2 = 63u; + var_i1 &= var_i2; + var_i2 = var_l10; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 4u); + var_i3 = 15u; + var_i2 &= var_i3; + var_i3 = 6u; + var_i2 <<= (var_i3 & 31); + var_i1 |= var_i2; + var_i2 = var_l10; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 2u); + var_i3 = 63u; + var_i2 &= var_i3; + var_i3 = var_l10; + var_i3 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 1u); + var_i4 = 15u; + var_i3 &= var_i4; + var_i4 = 6u; + var_i3 <<= (var_i4 & 31); + var_i2 |= var_i3; + var_i3 = 10u; + var_i2 <<= (var_i3 & 31); + var_i1 |= var_i2; + var_i2 = 65536u; + var_i1 += var_i2; + var_l6 = var_i1; + var_i1 = var_l10; + var_i2 = var_l6; + var_i3 = 18u; + var_i2 >>= (var_i3 & 31); + var_i3 = 240u; + var_i2 |= var_i3; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1), var_i2); + var_i1 = var_l10; + var_i2 = var_l6; + var_i3 = 12u; + var_i2 >>= (var_i3 & 31); + var_i3 = 63u; + var_i2 &= var_i3; + var_i3 = 128u; + var_i2 |= var_i3; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 1u, var_i2); + var_i1 = var_l10; + var_i2 = var_l6; + var_i3 = 6u; + var_i2 >>= (var_i3 & 31); + var_i3 = 63u; + var_i2 &= var_i3; + var_i3 = 128u; + var_i2 |= var_i3; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 2u, var_i2); + var_i1 = var_l10; + var_i2 = var_l6; + var_i3 = 63u; + var_i2 &= var_i3; + var_i3 = 128u; + var_i2 |= var_i3; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 3u, var_i2); + var_i1 = var_l10; + var_i2 = 4u; + var_i1 += var_i2; + var_i2 = var_l10; + var_i3 = 6u; + var_i2 += var_i3; + var_i3 = var_l5; + var_i4 = var_l9; + var_i3 -= var_i4; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i1, var_i2, var_i3); + var_i1 = var_l5; + var_i2 = 2u; + var_i1 -= var_i2; + var_l5 = var_i1; + } + } + var_i1 = var_l2; + var_i2 = var_l3; + var_i1 = var_i1 != var_i2; + if (var_i1) { + var_i1 = var_l3; + var_l2 = var_i1; + goto var_L9; + } + var_i1 = var_l27; + var_i2 = 19u; + var_i1 &= var_i2; + var_l14 = var_i1; + var_i1 = var_l8; + if (var_i1) { + var_i1 = var_l8; + var_i2 = 1u; + var_i1 -= var_i2; + var_i1 = w2c_highlights_f420(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 24u); + var_l3 = var_i1; + var_i2 = 19u; + var_i1 &= var_i2; + var_i2 = 17u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l4; + var_i2 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 10u; + var_i2 = var_i2 == var_i3; + var_i3 = var_l14; + var_i4 = 1u; + var_i3 = var_i3 == var_i4; + var_i4 = var_l5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i1 &= var_i2; + if (var_i1) { + var_i1 = var_l2; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l18 = var_i1; + var_i1 = var_l2; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_l19 = var_i1; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_l5; + var_i1 += var_i2; + var_i1 = w2c_highlights_f412(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l2 = var_i1; + var_i2 = var_l18; + var_i3 = var_l19; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i1, var_i2, var_i3); + var_i1 = var_l2; + var_i2 = var_l19; + var_i1 += var_i2; + var_l7 = var_i1; + var_i2 = 13u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1), var_i2); + var_i1 = var_l5; + if (var_i1) { + var_i1 = var_l7; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_l4; + var_i3 = var_l5; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i1, var_i2, var_i3); + } + var_i1 = var_l4; + if (var_i1) { + var_i1 = var_l4; + w2c_highlights_f413(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i1 = var_l2; + var_l4 = var_i1; + var_i1 = var_l19; + var_i2 = 1u; + var_i1 += var_i2; + var_i2 = var_l5; + var_i1 += var_i2; + var_l5 = var_i1; + var_i1 = 0u; + var_l26 = var_i1; + var_i1 = 1u; + var_l25 = var_i1; + var_i1 = var_l8; + var_i2 = 1u; + var_i1 -= var_i2; + var_l8 = var_i1; + var_i1 = var_l3; + var_l7 = var_i1; + } + } + var_i1 = var_l5; + if (var_i1) { + var_i1 = var_l4; + var_i2 = var_l5; + var_i3 = 1u; + var_i2 -= var_i3; + var_l3 = var_i2; + var_i1 += var_i2; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + var_i2 = var_l14; + var_i3 = 1u; + var_i2 = var_i2 == var_i3; + var_i1 &= var_i2; + if (var_i1) { + var_i1 = 2u; + var_l14 = var_i1; + var_i1 = var_l3; + var_l5 = var_i1; + } + } + var_i1 = 1u; + var_l11 = var_i1; + var_i1 = 0u; + var_l2 = var_i1; + var_L19: + var_i1 = var_l5; + var_i2 = var_l2; + var_i3 = var_l4; + var_i2 += var_i3; + var_i3 = var_l4; + var_i4 = var_l5; + var_i3 += var_i4; + var_i4 = 10u; + var_i5 = 0u; + var_i6 = 1u; + var_i2 = w2c_highlights_f5(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l4; + var_i2 -= var_i3; + var_l2 = var_i2; + var_i1 = var_i1 > var_i2; + if (var_i1) { + var_i1 = var_l11; + var_i2 = 1u; + var_i1 += var_i2; + var_l11 = var_i1; + var_i1 = var_l2; + var_i2 = var_l4; + var_i1 += var_i2; + var_l3 = var_i1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = var_l2; + var_i2 = 2u; + var_i3 = 1u; + var_i4 = var_l3; + var_i5 = 1u; + var_i4 += var_i5; + var_i4 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i4)); + var_i5 = 10u; + var_i4 = var_i4 == var_i5; + var_i5 = var_l2; + var_i6 = 1u; + var_i5 += var_i6; + var_i6 = var_l5; + var_i5 = var_i5 < var_i6; + var_i4 &= var_i5; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i1 += var_i2; + } else { + var_i1 = var_l2; + var_i2 = 1u; + var_i1 += var_i2; + } + var_l2 = var_i1; + goto var_L19; + } + var_i1 = var_l15; + var_i2 = var_l8; + var_i1 -= var_i2; + var_i2 = 1u; + var_i1 += var_i2; + var_l2 = var_i1; + var_i2 = var_l11; + var_i1 = var_i1 != var_i2; + if (var_i1) { + var_i1 = var_l11; + w2c_highlights_f421(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i1 = var_l15; + var_i1 = w2c_highlights_f420(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 20u); + var_l10 = var_i1; + var_i1 = var_l8; + var_l3 = var_i1; + var_L23: + var_i1 = var_l3; + var_i2 = var_l15; + var_i1 = var_i1 <= var_i2; + if (var_i1) { + var_i1 = var_l3; + var_i1 = w2c_highlights_f420(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l9 = var_i1; + var_i1 = var_l3; + var_i2 = var_l15; + var_i1 = var_i1 < var_i2; + var_i2 = var_l3; + var_i3 = var_l8; + var_i2 = var_i2 > var_i3; + var_i1 &= var_i2; + if (var_i1) { + var_i1 = var_l9; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = var_l9; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 4u); + var_i3 = var_l9; + var_i3 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 24u); + w2c_highlights_f422(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l9; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 12u); + w2c_highlights_f413(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l9; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 20u); + w2c_highlights_f416(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } else { + var_i1 = var_l9; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 12u); + w2c_highlights_f413(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = var_l15; + var_i1 = var_i1 < var_i2; + if (var_i1) { + var_i1 = var_l9; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 20u); + w2c_highlights_f416(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + } + var_i1 = var_l3; + var_i2 = 1u; + var_i1 += var_i2; + var_l3 = var_i1; + goto var_L23; + } + var_i1 = var_l2; + var_i2 = var_l11; + var_i1 = var_i1 != var_i2; + if (var_i1) { + var_i1 = instance->w2c_g102; + var_i2 = var_l8; + var_i1 = var_i1 != var_i2; + if (var_i1) { + var_i1 = instance->w2c_g100; + var_i2 = instance->w2c_g101; + var_i1 -= var_i2; + var_l3 = var_i1; + var_i1 = var_l8; + var_i2 = instance->w2c_g102; + var_i1 = var_i1 < var_i2; + if (var_i1) { + var_i1 = instance->w2c_g99; + var_i2 = var_l3; + var_i3 = var_l8; + var_i2 += var_i3; + var_i3 = 5u; + var_i2 <<= (var_i3 & 31); + var_i1 += var_i2; + var_i2 = instance->w2c_g99; + var_i3 = var_l8; + var_i4 = 5u; + var_i3 <<= (var_i4 & 31); + var_i2 += var_i3; + var_i3 = instance->w2c_g102; + var_i4 = var_l8; + var_i3 -= var_i4; + var_i4 = 5u; + var_i3 <<= (var_i4 & 31); + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i1, var_i2, var_i3); + } else { + var_i1 = instance->w2c_g99; + var_i2 = instance->w2c_g102; + var_i3 = 5u; + var_i2 <<= (var_i3 & 31); + var_i1 += var_i2; + var_i2 = instance->w2c_g99; + var_i3 = instance->w2c_g102; + var_i4 = var_l3; + var_i3 += var_i4; + var_i4 = 5u; + var_i3 <<= (var_i4 & 31); + var_i2 += var_i3; + var_i3 = var_l8; + var_i4 = instance->w2c_g102; + var_i3 -= var_i4; + var_i4 = 5u; + var_i3 <<= (var_i4 & 31); + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i1, var_i2, var_i3); + } + var_i1 = var_l8; + instance->w2c_g102 = var_i1; + } + var_i1 = var_l8; + var_i2 = var_l11; + var_i1 += var_i2; + instance->w2c_g102 = var_i1; + var_i1 = instance->w2c_g101; + var_i2 = var_l2; + var_i1 -= var_i2; + var_i2 = var_l11; + var_i1 += var_i2; + instance->w2c_g101 = var_i1; + } + var_i1 = 0u; + var_l3 = var_i1; + var_i1 = 0u; + var_l2 = var_i1; + var_L30: + var_i1 = var_l5; + var_i2 = var_l2; + var_i3 = var_l4; + var_i2 += var_i3; + var_l6 = var_i2; + var_i3 = var_l4; + var_i4 = var_l5; + var_i3 += var_i4; + var_i4 = 10u; + var_i5 = 0u; + var_i6 = 1u; + var_i2 = w2c_highlights_f5(instance, var_i2, var_i3, var_i4, var_i5, var_i6); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i3 = var_l4; + var_i2 -= var_i3; + var_l12 = var_i2; + var_i1 = var_i1 > var_i2; + if (var_i1) { + var_i1 = var_l4; + var_i2 = var_l12; + var_i1 += var_i2; + var_l9 = var_i1; + var_i1 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 13u; + var_i1 = var_i1 == var_i2; + if (var_i1) { + var_i1 = var_l3; + var_i2 = var_l8; + var_i1 += var_i2; + var_i2 = var_l6; + var_i3 = var_l12; + var_i4 = var_l2; + var_i3 -= var_i4; + var_i4 = 2u; + var_i5 = 17u; + var_i6 = var_l9; + var_i7 = 1u; + var_i6 += var_i7; + var_i6 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i6)); + var_i7 = 10u; + var_i6 = var_i6 == var_i7; + var_i7 = var_l12; + var_i8 = 1u; + var_i7 += var_i8; + var_i8 = var_l5; + var_i7 = var_i7 < var_i8; + var_i6 &= var_i7; + var_l2 = var_i6; + var_i4 = var_i6 ? var_i4 : var_i5; + var_i5 = 4294967295u; + w2c_highlights_f430(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 1u; + var_i1 += var_i2; + var_l3 = var_i1; + var_i1 = var_l12; + var_i2 = 2u; + var_i3 = 1u; + var_i4 = var_l2; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i1 += var_i2; + } else { + var_i1 = var_l3; + var_i2 = var_l8; + var_i1 += var_i2; + var_i2 = var_l2; + var_i3 = var_l4; + var_i2 += var_i3; + var_i3 = var_l12; + var_i4 = var_l2; + var_i3 -= var_i4; + var_i4 = 1u; + var_i5 = 4294967295u; + w2c_highlights_f430(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l3; + var_i2 = 1u; + var_i1 += var_i2; + var_l3 = var_i1; + var_i1 = var_l12; + var_i2 = 1u; + var_i1 += var_i2; + } + var_l2 = var_i1; + goto var_L30; + } + var_i1 = var_l3; + var_i2 = var_l8; + var_i1 += var_i2; + var_i2 = var_l2; + var_i3 = var_l4; + var_i2 += var_i3; + var_i3 = var_l5; + var_i4 = var_l2; + var_i3 -= var_i4; + var_i4 = var_l14; + var_i5 = var_l10; + w2c_highlights_f430(instance, var_i1, var_i2, var_i3, var_i4, var_i5); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l4; + if (var_i1) { + var_i1 = var_l4; + w2c_highlights_f413(instance, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i1 = var_l18; + var_i2 = var_l19; + var_i3 = var_l7; + w2c_highlights_f422(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i1 = var_l26; + var_i1 = !(var_i1); + if (var_i1) { + var_i1 = var_l21; + var_i2 = var_l22; + var_i3 = var_l27; + w2c_highlights_f422(instance, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i1 = var_l11; + var_i2 = 1u; + var_i1 <<= (var_i2 & 31); + var_i2 = var_l25; + var_i1 |= var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u, var_i1); + goto var_L4; + } + var_i0 = 46160u; + var_i1 = 0u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l20; + var_i1 = var_l24; + var_i0 += var_i1; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = 3u; + var_i0 <<= (var_i1 & 31); + var_i0 = w2c_highlights_f412(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_i0 = 0u; + var_p1 = var_i0; + var_L35: + var_i0 = var_p1; + var_i1 = var_l24; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_p0; + var_i1 = 4u; + var_i0 += var_i1; + var_i1 = var_p1; + var_i2 = 24u; + var_i1 *= var_i2; + var_i0 += var_i1; + var_l4 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l3 = var_i0; + var_i1 = 1u; + var_i0 &= var_i1; + var_l7 = var_i0; + var_i0 = var_l3; + var_i1 = 1u; + var_i0 >>= (var_i1 & 31); + var_l8 = var_i0; + var_i0 = var_l4; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_i1 = var_l4; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 -= var_i1; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = var_l7; + var_i0 += var_i1; + var_l2 = var_i0; + var_i0 = var_l4; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_l7; + var_i0 -= var_i1; + var_l9 = var_i0; + var_i0 = var_l4; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_i1 = 1u; + var_i0 += var_i1; + var_l5 = var_i0; + var_L37: + var_i0 = var_l16; + var_i1 = var_l20; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B38;} + var_i0 = var_l17; + var_i1 = var_l16; + var_i2 = 3u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_l7 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_i0 = var_l7; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l4 = var_i0; + var_i0 = var_l3; + var_i1 = var_l5; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B38;} + var_i0 = var_l3; + var_i1 = var_l4; + var_i2 = var_l9; + var_i3 = var_l4; + var_i4 = var_l9; + var_i3 = var_i3 < var_i4; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i2 = var_l23; + var_i3 = var_l6; + var_i4 = var_l13; + var_i0 = w2c_highlights_f435(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l13 = var_i0; + var_i0 = var_l4; + var_i1 = var_l5; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l7; + var_i1 = var_l5; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } else { + var_i0 = var_l16; + var_i1 = 1u; + var_i0 += var_i1; + var_l16 = var_i0; + goto var_L37; + } + var_B38:; + var_i0 = var_l8; + var_i1 = var_l9; + var_i2 = var_l23; + var_i1 += var_i2; + var_l7 = var_i1; + var_i0 += var_i1; + var_l4 = var_i0; + var_i0 = var_l9; + var_i1 = var_l5; + var_i2 = var_l7; + var_i3 = var_l4; + var_i0 = w2c_highlights_f431(instance, var_i0, var_i1, var_i2, var_i3); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l6; + var_i1 = var_l13; + var_i2 = 3u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_l3 = var_i0; + var_i1 = var_l7; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l3; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = var_l13; + var_i1 = 1u; + var_i0 += var_i1; + var_l13 = var_i0; + } else { + var_i0 = var_l4; + var_i1 = var_l6; + var_i2 = var_l13; + var_i3 = 1u; + var_i2 -= var_i3; + var_i3 = 3u; + var_i2 <<= (var_i3 & 31); + var_i1 += var_i2; + var_l3 = var_i1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = var_l4; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + } + } + var_i0 = var_l23; + var_i1 = var_l8; + var_i2 = var_l2; + var_i1 -= var_i2; + var_i0 += var_i1; + var_l23 = var_i0; + var_i0 = var_p1; + var_i1 = 1u; + var_i0 += var_i1; + var_p1 = var_i0; + goto var_L35; + } + var_L42: + var_i0 = var_l16; + var_i1 = var_l20; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l17; + var_i1 = var_l16; + var_i2 = 3u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_p1 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i2 = var_l23; + var_i3 = var_l6; + var_i4 = var_l13; + var_i0 = w2c_highlights_f435(instance, var_i0, var_i1, var_i2, var_i3, var_i4); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l13 = var_i0; + var_i0 = var_l16; + var_i1 = 1u; + var_i0 += var_i1; + var_l16 = var_i0; + goto var_L42; + } + var_i0 = var_l17; + w2c_highlights_f413(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + w2c_highlights_f413(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l6; + instance->w2c_g116 = var_i0; + var_i0 = var_l13; + instance->w2c_g117 = var_i0; + var_i0 = 0u; + instance->w2c_g118 = var_i0; + var_i0 = 0u; + instance->w2c_g119 = var_i0; + var_i0 = 0u; + instance->w2c_g123 = var_i0; + var_i0 = 4294967295u; + instance->w2c_g98 = var_i0; + var_i0 = var_l13; + if (var_i0) { + var_i0 = var_l6; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + instance->w2c_g121 = var_i0; + var_i0 = var_l6; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + instance->w2c_g120 = var_i0; + var_i0 = instance->w2c_g121; + if (var_i0) { + var_i0 = instance->w2c_g121; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = w2c_highlights_f420(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + } else { + var_i0 = 0u; + } + instance->w2c_g107 = var_i0; + var_i0 = 1u; + instance->w2c_g122 = var_i0; + } else { + w2c_highlights_f433(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + FUNC_EPILOGUE; +} + +u32 w2c_highlights_liveRun_0(w2c_highlights* instance, u32 var_p0, u32 var_p1, u32 var_p2) { + u32 var_l3 = 0, var_l4 = 0, var_l5 = 0, var_l6 = 0, var_l7 = 0, var_l8 = 0, var_l9 = 0, var_l10 = 0, + var_l11 = 0, var_l12 = 0, var_l13 = 0, var_l14 = 0, var_l15 = 0, var_l16 = 0, var_l17 = 0, var_l18 = 0, + var_l19 = 0, var_l20 = 0, var_l21 = 0; + u64 var_l22 = 0; + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2, var_i3, var_i4; + u64 var_j0, var_j1, var_j2, var_j3; + v128 var_o0; + var_i0 = instance->w2c_g122; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 0u; + goto var_Bfunc; + } + var_L1: + var_i0 = var_p1; + var_i1 = 0u; + var_i0 = var_i0 != var_i1; + var_i1 = instance->w2c_g121; + var_i2 = var_p1; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 1u; + var_i0 -= var_i1; + var_p0 = var_i0; + var_i0 = instance->w2c_g121; + var_l18 = var_i0; + var_i0 = w2c_highlights_f420(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l21 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + var_l19 = var_i0; + var_i0 = var_l18; + var_i0 = !(var_i0); + var_l7 = var_i0; + var_i0 = 0u; + var_l10 = var_i0; + var_i0 = 0u; + var_l15 = var_i0; + var_i0 = var_l18; + var_i0 = w2c_highlights_f420(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l13 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + var_l20 = var_i0; + var_i0 = var_l13; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l14 = var_i0; + var_i0 = var_l13; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_i1 = 16777216u; + var_i0 = var_i0 >= var_i1; + var_l16 = var_i0; + var_i0 = instance->w2c_g108; + if (var_i0) { + var_i0 = 0u; + var_l7 = var_i0; + } else { + var_i0 = var_l14; + var_i1 = var_l20; + var_i2 = 3u; + var_i1 &= var_i2; + var_l11 = var_i1; + var_i0 += var_i1; + var_l12 = var_i0; + var_i1 = instance->w2c_g84; + var_i2 = 16u; + var_i1 += var_i2; + var_l5 = var_i1; + var_i0 += var_i1; + var_i1 = 4294967232u; + var_i0 -= var_i1; + w2c_highlights_f409(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l7; + if (var_i0) { + w2c_highlights_f448(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f230(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 4294967295u; + instance->w2c_g21 = var_i0; + var_i0 = 0u; + instance->w2c_g70 = var_i0; + var_i0 = 0u; + instance->w2c_g78 = var_i0; + var_i0 = 0u; + instance->w2c_g33 = var_i0; + } else { + var_i0 = instance->w2c_g98; + var_i1 = instance->w2c_g107; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = instance->w2c_g89; + var_i1 = instance->w2c_g107; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = var_l5; + var_i1 = 9936u; + var_i0 += var_i1; + w2c_highlights_f409(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l5; + var_i1 = 0u; + var_i2 = 9936u; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l5; + var_i1 = var_l10; + var_i2 = 24u; + var_i1 += var_i2; + var_i2 = var_l10; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2) + 8u); + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l17 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l4 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_l6 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + instance->w2c_g25 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + instance->w2c_g26 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + instance->w2c_g27 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + instance->w2c_g28 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u); + instance->w2c_g29 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 32u); + instance->w2c_g30 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 36u); + instance->w2c_g31 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 40u); + instance->w2c_g21 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 44u); + instance->w2c_g70 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 48u); + instance->w2c_g71 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 52u); + instance->w2c_g72 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 56u); + instance->w2c_g73 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 60u); + instance->w2c_g80 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 64u); + instance->w2c_g81 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 68u); + instance->w2c_g82 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 72u); + instance->w2c_g78 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 76u); + instance->w2c_g51 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 80u); + instance->w2c_g52 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 84u); + instance->w2c_g59 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 88u); + instance->w2c_g53 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 92u); + instance->w2c_g54 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 96u); + instance->w2c_g58 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 100u); + instance->w2c_g55 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 104u); + instance->w2c_g57 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 108u); + instance->w2c_g60 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 112u); + instance->w2c_g62 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 116u); + instance->w2c_g63 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 120u); + instance->w2c_g64 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 124u); + instance->w2c_g65 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 128u); + instance->w2c_g66 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 132u); + instance->w2c_g36 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 136u); + instance->w2c_g37 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 140u); + instance->w2c_g38 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 144u); + instance->w2c_g39 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 148u); + instance->w2c_g40 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 152u); + instance->w2c_g41 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 156u); + instance->w2c_g42 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 160u); + instance->w2c_g45 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 164u); + instance->w2c_g46 = var_i0; + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 168u); + instance->w2c_g56 = var_i0; + var_i0 = var_l17; + instance->w2c_g33 = var_i0; + var_i0 = 12416u; + var_i1 = var_l5; + var_i2 = 172u; + var_i1 += var_i2; + var_i2 = 32u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 45040u; + var_i1 = var_l5; + var_i2 = 204u; + var_i1 += var_i2; + var_i2 = 96u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l5; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 300u); + instance->w2c_g69 = var_i0; + var_i0 = w2c_highlights_f419(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l9 = var_i0; + var_i1 = var_l5; + var_i2 = 304u; + var_i1 += var_i2; + var_l3 = var_i1; + var_i2 = var_l17; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l3; + var_i1 = var_l17; + var_i0 += var_i1; + var_l8 = var_i0; + var_i0 = var_l9; + var_i1 = 38880u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = 38880u; + var_i1 = var_l8; + var_i2 = instance->w2c_g55; + var_i3 = 2u; + var_i2 <<= (var_i3 & 31); + var_l3 = var_i2; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l3; + var_i1 = var_l8; + var_i0 += var_i1; + var_l8 = var_i0; + } + var_i0 = 39904u; + var_i1 = var_l8; + var_i2 = instance->w2c_g56; + var_i3 = 2u; + var_i2 <<= (var_i3 & 31); + var_l3 = var_i2; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 37568u; + var_i1 = var_l3; + var_i2 = var_l8; + var_i1 += var_i2; + var_l3 = var_i1; + var_i2 = var_l4; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 40928u; + var_i1 = var_l3; + var_i2 = var_l4; + var_i1 += var_i2; + var_l3 = var_i1; + var_i2 = var_l6; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 12448u; + var_i1 = var_l3; + var_i2 = var_l6; + var_i1 += var_i2; + var_i2 = 1440u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + } + } + var_i0 = 4294967295u; + instance->w2c_g98 = var_i0; + var_i0 = var_l5; + var_i1 = var_l13; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = var_l14; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l11; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = var_l5; + var_i1 = var_l14; + var_i0 += var_i1; + var_i1 = 2573u; + i32_store16_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } else { + var_i0 = var_l11; + if (var_i0) { + var_i0 = var_l5; + var_i1 = var_l14; + var_i0 += var_i1; + var_i1 = 10u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } + } + var_i0 = var_l5; + var_i1 = var_l12; + var_i0 += var_i1; + var_i1 = 0u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 1u; + var_i1 = 3u; + i32_store8_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = 2u; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l5; + instance->w2c_g0 = var_i0; + var_i0 = 1u; + instance->w2c_g22 = var_i0; + var_i0 = var_l7; + instance->w2c_g23 = var_i0; + var_i0 = var_l5; + var_i1 = 0u; + var_i2 = var_l7; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g1 = var_i0; + var_i0 = 0u; + instance->w2c_g24 = var_i0; + w2c_highlights_f33(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l7; + w2c_highlights_f17(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 1u; + instance->w2c_g108 = var_i0; + } + var_i0 = instance->w2c_g108; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g4; + var_i1 = var_p2; + var_i0 += var_i1; + var_i1 = 2147483647u; + var_i2 = var_p2; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g5 = var_i0; + var_i0 = instance->w2c_g97; + var_i1 = var_l7; + w2c_highlights_f449(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 2147483647u; + instance->w2c_g5 = var_i0; + var_i0 = 4294967295u; + var_i1 = instance->w2c_g6; + if (var_i1) {goto var_B4;} + w2c_highlights_f18(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + instance->w2c_g22 = var_i0; + var_i0 = 0u; + instance->w2c_g24 = var_i0; + var_i0 = instance->w2c_g8; + var_i1 = 6u; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_l11 = var_i1; + var_i0 -= var_i1; + var_l17 = var_i0; + var_i0 = var_l11; + var_i1 = var_l17; + var_i0 += var_i1; + var_i1 = 7u; + var_i0 += var_i1; + var_i1 = 4294967288u; + var_i0 &= var_i1; + var_l4 = var_i0; + var_i1 = 10016u; + var_i0 += var_i1; + w2c_highlights_f409(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = w2c_highlights_f419(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l12 = var_i0; + var_l3 = var_i0; + var_i0 = instance->w2c_g33; + var_i1 = instance->w2c_g55; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i2 = var_l3; + var_i3 = 38880u; + var_i2 = var_i2 != var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i1 = 1024u; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = 1024u; + var_l3 = var_i0; + } + var_i0 = var_l4; + var_i1 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g57; + var_l6 = var_i0; + var_i1 = 1024u; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = 1024u; + var_l6 = var_i0; + } + var_i0 = var_l4; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = instance->w2c_g60; + var_i1 = 3u; + var_i0 <<= (var_i1 & 31); + var_l8 = var_i0; + var_i1 = 4096u; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = 4096u; + var_l8 = var_i0; + } + var_i0 = var_l4; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g25; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g26; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g27; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g28; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g29; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 28u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g30; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 32u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g31; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 36u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g21; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 40u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g70; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 44u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g71; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 48u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g72; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 52u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g73; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 56u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g80; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 60u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g81; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 64u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g82; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 68u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g78; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 72u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g51; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 76u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g52; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 80u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g59; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 84u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g53; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 88u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g54; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 92u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g58; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 96u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g55; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 100u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g57; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 104u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g60; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 108u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g62; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 112u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g63; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 116u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g64; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 120u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g65; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 124u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g66; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 128u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g36; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 132u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g37; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 136u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g38; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 140u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g39; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 144u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g40; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 148u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g41; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 152u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g42; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 156u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g45; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 160u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g46; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 164u, var_i1); + var_i0 = var_l4; + var_i1 = instance->w2c_g56; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 168u, var_i1); + var_i0 = var_l4; + var_i1 = 172u; + var_i0 += var_i1; + var_i1 = 12416u; + var_i2 = 32u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l4; + var_i1 = 204u; + var_i0 += var_i1; + var_i1 = 45040u; + var_i2 = 96u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l4; + var_i1 = instance->w2c_g69; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 300u, var_i1); + var_i0 = var_l4; + var_i1 = 304u; + var_i0 += var_i1; + var_l9 = var_i0; + var_i1 = var_l12; + var_i2 = var_l3; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l3; + var_i1 = var_l9; + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = var_l12; + var_i1 = 38880u; + var_i0 = var_i0 != var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 38880u; + var_i2 = instance->w2c_g55; + var_i3 = 2u; + var_i2 <<= (var_i3 & 31); + var_l9 = var_i2; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l3; + var_i1 = var_l9; + var_i0 += var_i1; + var_l3 = var_i0; + } + var_i0 = var_l3; + var_i1 = 39904u; + var_i2 = instance->w2c_g56; + var_i3 = 2u; + var_i2 <<= (var_i3 & 31); + var_l9 = var_i2; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l3; + var_i1 = var_l9; + var_i0 += var_i1; + var_l3 = var_i0; + var_i1 = 37568u; + var_i2 = var_l6; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l3; + var_i1 = var_l6; + var_i0 += var_i1; + var_l3 = var_i0; + var_i1 = 40928u; + var_i2 = var_l8; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l3; + var_i1 = var_l8; + var_i0 += var_i1; + var_l3 = var_i0; + var_i1 = 12448u; + var_i2 = 1440u; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l4; + var_i1 = var_l3; + var_i2 = 1440u; + var_i1 += var_i2; + var_i2 = var_l4; + var_i1 -= var_i2; + var_i0 += var_i1; + var_l3 = var_i0; + var_L16: + var_i0 = var_l3; + var_i1 = var_l4; + var_i0 -= var_i1; + var_i1 = 16u; + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_B17;} + var_i0 = var_l3; + var_i1 = 16u; + var_i0 -= var_i1; + var_l9 = var_i0; + var_o0 = v128_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i0 = simde_wasm_v128_any_true(var_o0); + if (var_i0) {goto var_B17;} + var_i0 = var_l9; + var_l3 = var_i0; + goto var_L16; + var_B17:; + var_L18: + var_i0 = var_l3; + var_i1 = var_l4; + var_i0 = var_i0 <= var_i1; + if (var_i0) {goto var_B19;} + var_i0 = var_l3; + var_i1 = 1u; + var_i0 -= var_i1; + var_l9 = var_i0; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + if (var_i0) {goto var_B19;} + var_i0 = var_l9; + var_l3 = var_i0; + goto var_L18; + var_B19:; + var_i0 = var_l11; + instance->w2c_g87 = var_i0; + var_i0 = var_l3; + var_i1 = var_l4; + var_i0 -= var_i1; + var_l8 = var_i0; + var_i1 = var_l4; + var_i0 += var_i1; + instance->w2c_g88 = var_i0; + var_i0 = var_l7; + var_i0 = !(var_i0); + var_i1 = instance->w2c_g107; + var_i2 = instance->w2c_g91; + var_i1 = var_i1 < var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g89; + var_i1 = instance->w2c_g107; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + var_i1 = var_l8; + var_i0 = var_i0 == var_i1; + var_i1 = var_l10; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + var_i1 = var_l10; + var_i2 = 1u; + var_i1 &= var_i2; + var_i1 = I32_CLZ(var_i1); + var_i2 = 5u; + var_i1 >>= (var_i2 & 31); + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l10; + var_i1 = 24u; + var_i0 += var_i1; + var_i1 = var_l4; + var_i2 = var_l8; + var_i0 = w2c_highlights_f415(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l10; + var_i1 = var_l10; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i2 = 1u; + var_i1 += var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = instance->w2c_g107; + var_l15 = var_i0; + } + } + } + var_i0 = var_l15; + var_i0 = !(var_i0); + if (var_i0) { + var_j0 = 14695981039346656037ull; + var_l22 = var_j0; + var_i0 = var_l4; + var_l6 = var_i0; + var_i1 = var_l8; + var_i2 = 4294967288u; + var_i1 &= var_i2; + var_i0 += var_i1; + var_l3 = var_i0; + var_L25: + var_i0 = var_l3; + var_i1 = var_l6; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_j0 = var_l22; + var_i1 = var_l6; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j0 ^= var_j1; + var_j1 = 1099511628211ull; + var_j0 *= var_j1; + var_l22 = var_j0; + var_i0 = var_l6; + var_i1 = 8u; + var_i0 += var_i1; + var_l6 = var_i0; + goto var_L25; + } + var_i0 = var_l8; + var_i1 = 7u; + var_i0 &= var_i1; + var_l3 = var_i0; + if (var_i0) { + var_j0 = var_l22; + var_i1 = var_l6; + var_j1 = i64_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_j2 = 18446744073709551615ull; + var_i3 = 8u; + var_i4 = var_l3; + var_i3 -= var_i4; + var_i4 = 3u; + var_i3 <<= (var_i4 & 31); + var_j3 = (u64)(var_i3); + var_j2 >>= (var_j3 & 63); + var_j1 &= var_j2; + var_j0 ^= var_j1; + var_j1 = 1099511628211ull; + var_j0 *= var_j1; + var_l22 = var_j0; + } + var_j0 = var_l22; + var_j1 = 32ull; + var_j0 >>= (var_j1 & 63); + var_i0 = (u32)(var_j0); + var_l12 = var_i0; + var_i0 = instance->w2c_g93; + var_j1 = var_l22; + var_i1 = (u32)(var_j1); + var_l11 = var_i1; + var_i2 = instance->w2c_g94; + var_i1 &= var_i2; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + var_L28: + var_i0 = var_l6; + if (var_i0) { + var_i0 = var_l6; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + var_i1 = var_l11; + var_i0 = var_i0 == var_i1; + var_i1 = var_l6; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 16u); + var_i2 = var_l12; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + var_i1 = var_l6; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 8u); + var_i2 = var_l8; + var_i1 = var_i1 == var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = var_l6; + var_i1 = 24u; + var_i0 += var_i1; + var_i1 = var_l4; + var_i2 = var_l8; + var_i0 = w2c_highlights_f415(instance, var_i0, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + var_i0 = var_l6; + var_i1 = var_l6; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i2 = 1u; + var_i1 += var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = var_l6; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + goto var_B24; + } + } + var_i0 = var_l6; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l6 = var_i0; + goto var_L28; + } + var_i0 = instance->w2c_g87; + var_l3 = var_i0; + var_i0 = var_l8; + var_i1 = 24u; + var_i0 += var_i1; + var_i0 = w2c_highlights_f412(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l6 = var_i0; + var_i1 = 24u; + var_i0 += var_i1; + var_i1 = var_l4; + var_i2 = instance->w2c_g87; + var_i3 = var_l3; + var_i2 -= var_i3; + var_i1 += var_i2; + var_i2 = var_l8; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g92; + if (var_i0) { + var_i0 = instance->w2c_g89; + var_i1 = instance->w2c_g92; + var_l3 = var_i1; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 1u; + var_i0 >>= (var_i1 & 31); + instance->w2c_g92 = var_i0; + } else { + var_i0 = instance->w2c_g91; + var_i1 = instance->w2c_g90; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g90; + var_i1 = 3u; + var_i0 <<= (var_i1 & 31); + var_i0 = w2c_highlights_f412(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l9 = var_i0; + var_i1 = instance->w2c_g89; + var_i2 = instance->w2c_g90; + var_i3 = 2u; + var_i2 <<= (var_i3 & 31); + var_l3 = var_i2; + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = var_l3; + var_i1 = var_l9; + var_i0 += var_i1; + var_i1 = 0u; + var_i2 = var_l3; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = instance->w2c_g89; + w2c_highlights_f413(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l9; + instance->w2c_g89 = var_i0; + var_i0 = instance->w2c_g90; + var_i1 = 1u; + var_i0 <<= (var_i1 & 31); + instance->w2c_g90 = var_i0; + } + var_i0 = instance->w2c_g91; + var_l3 = var_i0; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g91 = var_i0; + } + var_i0 = instance->w2c_g89; + var_i1 = var_l3; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l6; + var_i1 = instance->w2c_g93; + var_i2 = var_l11; + var_i3 = instance->w2c_g94; + var_i2 &= var_i3; + var_i3 = 2u; + var_i2 <<= (var_i3 & 31); + var_i1 += var_i2; + var_l7 = var_i1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l6; + var_i1 = 1u; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = var_l6; + var_i1 = var_l8; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u, var_i1); + var_i0 = var_l6; + var_i1 = var_l11; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u, var_i1); + var_i0 = var_l6; + var_i1 = var_l12; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u, var_i1); + var_i0 = var_l6; + var_i1 = var_l3; + var_l9 = var_i1; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u, var_i1); + var_i0 = var_l7; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = instance->w2c_g95; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g95 = var_i0; + var_i0 = instance->w2c_g96; + var_i1 = var_l8; + var_i0 += var_i1; + instance->w2c_g96 = var_i0; + var_i0 = instance->w2c_g95; + var_i1 = instance->w2c_g94; + var_i2 = 1u; + var_i1 += var_i2; + var_l3 = var_i1; + var_i2 = var_l3; + var_i3 = 2u; + var_i2 >>= (var_i3 & 31); + var_i1 -= var_i2; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = 0u; + var_l6 = var_i0; + var_i0 = instance->w2c_g94; + var_i1 = 1u; + var_i0 <<= (var_i1 & 31); + var_i1 = 1u; + var_i0 += var_i1; + var_l11 = var_i0; + var_i1 = 1u; + var_i0 += var_i1; + var_i1 = 2u; + var_i0 <<= (var_i1 & 31); + var_i0 = w2c_highlights_f412(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_l12 = var_i0; + var_i1 = 0u; + var_i2 = var_l11; + var_i3 = 1u; + var_i2 += var_i3; + var_i3 = 2u; + var_i2 <<= (var_i3 & 31); + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_L35: + var_i0 = instance->w2c_g94; + var_i1 = var_l6; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g93; + var_i1 = var_l6; + var_i2 = 2u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l3 = var_i0; + var_L37: + var_i0 = var_l3; + if (var_i0) { + var_i0 = var_l3; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_l3; + var_i2 = var_l12; + var_i3 = var_l3; + var_i3 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i3) + 12u); + var_i4 = var_l11; + var_i3 &= var_i4; + var_i4 = 2u; + var_i3 <<= (var_i4 & 31); + var_i2 += var_i3; + var_l7 = var_i2; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1), var_i2); + var_i1 = var_l7; + var_i2 = var_l3; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1), var_i2); + var_l3 = var_i0; + goto var_L37; + } + var_i0 = var_l6; + var_i1 = 1u; + var_i0 += var_i1; + var_l6 = var_i0; + goto var_L35; + } + var_i0 = instance->w2c_g93; + w2c_highlights_f413(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l12; + instance->w2c_g93 = var_i0; + var_i0 = var_l11; + instance->w2c_g94 = var_i0; + } + var_i0 = var_l9; + var_B24:; + var_l15 = var_i0; + } + var_i0 = var_l15; + instance->w2c_g98 = var_i0; + var_i0 = var_l15; + instance->w2c_g115 = var_i0; + var_i0 = 0u; + instance->w2c_g109 = var_i0; + var_i0 = var_l17; + var_i1 = 0u; + var_i2 = var_l14; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g110 = var_i0; + var_i0 = 0u; + instance->w2c_g111 = var_i0; + var_i0 = 0u; + instance->w2c_g112 = var_i0; + var_i0 = 0u; + instance->w2c_g113 = var_i0; + var_i0 = instance->w2c_g110; + if (var_i0) { + var_i0 = var_l17; + var_i1 = var_l16; + var_i1 = !(var_i1); + var_i0 >>= (var_i1 & 31); + var_i0 = w2c_highlights_f412(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + instance->w2c_g114 = var_i0; + } + var_i0 = 2u; + instance->w2c_g108 = var_i0; + var_i0 = 4294967295u; + var_i1 = var_p2; + if (var_i1) {goto var_B4;} + } + var_i0 = var_p2; + var_i1 = 2147483647u; + var_i2 = var_p2; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l8 = var_i0; + var_L40: + var_i0 = instance->w2c_g109; + var_i1 = instance->w2c_g110; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = 4294967295u; + var_i1 = var_l8; + var_i2 = 0u; + var_i1 = (u32)((s32)var_i1 <= (s32)var_i2); + if (var_i1) {goto var_B4;} + var_i0 = instance->w2c_g87; + var_i1 = instance->w2c_g109; + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_i0 = var_l3; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + var_l6 = var_i0; + var_i0 = var_l14; + var_i1 = var_l9; + var_i2 = var_l9; + var_i3 = var_l14; + var_i2 = var_i2 > var_i3; + var_i0 = var_i2 ? var_i0 : var_i1; + var_l3 = var_i0; + var_i1 = instance->w2c_g111; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = instance->w2c_g111; + var_i1 = var_l8; + var_i0 += var_i1; + var_l7 = var_i0; + var_i1 = var_l3; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l3; + var_l7 = var_i0; + } + var_i0 = var_l13; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l9 = var_i0; + var_L44: + var_i0 = var_l7; + var_i1 = var_l14; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B45;} + var_i0 = var_l7; + var_i1 = var_l9; + var_i0 += var_i1; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = 192u; + var_i0 &= var_i1; + var_i1 = 128u; + var_i0 = var_i0 != var_i1; + if (var_i0) {goto var_B45;} + var_i0 = var_l7; + var_i1 = 1u; + var_i0 += var_i1; + var_l7 = var_i0; + goto var_L44; + var_B45:; + var_i0 = instance->w2c_g112; + var_i1 = var_l9; + var_i2 = instance->w2c_g111; + var_i1 += var_i2; + var_i2 = var_l7; + var_i3 = instance->w2c_g111; + var_i2 -= var_i3; + var_i1 = w2c_highlights_f423(instance, var_i1, var_i2); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 += var_i1; + instance->w2c_g112 = var_i0; + var_i0 = var_l8; + var_i1 = var_l7; + var_i2 = instance->w2c_g111; + var_i1 -= var_i2; + var_i0 -= var_i1; + var_l8 = var_i0; + var_i0 = var_l7; + instance->w2c_g111 = var_i0; + var_i0 = 4294967295u; + var_i1 = var_l3; + var_i2 = var_l7; + var_i1 = var_i1 > var_i2; + if (var_i1) {goto var_B4;} + } + var_i0 = instance->w2c_g114; + var_i1 = instance->w2c_g113; + var_i2 = 3u; + var_i3 = 2u; + var_i4 = var_l16; + var_i2 = var_i4 ? var_i2 : var_i3; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = instance->w2c_g113; + if (var_i0) { + var_i0 = var_l3; + var_i1 = 8u; + var_i2 = 4u; + var_i3 = var_l16; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 -= var_i1; + var_l10 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_l10; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i2 = 16777215u; + var_i1 &= var_i2; + var_i2 = var_l16; + var_i0 = var_i2 ? var_i0 : var_i1; + } else { + var_i0 = 0u; + } + var_i1 = instance->w2c_g112; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l6; + var_i1 = var_l10; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i2 = var_l10; + var_i2 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i2)); + var_i3 = 24u; + var_i2 >>= (var_i3 & 31); + var_i3 = var_l16; + var_i1 = var_i3 ? var_i1 : var_i2; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g113; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g113; + var_i1 = 1u; + var_i0 -= var_i1; + instance->w2c_g113 = var_i0; + var_i0 = var_l10; + var_l3 = var_i0; + } + var_i0 = var_l16; + if (var_i0) { + var_i0 = var_l3; + var_i1 = instance->w2c_g112; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + var_i0 = var_l3; + var_i1 = var_l6; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + } else { + var_i0 = var_l3; + var_i1 = instance->w2c_g112; + var_i2 = var_l6; + var_i3 = 24u; + var_i2 <<= (var_i3 & 31); + var_i1 |= var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + } + var_i0 = instance->w2c_g113; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g113 = var_i0; + } + var_i0 = instance->w2c_g109; + var_i1 = 8u; + var_i0 += var_i1; + instance->w2c_g109 = var_i0; + var_i0 = var_l8; + var_i1 = 1u; + var_i0 -= var_i1; + var_l8 = var_i0; + goto var_L40; + } + var_i0 = 0u; + instance->w2c_g87 = var_i0; + var_i0 = 0u; + instance->w2c_g88 = var_i0; + var_i0 = var_l13; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + w2c_highlights_f413(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_l13; + var_i1 = instance->w2c_g114; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u, var_i1); + var_i0 = var_l13; + var_i1 = instance->w2c_g113; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u, var_i1); + var_i0 = var_l13; + var_i1 = var_l20; + var_i2 = 4294967291u; + var_i1 &= var_i2; + var_i2 = var_l16; + var_i3 = 2u; + var_i2 <<= (var_i3 & 31); + var_i1 |= var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u, var_i1); + var_i0 = instance->w2c_g115; + instance->w2c_g107 = var_i0; + var_i0 = 0u; + instance->w2c_g115 = var_i0; + var_i0 = 0u; + instance->w2c_g114 = var_i0; + var_i0 = 0u; + instance->w2c_g108 = var_i0; + var_i0 = instance->w2c_g107; + var_B4:; + var_l9 = var_i0; + var_i1 = 4294967295u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1u; + goto var_Bfunc; + } + var_i0 = var_l21; + var_i1 = var_l9; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u, var_i1); + var_i0 = var_l19; + w2c_highlights_f416(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g123; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g123 = var_i0; + var_i0 = var_l18; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g121 = var_i0; + var_L51: + var_i0 = instance->w2c_g118; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_i1 = instance->w2c_g117; + var_i0 = var_i0 >= var_i1; + if (var_i0) {goto var_B52;} + var_i0 = instance->w2c_g121; + var_i1 = instance->w2c_g116; + var_i2 = var_l3; + var_i3 = 3u; + var_i2 <<= (var_i3 & 31); + var_i1 += var_i2; + var_l3 = var_i1; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1)); + var_i0 = var_i0 < var_i1; + if (var_i0) {goto var_B52;} + var_i0 = instance->w2c_g120; + var_i1 = var_l3; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 4u); + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l3; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + instance->w2c_g120 = var_i0; + } + var_i0 = instance->w2c_g118; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g118 = var_i0; + var_i0 = 46160u; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_l10 = var_i0; + var_i0 = instance->w2c_g119; + var_l3 = var_i0; + var_i1 = 4u; + var_i0 <<= (var_i1 & 31); + var_i1 = 46164u; + var_i0 += var_i1; + var_l7 = var_i0; + var_i1 = var_l7; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 20u); + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u, var_i1); + var_i0 = var_l7; + var_i1 = var_l7; + var_i1 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i1) + 28u); + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u, var_i1); + var_i0 = var_l10; + var_i1 = var_l3; + var_i2 = 2u; + var_i1 += var_i2; + var_l3 = var_i1; + var_i0 = var_i0 > var_i1; + if (var_i0) { + var_i0 = var_l7; + var_i1 = 16u; + var_i0 += var_i1; + var_i1 = var_l7; + var_i2 = 32u; + var_i1 += var_i2; + var_i2 = var_l10; + var_i3 = var_l3; + var_i2 -= var_i3; + var_i3 = 4u; + var_i2 <<= (var_i3 & 31); + memory_copy(&instance->w2c_memory, &instance->w2c_memory, var_i0, var_i1, var_i2); + } + var_i0 = 46160u; + var_i1 = var_l10; + var_i2 = 1u; + var_i1 -= var_i2; + i32_store_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0), var_i1); + goto var_L51; + var_B52:; + var_i0 = instance->w2c_g121; + var_i1 = instance->w2c_g101; + var_i0 = var_i0 >= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g121; + w2c_highlights_f432(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f433(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + goto var_Bfunc; + } + var_i0 = var_l9; + var_i1 = var_l19; + var_i0 = var_i0 == var_i1; + var_i1 = instance->w2c_g121; + var_i2 = instance->w2c_g120; + var_i1 = var_i1 >= var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = instance->w2c_g121; + w2c_highlights_f432(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = instance->w2c_g118; + var_i1 = 1u; + var_i0 += var_i1; + var_l3 = var_i0; + var_i1 = instance->w2c_g117; + var_i0 = var_i0 < var_i1; + if (var_i0) { + var_i0 = var_l3; + instance->w2c_g118 = var_i0; + var_i0 = instance->w2c_g119; + var_i1 = 1u; + var_i0 += var_i1; + instance->w2c_g119 = var_i0; + var_i0 = instance->w2c_g116; + var_i1 = instance->w2c_g118; + var_i2 = 3u; + var_i1 <<= (var_i2 & 31); + var_i0 += var_i1; + var_l3 = var_i0; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + instance->w2c_g121 = var_i0; + var_i0 = var_l3; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + instance->w2c_g120 = var_i0; + var_i0 = instance->w2c_g121; + var_i1 = 1u; + var_i0 -= var_i1; + var_i0 = w2c_highlights_f420(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 20u); + instance->w2c_g107 = var_i0; + } else { + w2c_highlights_f433(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + goto var_Bfunc; + } + } + goto var_L1; + UNREACHABLE; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_liveLineCount_0(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = instance->w2c_g101; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_liveLineLen_0(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = var_p0; + var_i0 = w2c_highlights_f420(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 8u); + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_liveLineByteLen_0(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = var_p0; + var_i0 = w2c_highlights_f420(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 4u); + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_liveLineTextPtr_0(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = var_p0; + var_i0 = w2c_highlights_f420(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_liveLineFlags_0(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = var_p0; + var_i0 = w2c_highlights_f420(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 24u); + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_liveLineTokPtr_0(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = var_p0; + var_i0 = w2c_highlights_f420(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 12u); + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_liveLineTokCount_0(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = var_p0; + var_i0 = w2c_highlights_f420(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = i32_load_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0) + 16u); + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_liveChangesPtr_0(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 46160u; + FUNC_EPILOGUE; + return var_i0; +} + +u32 w2c_highlights_liveStats_0(w2c_highlights* instance, u32 var_p0) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1; + var_i0 = var_p0; + var_i0 = !(var_i0); + if (var_i0) { + var_i0 = instance->w2c_g123; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 1u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g95; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 2u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g96; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 3u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g85; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 4u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g86; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 5u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g106; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 6u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = 1440u; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 7u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g83; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 8u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g84; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 9u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g122; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 10u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g121; + goto var_Bfunc; + } + var_i0 = var_p0; + var_i1 = 11u; + var_i0 = var_i0 == var_i1; + if (var_i0) { + var_i0 = instance->w2c_g119; + goto var_Bfunc; + } + var_i0 = 0u; + var_Bfunc:; + FUNC_EPILOGUE; + return var_i0; +} + +void w2c_highlights_highlight_0(w2c_highlights* instance) { + v128 var_l0 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0; + var_i0 = 65536u; + instance->w2c_g0 = var_i0; + var_i0 = 65536u; + instance->w2c_g1 = var_i0; + var_i0 = 0u; + instance->w2c_g22 = var_i0; + var_i0 = 0u; + instance->w2c_g24 = var_i0; + w2c_highlights_f36(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f33(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + CALL_INDIRECT(instance->w2c_T0, void (*)(void*), w2c_highlights_t1, var_i0, instance->w2c_T0.data[var_i0].module_instance); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f35(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + FUNC_EPILOGUE; +} + +void w2c_highlights_f448(w2c_highlights* instance) { + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = 0u; + instance->w2c_g69 = var_i0; + var_i0 = 12416u; + var_i1 = 0u; + var_i2 = 32u; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 12448u; + var_i1 = 0u; + var_i2 = 1440u; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 0u; + instance->w2c_g25 = var_i0; + var_i0 = 0u; + instance->w2c_g26 = var_i0; + var_i0 = 0u; + instance->w2c_g27 = var_i0; + var_i0 = 0u; + instance->w2c_g28 = var_i0; + var_i0 = 0u; + instance->w2c_g29 = var_i0; + var_i0 = 0u; + instance->w2c_g30 = var_i0; + var_i0 = 0u; + instance->w2c_g31 = var_i0; + var_i0 = 0u; + instance->w2c_g71 = var_i0; + var_i0 = 0u; + instance->w2c_g72 = var_i0; + var_i0 = 0u; + instance->w2c_g73 = var_i0; + var_i0 = 45040u; + var_i1 = 0u; + var_i2 = 96u; + memory_fill(&instance->w2c_memory, var_i0, var_i1, var_i2); + var_i0 = 0u; + instance->w2c_g80 = var_i0; + var_i0 = 0u; + instance->w2c_g81 = var_i0; + var_i0 = 0u; + instance->w2c_g82 = var_i0; + FUNC_EPILOGUE; +} + +void w2c_highlights_f449(w2c_highlights* instance, u32 var_p0, u32 var_p1) { + v128 var_l2 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = 1u; + instance->w2c_g7 = var_i0; + var_i0 = var_p0; + var_i1 = var_p1; + var_i0 = w2c_highlights_f407(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = instance->w2c_g6; + if (var_i0) { + var_i0 = var_p0; + CALL_INDIRECT(instance->w2c_T0, void (*)(void*), w2c_highlights_t1, var_i0, instance->w2c_T0.data[var_i0].module_instance); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = 0u; + instance->w2c_g7 = var_i0; + var_i0 = var_p1; + if (var_i0) { + w2c_highlights_f36(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + var_i0 = var_p0; + var_i1 = 47u; + var_i0 = var_i0 == var_i1; + var_i1 = var_p0; + var_i2 = 49u; + var_i1 = var_i1 == var_i2; + var_i0 |= var_i1; + var_i1 = w2c_highlights_f211(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i2 = 0u; + var_i1 = var_i1 != var_i2; + var_i0 &= var_i1; + if (var_i0) { + var_i0 = w2c_highlights_f225(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = var_p0; + CALL_INDIRECT(instance->w2c_T0, void (*)(void*), w2c_highlights_t1, var_i0, instance->w2c_T0.data[var_i0].module_instance); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + goto var_Bfunc; + } + var_i0 = instance->w2c_g30; + if (var_i0) { + var_i0 = var_p0; + var_i0 = w2c_highlights_f408(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + goto var_Bfunc; + } + } + var_i0 = w2c_highlights_f72(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = var_p0; + var_i0 = w2c_highlights_f408(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + if (var_i0) { + goto var_Bfunc; + } + var_i0 = 1u; + instance->w2c_g7 = var_i0; + var_i0 = var_p0; + CALL_INDIRECT(instance->w2c_T0, void (*)(void*), w2c_highlights_t1, var_i0, instance->w2c_T0.data[var_i0].module_instance); +#if WASM_RT_USE_SEGUE_FOR_THIS_MODULE + wasm_rt_segue_write_base(instance->w2c_memory.data); +#endif + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_Bfunc:; + FUNC_EPILOGUE; +} + +void w2c_highlights_highlightStream_0(w2c_highlights* instance, u32 var_p0) { + v128 var_l1 = simde_wasm_i64x2_make(0, 0); + FUNC_PROLOGUE; + uint8_t* const wasm_rt_local_memory_base = (&instance->w2c_memory)->data; + uint64_t wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + (void)wasm_rt_local_memory_base; + (void)wasm_rt_local_memory_size; + u32 var_i0, var_i1, var_i2; + var_i0 = 65536u; + instance->w2c_g0 = var_i0; + var_i0 = 1u; + instance->w2c_g22 = var_i0; + var_i0 = var_p0; + instance->w2c_g23 = var_i0; + var_i0 = 65536u; + var_i1 = 0u; + var_i2 = var_p0; + var_i0 = var_i2 ? var_i0 : var_i1; + instance->w2c_g1 = var_i0; + var_i0 = 0u; + instance->w2c_g24 = var_i0; + var_i0 = var_p0; + if (var_i0) { + w2c_highlights_f448(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + } + w2c_highlights_f33(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = var_p0; + w2c_highlights_f17(instance, var_i0); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + var_i0 = i32_load8_u_default32(wasm_rt_local_memory_base, wasm_rt_local_memory_size, &instance->w2c_memory, (u64)(var_i0)); + var_i1 = var_p0; + w2c_highlights_f449(instance, var_i0, var_i1); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f18(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + w2c_highlights_f35(instance); + wasm_rt_local_memory_size = (&instance->w2c_memory)->size; + var_i0 = 0u; + instance->w2c_g22 = var_i0; + var_i0 = 0u; + instance->w2c_g24 = var_i0; + FUNC_EPILOGUE; +} diff --git a/apps/mobile/modules/t3-highlights/Vendor/highlights/highlights.h b/apps/mobile/modules/t3-highlights/Vendor/highlights/highlights.h new file mode 100644 index 0000000000000..837bf0ab64f75 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/Vendor/highlights/highlights.h @@ -0,0 +1,224 @@ +/* Generated by apps/mobile/scripts/generate-highlights.mts from @pierre/highlights 0.2.0 (highlights.wasm sha256 cf5fc4d83e7c1ddab19d163de096f787f87efe61504909aa469434f61ef51e2e). Do not edit. */ +/* Automatically generated by wasm2c */ +#ifndef HIGHLIGHTS_H_GENERATED_ +#define HIGHLIGHTS_H_GENERATED_ + +#include "wasm-rt.h" + +#include + +#ifndef WASM_RT_CORE_TYPES_DEFINED +#define WASM_RT_CORE_TYPES_DEFINED +typedef uint8_t u8; +typedef int8_t s8; +typedef uint16_t u16; +typedef int16_t s16; +typedef uint32_t u32; +typedef int32_t s32; +typedef uint64_t u64; +typedef int64_t s64; +typedef float f32; +typedef double f64; +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +struct w2c_env; + +typedef struct w2c_highlights { + struct w2c_env* w2c_env_instance; + u32 w2c_g0; + u32 w2c_g1; + u32 w2c_g2; + u32 w2c_g3; + u32 w2c_g4; + u32 w2c_g5; + u32 w2c_g6; + u32 w2c_g7; + u32 w2c_g8; + u32 w2c_g9; + u32 w2c_g10; + u64 w2c_g11; + u32 w2c_g12; + u32 w2c_g13; + u32 w2c_g14; + u32 w2c_g15; + u32 w2c_g16; + u32 w2c_g17; + u32 w2c_g18; + u32 w2c_g19; + u32 w2c_g20; + u32 w2c_g21; + u32 w2c_g22; + u32 w2c_g23; + u32 w2c_g24; + u32 w2c_g25; + u32 w2c_g26; + u32 w2c_g27; + u32 w2c_g28; + u32 w2c_g29; + u32 w2c_g30; + u32 w2c_g31; + u32 w2c_g32; + u32 w2c_g33; + u32 w2c_g34; + u32 w2c_g35; + u32 w2c_g36; + u32 w2c_g37; + u32 w2c_g38; + u32 w2c_g39; + u32 w2c_g40; + u32 w2c_g41; + u32 w2c_g42; + u32 w2c_g43; + u32 w2c_g44; + u32 w2c_g45; + u32 w2c_g46; + u32 w2c_g47; + u32 w2c_g48; + u32 w2c_g49; + u32 w2c_g50; + u32 w2c_g51; + u32 w2c_g52; + u32 w2c_g53; + u32 w2c_g54; + u32 w2c_g55; + u32 w2c_g56; + u32 w2c_g57; + u32 w2c_g58; + u32 w2c_g59; + u32 w2c_g60; + u32 w2c_g61; + u32 w2c_g62; + u32 w2c_g63; + u32 w2c_g64; + u32 w2c_g65; + u32 w2c_g66; + u32 w2c_g67; + u32 w2c_g68; + u32 w2c_g69; + u32 w2c_g70; + u32 w2c_g71; + u32 w2c_g72; + u32 w2c_g73; + u32 w2c_g74; + u32 w2c_g75; + u32 w2c_g76; + u32 w2c_g77; + u32 w2c_g78; + u32 w2c_g79; + u32 w2c_g80; + u32 w2c_g81; + u32 w2c_g82; + u32 w2c_g83; + u32 w2c_g84; + u32 w2c_g85; + u32 w2c_g86; + u32 w2c_g87; + u32 w2c_g88; + u32 w2c_g89; + u32 w2c_g90; + u32 w2c_g91; + u32 w2c_g92; + u32 w2c_g93; + u32 w2c_g94; + u32 w2c_g95; + u32 w2c_g96; + u32 w2c_g97; + u32 w2c_g98; + u32 w2c_g99; + u32 w2c_g100; + u32 w2c_g101; + u32 w2c_g102; + u32 w2c_g103; + u32 w2c_g104; + u32 w2c_g105; + u32 w2c_g106; + u32 w2c_g107; + u32 w2c_g108; + u32 w2c_g109; + u32 w2c_g110; + u32 w2c_g111; + u32 w2c_g112; + u32 w2c_g113; + u32 w2c_g114; + u32 w2c_g115; + u32 w2c_g116; + u32 w2c_g117; + u32 w2c_g118; + u32 w2c_g119; + u32 w2c_g120; + u32 w2c_g121; + u32 w2c_g122; + u32 w2c_g123; + wasm_rt_memory_t w2c_memory; + wasm_rt_funcref_table_t w2c_T0; +} w2c_highlights; + +void wasm2c_highlights_instantiate(w2c_highlights*, struct w2c_env*); +void wasm2c_highlights_free(w2c_highlights*); +wasm_rt_func_type_t wasm2c_highlights_get_func_type(uint32_t param_count, uint32_t result_count, ...); + +/* import: 'env' 'is_id_continue' */ +u32 w2c_env_is_id_continue(struct w2c_env*, u32, u32); +void wasm_tailcall_w2c_env_is_id_continue(void **instance_ptr, void *tail_call_stack, wasm_rt_tailcallee_t *next); + +/* import: 'env' 'is_id_start' */ +u32 w2c_env_is_id_start(struct w2c_env*, u32, u32); +void wasm_tailcall_w2c_env_is_id_start(void **instance_ptr, void *tail_call_stack, wasm_rt_tailcallee_t *next); + +/* export: 'memory' */ +wasm_rt_memory_t* w2c_highlights_memory(w2c_highlights* instance); + +/* export: 'liveStage' */ +u32 w2c_highlights_liveStage(w2c_highlights*, u32); + +/* export: 'liveInitDoc' */ +void w2c_highlights_liveInitDoc(w2c_highlights*, u32, u32, u32); + +/* export: 'liveApplyEdits' */ +void w2c_highlights_liveApplyEdits(w2c_highlights*, u32, u32); + +/* export: 'liveRun' */ +u32 w2c_highlights_liveRun(w2c_highlights*, u32, u32, u32); + +/* export: 'liveLineCount' */ +u32 w2c_highlights_liveLineCount(w2c_highlights*); + +/* export: 'liveLineLen' */ +u32 w2c_highlights_liveLineLen(w2c_highlights*, u32); + +/* export: 'liveLineByteLen' */ +u32 w2c_highlights_liveLineByteLen(w2c_highlights*, u32); + +/* export: 'liveLineTextPtr' */ +u32 w2c_highlights_liveLineTextPtr(w2c_highlights*, u32); + +/* export: 'liveLineFlags' */ +u32 w2c_highlights_liveLineFlags(w2c_highlights*, u32); + +/* export: 'liveLineTokPtr' */ +u32 w2c_highlights_liveLineTokPtr(w2c_highlights*, u32); + +/* export: 'liveLineTokCount' */ +u32 w2c_highlights_liveLineTokCount(w2c_highlights*, u32); + +/* export: 'liveChangesPtr' */ +u32 w2c_highlights_liveChangesPtr(w2c_highlights*); + +/* export: 'liveStats' */ +u32 w2c_highlights_liveStats(w2c_highlights*, u32); + +/* export: 'highlight' */ +void w2c_highlights_highlight(w2c_highlights*); + +/* export: 'highlightStream' */ +void w2c_highlights_highlightStream(w2c_highlights*, u32); + +#ifdef __cplusplus +} +#endif + +#endif /* HIGHLIGHTS_H_GENERATED_ */ diff --git a/apps/mobile/modules/t3-highlights/Vendor/simde/LICENSE b/apps/mobile/modules/t3-highlights/Vendor/simde/LICENSE new file mode 100644 index 0000000000000..c7f6b6d752a96 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/Vendor/simde/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2017 Evan Nemerson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/apps/mobile/modules/t3-highlights/Vendor/simde/wasm/simd128.h b/apps/mobile/modules/t3-highlights/Vendor/simde/wasm/simd128.h new file mode 100644 index 0000000000000..046f5b18f0303 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/Vendor/simde/wasm/simd128.h @@ -0,0 +1,17950 @@ +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* :: Begin simde/wasm/simd128.h :: */ +/* SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Copyright: + * 2021 Evan Nemerson + * 2023 Michael R. Crusoe + */ + +#if !defined(SIMDE_WASM_SIMD128_H) +#define SIMDE_WASM_SIMD128_H + +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* :: Begin simde/simde-common.h :: */ +/* SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Copyright: + * 2017-2020 Evan Nemerson + * 2023 Yi-Yen Chung (Copyright owned by Andes Technology) + * 2023 Ju-Hung Li (Copyright owned by NTHU pllab) + */ + +#if !defined(SIMDE_COMMON_H) +#define SIMDE_COMMON_H + +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* :: Begin simde/hedley.h :: */ +/* Hedley - https://nemequ.github.io/hedley + * Created by Evan Nemerson + * + * To the extent possible under law, the author(s) have dedicated all + * copyright and related and neighboring rights to this software to + * the public domain worldwide. This software is distributed without + * any warranty. + * + * For details, see . + * SPDX-License-Identifier: CC0-1.0 + */ + +#if !defined(HEDLEY_VERSION) || (HEDLEY_VERSION < 16) +#if defined(HEDLEY_VERSION) +# undef HEDLEY_VERSION +#endif +#define HEDLEY_VERSION 16 + +#if defined(HEDLEY_STRINGIFY_EX) +# undef HEDLEY_STRINGIFY_EX +#endif +#define HEDLEY_STRINGIFY_EX(x) #x + +#if defined(HEDLEY_STRINGIFY) +# undef HEDLEY_STRINGIFY +#endif +#define HEDLEY_STRINGIFY(x) HEDLEY_STRINGIFY_EX(x) + +#if defined(HEDLEY_CONCAT_EX) +# undef HEDLEY_CONCAT_EX +#endif +#define HEDLEY_CONCAT_EX(a,b) a##b + +#if defined(HEDLEY_CONCAT) +# undef HEDLEY_CONCAT +#endif +#define HEDLEY_CONCAT(a,b) HEDLEY_CONCAT_EX(a,b) + +#if defined(HEDLEY_CONCAT3_EX) +# undef HEDLEY_CONCAT3_EX +#endif +#define HEDLEY_CONCAT3_EX(a,b,c) a##b##c + +#if defined(HEDLEY_CONCAT3) +# undef HEDLEY_CONCAT3 +#endif +#define HEDLEY_CONCAT3(a,b,c) HEDLEY_CONCAT3_EX(a,b,c) + +#if defined(HEDLEY_VERSION_ENCODE) +# undef HEDLEY_VERSION_ENCODE +#endif +#define HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) + +#if defined(HEDLEY_VERSION_DECODE_MAJOR) +# undef HEDLEY_VERSION_DECODE_MAJOR +#endif +#define HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) + +#if defined(HEDLEY_VERSION_DECODE_MINOR) +# undef HEDLEY_VERSION_DECODE_MINOR +#endif +#define HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) + +#if defined(HEDLEY_VERSION_DECODE_REVISION) +# undef HEDLEY_VERSION_DECODE_REVISION +#endif +#define HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) + +#if defined(HEDLEY_GNUC_VERSION) +# undef HEDLEY_GNUC_VERSION +#endif +#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) +# define HEDLEY_GNUC_VERSION HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#elif defined(__GNUC__) +# define HEDLEY_GNUC_VERSION HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) +#endif + +#if defined(HEDLEY_GNUC_VERSION_CHECK) +# undef HEDLEY_GNUC_VERSION_CHECK +#endif +#if defined(HEDLEY_GNUC_VERSION) +# define HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (HEDLEY_GNUC_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_MSVC_VERSION) +# undef HEDLEY_MSVC_VERSION +#endif +#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL) +# define HEDLEY_MSVC_VERSION HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) +#elif defined(_MSC_FULL_VER) && !defined(__ICL) +# define HEDLEY_MSVC_VERSION HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) +#elif defined(_MSC_VER) && !defined(__ICL) +# define HEDLEY_MSVC_VERSION HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) +#endif + +#if defined(HEDLEY_MSVC_VERSION_CHECK) +# undef HEDLEY_MSVC_VERSION_CHECK +#endif +#if !defined(HEDLEY_MSVC_VERSION) +# define HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) +# define HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) +#elif defined(_MSC_VER) && (_MSC_VER >= 1200) +# define HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) +#else +# define HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) +#endif + +#if defined(HEDLEY_INTEL_VERSION) +# undef HEDLEY_INTEL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL) +# define HEDLEY_INTEL_VERSION HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) +#elif defined(__INTEL_COMPILER) && !defined(__ICL) +# define HEDLEY_INTEL_VERSION HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) +#endif + +#if defined(HEDLEY_INTEL_VERSION_CHECK) +# undef HEDLEY_INTEL_VERSION_CHECK +#endif +#if defined(HEDLEY_INTEL_VERSION) +# define HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (HEDLEY_INTEL_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_INTEL_CL_VERSION) +# undef HEDLEY_INTEL_CL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL) +# define HEDLEY_INTEL_CL_VERSION HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0) +#endif + +#if defined(HEDLEY_INTEL_CL_VERSION_CHECK) +# undef HEDLEY_INTEL_CL_VERSION_CHECK +#endif +#if defined(HEDLEY_INTEL_CL_VERSION) +# define HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (HEDLEY_INTEL_CL_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_PGI_VERSION) +# undef HEDLEY_PGI_VERSION +#endif +#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) +# define HEDLEY_PGI_VERSION HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) +#endif + +#if defined(HEDLEY_PGI_VERSION_CHECK) +# undef HEDLEY_PGI_VERSION_CHECK +#endif +#if defined(HEDLEY_PGI_VERSION) +# define HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (HEDLEY_PGI_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_SUNPRO_VERSION) +# undef HEDLEY_SUNPRO_VERSION +#endif +#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) +# define HEDLEY_SUNPRO_VERSION HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) +#elif defined(__SUNPRO_C) +# define HEDLEY_SUNPRO_VERSION HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) +#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) +# define HEDLEY_SUNPRO_VERSION HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) +#elif defined(__SUNPRO_CC) +# define HEDLEY_SUNPRO_VERSION HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) +#endif + +#if defined(HEDLEY_SUNPRO_VERSION_CHECK) +# undef HEDLEY_SUNPRO_VERSION_CHECK +#endif +#if defined(HEDLEY_SUNPRO_VERSION) +# define HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (HEDLEY_SUNPRO_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_EMSCRIPTEN_VERSION) +# undef HEDLEY_EMSCRIPTEN_VERSION +#endif +#if defined(__EMSCRIPTEN__) +# include +# define HEDLEY_EMSCRIPTEN_VERSION HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) +#endif + +#if defined(HEDLEY_EMSCRIPTEN_VERSION_CHECK) +# undef HEDLEY_EMSCRIPTEN_VERSION_CHECK +#endif +#if defined(HEDLEY_EMSCRIPTEN_VERSION) +# define HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (HEDLEY_EMSCRIPTEN_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_ARM_VERSION) +# undef HEDLEY_ARM_VERSION +#endif +#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) +# define HEDLEY_ARM_VERSION HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) +#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) +# define HEDLEY_ARM_VERSION HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) +#endif + +#if defined(HEDLEY_ARM_VERSION_CHECK) +# undef HEDLEY_ARM_VERSION_CHECK +#endif +#if defined(HEDLEY_ARM_VERSION) +# define HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (HEDLEY_ARM_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_IBM_VERSION) +# undef HEDLEY_IBM_VERSION +#endif +#if defined(__ibmxl__) +# define HEDLEY_IBM_VERSION HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) +#elif defined(__xlC__) && defined(__xlC_ver__) +# define HEDLEY_IBM_VERSION HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) +#elif defined(__xlC__) +# define HEDLEY_IBM_VERSION HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) +#endif + +#if defined(HEDLEY_IBM_VERSION_CHECK) +# undef HEDLEY_IBM_VERSION_CHECK +#endif +#if defined(HEDLEY_IBM_VERSION) +# define HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (HEDLEY_IBM_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_TI_VERSION) +# undef HEDLEY_TI_VERSION +#endif +#if \ + defined(__TI_COMPILER_VERSION__) && \ + ( \ + defined(__TMS470__) || defined(__TI_ARM__) || \ + defined(__MSP430__) || \ + defined(__TMS320C2000__) \ + ) +# if (__TI_COMPILER_VERSION__ >= 16000000) +# define HEDLEY_TI_VERSION HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +# endif +#endif + +#if defined(HEDLEY_TI_VERSION_CHECK) +# undef HEDLEY_TI_VERSION_CHECK +#endif +#if defined(HEDLEY_TI_VERSION) +# define HEDLEY_TI_VERSION_CHECK(major,minor,patch) (HEDLEY_TI_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_TI_CL2000_VERSION) +# undef HEDLEY_TI_CL2000_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) +# define HEDLEY_TI_CL2000_VERSION HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(HEDLEY_TI_CL2000_VERSION_CHECK) +# undef HEDLEY_TI_CL2000_VERSION_CHECK +#endif +#if defined(HEDLEY_TI_CL2000_VERSION) +# define HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (HEDLEY_TI_CL2000_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_TI_CL430_VERSION) +# undef HEDLEY_TI_CL430_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) +# define HEDLEY_TI_CL430_VERSION HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(HEDLEY_TI_CL430_VERSION_CHECK) +# undef HEDLEY_TI_CL430_VERSION_CHECK +#endif +#if defined(HEDLEY_TI_CL430_VERSION) +# define HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (HEDLEY_TI_CL430_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_TI_ARMCL_VERSION) +# undef HEDLEY_TI_ARMCL_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) +# define HEDLEY_TI_ARMCL_VERSION HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(HEDLEY_TI_ARMCL_VERSION_CHECK) +# undef HEDLEY_TI_ARMCL_VERSION_CHECK +#endif +#if defined(HEDLEY_TI_ARMCL_VERSION) +# define HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (HEDLEY_TI_ARMCL_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_TI_CL6X_VERSION) +# undef HEDLEY_TI_CL6X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) +# define HEDLEY_TI_CL6X_VERSION HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(HEDLEY_TI_CL6X_VERSION_CHECK) +# undef HEDLEY_TI_CL6X_VERSION_CHECK +#endif +#if defined(HEDLEY_TI_CL6X_VERSION) +# define HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (HEDLEY_TI_CL6X_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_TI_CL7X_VERSION) +# undef HEDLEY_TI_CL7X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) +# define HEDLEY_TI_CL7X_VERSION HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(HEDLEY_TI_CL7X_VERSION_CHECK) +# undef HEDLEY_TI_CL7X_VERSION_CHECK +#endif +#if defined(HEDLEY_TI_CL7X_VERSION) +# define HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (HEDLEY_TI_CL7X_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_TI_CLPRU_VERSION) +# undef HEDLEY_TI_CLPRU_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) +# define HEDLEY_TI_CLPRU_VERSION HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(HEDLEY_TI_CLPRU_VERSION_CHECK) +# undef HEDLEY_TI_CLPRU_VERSION_CHECK +#endif +#if defined(HEDLEY_TI_CLPRU_VERSION) +# define HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (HEDLEY_TI_CLPRU_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_CRAY_VERSION) +# undef HEDLEY_CRAY_VERSION +#endif +#if defined(_CRAYC) +# if defined(_RELEASE_PATCHLEVEL) +# define HEDLEY_CRAY_VERSION HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) +# else +# define HEDLEY_CRAY_VERSION HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) +# endif +#endif + +#if defined(HEDLEY_CRAY_VERSION_CHECK) +# undef HEDLEY_CRAY_VERSION_CHECK +#endif +#if defined(HEDLEY_CRAY_VERSION) +# define HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (HEDLEY_CRAY_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_IAR_VERSION) +# undef HEDLEY_IAR_VERSION +#endif +#if defined(__IAR_SYSTEMS_ICC__) +# if __VER__ > 1000 +# define HEDLEY_IAR_VERSION HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) +# else +# define HEDLEY_IAR_VERSION HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0) +# endif +#endif + +#if defined(HEDLEY_IAR_VERSION_CHECK) +# undef HEDLEY_IAR_VERSION_CHECK +#endif +#if defined(HEDLEY_IAR_VERSION) +# define HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (HEDLEY_IAR_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_TINYC_VERSION) +# undef HEDLEY_TINYC_VERSION +#endif +#if defined(__TINYC__) +# define HEDLEY_TINYC_VERSION HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) +#endif + +#if defined(HEDLEY_TINYC_VERSION_CHECK) +# undef HEDLEY_TINYC_VERSION_CHECK +#endif +#if defined(HEDLEY_TINYC_VERSION) +# define HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (HEDLEY_TINYC_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_DMC_VERSION) +# undef HEDLEY_DMC_VERSION +#endif +#if defined(__DMC__) +# define HEDLEY_DMC_VERSION HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) +#endif + +#if defined(HEDLEY_DMC_VERSION_CHECK) +# undef HEDLEY_DMC_VERSION_CHECK +#endif +#if defined(HEDLEY_DMC_VERSION) +# define HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (HEDLEY_DMC_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_COMPCERT_VERSION) +# undef HEDLEY_COMPCERT_VERSION +#endif +#if defined(__COMPCERT_VERSION__) +# define HEDLEY_COMPCERT_VERSION HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) +#endif + +#if defined(HEDLEY_COMPCERT_VERSION_CHECK) +# undef HEDLEY_COMPCERT_VERSION_CHECK +#endif +#if defined(HEDLEY_COMPCERT_VERSION) +# define HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (HEDLEY_COMPCERT_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_PELLES_VERSION) +# undef HEDLEY_PELLES_VERSION +#endif +#if defined(__POCC__) +# define HEDLEY_PELLES_VERSION HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) +#endif + +#if defined(HEDLEY_PELLES_VERSION_CHECK) +# undef HEDLEY_PELLES_VERSION_CHECK +#endif +#if defined(HEDLEY_PELLES_VERSION) +# define HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (HEDLEY_PELLES_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_MCST_LCC_VERSION) +# undef HEDLEY_MCST_LCC_VERSION +#endif +#if defined(__LCC__) && defined(__LCC_MINOR__) +# define HEDLEY_MCST_LCC_VERSION HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__) +#endif + +#if defined(HEDLEY_MCST_LCC_VERSION_CHECK) +# undef HEDLEY_MCST_LCC_VERSION_CHECK +#endif +#if defined(HEDLEY_MCST_LCC_VERSION) +# define HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (HEDLEY_MCST_LCC_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_GCC_VERSION) +# undef HEDLEY_GCC_VERSION +#endif +#if \ + defined(HEDLEY_GNUC_VERSION) && \ + !defined(__clang__) && \ + !defined(HEDLEY_INTEL_VERSION) && \ + !defined(HEDLEY_PGI_VERSION) && \ + !defined(HEDLEY_ARM_VERSION) && \ + !defined(HEDLEY_CRAY_VERSION) && \ + !defined(HEDLEY_TI_VERSION) && \ + !defined(HEDLEY_TI_ARMCL_VERSION) && \ + !defined(HEDLEY_TI_CL430_VERSION) && \ + !defined(HEDLEY_TI_CL2000_VERSION) && \ + !defined(HEDLEY_TI_CL6X_VERSION) && \ + !defined(HEDLEY_TI_CL7X_VERSION) && \ + !defined(HEDLEY_TI_CLPRU_VERSION) && \ + !defined(__COMPCERT__) && \ + !defined(HEDLEY_MCST_LCC_VERSION) +# define HEDLEY_GCC_VERSION HEDLEY_GNUC_VERSION +#endif + +#if defined(HEDLEY_GCC_VERSION_CHECK) +# undef HEDLEY_GCC_VERSION_CHECK +#endif +#if defined(HEDLEY_GCC_VERSION) +# define HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (HEDLEY_GCC_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else +# define HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(HEDLEY_HAS_ATTRIBUTE) +# undef HEDLEY_HAS_ATTRIBUTE +#endif +#if \ + defined(__has_attribute) && \ + ( \ + (!defined(HEDLEY_IAR_VERSION) || HEDLEY_IAR_VERSION_CHECK(8,5,9)) \ + ) +# define HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) +#else +# define HEDLEY_HAS_ATTRIBUTE(attribute) (0) +#endif + +#if defined(HEDLEY_GNUC_HAS_ATTRIBUTE) +# undef HEDLEY_GNUC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) +# define HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) HEDLEY_HAS_ATTRIBUTE(attribute) +#else +# define HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(HEDLEY_GCC_HAS_ATTRIBUTE) +# undef HEDLEY_GCC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) +# define HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) HEDLEY_HAS_ATTRIBUTE(attribute) +#else +# define HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(HEDLEY_HAS_CPP_ATTRIBUTE) +# undef HEDLEY_HAS_CPP_ATTRIBUTE +#endif +#if \ + defined(__has_cpp_attribute) && \ + defined(__cplusplus) && \ + (!defined(HEDLEY_SUNPRO_VERSION) || HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) +# define HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) +#else +# define HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) +#endif + +#if defined(HEDLEY_HAS_CPP_ATTRIBUTE_NS) +# undef HEDLEY_HAS_CPP_ATTRIBUTE_NS +#endif +#if !defined(__cplusplus) || !defined(__has_cpp_attribute) +# define HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#elif \ + !defined(HEDLEY_PGI_VERSION) && \ + !defined(HEDLEY_IAR_VERSION) && \ + (!defined(HEDLEY_SUNPRO_VERSION) || HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ + (!defined(HEDLEY_MSVC_VERSION) || HEDLEY_MSVC_VERSION_CHECK(19,20,0)) +# define HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) +#else +# define HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#endif + +#if defined(HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) +# undef HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) +# define HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else +# define HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(HEDLEY_GCC_HAS_CPP_ATTRIBUTE) +# undef HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) +# define HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else +# define HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(HEDLEY_HAS_BUILTIN) +# undef HEDLEY_HAS_BUILTIN +#endif +#if defined(__has_builtin) +# define HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else +# define HEDLEY_HAS_BUILTIN(builtin) (0) +#endif + +#if defined(HEDLEY_GNUC_HAS_BUILTIN) +# undef HEDLEY_GNUC_HAS_BUILTIN +#endif +#if defined(__has_builtin) +# define HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else +# define HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(HEDLEY_GCC_HAS_BUILTIN) +# undef HEDLEY_GCC_HAS_BUILTIN +#endif +#if defined(__has_builtin) +# define HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else +# define HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(HEDLEY_HAS_FEATURE) +# undef HEDLEY_HAS_FEATURE +#endif +#if defined(__has_feature) +# define HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#else +# define HEDLEY_HAS_FEATURE(feature) (0) +#endif + +#if defined(HEDLEY_GNUC_HAS_FEATURE) +# undef HEDLEY_GNUC_HAS_FEATURE +#endif +#if defined(__has_feature) +# define HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else +# define HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(HEDLEY_GCC_HAS_FEATURE) +# undef HEDLEY_GCC_HAS_FEATURE +#endif +#if defined(__has_feature) +# define HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else +# define HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(HEDLEY_HAS_EXTENSION) +# undef HEDLEY_HAS_EXTENSION +#endif +#if defined(__has_extension) +# define HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) +#else +# define HEDLEY_HAS_EXTENSION(extension) (0) +#endif + +#if defined(HEDLEY_GNUC_HAS_EXTENSION) +# undef HEDLEY_GNUC_HAS_EXTENSION +#endif +#if defined(__has_extension) +# define HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else +# define HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(HEDLEY_GCC_HAS_EXTENSION) +# undef HEDLEY_GCC_HAS_EXTENSION +#endif +#if defined(__has_extension) +# define HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else +# define HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(HEDLEY_HAS_DECLSPEC_ATTRIBUTE) +# undef HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) +# define HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) +#else +# define HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) +#endif + +#if defined(HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) +# undef HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) +# define HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else +# define HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) +# undef HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) +# define HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else +# define HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(HEDLEY_HAS_WARNING) +# undef HEDLEY_HAS_WARNING +#endif +#if defined(__has_warning) +# define HEDLEY_HAS_WARNING(warning) __has_warning(warning) +#else +# define HEDLEY_HAS_WARNING(warning) (0) +#endif + +#if defined(HEDLEY_GNUC_HAS_WARNING) +# undef HEDLEY_GNUC_HAS_WARNING +#endif +#if defined(__has_warning) +# define HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else +# define HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(HEDLEY_GCC_HAS_WARNING) +# undef HEDLEY_GCC_HAS_WARNING +#endif +#if defined(__has_warning) +# define HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else +# define HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + defined(__clang__) || \ + HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ + HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ + HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ + (HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) +# define HEDLEY_PRAGMA(value) _Pragma(#value) +#elif HEDLEY_MSVC_VERSION_CHECK(15,0,0) +# define HEDLEY_PRAGMA(value) __pragma(value) +#else +# define HEDLEY_PRAGMA(value) +#endif + +#if defined(HEDLEY_DIAGNOSTIC_PUSH) +# undef HEDLEY_DIAGNOSTIC_PUSH +#endif +#if defined(HEDLEY_DIAGNOSTIC_POP) +# undef HEDLEY_DIAGNOSTIC_POP +#endif +#if defined(__clang__) +# define HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") +# define HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") +#elif HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") +# define HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#elif HEDLEY_GCC_VERSION_CHECK(4,6,0) +# define HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") +# define HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") +#elif \ + HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) +# define HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) +#elif HEDLEY_ARM_VERSION_CHECK(5,6,0) +# define HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") +# define HEDLEY_DIAGNOSTIC_POP _Pragma("pop") +#elif \ + HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) +# define HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") +# define HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") +#elif HEDLEY_PELLES_VERSION_CHECK(2,90,0) +# define HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") +# define HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#else +# define HEDLEY_DIAGNOSTIC_PUSH +# define HEDLEY_DIAGNOSTIC_POP +#endif + +/* HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) +# undef HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#endif +#if defined(__cplusplus) +# if HEDLEY_HAS_WARNING("-Wc++98-compat") +# if HEDLEY_HAS_WARNING("-Wc++17-extensions") +# if HEDLEY_HAS_WARNING("-Wc++1z-extensions") +# define HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \ + xpr \ + HEDLEY_DIAGNOSTIC_POP +# else +# define HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + xpr \ + HEDLEY_DIAGNOSTIC_POP +# endif +# else +# define HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + xpr \ + HEDLEY_DIAGNOSTIC_POP +# endif +# endif +#endif +#if !defined(HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) +# define HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x +#endif + +#if defined(HEDLEY_CONST_CAST) +# undef HEDLEY_CONST_CAST +#endif +#if defined(__cplusplus) +# define HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) +#elif \ + HEDLEY_HAS_WARNING("-Wcast-qual") || \ + HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ + HEDLEY_DIAGNOSTIC_PUSH \ + HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ + ((T) (expr)); \ + HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define HEDLEY_CONST_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(HEDLEY_REINTERPRET_CAST) +# undef HEDLEY_REINTERPRET_CAST +#endif +#if defined(__cplusplus) +# define HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) +#else +# define HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(HEDLEY_STATIC_CAST) +# undef HEDLEY_STATIC_CAST +#endif +#if defined(__cplusplus) +# define HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) +#else +# define HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(HEDLEY_CPP_CAST) +# undef HEDLEY_CPP_CAST +#endif +#if defined(__cplusplus) +# if HEDLEY_HAS_WARNING("-Wold-style-cast") +# define HEDLEY_CPP_CAST(T, expr) \ + HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ + ((T) (expr)) \ + HEDLEY_DIAGNOSTIC_POP +# elif HEDLEY_IAR_VERSION_CHECK(8,3,0) +# define HEDLEY_CPP_CAST(T, expr) \ + HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("diag_suppress=Pe137") \ + HEDLEY_DIAGNOSTIC_POP +# else +# define HEDLEY_CPP_CAST(T, expr) ((T) (expr)) +# endif +#else +# define HEDLEY_CPP_CAST(T, expr) (expr) +#endif + +#if defined(HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) +# undef HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif +#if HEDLEY_HAS_WARNING("-Wdeprecated-declarations") +# define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#elif HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") +#elif HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786)) +#elif HEDLEY_PGI_VERSION_CHECK(20,7,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445") +#elif HEDLEY_PGI_VERSION_CHECK(17,10,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif HEDLEY_GCC_VERSION_CHECK(4,3,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif HEDLEY_MSVC_VERSION_CHECK(15,0,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) +#elif HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif \ + HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") +#elif HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) +# define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") +#elif HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) +# define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") +#elif HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") +#elif HEDLEY_PELLES_VERSION_CHECK(2,90,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") +#else +# define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif + +#if defined(HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) +# undef HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif +#if HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") +#elif HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") +#elif HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161)) +#elif HEDLEY_PGI_VERSION_CHECK(17,10,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") +#elif HEDLEY_GCC_VERSION_CHECK(4,3,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") +#elif HEDLEY_MSVC_VERSION_CHECK(15,0,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) +#elif \ + HEDLEY_TI_VERSION_CHECK(16,9,0) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") +#elif HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161") +#else +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif + +#if defined(HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) +# undef HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif +#if HEDLEY_HAS_WARNING("-Wunknown-attributes") +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") +#elif HEDLEY_GCC_VERSION_CHECK(4,6,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif HEDLEY_INTEL_VERSION_CHECK(17,0,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") +#elif HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292)) +#elif HEDLEY_MSVC_VERSION_CHECK(19,0,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) +#elif HEDLEY_PGI_VERSION_CHECK(20,7,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098") +#elif HEDLEY_PGI_VERSION_CHECK(17,10,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#elif HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") +#elif \ + HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") +#elif HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") +#elif HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#else +# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif + +#if defined(HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) +# undef HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif +#if HEDLEY_HAS_WARNING("-Wcast-qual") +# define HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") +#elif HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") +#elif HEDLEY_GCC_VERSION_CHECK(3,0,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") +#else +# define HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif + +#if defined(HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) +# undef HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif +#if HEDLEY_HAS_WARNING("-Wunused-function") +# define HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"") +#elif HEDLEY_GCC_VERSION_CHECK(3,4,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"") +#elif HEDLEY_MSVC_VERSION_CHECK(1,0,0) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505)) +#elif HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142") +#else +# define HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif + +#if defined(HEDLEY_DEPRECATED) +# undef HEDLEY_DEPRECATED +#endif +#if defined(HEDLEY_DEPRECATED_FOR) +# undef HEDLEY_DEPRECATED_FOR +#endif +#if \ + HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) +# define HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) +#elif \ + (HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(HEDLEY_IAR_VERSION)) || \ + HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ + HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) +# define HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) +#elif defined(__cplusplus) && (__cplusplus >= 201402L) +# define HEDLEY_DEPRECATED(since) HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) +# define HEDLEY_DEPRECATED_FOR(since, replacement) HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) +#elif \ + HEDLEY_HAS_ATTRIBUTE(deprecated) || \ + HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + HEDLEY_IAR_VERSION_CHECK(8,10,0) +# define HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) +# define HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) +#elif \ + HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \ + HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define HEDLEY_DEPRECATED(since) __declspec(deprecated) +# define HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) +#elif HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define HEDLEY_DEPRECATED(since) _Pragma("deprecated") +# define HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") +#else +# define HEDLEY_DEPRECATED(since) +# define HEDLEY_DEPRECATED_FOR(since, replacement) +#endif + +#if defined(HEDLEY_UNAVAILABLE) +# undef HEDLEY_UNAVAILABLE +#endif +#if \ + HEDLEY_HAS_ATTRIBUTE(warning) || \ + HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) +#else +# define HEDLEY_UNAVAILABLE(available_since) +#endif + +#if defined(HEDLEY_WARN_UNUSED_RESULT) +# undef HEDLEY_WARN_UNUSED_RESULT +#endif +#if defined(HEDLEY_WARN_UNUSED_RESULT_MSG) +# undef HEDLEY_WARN_UNUSED_RESULT_MSG +#endif +#if \ + HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ + HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + (HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) +# define HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) +#elif (HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) +# define HEDLEY_WARN_UNUSED_RESULT HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +# define HEDLEY_WARN_UNUSED_RESULT_MSG(msg) HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) +#elif HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) +# define HEDLEY_WARN_UNUSED_RESULT HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +# define HEDLEY_WARN_UNUSED_RESULT_MSG(msg) HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +#elif defined(_Check_return_) /* SAL */ +# define HEDLEY_WARN_UNUSED_RESULT _Check_return_ +# define HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ +#else +# define HEDLEY_WARN_UNUSED_RESULT +# define HEDLEY_WARN_UNUSED_RESULT_MSG(msg) +#endif + +#if defined(HEDLEY_SENTINEL) +# undef HEDLEY_SENTINEL +#endif +#if \ + HEDLEY_HAS_ATTRIBUTE(sentinel) || \ + HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) +#else +# define HEDLEY_SENTINEL(position) +#endif + +#if defined(HEDLEY_NO_RETURN) +# undef HEDLEY_NO_RETURN +#endif +#if HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define HEDLEY_NO_RETURN __noreturn +#elif \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +# define HEDLEY_NO_RETURN _Noreturn +#elif defined(__cplusplus) && (__cplusplus >= 201103L) +# define HEDLEY_NO_RETURN HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) +#elif \ + HEDLEY_HAS_ATTRIBUTE(noreturn) || \ + HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ + HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + HEDLEY_IAR_VERSION_CHECK(8,10,0) +# define HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define HEDLEY_NO_RETURN _Pragma("does_not_return") +#elif \ + HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define HEDLEY_NO_RETURN __declspec(noreturn) +#elif HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) +# define HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") +#elif HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) +# define HEDLEY_NO_RETURN __attribute((noreturn)) +#elif HEDLEY_PELLES_VERSION_CHECK(9,0,0) +# define HEDLEY_NO_RETURN __declspec(noreturn) +#else +# define HEDLEY_NO_RETURN +#endif + +#if defined(HEDLEY_NO_ESCAPE) +# undef HEDLEY_NO_ESCAPE +#endif +#if HEDLEY_HAS_ATTRIBUTE(noescape) +# define HEDLEY_NO_ESCAPE __attribute__((__noescape__)) +#else +# define HEDLEY_NO_ESCAPE +#endif + +#if defined(HEDLEY_UNREACHABLE) +# undef HEDLEY_UNREACHABLE +#endif +#if defined(HEDLEY_UNREACHABLE_RETURN) +# undef HEDLEY_UNREACHABLE_RETURN +#endif +#if defined(HEDLEY_ASSUME) +# undef HEDLEY_ASSUME +#endif +#if \ + HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define HEDLEY_ASSUME(expr) __assume(expr) +#elif HEDLEY_HAS_BUILTIN(__builtin_assume) +# define HEDLEY_ASSUME(expr) __builtin_assume(expr) +#elif \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) +# if defined(__cplusplus) +# define HEDLEY_ASSUME(expr) std::_nassert(expr) +# else +# define HEDLEY_ASSUME(expr) _nassert(expr) +# endif +#endif +#if \ + (HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(HEDLEY_ARM_VERSION))) || \ + HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_IBM_VERSION_CHECK(13,1,5) || \ + HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_UNREACHABLE() __builtin_unreachable() +#elif defined(HEDLEY_ASSUME) +# define HEDLEY_UNREACHABLE() HEDLEY_ASSUME(0) +#endif +#if !defined(HEDLEY_ASSUME) +# if defined(HEDLEY_UNREACHABLE) +# define HEDLEY_ASSUME(expr) HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (HEDLEY_UNREACHABLE(), 1))) +# else +# define HEDLEY_ASSUME(expr) HEDLEY_STATIC_CAST(void, expr) +# endif +#endif +#if defined(HEDLEY_UNREACHABLE) +# if \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) +# define HEDLEY_UNREACHABLE_RETURN(value) return (HEDLEY_STATIC_CAST(void, HEDLEY_ASSUME(0)), (value)) +# else +# define HEDLEY_UNREACHABLE_RETURN(value) HEDLEY_UNREACHABLE() +# endif +#else +# define HEDLEY_UNREACHABLE_RETURN(value) return (value) +#endif +#if !defined(HEDLEY_UNREACHABLE) +# define HEDLEY_UNREACHABLE() HEDLEY_ASSUME(0) +#endif + +HEDLEY_DIAGNOSTIC_PUSH +#if HEDLEY_HAS_WARNING("-Wpedantic") +# pragma clang diagnostic ignored "-Wpedantic" +#endif +#if HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) +# pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#if HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) +# if defined(__clang__) +# pragma clang diagnostic ignored "-Wvariadic-macros" +# elif defined(HEDLEY_GCC_VERSION) +# pragma GCC diagnostic ignored "-Wvariadic-macros" +# endif +#endif +#if defined(HEDLEY_NON_NULL) +# undef HEDLEY_NON_NULL +#endif +#if \ + HEDLEY_HAS_ATTRIBUTE(nonnull) || \ + HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) +# define HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else +# define HEDLEY_NON_NULL(...) +#endif +HEDLEY_DIAGNOSTIC_POP + +#if defined(HEDLEY_PRINTF_FORMAT) +# undef HEDLEY_PRINTF_FORMAT +#endif +#if defined(__MINGW32__) && HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) +# define HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) +#elif defined(__MINGW32__) && HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) +# define HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) +#elif \ + HEDLEY_HAS_ATTRIBUTE(format) || \ + HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) +#elif HEDLEY_PELLES_VERSION_CHECK(6,0,0) +# define HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) +#else +# define HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) +#endif + +#if defined(HEDLEY_CONSTEXPR) +# undef HEDLEY_CONSTEXPR +#endif +#if defined(__cplusplus) +# if __cplusplus >= 201103L +# define HEDLEY_CONSTEXPR HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) +# endif +#endif +#if !defined(HEDLEY_CONSTEXPR) +# define HEDLEY_CONSTEXPR +#endif + +#if defined(HEDLEY_PREDICT) +# undef HEDLEY_PREDICT +#endif +#if defined(HEDLEY_LIKELY) +# undef HEDLEY_LIKELY +#endif +#if defined(HEDLEY_UNLIKELY) +# undef HEDLEY_UNLIKELY +#endif +#if defined(HEDLEY_UNPREDICTABLE) +# undef HEDLEY_UNPREDICTABLE +#endif +#if HEDLEY_HAS_BUILTIN(__builtin_unpredictable) +# define HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) +#endif +#if \ + (HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(HEDLEY_PGI_VERSION) && !defined(HEDLEY_INTEL_VERSION)) || \ + HEDLEY_GCC_VERSION_CHECK(9,0,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) +# define HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) +# define HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) +# define HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) +# define HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) +#elif \ + (HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(HEDLEY_INTEL_CL_VERSION)) || \ + HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + (HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ + HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_PREDICT(expr, expected, probability) \ + (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (HEDLEY_STATIC_CAST(void, expected), (expr))) +# define HEDLEY_PREDICT_TRUE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ + })) +# define HEDLEY_PREDICT_FALSE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ + })) +# define HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +#else +# define HEDLEY_PREDICT(expr, expected, probability) (HEDLEY_STATIC_CAST(void, expected), (expr)) +# define HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) +# define HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) +# define HEDLEY_LIKELY(expr) (!!(expr)) +# define HEDLEY_UNLIKELY(expr) (!!(expr)) +#endif +#if !defined(HEDLEY_UNPREDICTABLE) +# define HEDLEY_UNPREDICTABLE(expr) HEDLEY_PREDICT(expr, 1, 0.5) +#endif + +#if defined(HEDLEY_MALLOC) +# undef HEDLEY_MALLOC +#endif +#if \ + HEDLEY_HAS_ATTRIBUTE(malloc) || \ + HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_MALLOC __attribute__((__malloc__)) +#elif HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define HEDLEY_MALLOC _Pragma("returns_new_memory") +#elif \ + HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define HEDLEY_MALLOC __declspec(restrict) +#else +# define HEDLEY_MALLOC +#endif + +#if defined(HEDLEY_PURE) +# undef HEDLEY_PURE +#endif +#if \ + HEDLEY_HAS_ATTRIBUTE(pure) || \ + HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_PURE __attribute__((__pure__)) +#elif HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define HEDLEY_PURE _Pragma("does_not_write_global_data") +#elif defined(__cplusplus) && \ + ( \ + HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ + ) +# define HEDLEY_PURE _Pragma("FUNC_IS_PURE;") +#else +# define HEDLEY_PURE +#endif + +#if defined(HEDLEY_CONST) +# undef HEDLEY_CONST +#endif +#if \ + HEDLEY_HAS_ATTRIBUTE(const) || \ + HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_CONST __attribute__((__const__)) +#elif \ + HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define HEDLEY_CONST _Pragma("no_side_effect") +#else +# define HEDLEY_CONST HEDLEY_PURE +#endif + +#if defined(HEDLEY_RESTRICT) +# undef HEDLEY_RESTRICT +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) +# define HEDLEY_RESTRICT restrict +#elif \ + HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + (HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ + HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + defined(__clang__) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_RESTRICT __restrict +#elif HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) +# define HEDLEY_RESTRICT _Restrict +#else +# define HEDLEY_RESTRICT +#endif + +#if defined(HEDLEY_INLINE) +# undef HEDLEY_INLINE +#endif +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + (defined(__cplusplus) && (__cplusplus >= 199711L)) +# define HEDLEY_INLINE inline +#elif \ + defined(HEDLEY_GCC_VERSION) || \ + HEDLEY_ARM_VERSION_CHECK(6,2,0) +# define HEDLEY_INLINE __inline__ +#elif \ + HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ + HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_INLINE __inline +#else +# define HEDLEY_INLINE +#endif + +#if defined(HEDLEY_ALWAYS_INLINE) +# undef HEDLEY_ALWAYS_INLINE +#endif +#if \ + HEDLEY_HAS_ATTRIBUTE(always_inline) || \ + HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + HEDLEY_IAR_VERSION_CHECK(8,10,0) +# define HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) HEDLEY_INLINE +#elif \ + HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define HEDLEY_ALWAYS_INLINE __forceinline +#elif defined(__cplusplus) && \ + ( \ + HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ + ) +# define HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") +#elif HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") +#else +# define HEDLEY_ALWAYS_INLINE HEDLEY_INLINE +#endif + +#if defined(HEDLEY_NEVER_INLINE) +# undef HEDLEY_NEVER_INLINE +#endif +#if \ + HEDLEY_HAS_ATTRIBUTE(noinline) || \ + HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + HEDLEY_IAR_VERSION_CHECK(8,10,0) +# define HEDLEY_NEVER_INLINE __attribute__((__noinline__)) +#elif \ + HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define HEDLEY_NEVER_INLINE __declspec(noinline) +#elif HEDLEY_PGI_VERSION_CHECK(10,2,0) +# define HEDLEY_NEVER_INLINE _Pragma("noinline") +#elif HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) +# define HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") +#elif HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define HEDLEY_NEVER_INLINE _Pragma("inline=never") +#elif HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) +# define HEDLEY_NEVER_INLINE __attribute((noinline)) +#elif HEDLEY_PELLES_VERSION_CHECK(9,0,0) +# define HEDLEY_NEVER_INLINE __declspec(noinline) +#else +# define HEDLEY_NEVER_INLINE +#endif + +#if defined(HEDLEY_PRIVATE) +# undef HEDLEY_PRIVATE +#endif +#if defined(HEDLEY_PUBLIC) +# undef HEDLEY_PUBLIC +#endif +#if defined(HEDLEY_IMPORT) +# undef HEDLEY_IMPORT +#endif +#if defined(_WIN32) || defined(__CYGWIN__) +# define HEDLEY_PRIVATE +# define HEDLEY_PUBLIC __declspec(dllexport) +# define HEDLEY_IMPORT __declspec(dllimport) +#else +# if \ + HEDLEY_HAS_ATTRIBUTE(visibility) || \ + HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + ( \ + defined(__TI_EABI__) && \ + ( \ + (HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ + ) \ + ) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) +# define HEDLEY_PUBLIC __attribute__((__visibility__("default"))) +# else +# define HEDLEY_PRIVATE +# define HEDLEY_PUBLIC +# endif +# define HEDLEY_IMPORT extern +#endif + +#if defined(HEDLEY_NO_THROW) +# undef HEDLEY_NO_THROW +#endif +#if \ + HEDLEY_HAS_ATTRIBUTE(nothrow) || \ + HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_NO_THROW __attribute__((__nothrow__)) +#elif \ + HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ + HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) +# define HEDLEY_NO_THROW __declspec(nothrow) +#else +# define HEDLEY_NO_THROW +#endif + +#if defined(HEDLEY_FALL_THROUGH) +# undef HEDLEY_FALL_THROUGH +#endif +#if defined(HEDLEY_INTEL_VERSION) +# define HEDLEY_FALL_THROUGH +#elif \ + HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ + HEDLEY_GCC_VERSION_CHECK(7,0,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) +#elif HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) +# define HEDLEY_FALL_THROUGH HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) +#elif HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) +# define HEDLEY_FALL_THROUGH HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) +#elif defined(__fallthrough) /* SAL */ +# define HEDLEY_FALL_THROUGH __fallthrough +#else +# define HEDLEY_FALL_THROUGH +#endif + +#if defined(HEDLEY_RETURNS_NON_NULL) +# undef HEDLEY_RETURNS_NON_NULL +#endif +#if \ + HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ + HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) +#elif defined(_Ret_notnull_) /* SAL */ +# define HEDLEY_RETURNS_NON_NULL _Ret_notnull_ +#else +# define HEDLEY_RETURNS_NON_NULL +#endif + +#if defined(HEDLEY_ARRAY_PARAM) +# undef HEDLEY_ARRAY_PARAM +#endif +#if \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__STDC_NO_VLA__) && \ + !defined(__cplusplus) && \ + !defined(HEDLEY_PGI_VERSION) && \ + !defined(HEDLEY_TINYC_VERSION) +# define HEDLEY_ARRAY_PARAM(name) (name) +#else +# define HEDLEY_ARRAY_PARAM(name) +#endif + +#if defined(HEDLEY_IS_CONSTANT) +# undef HEDLEY_IS_CONSTANT +#endif +#if defined(HEDLEY_REQUIRE_CONSTEXPR) +# undef HEDLEY_REQUIRE_CONSTEXPR +#endif +/* HEDLEY_IS_CONSTEXPR_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(HEDLEY_IS_CONSTEXPR_) +# undef HEDLEY_IS_CONSTEXPR_ +#endif +#if \ + HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ + HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + (HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ + HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) +#endif +#if !defined(__cplusplus) +# if \ + HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ + HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + HEDLEY_TINYC_VERSION_CHECK(0,9,24) +# if defined(__INTPTR_TYPE__) +# define HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) +# else +# include +# define HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) +# endif +# elif \ + ( \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(HEDLEY_SUNPRO_VERSION) && \ + !defined(HEDLEY_PGI_VERSION) && \ + !defined(HEDLEY_IAR_VERSION)) || \ + (HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(HEDLEY_IAR_VERSION)) || \ + HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ + HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + HEDLEY_ARM_VERSION_CHECK(5,3,0) +# if defined(__INTPTR_TYPE__) +# define HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) +# else +# include +# define HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) +# endif +# elif \ + defined(HEDLEY_GCC_VERSION) || \ + defined(HEDLEY_INTEL_VERSION) || \ + defined(HEDLEY_TINYC_VERSION) || \ + defined(HEDLEY_TI_ARMCL_VERSION) || \ + HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ + defined(HEDLEY_TI_CL2000_VERSION) || \ + defined(HEDLEY_TI_CL6X_VERSION) || \ + defined(HEDLEY_TI_CL7X_VERSION) || \ + defined(HEDLEY_TI_CLPRU_VERSION) || \ + defined(__clang__) +# define HEDLEY_IS_CONSTEXPR_(expr) ( \ + sizeof(void) != \ + sizeof(*( \ + 1 ? \ + ((void*) ((expr) * 0L) ) : \ + ((struct { char v[sizeof(void) * 2]; } *) 1) \ + ) \ + ) \ + ) +# endif +#endif +#if defined(HEDLEY_IS_CONSTEXPR_) +# if !defined(HEDLEY_IS_CONSTANT) +# define HEDLEY_IS_CONSTANT(expr) HEDLEY_IS_CONSTEXPR_(expr) +# endif +# define HEDLEY_REQUIRE_CONSTEXPR(expr) (HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) +#else +# if !defined(HEDLEY_IS_CONSTANT) +# define HEDLEY_IS_CONSTANT(expr) (0) +# endif +# define HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) +#endif + +#if defined(HEDLEY_BEGIN_C_DECLS) +# undef HEDLEY_BEGIN_C_DECLS +#endif +#if defined(HEDLEY_END_C_DECLS) +# undef HEDLEY_END_C_DECLS +#endif +#if defined(HEDLEY_C_DECL) +# undef HEDLEY_C_DECL +#endif +#if defined(__cplusplus) +# define HEDLEY_BEGIN_C_DECLS extern "C" { +# define HEDLEY_END_C_DECLS } +# define HEDLEY_C_DECL extern "C" +#else +# define HEDLEY_BEGIN_C_DECLS +# define HEDLEY_END_C_DECLS +# define HEDLEY_C_DECL +#endif + +#if defined(HEDLEY_STATIC_ASSERT) +# undef HEDLEY_STATIC_ASSERT +#endif +#if \ + !defined(__cplusplus) && ( \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + (HEDLEY_HAS_FEATURE(c_static_assert) && !defined(HEDLEY_INTEL_CL_VERSION)) || \ + HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + defined(_Static_assert) \ + ) +# define HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \ + HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define HEDLEY_STATIC_ASSERT(expr, message) HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) +#else +# define HEDLEY_STATIC_ASSERT(expr, message) +#endif + +#if defined(HEDLEY_NULL) +# undef HEDLEY_NULL +#endif +#if defined(__cplusplus) +# if __cplusplus >= 201103L +# define HEDLEY_NULL HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) +# elif defined(NULL) +# define HEDLEY_NULL NULL +# else +# define HEDLEY_NULL HEDLEY_STATIC_CAST(void*, 0) +# endif +#elif defined(NULL) +# define HEDLEY_NULL NULL +#else +# define HEDLEY_NULL ((void*) 0) +#endif + +#if defined(HEDLEY_MESSAGE) +# undef HEDLEY_MESSAGE +#endif +#if HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define HEDLEY_MESSAGE(msg) \ + HEDLEY_DIAGNOSTIC_PUSH \ + HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + HEDLEY_PRAGMA(message msg) \ + HEDLEY_DIAGNOSTIC_POP +#elif \ + HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define HEDLEY_MESSAGE(msg) HEDLEY_PRAGMA(message msg) +#elif HEDLEY_CRAY_VERSION_CHECK(5,0,0) +# define HEDLEY_MESSAGE(msg) HEDLEY_PRAGMA(_CRI message msg) +#elif HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define HEDLEY_MESSAGE(msg) HEDLEY_PRAGMA(message(msg)) +#elif HEDLEY_PELLES_VERSION_CHECK(2,0,0) +# define HEDLEY_MESSAGE(msg) HEDLEY_PRAGMA(message(msg)) +#else +# define HEDLEY_MESSAGE(msg) +#endif + +#if defined(HEDLEY_WARNING) +# undef HEDLEY_WARNING +#endif +#if HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define HEDLEY_WARNING(msg) \ + HEDLEY_DIAGNOSTIC_PUSH \ + HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + HEDLEY_PRAGMA(clang warning msg) \ + HEDLEY_DIAGNOSTIC_POP +#elif \ + HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ + HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define HEDLEY_WARNING(msg) HEDLEY_PRAGMA(GCC warning msg) +#elif \ + HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define HEDLEY_WARNING(msg) HEDLEY_PRAGMA(message(msg)) +#else +# define HEDLEY_WARNING(msg) HEDLEY_MESSAGE(msg) +#endif + +#if defined(HEDLEY_REQUIRE) +# undef HEDLEY_REQUIRE +#endif +#if defined(HEDLEY_REQUIRE_MSG) +# undef HEDLEY_REQUIRE_MSG +#endif +#if HEDLEY_HAS_ATTRIBUTE(diagnose_if) +# if HEDLEY_HAS_WARNING("-Wgcc-compat") +# define HEDLEY_REQUIRE(expr) \ + HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), #expr, "error"))) \ + HEDLEY_DIAGNOSTIC_POP +# define HEDLEY_REQUIRE_MSG(expr,msg) \ + HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), msg, "error"))) \ + HEDLEY_DIAGNOSTIC_POP +# else +# define HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) +# define HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) +# endif +#else +# define HEDLEY_REQUIRE(expr) +# define HEDLEY_REQUIRE_MSG(expr,msg) +#endif + +#if defined(HEDLEY_FLAGS) +# undef HEDLEY_FLAGS +#endif +#if HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion")) +# define HEDLEY_FLAGS __attribute__((__flag_enum__)) +#else +# define HEDLEY_FLAGS +#endif + +#if defined(HEDLEY_FLAGS_CAST) +# undef HEDLEY_FLAGS_CAST +#endif +#if HEDLEY_INTEL_VERSION_CHECK(19,0,0) +# define HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ + HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("warning(disable:188)") \ + ((T) (expr)); \ + HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define HEDLEY_FLAGS_CAST(T, expr) HEDLEY_STATIC_CAST(T, expr) +#endif + +#if defined(HEDLEY_EMPTY_BASES) +# undef HEDLEY_EMPTY_BASES +#endif +#if \ + (HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \ + HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define HEDLEY_EMPTY_BASES __declspec(empty_bases) +#else +# define HEDLEY_EMPTY_BASES +#endif + +/* Remaining macros are deprecated. */ + +#if defined(HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) +# undef HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#endif +#if defined(__clang__) +# define HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) +#else +# define HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(HEDLEY_CLANG_HAS_ATTRIBUTE) +# undef HEDLEY_CLANG_HAS_ATTRIBUTE +#endif +#define HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) HEDLEY_HAS_ATTRIBUTE(attribute) + +#if defined(HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) +# undef HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#endif +#define HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) HEDLEY_HAS_CPP_ATTRIBUTE(attribute) + +#if defined(HEDLEY_CLANG_HAS_BUILTIN) +# undef HEDLEY_CLANG_HAS_BUILTIN +#endif +#define HEDLEY_CLANG_HAS_BUILTIN(builtin) HEDLEY_HAS_BUILTIN(builtin) + +#if defined(HEDLEY_CLANG_HAS_FEATURE) +# undef HEDLEY_CLANG_HAS_FEATURE +#endif +#define HEDLEY_CLANG_HAS_FEATURE(feature) HEDLEY_HAS_FEATURE(feature) + +#if defined(HEDLEY_CLANG_HAS_EXTENSION) +# undef HEDLEY_CLANG_HAS_EXTENSION +#endif +#define HEDLEY_CLANG_HAS_EXTENSION(extension) HEDLEY_HAS_EXTENSION(extension) + +#if defined(HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) +# undef HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#endif +#define HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) + +#if defined(HEDLEY_CLANG_HAS_WARNING) +# undef HEDLEY_CLANG_HAS_WARNING +#endif +#define HEDLEY_CLANG_HAS_WARNING(warning) HEDLEY_HAS_WARNING(warning) + +#endif /* !defined(HEDLEY_VERSION) || (HEDLEY_VERSION < X) */ +/* :: End simde/hedley.h :: */ + +#define SIMDE_VERSION_MAJOR 0 +#define SIMDE_VERSION_MINOR 8 +#define SIMDE_VERSION_MICRO 2 +#define SIMDE_VERSION HEDLEY_VERSION_ENCODE(SIMDE_VERSION_MAJOR, SIMDE_VERSION_MINOR, SIMDE_VERSION_MICRO) +// Also update meson.build in the root directory of the repository + +#include +#include + +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* :: Begin simde/simde-detect-clang.h :: */ +/* Detect Clang Version + * Created by Evan Nemerson + * + * To the extent possible under law, the author(s) have dedicated all + * copyright and related and neighboring rights to this software to + * the public domain worldwide. This software is distributed without + * any warranty. + * + * For details, see . + * SPDX-License-Identifier: CC0-1.0 + */ + +/* This file was originally part of SIMDe + * (). You're free to do with it as + * you please, but I do have a few small requests: + * + * * If you make improvements, please submit them back to SIMDe + * (at ) so others can + * benefit from them. + * * Please keep a link to SIMDe intact so people know where to submit + * improvements. + * * If you expose it publicly, please change the SIMDE_ prefix to + * something specific to your project. + * + * The version numbers clang exposes (in the ___clang_major__, + * __clang_minor__, and __clang_patchlevel__ macros) are unreliable. + * Vendors such as Apple will define these values to their version + * numbers; for example, "Apple Clang 4.0" is really clang 3.1, but + * __clang_major__ and __clang_minor__ are defined to 4 and 0 + * respectively, instead of 3 and 1. + * + * The solution is *usually* to use clang's feature detection macros + * () + * to determine if the feature you're interested in is available. This + * generally works well, and it should probably be the first thing you + * try. Unfortunately, it's not possible to check for everything. In + * particular, compiler bugs. + * + * This file just uses the feature checking macros to detect features + * added in specific versions of clang to identify which version of + * clang the compiler is based on. + * + * Right now it only goes back to 3.6, but I'm happy to accept patches + * to go back further. And, of course, newer versions are welcome if + * they're not already present, and if you find a way to detect a point + * release that would be great, too! + */ + +#if !defined(SIMDE_DETECT_CLANG_H) +#define SIMDE_DETECT_CLANG_H 1 + +/* Attempt to detect the upstream clang version number. I usually only + * worry about major version numbers (at least for 4.0+), but if you + * need more resolution I'm happy to accept patches that are able to + * detect minor versions as well. That said, you'll probably have a + * hard time with detection since AFAIK most minor releases don't add + * anything we can detect. Updated based on + * https://github.com/google/highway/blob/438c705a295176b96a50336527bb3e7ea365ffac/hwy/detect_compiler_arch.h#L73 + * - would welcome patches/updates there as well. + */ + +#if defined(__clang__) && !defined(SIMDE_DETECT_CLANG_VERSION) +# if __has_warning("-Wmissing-designated-field-initializers") +# define SIMDE_DETECT_CLANG_VERSION 190000 +# elif __has_warning("-Woverriding-option") +# define SIMDE_DETECT_CLANG_VERSION 180000 +# elif __has_attribute(unsafe_buffer_usage) // no new warnings in 17.0 +# define SIMDE_DETECT_CLANG_VERSION 170000 +# elif __has_attribute(nouwtable) // no new warnings in 16.0 +# define SIMDE_DETECT_CLANG_VERSION 160000 +# elif __has_warning("-Warray-parameter") +# define SIMDE_DETECT_CLANG_VERSION 150000 +# elif __has_warning("-Wbitwise-instead-of-logical") +# define SIMDE_DETECT_CLANG_VERSION 140000 +# elif __has_warning("-Waix-compat") +# define SIMDE_DETECT_CLANG_VERSION 130000 +# elif __has_warning("-Wformat-insufficient-args") +# define SIMDE_DETECT_CLANG_VERSION 120000 +# elif __has_warning("-Wimplicit-const-int-float-conversion") +# define SIMDE_DETECT_CLANG_VERSION 110000 +# elif __has_warning("-Wmisleading-indentation") +# define SIMDE_DETECT_CLANG_VERSION 100000 +# elif defined(__FILE_NAME__) +# define SIMDE_DETECT_CLANG_VERSION 90000 +# elif __has_warning("-Wextra-semi-stmt") || __has_builtin(__builtin_rotateleft32) +# define SIMDE_DETECT_CLANG_VERSION 80000 +// For reasons unknown, Xcode 10.3 (Apple LLVM version 10.0.1) is apparently +// based on Clang 7, but does not support the warning we test. +// See https://en.wikipedia.org/wiki/Xcode#Toolchain_versions and +// https://trac.macports.org/wiki/XcodeVersionInfo. +# elif __has_warning("-Wc++98-compat-extra-semi") || \ + (defined(__apple_build_version__) && __apple_build_version__ >= 10010000) +# define SIMDE_DETECT_CLANG_VERSION 70000 +# elif __has_warning("-Wpragma-pack") +# define SIMDE_DETECT_CLANG_VERSION 60000 +# elif __has_warning("-Wbitfield-enum-conversion") +# define SIMDE_DETECT_CLANG_VERSION 50000 +# elif __has_attribute(diagnose_if) +# define SIMDE_DETECT_CLANG_VERSION 40000 +# elif __has_warning("-Wcomma") +# define SIMDE_DETECT_CLANG_VERSION 39000 +# elif __has_warning("-Wdouble-promotion") +# define SIMDE_DETECT_CLANG_VERSION 38000 +# elif __has_warning("-Wshift-negative-value") +# define SIMDE_DETECT_CLANG_VERSION 37000 +# elif __has_warning("-Wambiguous-ellipsis") +# define SIMDE_DETECT_CLANG_VERSION 36000 +# else +# define SIMDE_DETECT_CLANG_VERSION 1 +# endif +#endif /* defined(__clang__) && !defined(SIMDE_DETECT_CLANG_VERSION) */ + +/* The SIMDE_DETECT_CLANG_VERSION_CHECK macro is pretty + * straightforward; it returns true if the compiler is a derivative + * of clang >= the specified version. + * + * Since this file is often (primarily?) useful for working around bugs + * it is also helpful to have a macro which returns true if only if the + * compiler is a version of clang *older* than the specified version to + * make it a bit easier to ifdef regions to add code for older versions, + * such as pragmas to disable a specific warning. */ + +#if defined(SIMDE_DETECT_CLANG_VERSION) +# define SIMDE_DETECT_CLANG_VERSION_CHECK(major, minor, revision) (SIMDE_DETECT_CLANG_VERSION >= ((major * 10000) + (minor * 1000) + (revision))) +# define SIMDE_DETECT_CLANG_VERSION_NOT(major, minor, revision) (SIMDE_DETECT_CLANG_VERSION < ((major * 10000) + (minor * 1000) + (revision))) +#else +# define SIMDE_DETECT_CLANG_VERSION_CHECK(major, minor, revision) (0) +# define SIMDE_DETECT_CLANG_VERSION_NOT(major, minor, revision) (0) +#endif + +#endif /* !defined(SIMDE_DETECT_CLANG_H) */ +/* :: End simde/simde-detect-clang.h :: */ +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* :: Begin simde/simde-arch.h :: */ +/* Architecture detection + * Created by Evan Nemerson + * + * To the extent possible under law, the authors have waived all + * copyright and related or neighboring rights to this code. For + * details, see the Creative Commons Zero 1.0 Universal license at + * + * + * SPDX-License-Identifier: CC0-1.0 + * + * Different compilers define different preprocessor macros for the + * same architecture. This is an attempt to provide a single + * interface which is usable on any compiler. + * + * In general, a macro named SIMDE_ARCH_* is defined for each + * architecture the CPU supports. When there are multiple possible + * versions, we try to define the macro to the target version. For + * example, if you want to check for i586+, you could do something + * like: + * + * #if defined(SIMDE_ARCH_X86) && (SIMDE_ARCH_X86 >= 5) + * ... + * #endif + * + * You could also just check that SIMDE_ARCH_X86 >= 5 without checking + * if it's defined first, but some compilers may emit a warning about + * an undefined macro being used (e.g., GCC with -Wundef). + * + * This was originally created for SIMDe + * (hence the prefix), but this + * header has no dependencies and may be used anywhere. It is + * originally based on information from + * , though it + * has been enhanced with additional information. + * + * If you improve this file, or find a bug, please file the issue at + * . If you copy this into + * your project, even if you change the prefix, please keep the links + * to SIMDe intact so others know where to report issues, submit + * enhancements, and find the latest version. */ + +#if !defined(SIMDE_ARCH_H) +#define SIMDE_ARCH_H + +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ + +/* Alpha + */ +#if defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA) +# if defined(__alpha_ev6__) +# define SIMDE_ARCH_ALPHA 6 +# elif defined(__alpha_ev5__) +# define SIMDE_ARCH_ALPHA 5 +# elif defined(__alpha_ev4__) +# define SIMDE_ARCH_ALPHA 4 +# else +# define SIMDE_ARCH_ALPHA 1 +# endif +#endif +#if defined(SIMDE_ARCH_ALPHA) +# define SIMDE_ARCH_ALPHA_CHECK(version) ((version) <= SIMDE_ARCH_ALPHA) +#else +# define SIMDE_ARCH_ALPHA_CHECK(version) (0) +#endif + +/* Atmel AVR + */ +#if defined(__AVR_ARCH__) +# define SIMDE_ARCH_AVR __AVR_ARCH__ +#endif + +/* AMD64 / x86_64 + */ +#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64) +# if !defined(_M_ARM64EC) +# define SIMDE_ARCH_AMD64 1000 +# endif +#endif + +/* ARM + */ +#if defined(__ARM_ARCH) +# if __ARM_ARCH > 100 +# define SIMDE_ARCH_ARM (__ARM_ARCH) +# else +# define SIMDE_ARCH_ARM (__ARM_ARCH * 100) +# endif +#elif defined(_M_ARM) +# if _M_ARM > 100 +# define SIMDE_ARCH_ARM (_M_ARM) +# else +# define SIMDE_ARCH_ARM (_M_ARM * 100) +# endif +#elif defined(_M_ARM64) || defined(_M_ARM64EC) +# define SIMDE_ARCH_ARM 800 +#elif defined(__arm__) || defined(__thumb__) || defined(__TARGET_ARCH_ARM) || defined(_ARM) || defined(_M_ARM) || defined(_M_ARM) +# define SIMDE_ARCH_ARM 1 +#endif +#if defined(SIMDE_ARCH_ARM) +# define SIMDE_ARCH_ARM_CHECK(major, minor) (((major * 100) + (minor)) <= SIMDE_ARCH_ARM) +#else +# define SIMDE_ARCH_ARM_CHECK(major, minor) (0) +#endif + +/* AArch64 + */ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) +# define SIMDE_ARCH_AARCH64 1000 +#endif +#if defined(SIMDE_ARCH_AARCH64) +# define SIMDE_ARCH_AARCH64_CHECK(version) ((version) <= SIMDE_ARCH_AARCH64) +#else +# define SIMDE_ARCH_AARCH64_CHECK(version) (0) +#endif + +/* ARM SIMD ISA extensions */ +#if defined(__ARM_NEON) || defined(SIMDE_ARCH_AARCH64) +# if defined(SIMDE_ARCH_AARCH64) +# define SIMDE_ARCH_ARM_NEON SIMDE_ARCH_AARCH64 +# elif defined(SIMDE_ARCH_ARM) +# define SIMDE_ARCH_ARM_NEON SIMDE_ARCH_ARM +# endif +#endif +#if defined(__ARM_FEATURE_AES) && __ARM_FEATURE_AES +# define SIMDE_ARCH_ARM_AES +#endif +#if defined(__ARM_FEATURE_COMPLEX) && __ARM_FEATURE_COMPLEX +# define SIMDE_ARCH_ARM_COMPLEX +#endif +#if defined(__ARM_FEATURE_CRYPTO) && __ARM_FEATURE_CRYPTO +# define SIMDE_ARCH_ARM_CRYPTO +#endif +#if defined(__ARM_FEATURE_DOTPROD) && __ARM_FEATURE_DOTPROD +# define SIMDE_ARCH_ARM_DOTPROD +#endif +#if defined(__ARM_FEATURE_FMA) && __ARM_FEATURE_FMA +# define SIMDE_ARCH_ARM_FMA +#endif +#if defined(__ARM_FEATURE_FP16_FML) && __ARM_FEATURE_FP16_FML +# define SIMDE_ARCH_ARM_FP16_FML +#endif +#if defined(__ARM_FEATURE_FRINT) && __ARM_FEATURE_FRINT +# define SIMDE_ARCH_ARM_FRINT +#endif +#if defined(__ARM_FEATURE_MATMUL_INT8) && __ARM_FEATURE_MATMUL_INT8 +# define SIMDE_ARCH_ARM_MATMUL_INT8 +#endif +#if defined(__ARM_FEATURE_SHA2) && __ARM_FEATURE_SHA2 && !defined(__APPLE_CC__) +# define SIMDE_ARCH_ARM_SHA2 +#endif +#if defined(__ARM_FEATURE_SHA3) && __ARM_FEATURE_SHA3 +# define SIMDE_ARCH_ARM_SHA3 +#endif +#if defined(__ARM_FEATURE_SHA512) && __ARM_FEATURE_SHA512 +# define SIMDE_ARCH_ARM_SHA512 +#endif +#if defined(__ARM_FEATURE_SM3) && __ARM_FEATURE_SM3 +# define SIMDE_ARCH_ARM_SM3 +#endif +#if defined(__ARM_FEATURE_SM4) && __ARM_FEATURE_SM4 +# define SIMDE_ARCH_ARM_SM4 +#endif +#if defined(__ARM_FEATURE_SVE) && __ARM_FEATURE_SVE +# define SIMDE_ARCH_ARM_SVE +#endif +#if defined(__ARM_FEATURE_QRDMX) && __ARM_FEATURE_QRDMX +# define SIMDE_ARCH_ARM_QRDMX +#endif + +/* Blackfin + */ +#if defined(__bfin) || defined(__BFIN__) || defined(__bfin__) +# define SIMDE_ARCH_BLACKFIN 1 +#endif + +/* CRIS + */ +#if defined(__CRIS_arch_version) +# define SIMDE_ARCH_CRIS __CRIS_arch_version +#elif defined(__cris__) || defined(__cris) || defined(__CRIS) || defined(__CRIS__) +# define SIMDE_ARCH_CRIS 1 +#endif + +/* Convex + */ +#if defined(__convex_c38__) +# define SIMDE_ARCH_CONVEX 38 +#elif defined(__convex_c34__) +# define SIMDE_ARCH_CONVEX 34 +#elif defined(__convex_c32__) +# define SIMDE_ARCH_CONVEX 32 +#elif defined(__convex_c2__) +# define SIMDE_ARCH_CONVEX 2 +#elif defined(__convex__) +# define SIMDE_ARCH_CONVEX 1 +#endif +#if defined(SIMDE_ARCH_CONVEX) +# define SIMDE_ARCH_CONVEX_CHECK(version) ((version) <= SIMDE_ARCH_CONVEX) +#else +# define SIMDE_ARCH_CONVEX_CHECK(version) (0) +#endif + +/* Adapteva Epiphany + */ +#if defined(__epiphany__) +# define SIMDE_ARCH_EPIPHANY 1 +#endif + +/* Fujitsu FR-V + */ +#if defined(__frv__) +# define SIMDE_ARCH_FRV 1 +#endif + +/* H8/300 + */ +#if defined(__H8300__) +# define SIMDE_ARCH_H8300 +#endif + +/* Elbrus (8S, 8SV and successors) + */ +#if defined(__e2k__) +# define SIMDE_ARCH_E2K +#endif + +/* HP/PA / PA-RISC + */ +#if defined(__PA8000__) || defined(__HPPA20__) || defined(__RISC2_0__) || defined(_PA_RISC2_0) +# define SIMDE_ARCH_HPPA 20 +#elif defined(__PA7100__) || defined(__HPPA11__) || defined(_PA_RISC1_1) +# define SIMDE_ARCH_HPPA 11 +#elif defined(_PA_RISC1_0) +# define SIMDE_ARCH_HPPA 10 +#elif defined(__hppa__) || defined(__HPPA__) || defined(__hppa) +# define SIMDE_ARCH_HPPA 1 +#endif +#if defined(SIMDE_ARCH_HPPA) +# define SIMDE_ARCH_HPPA_CHECK(version) ((version) <= SIMDE_ARCH_HPPA) +#else +# define SIMDE_ARCH_HPPA_CHECK(version) (0) +#endif + +/* x86 + */ +#if defined(_M_IX86) +# define SIMDE_ARCH_X86 (_M_IX86 / 100) +#elif defined(__I86__) +# define SIMDE_ARCH_X86 __I86__ +#elif defined(i686) || defined(__i686) || defined(__i686__) +# define SIMDE_ARCH_X86 6 +#elif defined(i586) || defined(__i586) || defined(__i586__) +# define SIMDE_ARCH_X86 5 +#elif defined(i486) || defined(__i486) || defined(__i486__) +# define SIMDE_ARCH_X86 4 +#elif defined(i386) || defined(__i386) || defined(__i386__) +# define SIMDE_ARCH_X86 3 +#elif defined(_X86_) || defined(__X86__) || defined(__THW_INTEL__) +# define SIMDE_ARCH_X86 3 +#endif +#if defined(SIMDE_ARCH_X86) +# define SIMDE_ARCH_X86_CHECK(version) ((version) <= SIMDE_ARCH_X86) +#else +# define SIMDE_ARCH_X86_CHECK(version) (0) +#endif + +/* SIMD ISA extensions for x86/x86_64 and Elbrus */ +#if defined(SIMDE_ARCH_X86) || defined(SIMDE_ARCH_AMD64) || defined(SIMDE_ARCH_E2K) +# if defined(_M_IX86_FP) +# define SIMDE_ARCH_X86_MMX +# if (_M_IX86_FP >= 1) +# define SIMDE_ARCH_X86_SSE 1 +# endif +# if (_M_IX86_FP >= 2) +# define SIMDE_ARCH_X86_SSE2 1 +# endif +# elif defined(_M_X64) +# define SIMDE_ARCH_X86_SSE 1 +# define SIMDE_ARCH_X86_SSE2 1 +# else +# if defined(__MMX__) +# define SIMDE_ARCH_X86_MMX 1 +# endif +# if defined(__SSE__) +# define SIMDE_ARCH_X86_SSE 1 +# endif +# if defined(__SSE2__) +# define SIMDE_ARCH_X86_SSE2 1 +# endif +# endif +# if defined(__SSE3__) +# define SIMDE_ARCH_X86_SSE3 1 +# endif +# if defined(__SSSE3__) +# define SIMDE_ARCH_X86_SSSE3 1 +# endif +# if defined(__SSE4_1__) +# define SIMDE_ARCH_X86_SSE4_1 1 +# endif +# if defined(__SSE4_2__) +# define SIMDE_ARCH_X86_SSE4_2 1 +# endif +# if defined(__XOP__) +# define SIMDE_ARCH_X86_XOP 1 +# endif +# if defined(__AVX__) +# define SIMDE_ARCH_X86_AVX 1 +# if !defined(SIMDE_ARCH_X86_SSE3) +# define SIMDE_ARCH_X86_SSE3 1 +# endif +# if !defined(SIMDE_ARCH_X86_SSE4_1) +# define SIMDE_ARCH_X86_SSE4_1 1 +# endif +# if !defined(SIMDE_ARCH_X86_SSE4_2) +# define SIMDE_ARCH_X86_SSE4_2 1 +# endif +# endif +# if defined(__AVX2__) +# define SIMDE_ARCH_X86_AVX2 1 +# if defined(_MSC_VER) +# define SIMDE_ARCH_X86_FMA 1 +# endif +# endif +# if defined(__FMA__) +# define SIMDE_ARCH_X86_FMA 1 +# if !defined(SIMDE_ARCH_X86_AVX) +# define SIMDE_ARCH_X86_AVX 1 +# endif +# endif +# if defined(__AVX512VP2INTERSECT__) +# define SIMDE_ARCH_X86_AVX512VP2INTERSECT 1 +# endif +# if defined(__AVX512BITALG__) +# define SIMDE_ARCH_X86_AVX512BITALG 1 +# endif +# if defined(__AVX512VPOPCNTDQ__) +# define SIMDE_ARCH_X86_AVX512VPOPCNTDQ 1 +# endif +# if defined(__AVX512VBMI__) +# define SIMDE_ARCH_X86_AVX512VBMI 1 +# endif +# if defined(__AVX512VBMI2__) +# define SIMDE_ARCH_X86_AVX512VBMI2 1 +# endif +# if defined(__AVX512VNNI__) +# define SIMDE_ARCH_X86_AVX512VNNI 1 +# endif +# if defined(__AVX5124VNNIW__) +# define SIMDE_ARCH_X86_AVX5124VNNIW 1 +# endif +# if defined(__AVX512BW__) +# define SIMDE_ARCH_X86_AVX512BW 1 +# endif +# if defined(__AVX512BF16__) +# define SIMDE_ARCH_X86_AVX512BF16 1 +# endif +# if defined(__AVX512CD__) +# define SIMDE_ARCH_X86_AVX512CD 1 +# endif +# if defined(__AVX512DQ__) +# define SIMDE_ARCH_X86_AVX512DQ 1 +# endif +# if defined(__AVX512F__) +# define SIMDE_ARCH_X86_AVX512F 1 +# endif +# if defined(__AVX512VL__) +# define SIMDE_ARCH_X86_AVX512VL 1 +# endif +# if defined(__AVX512FP16__) +# define SIMDE_ARCH_X86_AVX512FP16 1 +# endif +# if defined(__GFNI__) +# define SIMDE_ARCH_X86_GFNI 1 +# endif +# if defined(__PCLMUL__) +# define SIMDE_ARCH_X86_PCLMUL 1 +# endif +# if defined(__VPCLMULQDQ__) +# define SIMDE_ARCH_X86_VPCLMULQDQ 1 +# endif +# if defined(__F16C__) || (defined(HEDLEY_MSVC_VERSION) && HEDLEY_MSVC_VERSION_CHECK(19,30,0) && defined(SIMDE_ARCH_X86_AVX2) ) +# define SIMDE_ARCH_X86_F16C 1 +# endif +# if defined(__AES__) +# define SIMDE_ARCH_X86_AES 1 +# endif +#endif + +/* Itanium + */ +#if defined(__ia64__) || defined(_IA64) || defined(__IA64__) || defined(__ia64) || defined(_M_IA64) || defined(__itanium__) +# define SIMDE_ARCH_IA64 1 +#endif + +/* Renesas M32R + */ +#if defined(__m32r__) || defined(__M32R__) +# define SIMDE_ARCH_M32R +#endif + +/* Motorola 68000 + */ +#if defined(__mc68060__) || defined(__MC68060__) +# define SIMDE_ARCH_M68K 68060 +#elif defined(__mc68040__) || defined(__MC68040__) +# define SIMDE_ARCH_M68K 68040 +#elif defined(__mc68030__) || defined(__MC68030__) +# define SIMDE_ARCH_M68K 68030 +#elif defined(__mc68020__) || defined(__MC68020__) +# define SIMDE_ARCH_M68K 68020 +#elif defined(__mc68010__) || defined(__MC68010__) +# define SIMDE_ARCH_M68K 68010 +#elif defined(__mc68000__) || defined(__MC68000__) +# define SIMDE_ARCH_M68K 68000 +#endif +#if defined(SIMDE_ARCH_M68K) +# define SIMDE_ARCH_M68K_CHECK(version) ((version) <= SIMDE_ARCH_M68K) +#else +# define SIMDE_ARCH_M68K_CHECK(version) (0) +#endif + +/* Xilinx MicroBlaze + */ +#if defined(__MICROBLAZE__) || defined(__microblaze__) +# define SIMDE_ARCH_MICROBLAZE +#endif + +/* MIPS + */ +#if defined(_MIPS_ISA_MIPS64R2) +# define SIMDE_ARCH_MIPS 642 +#elif defined(_MIPS_ISA_MIPS64) +# define SIMDE_ARCH_MIPS 640 +#elif defined(_MIPS_ISA_MIPS32R2) +# define SIMDE_ARCH_MIPS 322 +#elif defined(_MIPS_ISA_MIPS32) +# define SIMDE_ARCH_MIPS 320 +#elif defined(_MIPS_ISA_MIPS4) +# define SIMDE_ARCH_MIPS 4 +#elif defined(_MIPS_ISA_MIPS3) +# define SIMDE_ARCH_MIPS 3 +#elif defined(_MIPS_ISA_MIPS2) +# define SIMDE_ARCH_MIPS 2 +#elif defined(_MIPS_ISA_MIPS1) +# define SIMDE_ARCH_MIPS 1 +#elif defined(_MIPS_ISA_MIPS) || defined(__mips) || defined(__MIPS__) +# define SIMDE_ARCH_MIPS 1 +#endif +#if defined(SIMDE_ARCH_MIPS) +# define SIMDE_ARCH_MIPS_CHECK(version) ((version) <= SIMDE_ARCH_MIPS) +#else +# define SIMDE_ARCH_MIPS_CHECK(version) (0) +#endif + +#if defined(__mips_loongson_mmi) +# define SIMDE_ARCH_MIPS_LOONGSON_MMI 1 +#endif + +#if defined(__mips_msa) +# define SIMDE_ARCH_MIPS_MSA 1 +#endif + +/* Matsushita MN10300 + */ +#if defined(__MN10300__) || defined(__mn10300__) +# define SIMDE_ARCH_MN10300 1 +#endif + +/* POWER + */ +#if defined(_M_PPC) +# define SIMDE_ARCH_POWER _M_PPC +#elif defined(_ARCH_PWR9) +# define SIMDE_ARCH_POWER 900 +#elif defined(_ARCH_PWR8) +# define SIMDE_ARCH_POWER 800 +#elif defined(_ARCH_PWR7) +# define SIMDE_ARCH_POWER 700 +#elif defined(_ARCH_PWR6) +# define SIMDE_ARCH_POWER 600 +#elif defined(_ARCH_PWR5) +# define SIMDE_ARCH_POWER 500 +#elif defined(_ARCH_PWR4) +# define SIMDE_ARCH_POWER 400 +#elif defined(_ARCH_440) || defined(__ppc440__) +# define SIMDE_ARCH_POWER 440 +#elif defined(_ARCH_450) || defined(__ppc450__) +# define SIMDE_ARCH_POWER 450 +#elif defined(_ARCH_601) || defined(__ppc601__) +# define SIMDE_ARCH_POWER 601 +#elif defined(_ARCH_603) || defined(__ppc603__) +# define SIMDE_ARCH_POWER 603 +#elif defined(_ARCH_604) || defined(__ppc604__) +# define SIMDE_ARCH_POWER 604 +#elif defined(_ARCH_605) || defined(__ppc605__) +# define SIMDE_ARCH_POWER 605 +#elif defined(_ARCH_620) || defined(__ppc620__) +# define SIMDE_ARCH_POWER 620 +#elif defined(__powerpc) || defined(__powerpc__) || defined(__POWERPC__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC) || defined(__ppc) +# define SIMDE_ARCH_POWER 1 +#endif +#if defined(SIMDE_ARCH_POWER) + #define SIMDE_ARCH_POWER_CHECK(version) ((version) <= SIMDE_ARCH_POWER) +#else + #define SIMDE_ARCH_POWER_CHECK(version) (0) +#endif + +#if defined(__ALTIVEC__) +# define SIMDE_ARCH_POWER_ALTIVEC SIMDE_ARCH_POWER + #define SIMDE_ARCH_POWER_ALTIVEC_CHECK(version) ((version) <= SIMDE_ARCH_POWER) +#else + #define SIMDE_ARCH_POWER_ALTIVEC_CHECK(version) (0) +#endif + +/* RISC-V + */ +#if defined(__riscv) || defined(__riscv__) +# if __riscv_xlen == 64 +# define SIMDE_ARCH_RISCV64 +# elif __riscv_xlen == 32 +# define SIMDE_ARCH_RISCV32 +# endif +#endif + +/* RISC-V SIMD ISA extensions */ +#if defined(__riscv_zve32x) +# define SIMDE_ARCH_RISCV_ZVE32X 1 +#endif +#if defined(__riscv_zve32f) +# define SIMDE_ARCH_RISCV_ZVE32F 1 +#endif +#if defined(__riscv_zve64x) +# define SIMDE_ARCH_RISCV_ZVE64X 1 +#endif +#if defined(__riscv_zve64f) +# define SIMDE_ARCH_RISCV_ZVE64F 1 +#endif +#if defined(__riscv_zve64d) +# define SIMDE_ARCH_RISCV_ZVE64D 1 +#endif +#if defined(__riscv_v) +# define SIMDE_ARCH_RISCV_V 1 +#endif +#if defined(__riscv_zvfh) +# define SIMDE_ARCH_RISCV_ZVFH 1 +#endif +#if defined(__riscv_zvfhmin) +# define SIMDE_ARCH_RISCV_ZVFHMIN 1 +#endif + +/* SPARC + */ +#if defined(__sparc_v9__) || defined(__sparcv9) +# define SIMDE_ARCH_SPARC 9 +#elif defined(__sparc_v8__) || defined(__sparcv8) +# define SIMDE_ARCH_SPARC 8 +#elif defined(__sparc_v7__) || defined(__sparcv7) +# define SIMDE_ARCH_SPARC 7 +#elif defined(__sparc_v6__) || defined(__sparcv6) +# define SIMDE_ARCH_SPARC 6 +#elif defined(__sparc_v5__) || defined(__sparcv5) +# define SIMDE_ARCH_SPARC 5 +#elif defined(__sparc_v4__) || defined(__sparcv4) +# define SIMDE_ARCH_SPARC 4 +#elif defined(__sparc_v3__) || defined(__sparcv3) +# define SIMDE_ARCH_SPARC 3 +#elif defined(__sparc_v2__) || defined(__sparcv2) +# define SIMDE_ARCH_SPARC 2 +#elif defined(__sparc_v1__) || defined(__sparcv1) +# define SIMDE_ARCH_SPARC 1 +#elif defined(__sparc__) || defined(__sparc) +# define SIMDE_ARCH_SPARC 1 +#endif +#if defined(SIMDE_ARCH_SPARC) + #define SIMDE_ARCH_SPARC_CHECK(version) ((version) <= SIMDE_ARCH_SPARC) +#else + #define SIMDE_ARCH_SPARC_CHECK(version) (0) +#endif + +/* SuperH + */ +#if defined(__sh5__) || defined(__SH5__) +# define SIMDE_ARCH_SUPERH 5 +#elif defined(__sh4__) || defined(__SH4__) +# define SIMDE_ARCH_SUPERH 4 +#elif defined(__sh3__) || defined(__SH3__) +# define SIMDE_ARCH_SUPERH 3 +#elif defined(__sh2__) || defined(__SH2__) +# define SIMDE_ARCH_SUPERH 2 +#elif defined(__sh1__) || defined(__SH1__) +# define SIMDE_ARCH_SUPERH 1 +#elif defined(__sh__) || defined(__SH__) +# define SIMDE_ARCH_SUPERH 1 +#endif + +/* IBM System z + */ +#if defined(__370__) || defined(__THW_370__) || defined(__s390__) || defined(__s390x__) || defined(__zarch__) || defined(__SYSC_ZARCH__) +# define SIMDE_ARCH_ZARCH __ARCH__ +#endif +#if defined(SIMDE_ARCH_ZARCH) + #define SIMDE_ARCH_ZARCH_CHECK(version) ((version) <= SIMDE_ARCH_ZARCH) +#else + #define SIMDE_ARCH_ZARCH_CHECK(version) (0) +#endif + +#if defined(SIMDE_ARCH_ZARCH) && defined(__VEC__) + #define SIMDE_ARCH_ZARCH_ZVECTOR SIMDE_ARCH_ZARCH +#endif + +/* TMS320 DSP + */ +#if defined(_TMS320C6740) || defined(__TMS320C6740__) +# define SIMDE_ARCH_TMS320 6740 +#elif defined(_TMS320C6700_PLUS) || defined(__TMS320C6700_PLUS__) +# define SIMDE_ARCH_TMS320 6701 +#elif defined(_TMS320C6700) || defined(__TMS320C6700__) +# define SIMDE_ARCH_TMS320 6700 +#elif defined(_TMS320C6600) || defined(__TMS320C6600__) +# define SIMDE_ARCH_TMS320 6600 +#elif defined(_TMS320C6400_PLUS) || defined(__TMS320C6400_PLUS__) +# define SIMDE_ARCH_TMS320 6401 +#elif defined(_TMS320C6400) || defined(__TMS320C6400__) +# define SIMDE_ARCH_TMS320 6400 +#elif defined(_TMS320C6200) || defined(__TMS320C6200__) +# define SIMDE_ARCH_TMS320 6200 +#elif defined(_TMS320C55X) || defined(__TMS320C55X__) +# define SIMDE_ARCH_TMS320 550 +#elif defined(_TMS320C54X) || defined(__TMS320C54X__) +# define SIMDE_ARCH_TMS320 540 +#elif defined(_TMS320C28X) || defined(__TMS320C28X__) +# define SIMDE_ARCH_TMS320 280 +#endif +#if defined(SIMDE_ARCH_TMS320) + #define SIMDE_ARCH_TMS320_CHECK(version) ((version) <= SIMDE_ARCH_TMS320) +#else + #define SIMDE_ARCH_TMS320_CHECK(version) (0) +#endif + +/* WebAssembly */ +#if defined(__wasm__) +# define SIMDE_ARCH_WASM 1 +#endif + +#if defined(SIMDE_ARCH_WASM) && defined(__wasm_simd128__) +# define SIMDE_ARCH_WASM_SIMD128 +#endif + +#if defined(SIMDE_ARCH_WASM) && defined(__wasm_relaxed_simd__) +# define SIMDE_ARCH_WASM_RELAXED_SIMD +#endif + +/* Xtensa + */ +#if defined(__xtensa__) || defined(__XTENSA__) +# define SIMDE_ARCH_XTENSA 1 +#endif + +/* Availability of 16-bit floating-point arithmetic intrinsics */ +#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) +# define SIMDE_ARCH_ARM_NEON_FP16 +#endif + +/* Availability of 16-bit brain floating-point arithmetic intrinsics */ +#if defined(__ARM_FEATURE_BF16_VECTOR_ARITHMETIC) +# define SIMDE_ARCH_ARM_NEON_BF16 +#endif + +/* LoongArch + */ +#if defined(__loongarch32) +# define SIMDE_ARCH_LOONGARCH 1 +#elif defined(__loongarch64) +# define SIMDE_ARCH_LOONGARCH 2 +#endif + +/* LSX: LoongArch 128-bits SIMD extension */ +#if defined(__loongarch_sx) +# define SIMDE_ARCH_LOONGARCH_LSX 1 +#endif + +/* LASX: LoongArch 256-bits SIMD extension */ +#if defined(__loongarch_asx) +# define SIMDE_ARCH_LOONGARCH_LASX 2 +#endif + +#endif /* !defined(SIMDE_ARCH_H) */ +/* :: End simde/simde-arch.h :: */ +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* :: Begin simde/simde-features.h :: */ +/* SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Copyright: + * 2020 Evan Nemerson + * 2023 Ju-Hung Li (Copyright owned by NTHU pllab) + */ + +/* simde-arch.h is used to determine which features are available according + to the compiler. However, we want to make it possible to forcibly enable + or disable APIs */ + +#if !defined(SIMDE_FEATURES_H) +#define SIMDE_FEATURES_H + +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* :: Begin simde/simde-diagnostic.h :: */ +/* SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Copyright: + * 2017-2020 Evan Nemerson + */ + +/* SIMDe targets a very wide range of standards and compilers, and our + * goal is to compile cleanly even with extremely aggressive warnings + * (i.e., -Weverything in clang, -Wextra in GCC, /W4 for MSVC, etc.) + * treated as errors. + * + * While our preference is to resolve the underlying issue a given + * diagnostic is warning us about, sometimes that's not possible. + * Fixing a warning in one compiler may cause problems in another. + * Sometimes a warning doesn't really apply to us (false positives), + * and sometimes adhering to a warning would mean dropping a feature + * we *know* the compiler supports since we have tested specifically + * for the compiler or feature. + * + * When practical, warnings are only disabled for specific code. For + * a list of warnings which are enabled by default in all SIMDe code, + * see SIMDE_DISABLE_UNWANTED_DIAGNOSTICS. Note that we restore the + * warning stack when SIMDe is done parsing, so code which includes + * SIMDe is not deprived of these warnings. + */ + +#if !defined(SIMDE_DIAGNOSTIC_H) +#define SIMDE_DIAGNOSTIC_H + +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ + +/* This is only to help us implement functions like _mm_undefined_ps. */ +#if defined(SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_) + #undef SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ +#endif +#if HEDLEY_HAS_WARNING("-Wuninitialized") + #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("clang diagnostic ignored \"-Wuninitialized\"") +#elif HEDLEY_GCC_VERSION_CHECK(4,2,0) + #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("GCC diagnostic ignored \"-Wuninitialized\"") +#elif HEDLEY_PGI_VERSION_CHECK(19,10,0) + #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("diag_suppress 549") +#elif HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) + #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("error_messages(off,SEC_UNINITIALIZED_MEM_READ,SEC_UNDEFINED_RETURN_VALUE,unassigned)") +#elif HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) + #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("error_messages(off,SEC_UNINITIALIZED_MEM_READ,SEC_UNDEFINED_RETURN_VALUE)") +#elif HEDLEY_SUNPRO_VERSION_CHECK(5,12,0) && defined(__cplusplus) + #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("error_messages(off,unassigned)") +#elif \ + HEDLEY_TI_VERSION_CHECK(16,9,9) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,2) + #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("diag_suppress 551") +#elif HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("warning(disable:592)") +#elif HEDLEY_MSVC_VERSION_CHECK(19,0,0) && !defined(__MSVC_RUNTIME_CHECKS) + #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ __pragma(warning(disable:4700)) +#endif + +/* GCC emits a lot of "notes" about the ABI being different for things + * in newer versions of GCC. We don't really care because all our + * functions are inlined and don't generate ABI. */ +#if HEDLEY_GCC_VERSION_CHECK(7,0,0) + #define SIMDE_DIAGNOSTIC_DISABLE_PSABI_ _Pragma("GCC diagnostic ignored \"-Wpsabi\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_PSABI_ +#endif + +/* Since MMX uses x87 FP registers, you're supposed to call _mm_empty() + * after each MMX function before any floating point instructions. + * Some compilers warn about functions which use MMX functions but + * don't call _mm_empty(). However, since SIMDe is implementyng the + * MMX API we shouldn't be calling _mm_empty(); we leave it to the + * caller to invoke simde_mm_empty(). */ +#if HEDLEY_INTEL_VERSION_CHECK(19,0,0) + #define SIMDE_DIAGNOSTIC_DISABLE_NO_EMMS_INSTRUCTION_ _Pragma("warning(disable:13200 13203)") +#elif defined(HEDLEY_MSVC_VERSION) + #define SIMDE_DIAGNOSTIC_DISABLE_NO_EMMS_INSTRUCTION_ __pragma(warning(disable:4799)) +#else + #define SIMDE_DIAGNOSTIC_DISABLE_NO_EMMS_INSTRUCTION_ +#endif + +/* Intel is pushing people to use OpenMP SIMD instead of Cilk+, so they + * emit a diagnostic if you use #pragma simd instead of + * #pragma omp simd. SIMDe supports OpenMP SIMD, you just need to + * compile with -qopenmp or -qopenmp-simd and define + * SIMDE_ENABLE_OPENMP. Cilk+ is just a fallback. */ +#if HEDLEY_INTEL_VERSION_CHECK(18,0,0) + #define SIMDE_DIAGNOSTIC_DISABLE_SIMD_PRAGMA_DEPRECATED_ _Pragma("warning(disable:3948)") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_SIMD_PRAGMA_DEPRECATED_ +#endif + +/* MSVC emits a diagnostic when we call a function (like + * simde_mm_set_epi32) while initializing a struct. We currently do + * this a *lot* in the tests. */ +#if \ + defined(HEDLEY_MSVC_VERSION) + #define SIMDE_DIAGNOSTIC_DISABLE_NON_CONSTANT_AGGREGATE_INITIALIZER_ __pragma(warning(disable:4204)) +#else + #define SIMDE_DIAGNOSTIC_DISABLE_NON_CONSTANT_AGGREGATE_INITIALIZER_ +#endif + +/* This warning needs a lot of work. It is triggered if all you do is + * pass the value to memcpy/__builtin_memcpy, or if you initialize a + * member of the union, even if that member takes up the entire union. + * Last tested with clang-10, hopefully things will improve in the + * future; if clang fixes this I'd love to enable it. */ +#if \ + HEDLEY_HAS_WARNING("-Wconditional-uninitialized") + #define SIMDE_DIAGNOSTIC_DISABLE_CONDITIONAL_UNINITIALIZED_ _Pragma("clang diagnostic ignored \"-Wconditional-uninitialized\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_CONDITIONAL_UNINITIALIZED_ +#endif + +/* This warning is meant to catch things like `0.3 + 0.4 == 0.7`, which + * will is false. However, SIMDe uses these operations exclusively + * for things like _mm_cmpeq_ps, for which we really do want to check + * for equality (or inequality). + * + * If someone wants to put together a SIMDE_FLOAT_EQUAL(a, op, b) macro + * which just wraps a check in some code do disable this diagnostic I'd + * be happy to accept it. */ +#if \ + HEDLEY_HAS_WARNING("-Wfloat-equal") || \ + HEDLEY_GCC_VERSION_CHECK(3,0,0) + #define SIMDE_DIAGNOSTIC_DISABLE_FLOAT_EQUAL_ _Pragma("GCC diagnostic ignored \"-Wfloat-equal\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_FLOAT_EQUAL_ +#endif + +/* This is because we use HEDLEY_STATIC_ASSERT for static assertions. + * If Hedley can't find an implementation it will preprocess to + * nothing, which means there will be a trailing semi-colon. */ +#if HEDLEY_HAS_WARNING("-Wextra-semi") + #define SIMDE_DIAGNOSTIC_DISABLE_EXTRA_SEMI_ _Pragma("clang diagnostic ignored \"-Wextra-semi\"") +#elif HEDLEY_GCC_VERSION_CHECK(8,1,0) && defined(__cplusplus) + #define SIMDE_DIAGNOSTIC_DISABLE_EXTRA_SEMI_ _Pragma("GCC diagnostic ignored \"-Wextra-semi\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_EXTRA_SEMI_ +#endif + +/* We do use a few variadic macros, which technically aren't available + * until C99 and C++11, but every compiler I'm aware of has supported + * them for much longer. That said, usage is isolated to the test + * suite and compilers known to support them. */ +#if HEDLEY_HAS_WARNING("-Wvariadic-macros") || HEDLEY_GCC_VERSION_CHECK(4,0,0) + #if HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") + #define SIMDE_DIAGNOSTIC_DISABLE_VARIADIC_MACROS_ \ + _Pragma("clang diagnostic ignored \"-Wvariadic-macros\"") \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat-pedantic\"") + #else + #define SIMDE_DIAGNOSTIC_DISABLE_VARIADIC_MACROS_ _Pragma("GCC diagnostic ignored \"-Wvariadic-macros\"") + #endif +#else + #define SIMDE_DIAGNOSTIC_DISABLE_VARIADIC_MACROS_ +#endif + +/* emscripten requires us to use a __wasm_unimplemented_simd128__ macro + * before we can access certain SIMD intrinsics, but this diagnostic + * warns about it being a reserved name. It is a reserved name, but + * it's reserved for the compiler and we are using it to convey + * information to the compiler. + * + * This is also used when enabling native aliases since we don't get to + * choose the macro names. */ +#if HEDLEY_HAS_WARNING("-Wreserved-id-macro") + #define SIMDE_DIAGNOSTIC_DISABLE_RESERVED_ID_MACRO_ _Pragma("clang diagnostic ignored \"-Wreserved-id-macro\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_RESERVED_ID_MACRO_ +#endif + +/* Similar to above; types like simde__m128i are reserved due to the + * double underscore, but we didn't choose them, Intel did. */ +#if HEDLEY_HAS_WARNING("-Wreserved-identifier") + #define SIMDE_DIAGNOSTIC_DISABLE_RESERVED_ID_ _Pragma("clang diagnostic ignored \"-Wreserved-identifier\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_RESERVED_ID_ +#endif + +/* clang 3.8 warns about the packed attribute being unnecessary when + * used in the _mm_loadu_* functions. That *may* be true for version + * 3.8, but for later versions it is crucial in order to make unaligned + * access safe. */ +#if HEDLEY_HAS_WARNING("-Wpacked") + #define SIMDE_DIAGNOSTIC_DISABLE_PACKED_ _Pragma("clang diagnostic ignored \"-Wpacked\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_PACKED_ +#endif + +/* Triggered when assigning a float to a double implicitly. We use + * explicit casts in SIMDe, this is only used in the test suite. */ +#if HEDLEY_HAS_WARNING("-Wdouble-promotion") + #define SIMDE_DIAGNOSTIC_DISABLE_DOUBLE_PROMOTION_ _Pragma("clang diagnostic ignored \"-Wdouble-promotion\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_DOUBLE_PROMOTION_ +#endif + +/* Several compilers treat conformant array parameters as VLAs. We + * test to make sure we're in C mode (C++ doesn't support CAPs), and + * that the version of the standard supports CAPs. We also reject + * some buggy compilers like MSVC (the logic is in Hedley if you want + * to take a look), but with certain warnings enabled some compilers + * still like to emit a diagnostic. */ +#if HEDLEY_HAS_WARNING("-Wvla") + #define SIMDE_DIAGNOSTIC_DISABLE_VLA_ _Pragma("clang diagnostic ignored \"-Wvla\"") +#elif HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define SIMDE_DIAGNOSTIC_DISABLE_VLA_ _Pragma("GCC diagnostic ignored \"-Wvla\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_VLA_ +#endif + +/* If you add an unused attribute to a function and don't use it, clang + * may emit this. */ +#if HEDLEY_HAS_WARNING("-Wused-but-marked-unused") + #define SIMDE_DIAGNOSTIC_DISABLE_USED_BUT_MARKED_UNUSED_ _Pragma("clang diagnostic ignored \"-Wused-but-marked-unused\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_USED_BUT_MARKED_UNUSED_ +#endif + +#if HEDLEY_HAS_WARNING("-Wpass-failed") + #define SIMDE_DIAGNOSTIC_DISABLE_PASS_FAILED_ _Pragma("clang diagnostic ignored \"-Wpass-failed\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_PASS_FAILED_ +#endif + +#if HEDLEY_HAS_WARNING("-Wpadded") + #define SIMDE_DIAGNOSTIC_DISABLE_PADDED_ _Pragma("clang diagnostic ignored \"-Wpadded\"") +#elif HEDLEY_MSVC_VERSION_CHECK(19,0,0) /* Likely goes back further */ + #define SIMDE_DIAGNOSTIC_DISABLE_PADDED_ __pragma(warning(disable:4324)) +#else + #define SIMDE_DIAGNOSTIC_DISABLE_PADDED_ +#endif + +#if HEDLEY_HAS_WARNING("-Wzero-as-null-pointer-constant") + #define SIMDE_DIAGNOSTIC_DISABLE_ZERO_AS_NULL_POINTER_CONSTANT_ _Pragma("clang diagnostic ignored \"-Wzero-as-null-pointer-constant\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_ZERO_AS_NULL_POINTER_CONSTANT_ +#endif + +#if HEDLEY_HAS_WARNING("-Wold-style-cast") + #define SIMDE_DIAGNOSTIC_DISABLE_OLD_STYLE_CAST_ _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_OLD_STYLE_CAST_ +#endif + +#if HEDLEY_HAS_WARNING("-Wcast-function-type") || HEDLEY_GCC_VERSION_CHECK(8,0,0) + #define SIMDE_DIAGNOSTIC_DISABLE_CAST_FUNCTION_TYPE_ _Pragma("GCC diagnostic ignored \"-Wcast-function-type\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_CAST_FUNCTION_TYPE_ +#endif + +/* clang will emit this warning when we use C99 extensions when not in + * C99 mode, even though it does support this. In such cases we check + * the compiler and version first, so we know it's not a problem. */ +#if HEDLEY_HAS_WARNING("-Wc99-extensions") + #define SIMDE_DIAGNOSTIC_DISABLE_C99_EXTENSIONS_ _Pragma("clang diagnostic ignored \"-Wc99-extensions\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_C99_EXTENSIONS_ +#endif + +/* Similar problm as above; we rely on some basic C99 support, but clang + * has started warning obut this even in C17 mode with -Weverything. */ +#if HEDLEY_HAS_WARNING("-Wdeclaration-after-statement") + #define SIMDE_DIAGNOSTIC_DISABLE_DECLARATION_AFTER_STATEMENT_ _Pragma("clang diagnostic ignored \"-Wdeclaration-after-statement\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_DECLARATION_AFTER_STATEMENT_ +#endif + +/* https://github.com/simd-everywhere/simde/issues/277 */ +#if defined(HEDLEY_GCC_VERSION) && HEDLEY_GCC_VERSION_CHECK(4,6,0) && !HEDLEY_GCC_VERSION_CHECK(6,4,0) && defined(__cplusplus) + #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_UNUSED_BUT_SET_VARIBALE_ _Pragma("GCC diagnostic ignored \"-Wunused-but-set-variable\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_UNUSED_BUT_SET_VARIBALE_ +#endif + +/* This is the warning that you normally define _CRT_SECURE_NO_WARNINGS + * to silence, but you have to do that before including anything and + * that would require reordering includes. */ +#if defined(_MSC_VER) + #define SIMDE_DIAGNOSTIC_DISABLE_ANNEX_K_ __pragma(warning(disable:4996)) +#else + #define SIMDE_DIAGNOSTIC_DISABLE_ANNEX_K_ +#endif + +/* Some compilers, such as clang, may use `long long` for 64-bit + * integers, but `long long` triggers a diagnostic with + * -Wc++98-compat-pedantic which says 'long long' is incompatible with + * C++98. */ +#if HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") + #if HEDLEY_HAS_WARNING("-Wc++11-long-long") + #define SIMDE_DIAGNOSTIC_DISABLE_CPP98_COMPAT_PEDANTIC_ \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat-pedantic\"") \ + _Pragma("clang diagnostic ignored \"-Wc++11-long-long\"") + #else + #define SIMDE_DIAGNOSTIC_DISABLE_CPP98_COMPAT_PEDANTIC_ _Pragma("clang diagnostic ignored \"-Wc++98-compat-pedantic\"") + #endif +#else + #define SIMDE_DIAGNOSTIC_DISABLE_CPP98_COMPAT_PEDANTIC_ +#endif + +/* Some problem as above */ +#if HEDLEY_HAS_WARNING("-Wc++11-long-long") + #define SIMDE_DIAGNOSTIC_DISABLE_CPP11_LONG_LONG_ _Pragma("clang diagnostic ignored \"-Wc++11-long-long\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_CPP11_LONG_LONG_ +#endif + +/* emscripten emits this whenever stdin/stdout/stderr is used in a + * macro. */ +#if HEDLEY_HAS_WARNING("-Wdisabled-macro-expansion") + #define SIMDE_DIAGNOSTIC_DISABLE_DISABLED_MACRO_EXPANSION_ _Pragma("clang diagnostic ignored \"-Wdisabled-macro-expansion\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_DISABLED_MACRO_EXPANSION_ +#endif + +/* Clang uses C11 generic selections to implement some AltiVec + * functions, which triggers this diagnostic when not compiling + * in C11 mode */ +#if HEDLEY_HAS_WARNING("-Wc11-extensions") + #define SIMDE_DIAGNOSTIC_DISABLE_C11_EXTENSIONS_ _Pragma("clang diagnostic ignored \"-Wc11-extensions\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_C11_EXTENSIONS_ +#endif + +/* Clang sometimes triggers this warning in macros in the AltiVec and + * NEON headers, or due to missing functions. */ +#if HEDLEY_HAS_WARNING("-Wvector-conversion") + #define SIMDE_DIAGNOSTIC_DISABLE_VECTOR_CONVERSION_ _Pragma("clang diagnostic ignored \"-Wvector-conversion\"") + /* For NEON, the situation with -Wvector-conversion in clang < 10 is + * bad enough that we just disable the warning altogether. On x86, + * clang has similar issues on several sse4.2+ intrinsics before 3.8. */ + #if \ + (defined(SIMDE_ARCH_ARM) && SIMDE_DETECT_CLANG_VERSION_NOT(10,0,0)) || \ + SIMDE_DETECT_CLANG_VERSION_NOT(3,8,0) + #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_VECTOR_CONVERSION_ SIMDE_DIAGNOSTIC_DISABLE_VECTOR_CONVERSION_ + #endif +#else + #define SIMDE_DIAGNOSTIC_DISABLE_VECTOR_CONVERSION_ +#endif +#if !defined(SIMDE_DIAGNOSTIC_DISABLE_BUGGY_VECTOR_CONVERSION_) + #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_VECTOR_CONVERSION_ +#endif + +/* Prior to 5.0, clang didn't support disabling diagnostics in + * statement exprs. As a result, some macros we use don't + * properly silence warnings. */ +#if SIMDE_DETECT_CLANG_VERSION_NOT(5,0,0) && HEDLEY_HAS_WARNING("-Wcast-qual") && HEDLEY_HAS_WARNING("-Wcast-align") + #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_CASTS_ _Pragma("clang diagnostic ignored \"-Wcast-qual\"") _Pragma("clang diagnostic ignored \"-Wcast-align\"") +#elif SIMDE_DETECT_CLANG_VERSION_NOT(5,0,0) && HEDLEY_HAS_WARNING("-Wcast-qual") + #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_CASTS_ _Pragma("clang diagnostic ignored \"-Wcast-qual\"") +#elif SIMDE_DETECT_CLANG_VERSION_NOT(5,0,0) && HEDLEY_HAS_WARNING("-Wcast-align") + #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_CASTS_ _Pragma("clang diagnostic ignored \"-Wcast-align\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_CASTS_ +#endif + +/* SLEEF triggers this a *lot* in their headers */ +#if HEDLEY_HAS_WARNING("-Wignored-qualifiers") + #define SIMDE_DIAGNOSTIC_DISABLE_IGNORED_QUALIFIERS_ _Pragma("clang diagnostic ignored \"-Wignored-qualifiers\"") +#elif HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define SIMDE_DIAGNOSTIC_DISABLE_IGNORED_QUALIFIERS_ _Pragma("GCC diagnostic ignored \"-Wignored-qualifiers\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_IGNORED_QUALIFIERS_ +#endif + +/* GCC emits this under some circumstances when using __int128 */ +#if HEDLEY_GCC_VERSION_CHECK(4,8,0) + #define SIMDE_DIAGNOSTIC_DISABLE_PEDANTIC_ _Pragma("GCC diagnostic ignored \"-Wpedantic\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_PEDANTIC_ +#endif + +/* MSVC doesn't like (__assume(0), code) and will warn about code being + * unreachable, but we want it there because not all compilers + * understand the unreachable macro and will complain if it is missing. + * I'm planning on adding a new macro to Hedley to handle this a bit + * more elegantly, but until then... */ +#if defined(HEDLEY_MSVC_VERSION) + #define SIMDE_DIAGNOSTIC_DISABLE_UNREACHABLE_ __pragma(warning(disable:4702)) +#elif defined(__clang__) + #define SIMDE_DIAGNOSTIC_DISABLE_UNREACHABLE_ HEDLEY_PRAGMA(clang diagnostic ignored "-Wunreachable-code") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_UNREACHABLE_ +#endif + +/* This is a false positive from GCC in a few places. */ +#if HEDLEY_GCC_VERSION_CHECK(4,7,0) + #define SIMDE_DIAGNOSTIC_DISABLE_MAYBE_UNINITIAZILED_ _Pragma("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +#else + #define SIMDE_DIAGNOSTIC_DISABLE_MAYBE_UNINITIAZILED_ +#endif + +#if defined(SIMDE_ENABLE_NATIVE_ALIASES) + #define SIMDE_DISABLE_UNWANTED_DIAGNOSTICS_NATIVE_ALIASES_ \ + SIMDE_DIAGNOSTIC_DISABLE_RESERVED_ID_MACRO_ +#else + #define SIMDE_DISABLE_UNWANTED_DIAGNOSTICS_NATIVE_ALIASES_ +#endif + +/* Some native functions on E2K with instruction set < v6 are declared + * as deprecated due to inefficiency. Still they are more efficient + * than SIMDe implementation. So we're using them, and switching off + * these deprecation warnings. */ +#if defined(HEDLEY_MCST_LCC_VERSION) +# define SIMDE_LCC_DISABLE_DEPRECATED_WARNINGS _Pragma("diag_suppress 1215,1444") +# define SIMDE_LCC_REVERT_DEPRECATED_WARNINGS _Pragma("diag_default 1215,1444") +#else +# define SIMDE_LCC_DISABLE_DEPRECATED_WARNINGS +# define SIMDE_LCC_REVERT_DEPRECATED_WARNINGS +#endif + +#define SIMDE_DISABLE_UNWANTED_DIAGNOSTICS \ + HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION \ + SIMDE_DISABLE_UNWANTED_DIAGNOSTICS_NATIVE_ALIASES_ \ + SIMDE_DIAGNOSTIC_DISABLE_PSABI_ \ + SIMDE_DIAGNOSTIC_DISABLE_NO_EMMS_INSTRUCTION_ \ + SIMDE_DIAGNOSTIC_DISABLE_SIMD_PRAGMA_DEPRECATED_ \ + SIMDE_DIAGNOSTIC_DISABLE_CONDITIONAL_UNINITIALIZED_ \ + SIMDE_DIAGNOSTIC_DISABLE_DECLARATION_AFTER_STATEMENT_ \ + SIMDE_DIAGNOSTIC_DISABLE_FLOAT_EQUAL_ \ + SIMDE_DIAGNOSTIC_DISABLE_NON_CONSTANT_AGGREGATE_INITIALIZER_ \ + SIMDE_DIAGNOSTIC_DISABLE_EXTRA_SEMI_ \ + SIMDE_DIAGNOSTIC_DISABLE_VLA_ \ + SIMDE_DIAGNOSTIC_DISABLE_USED_BUT_MARKED_UNUSED_ \ + SIMDE_DIAGNOSTIC_DISABLE_PASS_FAILED_ \ + SIMDE_DIAGNOSTIC_DISABLE_CPP98_COMPAT_PEDANTIC_ \ + SIMDE_DIAGNOSTIC_DISABLE_CPP11_LONG_LONG_ \ + SIMDE_DIAGNOSTIC_DISABLE_BUGGY_UNUSED_BUT_SET_VARIBALE_ \ + SIMDE_DIAGNOSTIC_DISABLE_BUGGY_CASTS_ \ + SIMDE_DIAGNOSTIC_DISABLE_BUGGY_VECTOR_CONVERSION_ \ + SIMDE_DIAGNOSTIC_DISABLE_RESERVED_ID_ + +#endif /* !defined(SIMDE_DIAGNOSTIC_H) */ +/* :: End simde/simde-diagnostic.h :: */ + +#if !defined(SIMDE_X86_SVML_NATIVE) && !defined(SIMDE_X86_SVML_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_SVML) + #define SIMDE_X86_SVML_NATIVE + #endif +#endif + +#if !defined(SIMDE_X86_AVX512VP2INTERSECT_NATIVE) && !defined(SIMDE_X86_AVX512VP2INTERSECT_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX512VP2INTERSECT) + #define SIMDE_X86_AVX512VP2INTERSECT_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX512VP2INTERSECT_NATIVE) && !defined(SIMDE_X86_AVX512F_NATIVE) + #define SIMDE_X86_AVX512F_NATIVE +#endif + +#if !defined(SIMDE_X86_AVX512VPOPCNTDQ_NATIVE) && !defined(SIMDE_X86_AVX512VPOPCNTDQ_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX512VPOPCNTDQ) + #define SIMDE_X86_AVX512VPOPCNTDQ_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX512VPOPCNTDQ_NATIVE) && !defined(SIMDE_X86_AVX512F_NATIVE) + #define SIMDE_X86_AVX512F_NATIVE +#endif + +#if !defined(SIMDE_X86_AVX512BITALG_NATIVE) && !defined(SIMDE_X86_AVX512BITALG_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX512BITALG) + #define SIMDE_X86_AVX512BITALG_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX512BITALG_NATIVE) && !defined(SIMDE_X86_AVX512F_NATIVE) + #define SIMDE_X86_AVX512F_NATIVE +#endif + +#if !defined(SIMDE_X86_AVX512VBMI_NATIVE) && !defined(SIMDE_X86_AVX512VBMI_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX512VBMI) + #define SIMDE_X86_AVX512VBMI_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX512VBMI_NATIVE) && !defined(SIMDE_X86_AVX512F_NATIVE) + #define SIMDE_X86_AVX512F_NATIVE +#endif + +#if !defined(SIMDE_X86_AVX512VBMI2_NATIVE) && !defined(SIMDE_X86_AVX512VBMI2_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX512VBMI2) + #define SIMDE_X86_AVX512VBMI2_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX512VBMI2_NATIVE) && !defined(SIMDE_X86_AVX512F_NATIVE) + #define SIMDE_X86_AVX512F_NATIVE +#endif + +#if !defined(SIMDE_X86_AVX512VNNI_NATIVE) && !defined(SIMDE_X86_AVX512VNNI_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX512VNNI) + #define SIMDE_X86_AVX512VNNI_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX512VNNI_NATIVE) && !defined(SIMDE_X86_AVX512F_NATIVE) + #define SIMDE_X86_AVX512F_NATIVE +#endif + +#if !defined(SIMDE_X86_AVX5124VNNIW_NATIVE) && !defined(SIMDE_X86_AVX5124VNNIW_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX5124VNNIW) + #define SIMDE_X86_AVX5124VNNIW_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX5124VNNIW_NATIVE) && !defined(SIMDE_X86_AVX512F_NATIVE) + #define SIMDE_X86_AVX512F_NATIVE +#endif + +#if !defined(SIMDE_X86_AVX512CD_NATIVE) && !defined(SIMDE_X86_AVX512CD_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX512CD) + #define SIMDE_X86_AVX512CD_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX512CD_NATIVE) && !defined(SIMDE_X86_AVX512F_NATIVE) + #define SIMDE_X86_AVX512F_NATIVE +#endif + +#if !defined(SIMDE_X86_AVX512DQ_NATIVE) && !defined(SIMDE_X86_AVX512DQ_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX512DQ) + #define SIMDE_X86_AVX512DQ_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX512DQ_NATIVE) && !defined(SIMDE_X86_AVX512F_NATIVE) + #define SIMDE_X86_AVX512F_NATIVE +#endif + +#if !defined(SIMDE_X86_AVX512VL_NATIVE) && !defined(SIMDE_X86_AVX512VL_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX512VL) + #define SIMDE_X86_AVX512VL_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX512VL_NATIVE) && !defined(SIMDE_X86_AVX512F_NATIVE) + #define SIMDE_X86_AVX512F_NATIVE +#endif + +#if !defined(SIMDE_X86_AVX512BW_NATIVE) && !defined(SIMDE_X86_AVX512BW_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX512BW) + #define SIMDE_X86_AVX512BW_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX512BW_NATIVE) && !defined(SIMDE_X86_AVX512F_NATIVE) + #define SIMDE_X86_AVX512F_NATIVE +#endif + +#if !defined(SIMDE_X86_AVX512FP16_NATIVE) && !defined(SIMDE_X86_AVX512FP16_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX512FP16) + #define SIMDE_X86_AVX512FP16_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX512BW_NATIVE) && !defined(SIMDE_X86_AVX512F_NATIVE) + #define SIMDE_X86_AVX512F_NATIVE +#endif + +#if !defined(SIMDE_X86_AVX512BF16_NATIVE) && !defined(SIMDE_X86_AVX512BF16_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX512BF16) + #define SIMDE_X86_AVX512BF16_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX512BF16_NATIVE) && !defined(SIMDE_X86_AVX512F_NATIVE) + #define SIMDE_X86_AVX512F_NATIVE +#endif + +#if !defined(SIMDE_X86_AVX512F_NATIVE) && !defined(SIMDE_X86_AVX512F_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX512F) + #define SIMDE_X86_AVX512F_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX512F_NATIVE) && !defined(SIMDE_X86_AVX2_NATIVE) + #define SIMDE_X86_AVX2_NATIVE +#endif + +#if !defined(SIMDE_X86_FMA_NATIVE) && !defined(SIMDE_X86_FMA_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_FMA) + #define SIMDE_X86_FMA_NATIVE + #endif +#endif +#if defined(SIMDE_X86_FMA_NATIVE) && !defined(SIMDE_X86_AVX_NATIVE) + #define SIMDE_X86_AVX_NATIVE +#endif + +#if !defined(SIMDE_X86_AVX2_NATIVE) && !defined(SIMDE_X86_AVX2_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX2) + #define SIMDE_X86_AVX2_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX2_NATIVE) && !defined(SIMDE_X86_AVX_NATIVE) + #define SIMDE_X86_AVX_NATIVE +#endif + +#if !defined(SIMDE_X86_AVX_NATIVE) && !defined(SIMDE_X86_AVX_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AVX) + #define SIMDE_X86_AVX_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AVX_NATIVE) && !defined(SIMDE_X86_SSE4_2_NATIVE) + #define SIMDE_X86_SSE4_2_NATIVE +#endif + +#if !defined(SIMDE_X86_XOP_NATIVE) && !defined(SIMDE_X86_XOP_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_XOP) + #define SIMDE_X86_XOP_NATIVE + #endif +#endif +#if defined(SIMDE_X86_XOP_NATIVE) && !defined(SIMDE_X86_SSE4_2_NATIVE) + #define SIMDE_X86_SSE4_2_NATIVE +#endif + +#if !defined(SIMDE_X86_SSE4_2_NATIVE) && !defined(SIMDE_X86_SSE4_2_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_SSE4_2) + #define SIMDE_X86_SSE4_2_NATIVE + #endif +#endif +#if defined(SIMDE_X86_SSE4_2_NATIVE) && !defined(SIMDE_X86_SSE4_1_NATIVE) + #define SIMDE_X86_SSE4_1_NATIVE +#endif + +#if !defined(SIMDE_X86_SSE4_1_NATIVE) && !defined(SIMDE_X86_SSE4_1_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_SSE4_1) + #define SIMDE_X86_SSE4_1_NATIVE + #endif +#endif +#if defined(SIMDE_X86_SSE4_1_NATIVE) && !defined(SIMDE_X86_SSSE3_NATIVE) + #define SIMDE_X86_SSSE3_NATIVE +#endif + +#if !defined(SIMDE_X86_SSSE3_NATIVE) && !defined(SIMDE_X86_SSSE3_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_SSSE3) + #define SIMDE_X86_SSSE3_NATIVE + #endif +#endif +#if defined(SIMDE_X86_SSSE3_NATIVE) && !defined(SIMDE_X86_SSE3_NATIVE) + #define SIMDE_X86_SSE3_NATIVE +#endif + +#if !defined(SIMDE_X86_SSE3_NATIVE) && !defined(SIMDE_X86_SSE3_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_SSE3) + #define SIMDE_X86_SSE3_NATIVE + #endif +#endif +#if defined(SIMDE_X86_SSE3_NATIVE) && !defined(SIMDE_X86_SSE2_NATIVE) + #define SIMDE_X86_SSE2_NATIVE +#endif + +#if !defined(SIMDE_X86_AES_NATIVE) && !defined(SIMDE_X86_AES_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_AES) + #define SIMDE_X86_AES_NATIVE + #endif +#endif +#if defined(SIMDE_X86_AES_NATIVE) && !defined(SIMDE_X86_SSE2_NATIVE) + #define SIMDE_X86_SSE2_NATIVE +#endif + +#if !defined(SIMDE_X86_SSE2_NATIVE) && !defined(SIMDE_X86_SSE2_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_SSE2) + #define SIMDE_X86_SSE2_NATIVE + #endif +#endif +#if defined(SIMDE_X86_SSE2_NATIVE) && !defined(SIMDE_X86_SSE_NATIVE) + #define SIMDE_X86_SSE_NATIVE +#endif + +#if !defined(SIMDE_X86_SSE_NATIVE) && !defined(SIMDE_X86_SSE_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_SSE) + #define SIMDE_X86_SSE_NATIVE + #endif +#endif + +#if !defined(SIMDE_X86_MMX_NATIVE) && !defined(SIMDE_X86_MMX_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_MMX) + #define SIMDE_X86_MMX_NATIVE + #endif +#endif + +#if !defined(SIMDE_X86_GFNI_NATIVE) && !defined(SIMDE_X86_GFNI_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_GFNI) + #define SIMDE_X86_GFNI_NATIVE + #endif +#endif + +#if !defined(SIMDE_X86_PCLMUL_NATIVE) && !defined(SIMDE_X86_PCLMUL_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_PCLMUL) + #define SIMDE_X86_PCLMUL_NATIVE + #endif +#endif + +#if !defined(SIMDE_X86_VPCLMULQDQ_NATIVE) && !defined(SIMDE_X86_VPCLMULQDQ_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_VPCLMULQDQ) + #define SIMDE_X86_VPCLMULQDQ_NATIVE + #endif +#endif + +#if !defined(SIMDE_X86_F16C_NATIVE) && !defined(SIMDE_X86_F16C_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86_F16C) + #define SIMDE_X86_F16C_NATIVE + #endif +#endif + +#if !defined(SIMDE_X86_SVML_NATIVE) && !defined(SIMDE_X86_SVML_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_X86) && (defined(__INTEL_COMPILER) || (HEDLEY_MSVC_VERSION_CHECK(14, 20, 0) && !defined(__clang__))) + #define SIMDE_X86_SVML_NATIVE + #endif +#endif + +#if defined(HEDLEY_MSVC_VERSION) + #pragma warning(push) + #pragma warning(disable:4799) +#endif + +#if \ + defined(SIMDE_X86_AVX_NATIVE) || defined(SIMDE_X86_GFNI_NATIVE) || defined(SIMDE_X86_SVML_NATIVE) + #include +#elif defined(SIMDE_X86_SSE4_2_NATIVE) + #include +#elif defined(SIMDE_X86_SSE4_1_NATIVE) + #include +#elif defined(SIMDE_X86_SSSE3_NATIVE) + #include +#elif defined(SIMDE_X86_SSE3_NATIVE) + #include +#elif defined(SIMDE_X86_SSE2_NATIVE) + #include +#elif defined(SIMDE_X86_SSE_NATIVE) + #include +#elif defined(SIMDE_X86_MMX_NATIVE) + #include +#endif + +#if defined(SIMDE_X86_XOP_NATIVE) + #if defined(_MSC_VER) + #include + #else + #include + #endif +#endif + +#if defined(SIMDE_X86_AES_NATIVE) + #include +#endif + +#if defined(HEDLEY_MSVC_VERSION) + #pragma warning(pop) +#endif + +#if !defined(SIMDE_ARM_NEON_A64V8_NATIVE) && !defined(SIMDE_ARM_NEON_A64V8_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_ARM_NEON) && defined(SIMDE_ARCH_AARCH64) && SIMDE_ARCH_ARM_CHECK(8,0) + #define SIMDE_ARM_NEON_A64V8_NATIVE + #endif +#endif +#if defined(SIMDE_ARM_NEON_A64V8_NATIVE) && !defined(SIMDE_ARM_NEON_A32V8_NATIVE) + #define SIMDE_ARM_NEON_A32V8_NATIVE +#endif + +#if !defined(SIMDE_ARM_NEON_A32V8_NATIVE) && !defined(SIMDE_ARM_NEON_A32V8_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_ARM_NEON) && SIMDE_ARCH_ARM_CHECK(8,0) && (__ARM_NEON_FP & 0x02) + #define SIMDE_ARM_NEON_A32V8_NATIVE + #endif +#endif +#if defined(__ARM_ACLE) + #include +#endif +#if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && !defined(SIMDE_ARM_NEON_A32V7_NATIVE) + #define SIMDE_ARM_NEON_A32V7_NATIVE +#endif + +#if !defined(SIMDE_ARM_NEON_A32V7_NATIVE) && !defined(SIMDE_ARM_NEON_A32V7_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_ARM_NEON) && SIMDE_ARCH_ARM_CHECK(7,0) + #define SIMDE_ARM_NEON_A32V7_NATIVE + #endif +#endif +#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + #include + #if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) + #include + #endif +#endif + +#if !defined(SIMDE_ARM_SVE_NATIVE) && !defined(SIMDE_ARM_SVE_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_ARM_SVE) + #define SIMDE_ARM_SVE_NATIVE + #include + #endif +#endif + +#if !defined(SIMDE_RISCV_V_NATIVE) && !defined(SIMDE_RISCV_V_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_RISCV_V) + #define SIMDE_RISCV_V_NATIVE + #endif +#endif +#if defined(SIMDE_RISCV_V_NATIVE) + #include +#endif + +#if !defined(SIMDE_WASM_SIMD128_NATIVE) && !defined(SIMDE_WASM_SIMD128_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_WASM_SIMD128) + #define SIMDE_WASM_SIMD128_NATIVE + #endif +#endif + +#if !defined(SIMDE_WASM_RELAXED_SIMD_NATIVE) && !defined(SIMDE_WASM_RELAXED_SIMD_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_WASM_RELAXED_SIMD) + #define SIMDE_WASM_RELAXED_SIMD_NATIVE + #endif +#endif +#if defined(SIMDE_WASM_SIMD128_NATIVE) || defined(SIMDE_WASM_RELAXED_SIMD_NATIVE) + #include +#endif + +#if !defined(SIMDE_POWER_ALTIVEC_P9_NATIVE) && !defined(SIMDE_POWER_ALTIVEC_P9_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if SIMDE_ARCH_POWER_ALTIVEC_CHECK(900) + #define SIMDE_POWER_ALTIVEC_P9_NATIVE + #endif +#endif +#if defined(SIMDE_POWER_ALTIVEC_P9_NATIVE) && !defined(SIMDE_POWER_ALTIVEC_P8) + #define SIMDE_POWER_ALTIVEC_P8_NATIVE +#endif + +#if !defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) && !defined(SIMDE_POWER_ALTIVEC_P8_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if SIMDE_ARCH_POWER_ALTIVEC_CHECK(800) + #define SIMDE_POWER_ALTIVEC_P8_NATIVE + #endif +#endif +#if defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) && !defined(SIMDE_POWER_ALTIVEC_P7) + #define SIMDE_POWER_ALTIVEC_P7_NATIVE +#endif + +#if !defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) && !defined(SIMDE_POWER_ALTIVEC_P7_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if SIMDE_ARCH_POWER_ALTIVEC_CHECK(700) + #define SIMDE_POWER_ALTIVEC_P7_NATIVE + #endif +#endif +#if defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) && !defined(SIMDE_POWER_ALTIVEC_P6) + #define SIMDE_POWER_ALTIVEC_P6_NATIVE +#endif + +#if !defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) && !defined(SIMDE_POWER_ALTIVEC_P6_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if SIMDE_ARCH_POWER_ALTIVEC_CHECK(600) + #define SIMDE_POWER_ALTIVEC_P6_NATIVE + #endif +#endif +#if defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) && !defined(SIMDE_POWER_ALTIVEC_P5) + #define SIMDE_POWER_ALTIVEC_P5_NATIVE +#endif + +#if !defined(SIMDE_POWER_ALTIVEC_P5_NATIVE) && !defined(SIMDE_POWER_ALTIVEC_P5_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if SIMDE_ARCH_POWER_ALTIVEC_CHECK(500) + #define SIMDE_POWER_ALTIVEC_P5_NATIVE + #endif +#endif + +#if !defined(SIMDE_ZARCH_ZVECTOR_15_NATIVE) && !defined(SIMDE_ZARCH_ZVECTOR_15_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if SIMDE_ARCH_ZARCH_CHECK(13) && defined(SIMDE_ARCH_ZARCH_ZVECTOR) + #define SIMDE_ZARCH_ZVECTOR_15_NATIVE + #endif +#endif + +#if !defined(SIMDE_ZARCH_ZVECTOR_14_NATIVE) && !defined(SIMDE_ZARCH_ZVECTOR_14_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if SIMDE_ARCH_ZARCH_CHECK(12) && defined(SIMDE_ARCH_ZARCH_ZVECTOR) + #define SIMDE_ZARCH_ZVECTOR_14_NATIVE + #endif +#endif + +#if !defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) && !defined(SIMDE_ZARCH_ZVECTOR_13_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if SIMDE_ARCH_ZARCH_CHECK(11) && defined(SIMDE_ARCH_ZARCH_ZVECTOR) + #define SIMDE_ZARCH_ZVECTOR_13_NATIVE + #endif +#endif + +#if defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + /* AltiVec conflicts with lots of stuff. The bool keyword conflicts + * with the bool keyword in C++ and the bool macro in C99+ (defined + * in stdbool.h). The vector keyword conflicts with std::vector in + * C++ if you are `using std;`. + * + * Luckily AltiVec allows you to use `__vector`/`__bool`/`__pixel` + * instead, but altivec.h will unconditionally define + * `vector`/`bool`/`pixel` so we need to work around that. + * + * Unfortunately this means that if your code uses AltiVec directly + * it may break. If this is the case you'll want to define + * `SIMDE_POWER_ALTIVEC_NO_UNDEF` before including SIMDe. Or, even + * better, port your code to use the double-underscore versions. */ + #if defined(bool) + #undef bool + #endif + + #if defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + #include + + #if !defined(SIMDE_POWER_ALTIVEC_NO_UNDEF) + #if defined(vector) + #undef vector + #endif + #if defined(pixel) + #undef pixel + #endif + #if defined(bool) + #undef bool + #endif + #endif /* !defined(SIMDE_POWER_ALTIVEC_NO_UNDEF) */ + #elif defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + #include + #endif + + /* Use these intsead of vector/pixel/bool in SIMDe. */ + #define SIMDE_POWER_ALTIVEC_VECTOR(T) __vector T + #define SIMDE_POWER_ALTIVEC_PIXEL __pixel + #define SIMDE_POWER_ALTIVEC_BOOL __bool + + /* Re-define bool if we're using stdbool.h */ + #if !defined(__cplusplus) && defined(__bool_true_false_are_defined) && !defined(SIMDE_POWER_ALTIVEC_NO_UNDEF) + #define bool _Bool + #endif +#endif + +#if !defined(SIMDE_MIPS_LOONGSON_MMI_NATIVE) && !defined(SIMDE_MIPS_LOONGSON_MMI_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_MIPS_LOONGSON_MMI) + #define SIMDE_MIPS_LOONGSON_MMI_NATIVE 1 + #endif +#endif +#if defined(SIMDE_MIPS_LOONGSON_MMI_NATIVE) + #include +#endif + +#if !defined(SIMDE_MIPS_MSA_NATIVE) && !defined(SIMDE_MIPS_MSA_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_MIPS_MSA) + #define SIMDE_MIPS_MSA_NATIVE 1 + #endif +#endif +#if defined(SIMDE_MIPS_MSA_NATIVE) + #include +#endif + +/* This is used to determine whether or not to fall back on a vector + * function in an earlier ISA extensions, as well as whether + * we expected any attempts at vectorization to be fruitful or if we + * expect to always be running serial code. + * + * Note that, for some architectures (okay, *one* architecture) there + * can be a split where some types are supported for one vector length + * but others only for a shorter length. Therefore, it is possible to + * provide separate values for float/int/double types. */ + +#if !defined(SIMDE_NATURAL_VECTOR_SIZE) + #if defined(SIMDE_X86_AVX512F_NATIVE) + #define SIMDE_NATURAL_VECTOR_SIZE (512) + #elif defined(SIMDE_X86_AVX2_NATIVE) + #define SIMDE_NATURAL_VECTOR_SIZE (256) + #elif defined(SIMDE_X86_AVX_NATIVE) + #define SIMDE_NATURAL_FLOAT_VECTOR_SIZE (256) + #define SIMDE_NATURAL_INT_VECTOR_SIZE (128) + #define SIMDE_NATURAL_DOUBLE_VECTOR_SIZE (128) + #elif \ + defined(SIMDE_X86_SSE2_NATIVE) || \ + defined(SIMDE_ARM_NEON_A32V7_NATIVE) || \ + defined(SIMDE_WASM_SIMD128_NATIVE) || \ + defined(SIMDE_POWER_ALTIVEC_P5_NATIVE) || \ + defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) || \ + defined(SIMDE_MIPS_MSA_NATIVE) + #define SIMDE_NATURAL_VECTOR_SIZE (128) + #elif defined(SIMDE_X86_SSE_NATIVE) + #define SIMDE_NATURAL_FLOAT_VECTOR_SIZE (128) + #define SIMDE_NATURAL_INT_VECTOR_SIZE (64) + #define SIMDE_NATURAL_DOUBLE_VECTOR_SIZE (0) + #elif defined(SIMDE_RISCV_V_NATIVE) && defined(__riscv_v_fixed_vlen) + //FIXME : SIMDE_NATURAL_VECTOR_SIZE == __riscv_v_fixed_vlen + #define SIMDE_NATURAL_VECTOR_SIZE (128) + #endif + + #if !defined(SIMDE_NATURAL_VECTOR_SIZE) + #if defined(SIMDE_NATURAL_FLOAT_VECTOR_SIZE) + #define SIMDE_NATURAL_VECTOR_SIZE SIMDE_NATURAL_FLOAT_VECTOR_SIZE + #elif defined(SIMDE_NATURAL_INT_VECTOR_SIZE) + #define SIMDE_NATURAL_VECTOR_SIZE SIMDE_NATURAL_INT_VECTOR_SIZE + #elif defined(SIMDE_NATURAL_DOUBLE_VECTOR_SIZE) + #define SIMDE_NATURAL_VECTOR_SIZE SIMDE_NATURAL_DOUBLE_VECTOR_SIZE + #else + #define SIMDE_NATURAL_VECTOR_SIZE (0) + #endif + #endif + + #if !defined(SIMDE_NATURAL_FLOAT_VECTOR_SIZE) + #define SIMDE_NATURAL_FLOAT_VECTOR_SIZE SIMDE_NATURAL_VECTOR_SIZE + #endif + #if !defined(SIMDE_NATURAL_INT_VECTOR_SIZE) + #define SIMDE_NATURAL_INT_VECTOR_SIZE SIMDE_NATURAL_VECTOR_SIZE + #endif + #if !defined(SIMDE_NATURAL_DOUBLE_VECTOR_SIZE) + #define SIMDE_NATURAL_DOUBLE_VECTOR_SIZE SIMDE_NATURAL_VECTOR_SIZE + #endif +#endif + +#define SIMDE_NATURAL_VECTOR_SIZE_LE(x) ((SIMDE_NATURAL_VECTOR_SIZE > 0) && (SIMDE_NATURAL_VECTOR_SIZE <= (x))) +#define SIMDE_NATURAL_VECTOR_SIZE_GE(x) ((SIMDE_NATURAL_VECTOR_SIZE > 0) && (SIMDE_NATURAL_VECTOR_SIZE >= (x))) +#define SIMDE_NATURAL_FLOAT_VECTOR_SIZE_LE(x) ((SIMDE_NATURAL_FLOAT_VECTOR_SIZE > 0) && (SIMDE_NATURAL_FLOAT_VECTOR_SIZE <= (x))) +#define SIMDE_NATURAL_FLOAT_VECTOR_SIZE_GE(x) ((SIMDE_NATURAL_FLOAT_VECTOR_SIZE > 0) && (SIMDE_NATURAL_FLOAT_VECTOR_SIZE >= (x))) +#define SIMDE_NATURAL_INT_VECTOR_SIZE_LE(x) ((SIMDE_NATURAL_INT_VECTOR_SIZE > 0) && (SIMDE_NATURAL_INT_VECTOR_SIZE <= (x))) +#define SIMDE_NATURAL_INT_VECTOR_SIZE_GE(x) ((SIMDE_NATURAL_INT_VECTOR_SIZE > 0) && (SIMDE_NATURAL_INT_VECTOR_SIZE >= (x))) +#define SIMDE_NATURAL_DOUBLE_VECTOR_SIZE_LE(x) ((SIMDE_NATURAL_DOUBLE_VECTOR_SIZE > 0) && (SIMDE_NATURAL_DOUBLE_VECTOR_SIZE <= (x))) +#define SIMDE_NATURAL_DOUBLE_VECTOR_SIZE_GE(x) ((SIMDE_NATURAL_DOUBLE_VECTOR_SIZE > 0) && (SIMDE_NATURAL_DOUBLE_VECTOR_SIZE >= (x))) + +/* Native aliases */ +#if defined(SIMDE_ENABLE_NATIVE_ALIASES) + #if !defined(SIMDE_X86_MMX_NATIVE) + #define SIMDE_X86_MMX_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_SSE_NATIVE) + #define SIMDE_X86_SSE_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_SSE2_NATIVE) + #define SIMDE_X86_SSE2_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_SSE3_NATIVE) + #define SIMDE_X86_SSE3_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_SSSE3_NATIVE) + #define SIMDE_X86_SSSE3_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_SSE4_1_NATIVE) + #define SIMDE_X86_SSE4_1_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_SSE4_2_NATIVE) + #define SIMDE_X86_SSE4_2_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX_NATIVE) + #define SIMDE_X86_AVX_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX2_NATIVE) + #define SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_FMA_NATIVE) + #define SIMDE_X86_FMA_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX512F_NATIVE) + #define SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX512VL_NATIVE) + #define SIMDE_X86_AVX512VL_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX512VBMI_NATIVE) + #define SIMDE_X86_AVX512VBMI_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX512VBMI2_NATIVE) + #define SIMDE_X86_AVX512VBMI2_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX512BW_NATIVE) + #define SIMDE_X86_AVX512BW_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX512VNNI_NATIVE) + #define SIMDE_X86_AVX512VNNI_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX5124VNNIW_NATIVE) + #define SIMDE_X86_AVX5124VNNIW_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX512BF16_NATIVE) + #define SIMDE_X86_AVX512BF16_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX512BITALG_NATIVE) + #define SIMDE_X86_AVX512BITALG_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX512VPOPCNTDQ_NATIVE) + #define SIMDE_X86_AVX512VPOPCNTDQ_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX512VP2INTERSECT_NATIVE) + #define SIMDE_X86_AVX512VP2INTERSECT_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX512DQ_NATIVE) + #define SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX512CD_NATIVE) + #define SIMDE_X86_AVX512CD_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AVX512FP16_NATIVE) + #define SIMDE_X86_AVX512FP16_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_GFNI_NATIVE) + #define SIMDE_X86_GFNI_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_PCLMUL_NATIVE) + #define SIMDE_X86_PCLMUL_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_VPCLMULQDQ_NATIVE) + #define SIMDE_X86_VPCLMULQDQ_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_F16C_NATIVE) + #define SIMDE_X86_F16C_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_AES_NATIVE) + #define SIMDE_X86_AES_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_X86_SVML_NATIVE) + #define SIMDE_X86_SVML_ENABLE_NATIVE_ALIASES + #endif + + #if !defined(SIMDE_ARM_NEON_A32V7_NATIVE) + #define SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_ARM_NEON_A32V8_NATIVE) + #define SIMDE_ARM_NEON_A32V8_ENABLE_NATIVE_ALIASES + #endif + #if !defined(SIMDE_ARM_NEON_A64V8_NATIVE) + #define SIMDE_ARM_NEON_A64V8_ENABLE_NATIVE_ALIASES + #endif + + #if !defined(SIMDE_ARM_SVE_NATIVE) + #define SIMDE_ARM_SVE_ENABLE_NATIVE_ALIASES + #endif + + #if !defined(SIMDE_RISCV_V_NATIVE) + #define SIMDE_RISCV_V_ENABLE_NATIVE_ALIASES + #endif + + #if !defined(SIMDE_MIPS_MSA_NATIVE) + #define SIMDE_MIPS_MSA_ENABLE_NATIVE_ALIASES + #endif + + #if !defined(SIMDE_WASM_SIMD128_NATIVE) + #define SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES + #endif +#endif + +/* Are floating point values stored using IEEE 754? Knowing + * this at during preprocessing is a bit tricky, mostly because what + * we're curious about is how values are stored and not whether the + * implementation is fully conformant in terms of rounding, NaN + * handling, etc. + * + * For example, if you use -ffast-math or -Ofast on + * GCC or clang IEEE 754 isn't strictly followed, therefore IEE 754 + * support is not advertised (by defining __STDC_IEC_559__). + * + * However, what we care about is whether it is safe to assume that + * floating point values are stored in IEEE 754 format, in which case + * we can provide faster implementations of some functions. + * + * Luckily every vaugely modern architecture I'm aware of uses IEEE 754- + * so we just assume IEEE 754 for now. There is a test which verifies + * this, if that test fails sowewhere please let us know and we'll add + * an exception for that platform. Meanwhile, you can define + * SIMDE_NO_IEEE754_STORAGE. */ +#if !defined(SIMDE_IEEE754_STORAGE) && !defined(SIMDE_NO_IEE754_STORAGE) + #define SIMDE_IEEE754_STORAGE +#endif + +#if defined(SIMDE_ARCH_ARM_NEON_FP16) + #define SIMDE_ARM_NEON_FP16 +#endif + +#if defined(SIMDE_ARCH_ARM_NEON_BF16) + #define SIMDE_ARM_NEON_BF16 +#endif + +#if !defined(SIMDE_LOONGARCH_LASX_NATIVE) && !defined(SIMDE_LOONGARCH_LASX_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_LOONGARCH_LASX) + #define SIMDE_LOONGARCH_LASX_NATIVE + #endif +#endif + +#if !defined(SIMDE_LOONGARCH_LSX_NATIVE) && !defined(SIMDE_LOONGARCH_LSX_NO_NATIVE) && !defined(SIMDE_NO_NATIVE) + #if defined(SIMDE_ARCH_LOONGARCH_LSX) + #define SIMDE_LOONGARCH_LSX_NATIVE + #endif +#endif + +#if defined(SIMDE_LOONGARCH_LASX_NATIVE) + #include +#endif +#if defined(SIMDE_LOONGARCH_LSX_NATIVE) + #include +#endif + +#endif /* !defined(SIMDE_FEATURES_H) */ +/* :: End simde/simde-features.h :: */ +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* :: Begin simde/simde-math.h :: */ +/* SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Copyright: + * 2017-2020 Evan Nemerson + * 2023 Yi-Yen Chung (Copyright owned by Andes Technology) + */ + +/* Attempt to find math functions. Functions may be in , + * , compiler built-ins/intrinsics, or platform/architecture + * specific headers. In some cases, especially those not built in to + * libm, we may need to define our own implementations. */ + +#if !defined(SIMDE_MATH_H) +#define SIMDE_MATH_H 1 + +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ + +#include +#if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + #include +#endif + +HEDLEY_DIAGNOSTIC_PUSH +SIMDE_DISABLE_UNWANTED_DIAGNOSTICS + +/* SLEEF support + * https://sleef.org/ + * + * If you include prior to including SIMDe, SIMDe will use + * SLEEF. You can also define SIMDE_MATH_SLEEF_ENABLE prior to + * including SIMDe to force the issue. + * + * Note that SLEEF does requires linking to libsleef. + * + * By default, SIMDe will use the 1 ULP functions, but if you use + * SIMDE_ACCURACY_PREFERENCE of 0 we will use up to 4 ULP. This is + * only the case for the simde_math_* functions; for code in other + * SIMDe headers which calls SLEEF directly we may use functions with + * greater error if the API we're implementing is less precise (for + * example, SVML guarantees 4 ULP, so we will generally use the 3.5 + * ULP functions from SLEEF). */ +#if !defined(SIMDE_MATH_SLEEF_DISABLE) + #if defined(__SLEEF_H__) + #define SIMDE_MATH_SLEEF_ENABLE + #endif +#endif + +#if defined(SIMDE_MATH_SLEEF_ENABLE) && !defined(__SLEEF_H__) + HEDLEY_DIAGNOSTIC_PUSH + SIMDE_DIAGNOSTIC_DISABLE_IGNORED_QUALIFIERS_ + #include + HEDLEY_DIAGNOSTIC_POP +#endif + +#if defined(SIMDE_MATH_SLEEF_ENABLE) && defined(__SLEEF_H__) + #if defined(SLEEF_VERSION_MAJOR) + #define SIMDE_MATH_SLEEF_VERSION_CHECK(major, minor, patch) (HEDLEY_VERSION_ENCODE(SLEEF_VERSION_MAJOR, SLEEF_VERSION_MINOR, SLEEF_VERSION_PATCHLEVEL) >= HEDLEY_VERSION_ENCODE(major, minor, patch)) + #else + #define SIMDE_MATH_SLEEF_VERSION_CHECK(major, minor, patch) (HEDLEY_VERSION_ENCODE(3,0,0) >= HEDLEY_VERSION_ENCODE(major, minor, patch)) + #endif +#else + #define SIMDE_MATH_SLEEF_VERSION_CHECK(major, minor, patch) (0) +#endif + +#if defined(__has_builtin) + #define SIMDE_MATH_BUILTIN_LIBM(func) __has_builtin(__builtin_##func) +#elif \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_GCC_VERSION_CHECK(4,4,0) + #define SIMDE_MATH_BUILTIN_LIBM(func) (1) +#else + #define SIMDE_MATH_BUILTIN_LIBM(func) (0) +#endif + +#if defined(HUGE_VAL) + /* Looks like or has already been included. */ + + /* The math.h from libc++ (yes, the C header from the C++ standard + * library) will define an isnan function, but not an isnan macro + * like the C standard requires. So we detect the header guards + * macro libc++ uses. */ + #if defined(isnan) || (defined(_LIBCPP_MATH_H) && !defined(_LIBCPP_CMATH)) + #define SIMDE_MATH_HAVE_MATH_H + #elif defined(__cplusplus) + #define SIMDE_MATH_HAVE_CMATH + #endif +#elif defined(__has_include) + #if defined(__cplusplus) && (__cplusplus >= 201103L) && __has_include() + #define SIMDE_MATH_HAVE_CMATH + #include + #elif __has_include() + #define SIMDE_MATH_HAVE_MATH_H + #include + #elif !defined(SIMDE_MATH_NO_LIBM) + #define SIMDE_MATH_NO_LIBM + #endif +#elif !defined(SIMDE_MATH_NO_LIBM) + #if defined(__cplusplus) && (__cplusplus >= 201103L) + #define SIMDE_MATH_HAVE_CMATH + HEDLEY_DIAGNOSTIC_PUSH + #if defined(HEDLEY_MSVC_VERSION) + /* VS 14 emits this diagnostic about noexcept being used on a + * function, which we can't do anything about. */ + #pragma warning(disable:4996) + #endif + #include + HEDLEY_DIAGNOSTIC_POP + #else + #define SIMDE_MATH_HAVE_MATH_H + #include + #endif +#endif + +#if !defined(SIMDE_MATH_INFINITY) + #if \ + HEDLEY_HAS_BUILTIN(__builtin_inf) || \ + HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_CRAY_VERSION_CHECK(8,1,0) + #define SIMDE_MATH_INFINITY (__builtin_inf()) + #elif defined(INFINITY) + #define SIMDE_MATH_INFINITY INFINITY + #endif +#endif + +#if !defined(SIMDE_INFINITYF) + #if \ + HEDLEY_HAS_BUILTIN(__builtin_inff) || \ + HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + HEDLEY_IBM_VERSION_CHECK(13,1,0) + #define SIMDE_MATH_INFINITYF (__builtin_inff()) + #elif defined(INFINITYF) + #define SIMDE_MATH_INFINITYF INFINITYF + #elif defined(SIMDE_MATH_INFINITY) + #define SIMDE_MATH_INFINITYF HEDLEY_STATIC_CAST(float, SIMDE_MATH_INFINITY) + #endif +#endif + +#if !defined(SIMDE_MATH_NAN) + #if \ + HEDLEY_HAS_BUILTIN(__builtin_nan) || \ + HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + HEDLEY_IBM_VERSION_CHECK(13,1,0) + #define SIMDE_MATH_NAN (__builtin_nan("")) + #elif defined(NAN) + #define SIMDE_MATH_NAN NAN + #endif +#endif + +#if !defined(SIMDE_NANF) + #if \ + HEDLEY_HAS_BUILTIN(__builtin_nanf) || \ + HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_CRAY_VERSION_CHECK(8,1,0) + #define SIMDE_MATH_NANF (__builtin_nanf("")) + #elif defined(NANF) + #define SIMDE_MATH_NANF NANF + #elif defined(SIMDE_MATH_NAN) + #define SIMDE_MATH_NANF HEDLEY_STATIC_CAST(float, SIMDE_MATH_NAN) + #endif +#endif + +#if !defined(SIMDE_MATH_PI) + #if defined(M_PI) + #define SIMDE_MATH_PI M_PI + #else + #define SIMDE_MATH_PI 3.14159265358979323846 + #endif +#endif + +#if !defined(SIMDE_MATH_PIF) + #if defined(M_PI) + #define SIMDE_MATH_PIF HEDLEY_STATIC_CAST(float, M_PI) + #else + #define SIMDE_MATH_PIF 3.14159265358979323846f + #endif +#endif + +#if !defined(SIMDE_MATH_PI_OVER_180) + #define SIMDE_MATH_PI_OVER_180 0.0174532925199432957692369076848861271344287188854172545609719144 +#endif + +#if !defined(SIMDE_MATH_PI_OVER_180F) + #define SIMDE_MATH_PI_OVER_180F 0.0174532925199432957692369076848861271344287188854172545609719144f +#endif + +#if !defined(SIMDE_MATH_180_OVER_PI) + #define SIMDE_MATH_180_OVER_PI 57.295779513082320876798154814105170332405472466564321549160243861 +#endif + +#if !defined(SIMDE_MATH_180_OVER_PIF) + #define SIMDE_MATH_180_OVER_PIF 57.295779513082320876798154814105170332405472466564321549160243861f +#endif + +#if !defined(SIMDE_MATH_FLT_MIN) + #if defined(__FLT_MIN__) + #define SIMDE_MATH_FLT_MIN __FLT_MIN__ + #else + #if !defined(FLT_MIN) + #if defined(__cplusplus) + #include + #else + #include + #endif + #endif + #define SIMDE_MATH_FLT_MIN FLT_MIN + #endif +#endif + +#if !defined(SIMDE_MATH_FLT_MAX) + #if defined(__FLT_MAX__) + #define SIMDE_MATH_FLT_MAX __FLT_MAX__ + #else + #if !defined(FLT_MAX) + #if defined(__cplusplus) + #include + #else + #include + #endif + #endif + #define SIMDE_MATH_FLT_MAX FLT_MAX + #endif +#endif + +#if !defined(SIMDE_MATH_DBL_MIN) + #if defined(__DBL_MIN__) + #define SIMDE_MATH_DBL_MIN __DBL_MIN__ + #else + #if !defined(DBL_MIN) + #if defined(__cplusplus) + #include + #else + #include + #endif + #endif + #define SIMDE_MATH_DBL_MIN DBL_MIN + #endif +#endif + +#if !defined(SIMDE_MATH_DBL_MAX) + #if defined(__DBL_MAX__) + #define SIMDE_MATH_DBL_MAX __DBL_MAX__ + #else + #if !defined(DBL_MAX) + #if defined(__cplusplus) + #include + #else + #include + #endif + #endif + #define SIMDE_MATH_DBL_MAX DBL_MAX + #endif +#endif + +/*** Classification macros from C99 ***/ + +#if !defined(simde_math_isinf) + #if SIMDE_MATH_BUILTIN_LIBM(isinf) + #define simde_math_isinf(v) __builtin_isinf(v) + #elif defined(isinf) || defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_isinf(v) isinf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_isinf(v) std::isinf(v) + #endif +#endif + +#if !defined(simde_math_isinff) + #if HEDLEY_HAS_BUILTIN(__builtin_isinff) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define simde_math_isinff(v) __builtin_isinff(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_isinff(v) std::isinf(v) + #elif defined(simde_math_isinf) + #define simde_math_isinff(v) simde_math_isinf(HEDLEY_STATIC_CAST(double, v)) + #endif +#endif + +#if !defined(simde_math_isnan) + #if SIMDE_MATH_BUILTIN_LIBM(isnan) + #define simde_math_isnan(v) __builtin_isnan(v) + #elif defined(isnan) || defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_isnan(v) isnan(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_isnan(v) std::isnan(v) + #endif +#endif + +#if !defined(simde_math_isnanf) + #if HEDLEY_HAS_BUILTIN(__builtin_isnanf) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) + /* XL C/C++ has __builtin_isnan but not __builtin_isnanf */ + #define simde_math_isnanf(v) __builtin_isnanf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_isnanf(v) std::isnan(v) + #elif defined(simde_math_isnan) + #define simde_math_isnanf(v) simde_math_isnan(HEDLEY_STATIC_CAST(double, v)) + #endif +#endif + +#if !defined(simde_math_isnormal) + #if SIMDE_MATH_BUILTIN_LIBM(isnormal) + #define simde_math_isnormal(v) __builtin_isnormal(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_isnormal(v) isnormal(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_isnormal(v) std::isnormal(v) + #endif +#endif + +#if !defined(simde_math_isnormalf) + #if HEDLEY_HAS_BUILTIN(__builtin_isnormalf) + #define simde_math_isnormalf(v) __builtin_isnormalf(v) + #elif SIMDE_MATH_BUILTIN_LIBM(isnormal) + #define simde_math_isnormalf(v) __builtin_isnormal(v) + #elif defined(isnormalf) + #define simde_math_isnormalf(v) isnormalf(v) + #elif defined(isnormal) || defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_isnormalf(v) isnormal(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_isnormalf(v) std::isnormal(v) + #elif defined(simde_math_isnormal) + #define simde_math_isnormalf(v) simde_math_isnormal(v) + #endif +#endif + +#if !defined(simde_math_issubnormalf) + #if SIMDE_MATH_BUILTIN_LIBM(fpclassify) + #define simde_math_issubnormalf(v) __builtin_fpclassify(0, 0, 0, 1, 0, v) + #elif defined(fpclassify) + #define simde_math_issubnormalf(v) (fpclassify(v) == FP_SUBNORMAL) + #elif defined(SIMDE_IEEE754_STORAGE) + #define simde_math_issubnormalf(v) (((simde_float32_as_uint32(v) & UINT32_C(0x7F800000)) == UINT32_C(0)) && ((simde_float32_as_uint32(v) & UINT32_C(0x007FFFFF)) != UINT32_C(0))) + #endif +#endif + +#if !defined(simde_math_issubnormal) + #if SIMDE_MATH_BUILTIN_LIBM(fpclassify) + #define simde_math_issubnormal(v) __builtin_fpclassify(0, 0, 0, 1, 0, v) + #elif defined(fpclassify) + #define simde_math_issubnormal(v) (fpclassify(v) == FP_SUBNORMAL) + #elif defined(SIMDE_IEEE754_STORAGE) + #define simde_math_issubnormal(v) (((simde_float64_as_uint64(v) & UINT64_C(0x7FF0000000000000)) == UINT64_C(0)) && ((simde_float64_as_uint64(v) & UINT64_C(0x00FFFFFFFFFFFFF)) != UINT64_C(0))) + #endif +#endif + +#if defined(FP_NAN) + #define SIMDE_MATH_FP_NAN FP_NAN +#else + #define SIMDE_MATH_FP_NAN 0 +#endif +#if defined(FP_INFINITE) + #define SIMDE_MATH_FP_INFINITE FP_INFINITE +#else + #define SIMDE_MATH_FP_INFINITE 1 +#endif +#if defined(FP_ZERO) + #define SIMDE_MATH_FP_ZERO FP_ZERO +#else + #define SIMDE_MATH_FP_ZERO 2 +#endif +#if defined(FP_SUBNORMAL) + #define SIMDE_MATH_FP_SUBNORMAL FP_SUBNORMAL +#else + #define SIMDE_MATH_FP_SUBNORMAL 3 +#endif +#if defined(FP_NORMAL) + #define SIMDE_MATH_FP_NORMAL FP_NORMAL +#else + #define SIMDE_MATH_FP_NORMAL 4 +#endif + +static HEDLEY_INLINE +int +simde_math_fpclassifyf(float v) { + #if SIMDE_MATH_BUILTIN_LIBM(fpclassify) + return __builtin_fpclassify(SIMDE_MATH_FP_NAN, SIMDE_MATH_FP_INFINITE, SIMDE_MATH_FP_NORMAL, SIMDE_MATH_FP_SUBNORMAL, SIMDE_MATH_FP_ZERO, v); + #elif defined(fpclassify) + return fpclassify(v); + #else + return + simde_math_isnormalf(v) ? SIMDE_MATH_FP_NORMAL : + (v == 0.0f) ? SIMDE_MATH_FP_ZERO : + simde_math_isnanf(v) ? SIMDE_MATH_FP_NAN : + simde_math_isinff(v) ? SIMDE_MATH_FP_INFINITE : + SIMDE_MATH_FP_SUBNORMAL; + #endif +} + +static HEDLEY_INLINE +int +simde_math_fpclassify(double v) { + #if SIMDE_MATH_BUILTIN_LIBM(fpclassify) + return __builtin_fpclassify(SIMDE_MATH_FP_NAN, SIMDE_MATH_FP_INFINITE, SIMDE_MATH_FP_NORMAL, SIMDE_MATH_FP_SUBNORMAL, SIMDE_MATH_FP_ZERO, v); + #elif defined(fpclassify) + return fpclassify(v); + #else + return + simde_math_isnormal(v) ? SIMDE_MATH_FP_NORMAL : + (v == 0.0) ? SIMDE_MATH_FP_ZERO : + simde_math_isnan(v) ? SIMDE_MATH_FP_NAN : + simde_math_isinf(v) ? SIMDE_MATH_FP_INFINITE : + SIMDE_MATH_FP_SUBNORMAL; + #endif +} + +#define SIMDE_MATH_FP_QNAN 0x01 +#define SIMDE_MATH_FP_PZERO 0x02 +#define SIMDE_MATH_FP_NZERO 0x04 +#define SIMDE_MATH_FP_PINF 0x08 +#define SIMDE_MATH_FP_NINF 0x10 +#define SIMDE_MATH_FP_DENORMAL 0x20 +#define SIMDE_MATH_FP_NEGATIVE 0x40 +#define SIMDE_MATH_FP_SNAN 0x80 + +static HEDLEY_INLINE +uint8_t +simde_math_fpclassf(float v, const int imm8) { + union { + float f; + uint32_t u; + } fu; + fu.f = v; + uint32_t bits = fu.u; + uint8_t NegNum = (bits >> 31) & 1; + uint32_t const ExpMask = 0x3F800000; // [30:23] + uint32_t const MantMask = 0x007FFFFF; // [22:0] + uint8_t ExpAllOnes = ((bits & ExpMask) == ExpMask); + uint8_t ExpAllZeros = ((bits & ExpMask) == 0); + uint8_t MantAllZeros = ((bits & MantMask) == 0); + uint8_t ZeroNumber = ExpAllZeros & MantAllZeros; + uint8_t SignalingBit = (bits >> 22) & 1; + + uint8_t result = 0; + uint8_t qNaN_res = ExpAllOnes & (!MantAllZeros) & SignalingBit; + uint8_t Pzero_res = (!NegNum) & ExpAllZeros & MantAllZeros; + uint8_t Nzero_res = NegNum & ExpAllZeros & MantAllZeros; + uint8_t Pinf_res = (!NegNum) & ExpAllOnes & MantAllZeros; + uint8_t Ninf_res = NegNum & ExpAllOnes & MantAllZeros; + uint8_t Denorm_res = ExpAllZeros & (!MantAllZeros); + uint8_t FinNeg_res = NegNum & (!ExpAllOnes) & (!ZeroNumber); + uint8_t sNaN_res = ExpAllOnes & (!MantAllZeros) & (!SignalingBit); + result = (((imm8 >> 0) & qNaN_res) | \ + ((imm8 >> 1) & Pzero_res) | \ + ((imm8 >> 2) & Nzero_res) | \ + ((imm8 >> 3) & Pinf_res) | \ + ((imm8 >> 4) & Ninf_res) | \ + ((imm8 >> 5) & Denorm_res) | \ + ((imm8 >> 6) & FinNeg_res) | \ + ((imm8 >> 7) & sNaN_res)); + return result; +} + +static HEDLEY_INLINE +uint8_t +simde_math_fpclass(double v, const int imm8) { + union { + double d; + uint64_t u; + } du; + du.d = v; + uint64_t bits = du.u; + uint8_t NegNum = (bits >> 63) & 1; + uint64_t const ExpMask = 0x3FF0000000000000; // [62:52] + uint64_t const MantMask = 0x000FFFFFFFFFFFFF; // [51:0] + uint8_t ExpAllOnes = ((bits & ExpMask) == ExpMask); + uint8_t ExpAllZeros = ((bits & ExpMask) == 0); + uint8_t MantAllZeros = ((bits & MantMask) == 0); + uint8_t ZeroNumber = ExpAllZeros & MantAllZeros; + uint8_t SignalingBit = (bits >> 51) & 1; + + uint8_t result = 0; + uint8_t qNaN_res = ExpAllOnes & (!MantAllZeros) & SignalingBit; + uint8_t Pzero_res = (!NegNum) & ExpAllZeros & MantAllZeros; + uint8_t Nzero_res = NegNum & ExpAllZeros & MantAllZeros; + uint8_t Pinf_res = (!NegNum) & ExpAllOnes & MantAllZeros; + uint8_t Ninf_res = NegNum & ExpAllOnes & MantAllZeros; + uint8_t Denorm_res = ExpAllZeros & (!MantAllZeros); + uint8_t FinNeg_res = NegNum & (!ExpAllOnes) & (!ZeroNumber); + uint8_t sNaN_res = ExpAllOnes & (!MantAllZeros) & (!SignalingBit); + result = (((imm8 >> 0) & qNaN_res) | \ + ((imm8 >> 1) & Pzero_res) | \ + ((imm8 >> 2) & Nzero_res) | \ + ((imm8 >> 3) & Pinf_res) | \ + ((imm8 >> 4) & Ninf_res) | \ + ((imm8 >> 5) & Denorm_res) | \ + ((imm8 >> 6) & FinNeg_res) | \ + ((imm8 >> 7) & sNaN_res)); + return result; +} + +/*** Manipulation functions ***/ + +#if !defined(simde_math_nextafter) + #if \ + (HEDLEY_HAS_BUILTIN(__builtin_nextafter) && !defined(HEDLEY_IBM_VERSION)) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define simde_math_nextafter(x, y) __builtin_nextafter(x, y) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_nextafter(x, y) std::nextafter(x, y) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_nextafter(x, y) nextafter(x, y) + #endif +#endif + +#if !defined(simde_math_nextafterf) + #if \ + (HEDLEY_HAS_BUILTIN(__builtin_nextafterf) && !defined(HEDLEY_IBM_VERSION)) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define simde_math_nextafterf(x, y) __builtin_nextafterf(x, y) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_nextafterf(x, y) std::nextafter(x, y) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_nextafterf(x, y) nextafterf(x, y) + #endif +#endif + +/*** Functions from C99 ***/ + +#if !defined(simde_math_abs) + #if SIMDE_MATH_BUILTIN_LIBM(abs) + #define simde_math_abs(v) __builtin_abs(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_abs(v) std::abs(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_abs(v) abs(v) + #endif +#endif + +#if !defined(simde_math_labs) + #if SIMDE_MATH_BUILTIN_LIBM(labs) + #define simde_math_labs(v) __builtin_labs(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_labs(v) std::labs(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_labs(v) labs(v) + #endif +#endif + +#if !defined(simde_math_llabs) + #if SIMDE_MATH_BUILTIN_LIBM(llabs) + #define simde_math_llabs(v) __builtin_llabs(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_llabs(v) std::llabs(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_llabs(v) llabs(v) + #endif +#endif + +#if !defined(simde_math_fabsf) + #if SIMDE_MATH_BUILTIN_LIBM(fabsf) + #define simde_math_fabsf(v) __builtin_fabsf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_fabsf(v) std::abs(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_fabsf(v) fabsf(v) + #endif +#endif + +#if !defined(simde_math_acos) + #if SIMDE_MATH_BUILTIN_LIBM(acos) + #define simde_math_acos(v) __builtin_acos(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_acos(v) std::acos(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_acos(v) acos(v) + #endif +#endif + +#if !defined(simde_math_acosf) + #if SIMDE_MATH_BUILTIN_LIBM(acosf) + #define simde_math_acosf(v) __builtin_acosf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_acosf(v) std::acos(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_acosf(v) acosf(v) + #endif +#endif + +#if !defined(simde_math_acosh) + #if SIMDE_MATH_BUILTIN_LIBM(acosh) + #define simde_math_acosh(v) __builtin_acosh(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_acosh(v) std::acosh(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_acosh(v) acosh(v) + #endif +#endif + +#if !defined(simde_math_acoshf) + #if SIMDE_MATH_BUILTIN_LIBM(acoshf) + #define simde_math_acoshf(v) __builtin_acoshf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_acoshf(v) std::acosh(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_acoshf(v) acoshf(v) + #endif +#endif + +#if !defined(simde_math_asin) + #if SIMDE_MATH_BUILTIN_LIBM(asin) + #define simde_math_asin(v) __builtin_asin(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_asin(v) std::asin(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_asin(v) asin(v) + #endif +#endif + +#if !defined(simde_math_asinf) + #if SIMDE_MATH_BUILTIN_LIBM(asinf) + #define simde_math_asinf(v) __builtin_asinf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_asinf(v) std::asin(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_asinf(v) asinf(v) + #endif +#endif + +#if !defined(simde_math_asinh) + #if SIMDE_MATH_BUILTIN_LIBM(asinh) + #define simde_math_asinh(v) __builtin_asinh(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_asinh(v) std::asinh(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_asinh(v) asinh(v) + #endif +#endif + +#if !defined(simde_math_asinhf) + #if SIMDE_MATH_BUILTIN_LIBM(asinhf) + #define simde_math_asinhf(v) __builtin_asinhf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_asinhf(v) std::asinh(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_asinhf(v) asinhf(v) + #endif +#endif + +#if !defined(simde_math_atan) + #if SIMDE_MATH_BUILTIN_LIBM(atan) + #define simde_math_atan(v) __builtin_atan(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_atan(v) std::atan(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_atan(v) atan(v) + #endif +#endif + +#if !defined(simde_math_atan2) + #if SIMDE_MATH_BUILTIN_LIBM(atan2) + #define simde_math_atan2(y, x) __builtin_atan2(y, x) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_atan2(y, x) std::atan2(y, x) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_atan2(y, x) atan2(y, x) + #endif +#endif + +#if !defined(simde_math_atan2f) + #if SIMDE_MATH_BUILTIN_LIBM(atan2f) + #define simde_math_atan2f(y, x) __builtin_atan2f(y, x) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_atan2f(y, x) std::atan2(y, x) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_atan2f(y, x) atan2f(y, x) + #endif +#endif + +#if !defined(simde_math_atanf) + #if SIMDE_MATH_BUILTIN_LIBM(atanf) + #define simde_math_atanf(v) __builtin_atanf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_atanf(v) std::atan(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_atanf(v) atanf(v) + #endif +#endif + +#if !defined(simde_math_atanh) + #if SIMDE_MATH_BUILTIN_LIBM(atanh) + #define simde_math_atanh(v) __builtin_atanh(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_atanh(v) std::atanh(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_atanh(v) atanh(v) + #endif +#endif + +#if !defined(simde_math_atanhf) + #if SIMDE_MATH_BUILTIN_LIBM(atanhf) + #define simde_math_atanhf(v) __builtin_atanhf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_atanhf(v) std::atanh(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_atanhf(v) atanhf(v) + #endif +#endif + +#if !defined(simde_math_cbrt) + #if SIMDE_MATH_BUILTIN_LIBM(cbrt) + #define simde_math_cbrt(v) __builtin_cbrt(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_cbrt(v) std::cbrt(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_cbrt(v) cbrt(v) + #endif +#endif + +#if !defined(simde_math_cbrtf) + #if SIMDE_MATH_BUILTIN_LIBM(cbrtf) + #define simde_math_cbrtf(v) __builtin_cbrtf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_cbrtf(v) std::cbrt(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_cbrtf(v) cbrtf(v) + #endif +#endif + +#if !defined(simde_math_ceil) + #if SIMDE_MATH_BUILTIN_LIBM(ceil) + #define simde_math_ceil(v) __builtin_ceil(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_ceil(v) std::ceil(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_ceil(v) ceil(v) + #endif +#endif + +#if !defined(simde_math_ceilf) + #if SIMDE_MATH_BUILTIN_LIBM(ceilf) + #define simde_math_ceilf(v) __builtin_ceilf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_ceilf(v) std::ceil(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_ceilf(v) ceilf(v) + #endif +#endif + +#if !defined(simde_math_copysign) + #if SIMDE_MATH_BUILTIN_LIBM(copysign) + #define simde_math_copysign(x, y) __builtin_copysign(x, y) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_copysign(x, y) std::copysign(x, y) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_copysign(x, y) copysign(x, y) + #endif +#endif + +#if !defined(simde_math_copysignf) + #if SIMDE_MATH_BUILTIN_LIBM(copysignf) + #define simde_math_copysignf(x, y) __builtin_copysignf(x, y) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_copysignf(x, y) std::copysignf(x, y) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_copysignf(x, y) copysignf(x, y) + #endif +#endif + +#if !defined(simde_math_signbit) + #if SIMDE_MATH_BUILTIN_LIBM(signbit) + #if (!defined(__clang__) || SIMDE_DETECT_CLANG_VERSION_CHECK(7,0,0)) + #define simde_math_signbit(x) __builtin_signbit(x) + #else + #define simde_math_signbit(x) __builtin_signbit(HEDLEY_STATIC_CAST(double, (x))) + #endif + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_signbit(x) std::signbit(x) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_signbit(x) signbit(x) + #endif +#endif + +#if !defined(simde_math_cos) + #if SIMDE_MATH_BUILTIN_LIBM(cos) + #define simde_math_cos(v) __builtin_cos(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_cos(v) std::cos(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_cos(v) cos(v) + #endif +#endif + +#if !defined(simde_math_cosf) + #if defined(SIMDE_MATH_SLEEF_ENABLE) + #if SIMDE_ACCURACY_PREFERENCE < 1 + #define simde_math_cosf(v) Sleef_cosf_u35(v) + #else + #define simde_math_cosf(v) Sleef_cosf_u10(v) + #endif + #elif SIMDE_MATH_BUILTIN_LIBM(cosf) + #define simde_math_cosf(v) __builtin_cosf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_cosf(v) std::cos(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_cosf(v) cosf(v) + #endif +#endif + +#if !defined(simde_math_cosh) + #if SIMDE_MATH_BUILTIN_LIBM(cosh) + #define simde_math_cosh(v) __builtin_cosh(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_cosh(v) std::cosh(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_cosh(v) cosh(v) + #endif +#endif + +#if !defined(simde_math_coshf) + #if SIMDE_MATH_BUILTIN_LIBM(coshf) + #define simde_math_coshf(v) __builtin_coshf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_coshf(v) std::cosh(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_coshf(v) coshf(v) + #endif +#endif + +#if !defined(simde_math_erf) + #if SIMDE_MATH_BUILTIN_LIBM(erf) + #define simde_math_erf(v) __builtin_erf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_erf(v) std::erf(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_erf(v) erf(v) + #endif +#endif + +#if !defined(simde_math_erff) + #if SIMDE_MATH_BUILTIN_LIBM(erff) + #define simde_math_erff(v) __builtin_erff(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_erff(v) std::erf(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_erff(v) erff(v) + #endif +#endif + +#if !defined(simde_math_erfc) + #if SIMDE_MATH_BUILTIN_LIBM(erfc) + #define simde_math_erfc(v) __builtin_erfc(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_erfc(v) std::erfc(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_erfc(v) erfc(v) + #endif +#endif + +#if !defined(simde_math_erfcf) + #if SIMDE_MATH_BUILTIN_LIBM(erfcf) + #define simde_math_erfcf(v) __builtin_erfcf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_erfcf(v) std::erfc(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_erfcf(v) erfcf(v) + #endif +#endif + +#if !defined(simde_math_exp) + #if SIMDE_MATH_BUILTIN_LIBM(exp) + #define simde_math_exp(v) __builtin_exp(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_exp(v) std::exp(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_exp(v) exp(v) + #endif +#endif + +#if !defined(simde_math_expf) + #if SIMDE_MATH_BUILTIN_LIBM(expf) + #define simde_math_expf(v) __builtin_expf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_expf(v) std::exp(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_expf(v) expf(v) + #endif +#endif + +#if !defined(simde_math_expm1) + #if SIMDE_MATH_BUILTIN_LIBM(expm1) + #define simde_math_expm1(v) __builtin_expm1(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_expm1(v) std::expm1(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_expm1(v) expm1(v) + #endif +#endif + +#if !defined(simde_math_expm1f) + #if SIMDE_MATH_BUILTIN_LIBM(expm1f) + #define simde_math_expm1f(v) __builtin_expm1f(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_expm1f(v) std::expm1(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_expm1f(v) expm1f(v) + #endif +#endif + +#if !defined(simde_math_exp2) + #if SIMDE_MATH_BUILTIN_LIBM(exp2) + #define simde_math_exp2(v) __builtin_exp2(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_exp2(v) std::exp2(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_exp2(v) exp2(v) + #endif +#endif + +#if !defined(simde_math_exp2f) + #if SIMDE_MATH_BUILTIN_LIBM(exp2f) + #define simde_math_exp2f(v) __builtin_exp2f(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_exp2f(v) std::exp2(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_exp2f(v) exp2f(v) + #endif +#endif + +#if HEDLEY_HAS_BUILTIN(__builtin_exp10) || HEDLEY_GCC_VERSION_CHECK(3,4,0) + # define simde_math_exp10(v) __builtin_exp10(v) +#else +# define simde_math_exp10(v) pow(10.0, (v)) +#endif + +#if HEDLEY_HAS_BUILTIN(__builtin_exp10f) || HEDLEY_GCC_VERSION_CHECK(3,4,0) + # define simde_math_exp10f(v) __builtin_exp10f(v) +#else +# define simde_math_exp10f(v) powf(10.0f, (v)) +#endif + +#if !defined(simde_math_fabs) + #if SIMDE_MATH_BUILTIN_LIBM(fabs) + #define simde_math_fabs(v) __builtin_fabs(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_fabs(v) std::fabs(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_fabs(v) fabs(v) + #endif +#endif + +#if !defined(simde_math_fabsf) + #if SIMDE_MATH_BUILTIN_LIBM(fabsf) + #define simde_math_fabsf(v) __builtin_fabsf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_fabsf(v) std::fabs(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_fabsf(v) fabsf(v) + #endif +#endif + +#if !defined(simde_math_floor) + #if SIMDE_MATH_BUILTIN_LIBM(floor) + #define simde_math_floor(v) __builtin_floor(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_floor(v) std::floor(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_floor(v) floor(v) + #endif +#endif + +#if !defined(simde_math_floorf) + #if SIMDE_MATH_BUILTIN_LIBM(floorf) + #define simde_math_floorf(v) __builtin_floorf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_floorf(v) std::floor(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_floorf(v) floorf(v) + #endif +#endif + +#if !defined(simde_math_fma) + #if SIMDE_MATH_BUILTIN_LIBM(fma) + #define simde_math_fma(x, y, z) __builtin_fma(x, y, z) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_fma(x, y, z) std::fma(x, y, z) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_fma(x, y, z) fma(x, y, z) + #endif +#endif + +#if !defined(simde_math_fmaf) + #if SIMDE_MATH_BUILTIN_LIBM(fmaf) + #define simde_math_fmaf(x, y, z) __builtin_fmaf(x, y, z) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_fmaf(x, y, z) std::fma(x, y, z) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_fmaf(x, y, z) fmaf(x, y, z) + #endif +#endif + +#if !defined(simde_math_fmax) + #if SIMDE_MATH_BUILTIN_LIBM(fmax) + #define simde_math_fmax(x, y) __builtin_fmax(x, y) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_fmax(x, y) std::fmax(x, y) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_fmax(x, y) fmax(x, y) + #endif +#endif + +#if !defined(simde_math_fmaxf) + #if SIMDE_MATH_BUILTIN_LIBM(fmaxf) + #define simde_math_fmaxf(x, y) __builtin_fmaxf(x, y) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_fmaxf(x, y) std::fmax(x, y) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_fmaxf(x, y) fmaxf(x, y) + #endif +#endif + +#if !defined(simde_math_hypot) + #if SIMDE_MATH_BUILTIN_LIBM(hypot) + #define simde_math_hypot(y, x) __builtin_hypot(y, x) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_hypot(y, x) std::hypot(y, x) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_hypot(y, x) hypot(y, x) + #endif +#endif + +#if !defined(simde_math_hypotf) + #if SIMDE_MATH_BUILTIN_LIBM(hypotf) + #define simde_math_hypotf(y, x) __builtin_hypotf(y, x) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_hypotf(y, x) std::hypot(y, x) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_hypotf(y, x) hypotf(y, x) + #endif +#endif + +#if !defined(simde_math_log) + #if SIMDE_MATH_BUILTIN_LIBM(log) + #define simde_math_log(v) __builtin_log(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_log(v) std::log(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_log(v) log(v) + #endif +#endif + +#if !defined(simde_math_logf) + #if SIMDE_MATH_BUILTIN_LIBM(logf) + #define simde_math_logf(v) __builtin_logf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_logf(v) std::log(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_logf(v) logf(v) + #endif +#endif + +#if !defined(simde_math_logb) + #if SIMDE_MATH_BUILTIN_LIBM(logb) + #define simde_math_logb(v) __builtin_logb(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_logb(v) std::logb(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_logb(v) logb(v) + #endif +#endif + +#if !defined(simde_math_logbf) + #if SIMDE_MATH_BUILTIN_LIBM(logbf) + #define simde_math_logbf(v) __builtin_logbf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_logbf(v) std::logb(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_logbf(v) logbf(v) + #endif +#endif + +#if !defined(simde_math_log1p) + #if SIMDE_MATH_BUILTIN_LIBM(log1p) + #define simde_math_log1p(v) __builtin_log1p(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_log1p(v) std::log1p(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_log1p(v) log1p(v) + #endif +#endif + +#if !defined(simde_math_log1pf) + #if SIMDE_MATH_BUILTIN_LIBM(log1pf) + #define simde_math_log1pf(v) __builtin_log1pf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_log1pf(v) std::log1p(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_log1pf(v) log1pf(v) + #endif +#endif + +#if !defined(simde_math_log2) + #if SIMDE_MATH_BUILTIN_LIBM(log2) + #define simde_math_log2(v) __builtin_log2(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_log2(v) std::log2(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_log2(v) log2(v) + #endif +#endif + +#if !defined(simde_math_log2f) + #if SIMDE_MATH_BUILTIN_LIBM(log2f) + #define simde_math_log2f(v) __builtin_log2f(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_log2f(v) std::log2(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_log2f(v) log2f(v) + #endif +#endif + +#if !defined(simde_math_log10) + #if SIMDE_MATH_BUILTIN_LIBM(log10) + #define simde_math_log10(v) __builtin_log10(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_log10(v) std::log10(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_log10(v) log10(v) + #endif +#endif + +#if !defined(simde_math_log10f) + #if SIMDE_MATH_BUILTIN_LIBM(log10f) + #define simde_math_log10f(v) __builtin_log10f(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_log10f(v) std::log10(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_log10f(v) log10f(v) + #endif +#endif + +#if !defined(simde_math_modf) + #if SIMDE_MATH_BUILTIN_LIBM(modf) + #define simde_math_modf(x, iptr) __builtin_modf(x, iptr) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_modf(x, iptr) std::modf(x, iptr) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_modf(x, iptr) modf(x, iptr) + #endif +#endif + +#if !defined(simde_math_modff) + #if SIMDE_MATH_BUILTIN_LIBM(modff) + #define simde_math_modff(x, iptr) __builtin_modff(x, iptr) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_modff(x, iptr) std::modf(x, iptr) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_modff(x, iptr) modff(x, iptr) + #endif +#endif + +#if !defined(simde_math_nearbyint) + #if SIMDE_MATH_BUILTIN_LIBM(nearbyint) + #define simde_math_nearbyint(v) __builtin_nearbyint(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_nearbyint(v) std::nearbyint(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_nearbyint(v) nearbyint(v) + #endif +#endif + +#if !defined(simde_math_nearbyintf) + #if SIMDE_MATH_BUILTIN_LIBM(nearbyintf) + #define simde_math_nearbyintf(v) __builtin_nearbyintf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_nearbyintf(v) std::nearbyint(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_nearbyintf(v) nearbyintf(v) + #endif +#endif + +#if !defined(simde_math_pow) + #if SIMDE_MATH_BUILTIN_LIBM(pow) + #define simde_math_pow(y, x) __builtin_pow(y, x) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_pow(y, x) std::pow(y, x) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_pow(y, x) pow(y, x) + #endif +#endif + +#if !defined(simde_math_powf) + #if SIMDE_MATH_BUILTIN_LIBM(powf) + #define simde_math_powf(y, x) __builtin_powf(y, x) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_powf(y, x) std::pow(y, x) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_powf(y, x) powf(y, x) + #endif +#endif + +#if !defined(simde_math_rint) + #if SIMDE_MATH_BUILTIN_LIBM(rint) + #define simde_math_rint(v) __builtin_rint(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_rint(v) std::rint(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_rint(v) rint(v) + #endif +#endif + +#if !defined(simde_math_rintf) + #if SIMDE_MATH_BUILTIN_LIBM(rintf) + #define simde_math_rintf(v) __builtin_rintf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_rintf(v) std::rint(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_rintf(v) rintf(v) + #endif +#endif + +#if !defined(simde_math_round) + #if SIMDE_MATH_BUILTIN_LIBM(round) + #define simde_math_round(v) __builtin_round(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_round(v) std::round(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_round(v) round(v) + #endif +#endif + +#if !defined(simde_math_roundf) + #if SIMDE_MATH_BUILTIN_LIBM(roundf) + #define simde_math_roundf(v) __builtin_roundf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_roundf(v) std::round(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_roundf(v) roundf(v) + #endif +#endif + +#if !defined(simde_math_roundeven) + #if \ + ((!defined(HEDLEY_EMSCRIPTEN_VERSION) || HEDLEY_EMSCRIPTEN_VERSION_CHECK(3, 1, 43)) && HEDLEY_HAS_BUILTIN(__builtin_roundeven)) || \ + HEDLEY_GCC_VERSION_CHECK(10,0,0) + #define simde_math_roundeven(v) __builtin_roundeven(v) + #elif defined(simde_math_round) && defined(simde_math_fabs) + static HEDLEY_INLINE + double + simde_math_roundeven(double v) { + double rounded = simde_math_round(v); + double diff = rounded - v; + if (HEDLEY_UNLIKELY(simde_math_fabs(diff) == 0.5) && (HEDLEY_STATIC_CAST(int64_t, rounded) & 1)) { + rounded = v - diff; + } + return rounded; + } + #define simde_math_roundeven simde_math_roundeven + #endif +#endif + +#if !defined(simde_math_roundevenf) + #if \ + ((!defined(HEDLEY_EMSCRIPTEN_VERSION) || HEDLEY_EMSCRIPTEN_VERSION_CHECK(3, 1, 43)) && HEDLEY_HAS_BUILTIN(__builtin_roundevenf)) || \ + HEDLEY_GCC_VERSION_CHECK(10,0,0) + #define simde_math_roundevenf(v) __builtin_roundevenf(v) + #elif defined(simde_math_roundf) && defined(simde_math_fabsf) + static HEDLEY_INLINE + float + simde_math_roundevenf(float v) { + float rounded = simde_math_roundf(v); + float diff = rounded - v; + if (HEDLEY_UNLIKELY(simde_math_fabsf(diff) == 0.5f) && (HEDLEY_STATIC_CAST(int32_t, rounded) & 1)) { + rounded = v - diff; + } + return rounded; + } + #define simde_math_roundevenf simde_math_roundevenf + #endif +#endif + +#if !defined(simde_math_sin) + #if SIMDE_MATH_BUILTIN_LIBM(sin) + #define simde_math_sin(v) __builtin_sin(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_sin(v) std::sin(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_sin(v) sin(v) + #endif +#endif + +#if !defined(simde_math_sinf) + #if SIMDE_MATH_BUILTIN_LIBM(sinf) + #define simde_math_sinf(v) __builtin_sinf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_sinf(v) std::sin(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_sinf(v) sinf(v) + #endif +#endif + +#if !defined(simde_math_sinh) + #if SIMDE_MATH_BUILTIN_LIBM(sinh) + #define simde_math_sinh(v) __builtin_sinh(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_sinh(v) std::sinh(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_sinh(v) sinh(v) + #endif +#endif + +#if !defined(simde_math_sinhf) + #if SIMDE_MATH_BUILTIN_LIBM(sinhf) + #define simde_math_sinhf(v) __builtin_sinhf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_sinhf(v) std::sinh(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_sinhf(v) sinhf(v) + #endif +#endif + +#if !defined(simde_math_sqrt) + #if SIMDE_MATH_BUILTIN_LIBM(sqrt) + #define simde_math_sqrt(v) __builtin_sqrt(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_sqrt(v) std::sqrt(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_sqrt(v) sqrt(v) + #endif +#endif + +#if !defined(simde_math_sqrtf) + #if SIMDE_MATH_BUILTIN_LIBM(sqrtf) + #define simde_math_sqrtf(v) __builtin_sqrtf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_sqrtf(v) std::sqrt(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_sqrtf(v) sqrtf(v) + #endif +#endif + +#if !defined(simde_math_sqrtl) + #if SIMDE_MATH_BUILTIN_LIBM(sqrtl) + #define simde_math_sqrtl(v) __builtin_sqrtl(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_sqrtl(v) std::sqrt(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_sqrtl(v) sqrtl(v) + #endif +#endif + +#if !defined(simde_math_tan) + #if SIMDE_MATH_BUILTIN_LIBM(tan) + #define simde_math_tan(v) __builtin_tan(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_tan(v) std::tan(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_tan(v) tan(v) + #endif +#endif + +#if !defined(simde_math_tanf) + #if SIMDE_MATH_BUILTIN_LIBM(tanf) + #define simde_math_tanf(v) __builtin_tanf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_tanf(v) std::tan(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_tanf(v) tanf(v) + #endif +#endif + +#if !defined(simde_math_tanh) + #if SIMDE_MATH_BUILTIN_LIBM(tanh) + #define simde_math_tanh(v) __builtin_tanh(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_tanh(v) std::tanh(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_tanh(v) tanh(v) + #endif +#endif + +#if !defined(simde_math_tanhf) + #if SIMDE_MATH_BUILTIN_LIBM(tanhf) + #define simde_math_tanhf(v) __builtin_tanhf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_tanhf(v) std::tanh(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_tanhf(v) tanhf(v) + #endif +#endif + +#if !defined(simde_math_trunc) + #if SIMDE_MATH_BUILTIN_LIBM(trunc) + #define simde_math_trunc(v) __builtin_trunc(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_trunc(v) std::trunc(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_trunc(v) trunc(v) + #endif +#endif + +#if !defined(simde_math_truncf) + #if SIMDE_MATH_BUILTIN_LIBM(truncf) + #define simde_math_truncf(v) __builtin_truncf(v) + #elif defined(SIMDE_MATH_HAVE_CMATH) + #define simde_math_truncf(v) std::trunc(v) + #elif defined(SIMDE_MATH_HAVE_MATH_H) + #define simde_math_truncf(v) truncf(v) + #endif +#endif + +/*** Comparison macros (which don't raise invalid errors) ***/ + +#if defined(isunordered) + #define simde_math_isunordered(x, y) isunordered(x, y) +#elif HEDLEY_HAS_BUILTIN(__builtin_isunordered) + #define simde_math_isunordered(x, y) __builtin_isunordered(x, y) +#else + static HEDLEY_INLINE + int simde_math_isunordered(double x, double y) { + return (x != y) && (x != x || y != y); + } + #define simde_math_isunordered simde_math_isunordered + + static HEDLEY_INLINE + int simde_math_isunorderedf(float x, float y) { + return (x != y) && (x != x || y != y); + } + #define simde_math_isunorderedf simde_math_isunorderedf +#endif +#if !defined(simde_math_isunorderedf) + #define simde_math_isunorderedf simde_math_isunordered +#endif + +/*** Additional functions not in libm ***/ + +#if defined(simde_math_fabs) && defined(simde_math_sqrt) && defined(simde_math_exp) + static HEDLEY_INLINE + double + simde_math_cdfnorm(double x) { + /* https://www.johndcook.com/blog/cpp_phi/ + * Public Domain */ + static const double a1 = 0.254829592; + static const double a2 = -0.284496736; + static const double a3 = 1.421413741; + static const double a4 = -1.453152027; + static const double a5 = 1.061405429; + static const double p = 0.3275911; + + const int sign = x < 0; + x = simde_math_fabs(x) / simde_math_sqrt(2.0); + + /* A&S formula 7.1.26 */ + double t = 1.0 / (1.0 + p * x); + double y = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * simde_math_exp(-x * x); + + return 0.5 * (1.0 + (sign ? -y : y)); + } + #define simde_math_cdfnorm simde_math_cdfnorm +#endif + +#if defined(simde_math_fabsf) && defined(simde_math_sqrtf) && defined(simde_math_expf) + static HEDLEY_INLINE + float + simde_math_cdfnormf(float x) { + /* https://www.johndcook.com/blog/cpp_phi/ + * Public Domain */ + static const float a1 = 0.254829592f; + static const float a2 = -0.284496736f; + static const float a3 = 1.421413741f; + static const float a4 = -1.453152027f; + static const float a5 = 1.061405429f; + static const float p = 0.3275911f; + + const int sign = x < 0; + x = simde_math_fabsf(x) / simde_math_sqrtf(2.0f); + + /* A&S formula 7.1.26 */ + float t = 1.0f / (1.0f + p * x); + float y = 1.0f - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * simde_math_expf(-x * x); + + return 0.5f * (1.0f + (sign ? -y : y)); + } + #define simde_math_cdfnormf simde_math_cdfnormf +#endif + +#if !defined(simde_math_cdfnorminv) && defined(simde_math_log) && defined(simde_math_sqrt) + /*https://web.archive.org/web/20150910081113/http://home.online.no/~pjacklam/notes/invnorm/impl/sprouse/ltqnorm.c*/ + static HEDLEY_INLINE + double + simde_math_cdfnorminv(double p) { + static const double a[6] = { + -3.969683028665376e+01, + 2.209460984245205e+02, + -2.759285104469687e+02, + 1.383577518672690e+02, + -3.066479806614716e+01, + 2.506628277459239e+00 + }; + + static const double b[5] = { + -5.447609879822406e+01, + 1.615858368580409e+02, + -1.556989798598866e+02, + 6.680131188771972e+01, + -1.328068155288572e+01 + }; + + static const double c[6] = { + -7.784894002430293e-03, + -3.223964580411365e-01, + -2.400758277161838e+00, + -2.549732539343734e+00, + 4.374664141464968e+00, + 2.938163982698783e+00 + }; + + static const double d[4] = { + 7.784695709041462e-03, + 3.224671290700398e-01, + 2.445134137142996e+00, + 3.754408661907416e+00 + }; + + static const double low = 0.02425; + static const double high = 0.97575; + double q, r; + + if (p < 0 || p > 1) { + return 0.0; + } else if (p == 0) { + return -SIMDE_MATH_INFINITY; + } else if (p == 1) { + return SIMDE_MATH_INFINITY; + } else if (p < low) { + q = simde_math_sqrt(-2.0 * simde_math_log(p)); + return + (((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) / + (((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1)); + } else if (p > high) { + q = simde_math_sqrt(-2.0 * simde_math_log(1.0 - p)); + return + -(((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) / + (((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1)); + } else { + q = p - 0.5; + r = q * q; + return (((((a[0] * r + a[1]) * r + a[2]) * r + a[3]) * r + a[4]) * r + a[5]) * + q / (((((b[0] * r + b[1]) * r + b[2]) * r + b[3]) * r + b[4]) * r + 1); + } +} +#define simde_math_cdfnorminv simde_math_cdfnorminv +#endif + +#if !defined(simde_math_cdfnorminvf) && defined(simde_math_logf) && defined(simde_math_sqrtf) + static HEDLEY_INLINE + float + simde_math_cdfnorminvf(float p) { + static const float a[6] = { + -3.969683028665376e+01f, + 2.209460984245205e+02f, + -2.759285104469687e+02f, + 1.383577518672690e+02f, + -3.066479806614716e+01f, + 2.506628277459239e+00f + }; + static const float b[5] = { + -5.447609879822406e+01f, + 1.615858368580409e+02f, + -1.556989798598866e+02f, + 6.680131188771972e+01f, + -1.328068155288572e+01f + }; + static const float c[6] = { + -7.784894002430293e-03f, + -3.223964580411365e-01f, + -2.400758277161838e+00f, + -2.549732539343734e+00f, + 4.374664141464968e+00f, + 2.938163982698783e+00f + }; + static const float d[4] = { + 7.784695709041462e-03f, + 3.224671290700398e-01f, + 2.445134137142996e+00f, + 3.754408661907416e+00f + }; + static const float low = 0.02425f; + static const float high = 0.97575f; + float q, r; + + if (p < 0 || p > 1) { + return 0.0f; + } else if (p == 0) { + return -SIMDE_MATH_INFINITYF; + } else if (p == 1) { + return SIMDE_MATH_INFINITYF; + } else if (p < low) { + q = simde_math_sqrtf(-2.0f * simde_math_logf(p)); + return + (((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) / + (((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1)); + } else if (p > high) { + q = simde_math_sqrtf(-2.0f * simde_math_logf(1.0f - p)); + return + -(((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) / + (((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1)); + } else { + q = p - 0.5f; + r = q * q; + return (((((a[0] * r + a[1]) * r + a[2]) * r + a[3]) * r + a[4]) * r + a[5]) * + q / (((((b[0] * r + b[1]) * r + b[2]) * r + b[3]) * r + b[4]) * r + 1); + } + } + #define simde_math_cdfnorminvf simde_math_cdfnorminvf +#endif + +#if !defined(simde_math_erfinv) && defined(simde_math_log) && defined(simde_math_copysign) && defined(simde_math_sqrt) + static HEDLEY_INLINE + double + simde_math_erfinv(double x) { + /* https://stackoverflow.com/questions/27229371/inverse-error-function-in-c + * + * The original answer on SO uses a constant of 0.147, but in my + * testing 0.14829094707965850830078125 gives a lower average absolute error + * (0.0001410958211636170744895935 vs. 0.0001465479290345683693885803). + * That said, if your goal is to minimize the *maximum* absolute + * error, 0.15449436008930206298828125 provides significantly better + * results; 0.0009250640869140625000000000 vs ~ 0.005. */ + double tt1, tt2, lnx; + double sgn = simde_math_copysign(1.0, x); + + x = (1.0 - x) * (1.0 + x); + lnx = simde_math_log(x); + + tt1 = 2.0 / (SIMDE_MATH_PI * 0.14829094707965850830078125) + 0.5 * lnx; + tt2 = (1.0 / 0.14829094707965850830078125) * lnx; + + return sgn * simde_math_sqrt(-tt1 + simde_math_sqrt(tt1 * tt1 - tt2)); + } + #define simde_math_erfinv simde_math_erfinv +#endif + +#if !defined(simde_math_erfinvf) && defined(simde_math_logf) && defined(simde_math_copysignf) && defined(simde_math_sqrtf) + static HEDLEY_INLINE + float + simde_math_erfinvf(float x) { + float tt1, tt2, lnx; + float sgn = simde_math_copysignf(1.0f, x); + + x = (1.0f - x) * (1.0f + x); + lnx = simde_math_logf(x); + + tt1 = 2.0f / (SIMDE_MATH_PIF * 0.14829094707965850830078125f) + 0.5f * lnx; + tt2 = (1.0f / 0.14829094707965850830078125f) * lnx; + + return sgn * simde_math_sqrtf(-tt1 + simde_math_sqrtf(tt1 * tt1 - tt2)); + } + #define simde_math_erfinvf simde_math_erfinvf +#endif + +#if !defined(simde_math_erfcinv) && defined(simde_math_erfinv) && defined(simde_math_log) && defined(simde_math_sqrt) + static HEDLEY_INLINE + double + simde_math_erfcinv(double x) { + if(x >= 0.0625 && x < 2.0) { + return simde_math_erfinv(1.0 - x); + } else if (x < 0.0625 && x >= 1.0e-100) { + static const double p[6] = { + 0.1550470003116, + 1.382719649631, + 0.690969348887, + -1.128081391617, + 0.680544246825, + -0.16444156791 + }; + static const double q[3] = { + 0.155024849822, + 1.385228141995, + 1.000000000000 + }; + + const double t = 1.0 / simde_math_sqrt(-simde_math_log(x)); + return (p[0] / t + p[1] + t * (p[2] + t * (p[3] + t * (p[4] + t * p[5])))) / + (q[0] + t * (q[1] + t * (q[2]))); + } else if (x < 1.0e-100 && x >= SIMDE_MATH_DBL_MIN) { + static const double p[4] = { + 0.00980456202915, + 0.363667889171, + 0.97302949837, + -0.5374947401 + }; + static const double q[3] = { + 0.00980451277802, + 0.363699971544, + 1.000000000000 + }; + + const double t = 1.0 / simde_math_sqrt(-simde_math_log(x)); + return (p[0] / t + p[1] + t * (p[2] + t * p[3])) / + (q[0] + t * (q[1] + t * (q[2]))); + } else if (!simde_math_isnormal(x)) { + return SIMDE_MATH_INFINITY; + } else { + return -SIMDE_MATH_INFINITY; + } + } + + #define simde_math_erfcinv simde_math_erfcinv +#endif + +#if !defined(simde_math_erfcinvf) && defined(simde_math_erfinvf) && defined(simde_math_logf) && defined(simde_math_sqrtf) + static HEDLEY_INLINE + float + simde_math_erfcinvf(float x) { + if(x >= 0.0625f && x < 2.0f) { + return simde_math_erfinvf(1.0f - x); + } else if (x < 0.0625f && x >= SIMDE_MATH_FLT_MIN) { + static const float p[6] = { + 0.1550470003116f, + 1.382719649631f, + 0.690969348887f, + -1.128081391617f, + 0.680544246825f + -0.164441567910f + }; + static const float q[3] = { + 0.155024849822f, + 1.385228141995f, + 1.000000000000f + }; + + const float t = 1.0f / simde_math_sqrtf(-simde_math_logf(x)); + return (p[0] / t + p[1] + t * (p[2] + t * (p[3] + t * (p[4] + t * p[5])))) / + (q[0] + t * (q[1] + t * (q[2]))); + } else if (x < SIMDE_MATH_FLT_MIN && simde_math_isnormalf(x)) { + static const float p[4] = { + 0.00980456202915f, + 0.36366788917100f, + 0.97302949837000f, + -0.5374947401000f + }; + static const float q[3] = { + 0.00980451277802f, + 0.36369997154400f, + 1.00000000000000f + }; + + const float t = 1.0f / simde_math_sqrtf(-simde_math_logf(x)); + return (p[0] / t + p[1] + t * (p[2] + t * p[3])) / + (q[0] + t * (q[1] + t * (q[2]))); + } else { + return simde_math_isnormalf(x) ? -SIMDE_MATH_INFINITYF : SIMDE_MATH_INFINITYF; + } + } + + #define simde_math_erfcinvf simde_math_erfcinvf +#endif + +static HEDLEY_INLINE +double +simde_math_rad2deg(double radians) { + return radians * SIMDE_MATH_180_OVER_PI; +} + +static HEDLEY_INLINE +float +simde_math_rad2degf(float radians) { + return radians * SIMDE_MATH_180_OVER_PIF; +} + +static HEDLEY_INLINE +double +simde_math_deg2rad(double degrees) { + return degrees * SIMDE_MATH_PI_OVER_180; +} + +static HEDLEY_INLINE +float +simde_math_deg2radf(float degrees) { + return degrees * (SIMDE_MATH_PI_OVER_180F); +} + +/*** Saturated arithmetic ***/ + +static HEDLEY_INLINE +int8_t +simde_math_adds_i8(int8_t a, int8_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqaddb_s8(a, b); + #else + uint8_t a_ = HEDLEY_STATIC_CAST(uint8_t, a); + uint8_t b_ = HEDLEY_STATIC_CAST(uint8_t, b); + uint8_t r_ = a_ + b_; + + a_ = (a_ >> ((8 * sizeof(r_)) - 1)) + INT8_MAX; + if (HEDLEY_STATIC_CAST(int8_t, ((a_ ^ b_) | ~(b_ ^ r_))) >= 0) { + r_ = a_; + } + + return HEDLEY_STATIC_CAST(int8_t, r_); + #endif +} + +static HEDLEY_INLINE +int16_t +simde_math_adds_i16(int16_t a, int16_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqaddh_s16(a, b); + #else + uint16_t a_ = HEDLEY_STATIC_CAST(uint16_t, a); + uint16_t b_ = HEDLEY_STATIC_CAST(uint16_t, b); + uint16_t r_ = a_ + b_; + + a_ = (a_ >> ((8 * sizeof(r_)) - 1)) + INT16_MAX; + if (HEDLEY_STATIC_CAST(int16_t, ((a_ ^ b_) | ~(b_ ^ r_))) >= 0) { + r_ = a_; + } + + return HEDLEY_STATIC_CAST(int16_t, r_); + #endif +} + +static HEDLEY_INLINE +int32_t +simde_math_adds_i32(int32_t a, int32_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqadds_s32(a, b); + #else + uint32_t a_ = HEDLEY_STATIC_CAST(uint32_t, a); + uint32_t b_ = HEDLEY_STATIC_CAST(uint32_t, b); + uint32_t r_ = a_ + b_; + + a_ = (a_ >> ((8 * sizeof(r_)) - 1)) + INT32_MAX; + if (HEDLEY_STATIC_CAST(int32_t, ((a_ ^ b_) | ~(b_ ^ r_))) >= 0) { + r_ = a_; + } + + return HEDLEY_STATIC_CAST(int32_t, r_); + #endif +} + +static HEDLEY_INLINE +int64_t +simde_math_adds_i64(int64_t a, int64_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqaddd_s64(a, b); + #else + uint64_t a_ = HEDLEY_STATIC_CAST(uint64_t, a); + uint64_t b_ = HEDLEY_STATIC_CAST(uint64_t, b); + uint64_t r_ = a_ + b_; + + a_ = (a_ >> ((8 * sizeof(r_)) - 1)) + INT64_MAX; + if (HEDLEY_STATIC_CAST(int64_t, ((a_ ^ b_) | ~(b_ ^ r_))) >= 0) { + r_ = a_; + } + + return HEDLEY_STATIC_CAST(int64_t, r_); + #endif +} + +static HEDLEY_INLINE +uint8_t +simde_math_adds_u8(uint8_t a, uint8_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqaddb_u8(a, b); + #else + uint8_t r = a + b; + r |= -(r < a); + return r; + #endif +} + +static HEDLEY_INLINE +uint16_t +simde_math_adds_u16(uint16_t a, uint16_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqaddh_u16(a, b); + #else + uint16_t r = a + b; + r |= -(r < a); + return r; + #endif +} + +static HEDLEY_INLINE +uint32_t +simde_math_adds_u32(uint32_t a, uint32_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqadds_u32(a, b); + #else + uint32_t r = a + b; + r |= -(r < a); + return r; + #endif +} + +static HEDLEY_INLINE +uint64_t +simde_math_adds_u64(uint64_t a, uint64_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqaddd_u64(a, b); + #else + uint64_t r = a + b; + r |= -(r < a); + return r; + #endif +} + +static HEDLEY_INLINE +int8_t +simde_math_subs_i8(int8_t a, int8_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqsubb_s8(a, b); + #else + uint8_t a_ = HEDLEY_STATIC_CAST(uint8_t, a); + uint8_t b_ = HEDLEY_STATIC_CAST(uint8_t, b); + uint8_t r_ = a_ - b_; + + a_ = (a_ >> 7) + INT8_MAX; + + if (HEDLEY_STATIC_CAST(int8_t, (a_ ^ b_) & (a_ ^ r_)) < 0) { + r_ = a_; + } + + return HEDLEY_STATIC_CAST(int8_t, r_); + #endif +} + +static HEDLEY_INLINE +int16_t +simde_math_subs_i16(int16_t a, int16_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqsubh_s16(a, b); + #else + uint16_t a_ = HEDLEY_STATIC_CAST(uint16_t, a); + uint16_t b_ = HEDLEY_STATIC_CAST(uint16_t, b); + uint16_t r_ = a_ - b_; + + a_ = (a_ >> 15) + INT16_MAX; + + if (HEDLEY_STATIC_CAST(int16_t, (a_ ^ b_) & (a_ ^ r_)) < 0) { + r_ = a_; + } + + return HEDLEY_STATIC_CAST(int16_t, r_); + #endif +} + +static HEDLEY_INLINE +int32_t +simde_math_subs_i32(int32_t a, int32_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqsubs_s32(a, b); + #else + uint32_t a_ = HEDLEY_STATIC_CAST(uint32_t, a); + uint32_t b_ = HEDLEY_STATIC_CAST(uint32_t, b); + uint32_t r_ = a_ - b_; + + a_ = (a_ >> 31) + INT32_MAX; + + if (HEDLEY_STATIC_CAST(int32_t, (a_ ^ b_) & (a_ ^ r_)) < 0) { + r_ = a_; + } + + return HEDLEY_STATIC_CAST(int32_t, r_); + #endif +} + +static HEDLEY_INLINE +int64_t +simde_math_subs_i64(int64_t a, int64_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqsubd_s64(a, b); + #else + uint64_t a_ = HEDLEY_STATIC_CAST(uint64_t, a); + uint64_t b_ = HEDLEY_STATIC_CAST(uint64_t, b); + uint64_t r_ = a_ - b_; + + a_ = (a_ >> 63) + INT64_MAX; + + if (HEDLEY_STATIC_CAST(int64_t, (a_ ^ b_) & (a_ ^ r_)) < 0) { + r_ = a_; + } + + return HEDLEY_STATIC_CAST(int64_t, r_); + #endif +} + +static HEDLEY_INLINE +uint8_t +simde_math_subs_u8(uint8_t a, uint8_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqsubb_u8(a, b); + #else + uint8_t res = a - b; + res &= -(res <= a); + return res; + #endif +} + +static HEDLEY_INLINE +uint16_t +simde_math_subs_u16(uint16_t a, uint16_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqsubh_u16(a, b); + #else + uint16_t res = a - b; + res &= -(res <= a); + return res; + #endif +} + +static HEDLEY_INLINE +uint32_t +simde_math_subs_u32(uint32_t a, uint32_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqsubs_u32(a, b); + #else + uint32_t res = a - b; + res &= -(res <= a); + return res; + #endif +} + +static HEDLEY_INLINE +uint64_t +simde_math_subs_u64(uint64_t a, uint64_t b) { + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return vqsubd_u64(a, b); + #else + uint64_t res = a - b; + res &= -(res <= a); + return res; + #endif +} + +HEDLEY_DIAGNOSTIC_POP + +#endif /* !defined(SIMDE_MATH_H) */ +/* :: End simde/simde-math.h :: */ +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* :: Begin simde/simde-constify.h :: */ +/* SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Copyright: + * 2020 Evan Nemerson + */ + +/* Constify macros. For internal use only. + * + * These are used to make it possible to call a function which takes + * an Integer Constant Expression (ICE) using a compile time constant. + * Technically it would also be possible to use a value not trivially + * known by the compiler, but there would be a siginficant performance + * hit (a switch switch is used). + * + * The basic idea is pretty simple; we just emit a do while loop which + * contains a switch with a case for every possible value of the + * constant. + * + * As long as the value you pass to the function in constant, pretty + * much any copmiler shouldn't have a problem generating exactly the + * same code as if you had used an ICE. + * + * This is intended to be used in the SIMDe implementations of + * functions the compilers require to be an ICE, but the other benefit + * is that if we also disable the warnings from + * SIMDE_REQUIRE_CONSTANT_RANGE we can actually just allow the tests + * to use non-ICE parameters + */ + +#if !defined(SIMDE_CONSTIFY_H) +#define SIMDE_CONSTIFY_H + +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ + +HEDLEY_DIAGNOSTIC_PUSH +SIMDE_DIAGNOSTIC_DISABLE_VARIADIC_MACROS_ +SIMDE_DIAGNOSTIC_DISABLE_CPP98_COMPAT_PEDANTIC_ + +#define SIMDE_CONSTIFY_2_(func_name, result, default_case, imm, ...) \ + do { \ + switch(imm) { \ + case 0: result = func_name(__VA_ARGS__, 0); break; \ + case 1: result = func_name(__VA_ARGS__, 1); break; \ + default: result = default_case; break; \ + } \ + } while (0) + +#define SIMDE_CONSTIFY_4_(func_name, result, default_case, imm, ...) \ + do { \ + switch(imm) { \ + case 0: result = func_name(__VA_ARGS__, 0); break; \ + case 1: result = func_name(__VA_ARGS__, 1); break; \ + case 2: result = func_name(__VA_ARGS__, 2); break; \ + case 3: result = func_name(__VA_ARGS__, 3); break; \ + default: result = default_case; break; \ + } \ + } while (0) + +#define SIMDE_CONSTIFY_8_(func_name, result, default_case, imm, ...) \ + do { \ + switch(imm) { \ + case 0: result = func_name(__VA_ARGS__, 0); break; \ + case 1: result = func_name(__VA_ARGS__, 1); break; \ + case 2: result = func_name(__VA_ARGS__, 2); break; \ + case 3: result = func_name(__VA_ARGS__, 3); break; \ + case 4: result = func_name(__VA_ARGS__, 4); break; \ + case 5: result = func_name(__VA_ARGS__, 5); break; \ + case 6: result = func_name(__VA_ARGS__, 6); break; \ + case 7: result = func_name(__VA_ARGS__, 7); break; \ + default: result = default_case; break; \ + } \ + } while (0) + +#define SIMDE_CONSTIFY_16_(func_name, result, default_case, imm, ...) \ + do { \ + switch(imm) { \ + case 0: result = func_name(__VA_ARGS__, 0); break; \ + case 1: result = func_name(__VA_ARGS__, 1); break; \ + case 2: result = func_name(__VA_ARGS__, 2); break; \ + case 3: result = func_name(__VA_ARGS__, 3); break; \ + case 4: result = func_name(__VA_ARGS__, 4); break; \ + case 5: result = func_name(__VA_ARGS__, 5); break; \ + case 6: result = func_name(__VA_ARGS__, 6); break; \ + case 7: result = func_name(__VA_ARGS__, 7); break; \ + case 8: result = func_name(__VA_ARGS__, 8); break; \ + case 9: result = func_name(__VA_ARGS__, 9); break; \ + case 10: result = func_name(__VA_ARGS__, 10); break; \ + case 11: result = func_name(__VA_ARGS__, 11); break; \ + case 12: result = func_name(__VA_ARGS__, 12); break; \ + case 13: result = func_name(__VA_ARGS__, 13); break; \ + case 14: result = func_name(__VA_ARGS__, 14); break; \ + case 15: result = func_name(__VA_ARGS__, 15); break; \ + default: result = default_case; break; \ + } \ + } while (0) + +#define SIMDE_CONSTIFY_32_(func_name, result, default_case, imm, ...) \ + do { \ + switch(imm) { \ + case 0: result = func_name(__VA_ARGS__, 0); break; \ + case 1: result = func_name(__VA_ARGS__, 1); break; \ + case 2: result = func_name(__VA_ARGS__, 2); break; \ + case 3: result = func_name(__VA_ARGS__, 3); break; \ + case 4: result = func_name(__VA_ARGS__, 4); break; \ + case 5: result = func_name(__VA_ARGS__, 5); break; \ + case 6: result = func_name(__VA_ARGS__, 6); break; \ + case 7: result = func_name(__VA_ARGS__, 7); break; \ + case 8: result = func_name(__VA_ARGS__, 8); break; \ + case 9: result = func_name(__VA_ARGS__, 9); break; \ + case 10: result = func_name(__VA_ARGS__, 10); break; \ + case 11: result = func_name(__VA_ARGS__, 11); break; \ + case 12: result = func_name(__VA_ARGS__, 12); break; \ + case 13: result = func_name(__VA_ARGS__, 13); break; \ + case 14: result = func_name(__VA_ARGS__, 14); break; \ + case 15: result = func_name(__VA_ARGS__, 15); break; \ + case 16: result = func_name(__VA_ARGS__, 16); break; \ + case 17: result = func_name(__VA_ARGS__, 17); break; \ + case 18: result = func_name(__VA_ARGS__, 18); break; \ + case 19: result = func_name(__VA_ARGS__, 19); break; \ + case 20: result = func_name(__VA_ARGS__, 20); break; \ + case 21: result = func_name(__VA_ARGS__, 21); break; \ + case 22: result = func_name(__VA_ARGS__, 22); break; \ + case 23: result = func_name(__VA_ARGS__, 23); break; \ + case 24: result = func_name(__VA_ARGS__, 24); break; \ + case 25: result = func_name(__VA_ARGS__, 25); break; \ + case 26: result = func_name(__VA_ARGS__, 26); break; \ + case 27: result = func_name(__VA_ARGS__, 27); break; \ + case 28: result = func_name(__VA_ARGS__, 28); break; \ + case 29: result = func_name(__VA_ARGS__, 29); break; \ + case 30: result = func_name(__VA_ARGS__, 30); break; \ + case 31: result = func_name(__VA_ARGS__, 31); break; \ + default: result = default_case; break; \ + } \ + } while (0) + +#define SIMDE_CONSTIFY_64_(func_name, result, default_case, imm, ...) \ + do { \ + switch(imm) { \ + case 0: result = func_name(__VA_ARGS__, 0); break; \ + case 1: result = func_name(__VA_ARGS__, 1); break; \ + case 2: result = func_name(__VA_ARGS__, 2); break; \ + case 3: result = func_name(__VA_ARGS__, 3); break; \ + case 4: result = func_name(__VA_ARGS__, 4); break; \ + case 5: result = func_name(__VA_ARGS__, 5); break; \ + case 6: result = func_name(__VA_ARGS__, 6); break; \ + case 7: result = func_name(__VA_ARGS__, 7); break; \ + case 8: result = func_name(__VA_ARGS__, 8); break; \ + case 9: result = func_name(__VA_ARGS__, 9); break; \ + case 10: result = func_name(__VA_ARGS__, 10); break; \ + case 11: result = func_name(__VA_ARGS__, 11); break; \ + case 12: result = func_name(__VA_ARGS__, 12); break; \ + case 13: result = func_name(__VA_ARGS__, 13); break; \ + case 14: result = func_name(__VA_ARGS__, 14); break; \ + case 15: result = func_name(__VA_ARGS__, 15); break; \ + case 16: result = func_name(__VA_ARGS__, 16); break; \ + case 17: result = func_name(__VA_ARGS__, 17); break; \ + case 18: result = func_name(__VA_ARGS__, 18); break; \ + case 19: result = func_name(__VA_ARGS__, 19); break; \ + case 20: result = func_name(__VA_ARGS__, 20); break; \ + case 21: result = func_name(__VA_ARGS__, 21); break; \ + case 22: result = func_name(__VA_ARGS__, 22); break; \ + case 23: result = func_name(__VA_ARGS__, 23); break; \ + case 24: result = func_name(__VA_ARGS__, 24); break; \ + case 25: result = func_name(__VA_ARGS__, 25); break; \ + case 26: result = func_name(__VA_ARGS__, 26); break; \ + case 27: result = func_name(__VA_ARGS__, 27); break; \ + case 28: result = func_name(__VA_ARGS__, 28); break; \ + case 29: result = func_name(__VA_ARGS__, 29); break; \ + case 30: result = func_name(__VA_ARGS__, 30); break; \ + case 31: result = func_name(__VA_ARGS__, 31); break; \ + case 32: result = func_name(__VA_ARGS__, 32); break; \ + case 33: result = func_name(__VA_ARGS__, 33); break; \ + case 34: result = func_name(__VA_ARGS__, 34); break; \ + case 35: result = func_name(__VA_ARGS__, 35); break; \ + case 36: result = func_name(__VA_ARGS__, 36); break; \ + case 37: result = func_name(__VA_ARGS__, 37); break; \ + case 38: result = func_name(__VA_ARGS__, 38); break; \ + case 39: result = func_name(__VA_ARGS__, 39); break; \ + case 40: result = func_name(__VA_ARGS__, 40); break; \ + case 41: result = func_name(__VA_ARGS__, 41); break; \ + case 42: result = func_name(__VA_ARGS__, 42); break; \ + case 43: result = func_name(__VA_ARGS__, 43); break; \ + case 44: result = func_name(__VA_ARGS__, 44); break; \ + case 45: result = func_name(__VA_ARGS__, 45); break; \ + case 46: result = func_name(__VA_ARGS__, 46); break; \ + case 47: result = func_name(__VA_ARGS__, 47); break; \ + case 48: result = func_name(__VA_ARGS__, 48); break; \ + case 49: result = func_name(__VA_ARGS__, 49); break; \ + case 50: result = func_name(__VA_ARGS__, 50); break; \ + case 51: result = func_name(__VA_ARGS__, 51); break; \ + case 52: result = func_name(__VA_ARGS__, 52); break; \ + case 53: result = func_name(__VA_ARGS__, 53); break; \ + case 54: result = func_name(__VA_ARGS__, 54); break; \ + case 55: result = func_name(__VA_ARGS__, 55); break; \ + case 56: result = func_name(__VA_ARGS__, 56); break; \ + case 57: result = func_name(__VA_ARGS__, 57); break; \ + case 58: result = func_name(__VA_ARGS__, 58); break; \ + case 59: result = func_name(__VA_ARGS__, 59); break; \ + case 60: result = func_name(__VA_ARGS__, 60); break; \ + case 61: result = func_name(__VA_ARGS__, 61); break; \ + case 62: result = func_name(__VA_ARGS__, 62); break; \ + case 63: result = func_name(__VA_ARGS__, 63); break; \ + default: result = default_case; break; \ + } \ + } while (0) + +#define SIMDE_CONSTIFY_2_NO_RESULT_(func_name, default_case, imm, ...) \ + do { \ + switch(imm) { \ + case 0: func_name(__VA_ARGS__, 0); break; \ + case 1: func_name(__VA_ARGS__, 1); break; \ + default: default_case; break; \ + } \ + } while (0) + +#define SIMDE_CONSTIFY_4_NO_RESULT_(func_name, default_case, imm, ...) \ + do { \ + switch(imm) { \ + case 0: func_name(__VA_ARGS__, 0); break; \ + case 1: func_name(__VA_ARGS__, 1); break; \ + case 2: func_name(__VA_ARGS__, 2); break; \ + case 3: func_name(__VA_ARGS__, 3); break; \ + default: default_case; break; \ + } \ + } while (0) + +#define SIMDE_CONSTIFY_8_NO_RESULT_(func_name, default_case, imm, ...) \ + do { \ + switch(imm) { \ + case 0: func_name(__VA_ARGS__, 0); break; \ + case 1: func_name(__VA_ARGS__, 1); break; \ + case 2: func_name(__VA_ARGS__, 2); break; \ + case 3: func_name(__VA_ARGS__, 3); break; \ + case 4: func_name(__VA_ARGS__, 4); break; \ + case 5: func_name(__VA_ARGS__, 5); break; \ + case 6: func_name(__VA_ARGS__, 6); break; \ + case 7: func_name(__VA_ARGS__, 7); break; \ + default: default_case; break; \ + } \ + } while (0) + +#define SIMDE_CONSTIFY_16_NO_RESULT_(func_name, default_case, imm, ...) \ + do { \ + switch(imm) { \ + case 0: func_name(__VA_ARGS__, 0); break; \ + case 1: func_name(__VA_ARGS__, 1); break; \ + case 2: func_name(__VA_ARGS__, 2); break; \ + case 3: func_name(__VA_ARGS__, 3); break; \ + case 4: func_name(__VA_ARGS__, 4); break; \ + case 5: func_name(__VA_ARGS__, 5); break; \ + case 6: func_name(__VA_ARGS__, 6); break; \ + case 7: func_name(__VA_ARGS__, 7); break; \ + case 8: func_name(__VA_ARGS__, 8); break; \ + case 9: func_name(__VA_ARGS__, 9); break; \ + case 10: func_name(__VA_ARGS__, 10); break; \ + case 11: func_name(__VA_ARGS__, 11); break; \ + case 12: func_name(__VA_ARGS__, 12); break; \ + case 13: func_name(__VA_ARGS__, 13); break; \ + case 14: func_name(__VA_ARGS__, 14); break; \ + case 15: func_name(__VA_ARGS__, 15); break; \ + default: default_case; break; \ + } \ + } while (0) + +#define SIMDE_CONSTIFY_32_NO_RESULT_(func_name, default_case, imm, ...) \ + do { \ + switch(imm) { \ + case 0: func_name(__VA_ARGS__, 0); break; \ + case 1: func_name(__VA_ARGS__, 1); break; \ + case 2: func_name(__VA_ARGS__, 2); break; \ + case 3: func_name(__VA_ARGS__, 3); break; \ + case 4: func_name(__VA_ARGS__, 4); break; \ + case 5: func_name(__VA_ARGS__, 5); break; \ + case 6: func_name(__VA_ARGS__, 6); break; \ + case 7: func_name(__VA_ARGS__, 7); break; \ + case 8: func_name(__VA_ARGS__, 8); break; \ + case 9: func_name(__VA_ARGS__, 9); break; \ + case 10: func_name(__VA_ARGS__, 10); break; \ + case 11: func_name(__VA_ARGS__, 11); break; \ + case 12: func_name(__VA_ARGS__, 12); break; \ + case 13: func_name(__VA_ARGS__, 13); break; \ + case 14: func_name(__VA_ARGS__, 14); break; \ + case 15: func_name(__VA_ARGS__, 15); break; \ + case 16: func_name(__VA_ARGS__, 16); break; \ + case 17: func_name(__VA_ARGS__, 17); break; \ + case 18: func_name(__VA_ARGS__, 18); break; \ + case 19: func_name(__VA_ARGS__, 19); break; \ + case 20: func_name(__VA_ARGS__, 20); break; \ + case 21: func_name(__VA_ARGS__, 21); break; \ + case 22: func_name(__VA_ARGS__, 22); break; \ + case 23: func_name(__VA_ARGS__, 23); break; \ + case 24: func_name(__VA_ARGS__, 24); break; \ + case 25: func_name(__VA_ARGS__, 25); break; \ + case 26: func_name(__VA_ARGS__, 26); break; \ + case 27: func_name(__VA_ARGS__, 27); break; \ + case 28: func_name(__VA_ARGS__, 28); break; \ + case 29: func_name(__VA_ARGS__, 29); break; \ + case 30: func_name(__VA_ARGS__, 30); break; \ + case 31: func_name(__VA_ARGS__, 31); break; \ + default: default_case; break; \ + } \ + } while (0) + +#define SIMDE_CONSTIFY_64_NO_RESULT_(func_name, default_case, imm, ...) \ + do { \ + switch(imm) { \ + case 0: func_name(__VA_ARGS__, 0); break; \ + case 1: func_name(__VA_ARGS__, 1); break; \ + case 2: func_name(__VA_ARGS__, 2); break; \ + case 3: func_name(__VA_ARGS__, 3); break; \ + case 4: func_name(__VA_ARGS__, 4); break; \ + case 5: func_name(__VA_ARGS__, 5); break; \ + case 6: func_name(__VA_ARGS__, 6); break; \ + case 7: func_name(__VA_ARGS__, 7); break; \ + case 8: func_name(__VA_ARGS__, 8); break; \ + case 9: func_name(__VA_ARGS__, 9); break; \ + case 10: func_name(__VA_ARGS__, 10); break; \ + case 11: func_name(__VA_ARGS__, 11); break; \ + case 12: func_name(__VA_ARGS__, 12); break; \ + case 13: func_name(__VA_ARGS__, 13); break; \ + case 14: func_name(__VA_ARGS__, 14); break; \ + case 15: func_name(__VA_ARGS__, 15); break; \ + case 16: func_name(__VA_ARGS__, 16); break; \ + case 17: func_name(__VA_ARGS__, 17); break; \ + case 18: func_name(__VA_ARGS__, 18); break; \ + case 19: func_name(__VA_ARGS__, 19); break; \ + case 20: func_name(__VA_ARGS__, 20); break; \ + case 21: func_name(__VA_ARGS__, 21); break; \ + case 22: func_name(__VA_ARGS__, 22); break; \ + case 23: func_name(__VA_ARGS__, 23); break; \ + case 24: func_name(__VA_ARGS__, 24); break; \ + case 25: func_name(__VA_ARGS__, 25); break; \ + case 26: func_name(__VA_ARGS__, 26); break; \ + case 27: func_name(__VA_ARGS__, 27); break; \ + case 28: func_name(__VA_ARGS__, 28); break; \ + case 29: func_name(__VA_ARGS__, 29); break; \ + case 30: func_name(__VA_ARGS__, 30); break; \ + case 31: func_name(__VA_ARGS__, 31); break; \ + case 32: func_name(__VA_ARGS__, 32); break; \ + case 33: func_name(__VA_ARGS__, 33); break; \ + case 34: func_name(__VA_ARGS__, 34); break; \ + case 35: func_name(__VA_ARGS__, 35); break; \ + case 36: func_name(__VA_ARGS__, 36); break; \ + case 37: func_name(__VA_ARGS__, 37); break; \ + case 38: func_name(__VA_ARGS__, 38); break; \ + case 39: func_name(__VA_ARGS__, 39); break; \ + case 40: func_name(__VA_ARGS__, 40); break; \ + case 41: func_name(__VA_ARGS__, 41); break; \ + case 42: func_name(__VA_ARGS__, 42); break; \ + case 43: func_name(__VA_ARGS__, 43); break; \ + case 44: func_name(__VA_ARGS__, 44); break; \ + case 45: func_name(__VA_ARGS__, 45); break; \ + case 46: func_name(__VA_ARGS__, 46); break; \ + case 47: func_name(__VA_ARGS__, 47); break; \ + case 48: func_name(__VA_ARGS__, 48); break; \ + case 49: func_name(__VA_ARGS__, 49); break; \ + case 50: func_name(__VA_ARGS__, 50); break; \ + case 51: func_name(__VA_ARGS__, 51); break; \ + case 52: func_name(__VA_ARGS__, 52); break; \ + case 53: func_name(__VA_ARGS__, 53); break; \ + case 54: func_name(__VA_ARGS__, 54); break; \ + case 55: func_name(__VA_ARGS__, 55); break; \ + case 56: func_name(__VA_ARGS__, 56); break; \ + case 57: func_name(__VA_ARGS__, 57); break; \ + case 58: func_name(__VA_ARGS__, 58); break; \ + case 59: func_name(__VA_ARGS__, 59); break; \ + case 60: func_name(__VA_ARGS__, 60); break; \ + case 61: func_name(__VA_ARGS__, 61); break; \ + case 62: func_name(__VA_ARGS__, 62); break; \ + case 63: func_name(__VA_ARGS__, 63); break; \ + default: default_case; break; \ + } \ + } while (0) + +HEDLEY_DIAGNOSTIC_POP + +#endif +/* :: End simde/simde-constify.h :: */ +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* :: Begin simde/simde-align.h :: */ +/* Alignment + * Created by Evan Nemerson + * + * To the extent possible under law, the authors have waived all + * copyright and related or neighboring rights to this code. For + * details, see the Creative Commons Zero 1.0 Universal license at + * + * + * SPDX-License-Identifier: CC0-1.0 + * + ********************************************************************** + * + * This is portability layer which should help iron out some + * differences across various compilers, as well as various versions of + * C and C++. + * + * It was originally developed for SIMD Everywhere + * (), but since its only + * dependency is Hedley (, also CC0) + * it can easily be used in other projects, so please feel free to do + * so. + * + * If you do use this in your project, please keep a link to SIMDe in + * your code to remind you where to report any bugs and/or check for + * updated versions. + * + * # API Overview + * + * The API has several parts, and most macros have a few variations. + * There are APIs for declaring aligned fields/variables, optimization + * hints, and run-time alignment checks. + * + * Briefly, macros ending with "_TO" take numeric values and are great + * when you know the value you would like to use. Macros ending with + * "_LIKE", on the other hand, accept a type and are used when you want + * to use the alignment of a type instead of hardcoding a value. + * + * Documentation for each section of the API is inline. + * + * True to form, MSVC is the main problem and imposes several + * limitations on the effectiveness of the APIs. Detailed descriptions + * of the limitations of each macro are inline, but in general: + * + * * On C11+ or C++11+ code written using this API will work. The + * ASSUME macros may or may not generate a hint to the compiler, but + * that is only an optimization issue and will not actually cause + * failures. + * * If you're using pretty much any compiler other than MSVC, + * everything should basically work as well as in C11/C++11. + */ + +#if !defined(SIMDE_ALIGN_H) +#define SIMDE_ALIGN_H + +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ + +/* I know this seems a little silly, but some non-hosted compilers + * don't have stddef.h, so we try to accommodate them. */ +#if !defined(SIMDE_ALIGN_SIZE_T_) + #if defined(__SIZE_TYPE__) + #define SIMDE_ALIGN_SIZE_T_ __SIZE_TYPE__ + #elif defined(__SIZE_T_TYPE__) + #define SIMDE_ALIGN_SIZE_T_ __SIZE_TYPE__ + #elif defined(__cplusplus) + #include + #define SIMDE_ALIGN_SIZE_T_ size_t + #else + #include + #define SIMDE_ALIGN_SIZE_T_ size_t + #endif +#endif + +#if !defined(SIMDE_ALIGN_INTPTR_T_) + #if defined(__INTPTR_TYPE__) + #define SIMDE_ALIGN_INTPTR_T_ __INTPTR_TYPE__ + #elif defined(__PTRDIFF_TYPE__) + #define SIMDE_ALIGN_INTPTR_T_ __PTRDIFF_TYPE__ + #elif defined(__PTRDIFF_T_TYPE__) + #define SIMDE_ALIGN_INTPTR_T_ __PTRDIFF_T_TYPE__ + #elif defined(__cplusplus) + #include + #define SIMDE_ALIGN_INTPTR_T_ ptrdiff_t + #else + #include + #define SIMDE_ALIGN_INTPTR_T_ ptrdiff_t + #endif +#endif + +#if defined(SIMDE_ALIGN_DEBUG) + #if defined(__cplusplus) + #include + #else + #include + #endif +#endif + +/* SIMDE_ALIGN_OF(Type) + * + * The SIMDE_ALIGN_OF macro works like alignof, or _Alignof, or + * __alignof, or __alignof__, or __ALIGNOF__, depending on the compiler. + * It isn't defined everywhere (only when the compiler has some alignof- + * like feature we can use to implement it), but it should work in most + * modern compilers, as well as C11 and C++11. + * + * If we can't find an implementation for SIMDE_ALIGN_OF then the macro + * will not be defined, so if you can handle that situation sensibly + * you may need to sprinkle some ifdefs into your code. + */ +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + (0 && HEDLEY_HAS_FEATURE(c_alignof)) + #define SIMDE_ALIGN_OF(Type) _Alignof(Type) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + (0 && HEDLEY_HAS_FEATURE(cxx_alignof)) + #define SIMDE_ALIGN_OF(Type) alignof(Type) +#elif \ + HEDLEY_GCC_VERSION_CHECK(2,95,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ + HEDLEY_TINYC_VERSION_CHECK(0,9,24) || \ + HEDLEY_PGI_VERSION_CHECK(19,10,0) || \ + HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(16,9,0) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(16,9,0) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CL430_VERSION_CHECK(16,9,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,2) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + defined(__IBM__ALIGNOF__) || \ + defined(__clang__) + #define SIMDE_ALIGN_OF(Type) __alignof__(Type) +#elif \ + HEDLEY_IAR_VERSION_CHECK(8,40,0) + #define SIMDE_ALIGN_OF(Type) __ALIGNOF__(Type) +#elif \ + HEDLEY_MSVC_VERSION_CHECK(19,0,0) + /* Probably goes back much further, but MS takes down their old docs. + * If you can verify that this works in earlier versions please let + * me know! */ + #define SIMDE_ALIGN_OF(Type) __alignof(Type) +#endif + +/* SIMDE_ALIGN_MAXIMUM: + * + * This is the maximum alignment that the compiler supports. You can + * define the value prior to including SIMDe if necessary, but in that + * case *please* submit an issue so we can add the platform to the + * detection code. + * + * Most compilers are okay with types which are aligned beyond what + * they think is the maximum, as long as the alignment is a power + * of two. Older versions of MSVC is the exception, so we need to cap + * the alignment requests at values that the implementation supports. + * + * XL C/C++ will accept values larger than 16 (which is the alignment + * of an AltiVec vector), but will not reliably align to the larger + * value, so so we cap the value at 16 there. + * + * If the compiler accepts any power-of-two value within reason then + * this macro should be left undefined, and the SIMDE_ALIGN_CAP + * macro will just return the value passed to it. */ +#if !defined(SIMDE_ALIGN_MAXIMUM) + #if defined(HEDLEY_MSVC_VERSION) + #if HEDLEY_MSVC_VERSION_CHECK(19, 16, 0) + // Visual studio 2017 and newer does not need a max + #else + #if defined(_M_IX86) || defined(_M_AMD64) + #if HEDLEY_MSVC_VERSION_CHECK(19,14,0) + #define SIMDE_ALIGN_PLATFORM_MAXIMUM 64 + #elif HEDLEY_MSVC_VERSION_CHECK(16,0,0) + /* VS 2010 is really a guess based on Wikipedia; if anyone can + * test with old VS versions I'd really appreciate it. */ + #define SIMDE_ALIGN_PLATFORM_MAXIMUM 32 + #else + #define SIMDE_ALIGN_PLATFORM_MAXIMUM 16 + #endif + #elif defined(_M_ARM) || defined(_M_ARM64) + #define SIMDE_ALIGN_PLATFORM_MAXIMUM 8 + #endif + #endif + #elif defined(HEDLEY_IBM_VERSION) + #define SIMDE_ALIGN_PLATFORM_MAXIMUM 16 + #endif +#endif + +/* You can mostly ignore these; they're intended for internal use. + * If you do need to use them please let me know; if they fulfill + * a common use case I'll probably drop the trailing underscore + * and make them part of the public API. */ +#if defined(SIMDE_ALIGN_PLATFORM_MAXIMUM) + #if SIMDE_ALIGN_PLATFORM_MAXIMUM >= 64 + #define SIMDE_ALIGN_64_ 64 + #define SIMDE_ALIGN_32_ 32 + #define SIMDE_ALIGN_16_ 16 + #define SIMDE_ALIGN_8_ 8 + #elif SIMDE_ALIGN_PLATFORM_MAXIMUM >= 32 + #define SIMDE_ALIGN_64_ 32 + #define SIMDE_ALIGN_32_ 32 + #define SIMDE_ALIGN_16_ 16 + #define SIMDE_ALIGN_8_ 8 + #elif SIMDE_ALIGN_PLATFORM_MAXIMUM >= 16 + #define SIMDE_ALIGN_64_ 16 + #define SIMDE_ALIGN_32_ 16 + #define SIMDE_ALIGN_16_ 16 + #define SIMDE_ALIGN_8_ 8 + #elif SIMDE_ALIGN_PLATFORM_MAXIMUM >= 8 + #define SIMDE_ALIGN_64_ 8 + #define SIMDE_ALIGN_32_ 8 + #define SIMDE_ALIGN_16_ 8 + #define SIMDE_ALIGN_8_ 8 + #else + #error Max alignment expected to be >= 8 + #endif +#else + #define SIMDE_ALIGN_64_ 64 + #define SIMDE_ALIGN_32_ 32 + #define SIMDE_ALIGN_16_ 16 + #define SIMDE_ALIGN_8_ 8 +#endif + +/** + * SIMDE_ALIGN_CAP(Alignment) + * + * Returns the minimum of Alignment or SIMDE_ALIGN_MAXIMUM. + */ +#if defined(SIMDE_ALIGN_MAXIMUM) + #define SIMDE_ALIGN_CAP(Alignment) (((Alignment) < (SIMDE_ALIGN_PLATFORM_MAXIMUM)) ? (Alignment) : (SIMDE_ALIGN_PLATFORM_MAXIMUM)) +#else + #define SIMDE_ALIGN_CAP(Alignment) (Alignment) +#endif + +/* SIMDE_ALIGN_TO(Alignment) + * + * SIMDE_ALIGN_TO is used to declare types or variables. It basically + * maps to the align attribute in most compilers, the align declspec + * in MSVC, or _Alignas/alignas in C11/C++11. + * + * Example: + * + * struct i32x4 { + * SIMDE_ALIGN_TO(16) int32_t values[4]; + * } + * + * Limitations: + * + * MSVC requires that the Alignment parameter be numeric; you can't do + * something like `SIMDE_ALIGN_TO(SIMDE_ALIGN_OF(int))`. This is + * unfortunate because that's really how the LIKE macros are + * implemented, and I am not aware of a way to get anything like this + * to work without using the C11/C++11 keywords. + * + * It also means that we can't use SIMDE_ALIGN_CAP to limit the + * alignment to the value specified, which MSVC also requires, so on + * MSVC you should use the `SIMDE_ALIGN_TO_8/16/32/64` macros instead. + * They work like `SIMDE_ALIGN_TO(SIMDE_ALIGN_CAP(Alignment))` would, + * but should be safe to use on MSVC. + * + * All this is to say that, if you want your code to work on MSVC, you + * should use the SIMDE_ALIGN_TO_8/16/32/64 macros below instead of + * SIMDE_ALIGN_TO(8/16/32/64). + */ +#if \ + HEDLEY_HAS_ATTRIBUTE(aligned) || \ + HEDLEY_GCC_VERSION_CHECK(2,95,0) || \ + HEDLEY_CRAY_VERSION_CHECK(8,4,0) || \ + HEDLEY_IBM_VERSION_CHECK(11,1,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_PGI_VERSION_CHECK(19,4,0) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_TINYC_VERSION_CHECK(0,9,24) || \ + HEDLEY_TI_ARMCL_VERSION_CHECK(16,9,0) || \ + HEDLEY_TI_CL2000_VERSION_CHECK(16,9,0) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + HEDLEY_TI_CL430_VERSION_CHECK(16,9,0) || \ + HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,2) + #define SIMDE_ALIGN_TO(Alignment) __attribute__((__aligned__(SIMDE_ALIGN_CAP(Alignment)))) +#elif \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) + #define SIMDE_ALIGN_TO(Alignment) _Alignas(SIMDE_ALIGN_CAP(Alignment)) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) + #define SIMDE_ALIGN_TO(Alignment) alignas(SIMDE_ALIGN_CAP(Alignment)) +#elif \ + defined(HEDLEY_MSVC_VERSION) + #define SIMDE_ALIGN_TO(Alignment) __declspec(align(Alignment)) + /* Unfortunately MSVC can't handle __declspec(align(__alignof(Type))); + * the alignment passed to the declspec has to be an integer. */ + #define SIMDE_ALIGN_OF_UNUSABLE_FOR_LIKE +#endif +#define SIMDE_ALIGN_TO_64 SIMDE_ALIGN_TO(SIMDE_ALIGN_64_) +#define SIMDE_ALIGN_TO_32 SIMDE_ALIGN_TO(SIMDE_ALIGN_32_) +#define SIMDE_ALIGN_TO_16 SIMDE_ALIGN_TO(SIMDE_ALIGN_16_) +#define SIMDE_ALIGN_TO_8 SIMDE_ALIGN_TO(SIMDE_ALIGN_8_) + +/* SIMDE_ALIGN_ASSUME_TO(Pointer, Alignment) + * + * SIMDE_ALIGN_ASSUME_TO is semantically similar to C++20's + * std::assume_aligned, or __builtin_assume_aligned. It tells the + * compiler to assume that the provided pointer is aligned to an + * `Alignment`-byte boundary. + * + * If you define SIMDE_ALIGN_DEBUG prior to including this header then + * SIMDE_ALIGN_ASSUME_TO will turn into a runtime check. We don't + * integrate with NDEBUG in this header, but it may be a good idea to + * put something like this in your code: + * + * #if !defined(NDEBUG) + * #define SIMDE_ALIGN_DEBUG + * #endif + * #include <.../simde-align.h> + */ +#if \ + HEDLEY_HAS_BUILTIN(__builtin_assume_aligned) || \ + HEDLEY_GCC_VERSION_CHECK(4,7,0) + #define SIMDE_ALIGN_ASSUME_TO_UNCHECKED(Pointer, Alignment) \ + HEDLEY_REINTERPRET_CAST(__typeof__(Pointer), __builtin_assume_aligned(HEDLEY_CONST_CAST(void*, HEDLEY_REINTERPRET_CAST(const void*, Pointer)), Alignment)) +#elif HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define SIMDE_ALIGN_ASSUME_TO_UNCHECKED(Pointer, Alignment) (__extension__ ({ \ + __typeof__(v) simde_assume_aligned_t_ = (Pointer); \ + __assume_aligned(simde_assume_aligned_t_, Alignment); \ + simde_assume_aligned_t_; \ + })) +#elif defined(__cplusplus) && (__cplusplus > 201703L) + #include + #define SIMDE_ALIGN_ASSUME_TO_UNCHECKED(Pointer, Alignment) std::assume_aligned(Pointer) +#else + #if defined(__cplusplus) + template HEDLEY_ALWAYS_INLINE static T* simde_align_assume_to_unchecked(T* ptr, const size_t alignment) + #else + HEDLEY_ALWAYS_INLINE static void* simde_align_assume_to_unchecked(void* ptr, const size_t alignment) + #endif + { + HEDLEY_ASSUME((HEDLEY_REINTERPRET_CAST(size_t, (ptr)) % SIMDE_ALIGN_CAP(alignment)) == 0); + return ptr; + } + #if defined(__cplusplus) + #define SIMDE_ALIGN_ASSUME_TO_UNCHECKED(Pointer, Alignment) simde_align_assume_to_unchecked((Pointer), (Alignment)) + #else + #define SIMDE_ALIGN_ASSUME_TO_UNCHECKED(Pointer, Alignment) simde_align_assume_to_unchecked(HEDLEY_CONST_CAST(void*, HEDLEY_REINTERPRET_CAST(const void*, Pointer)), (Alignment)) + #endif +#endif + +#if !defined(SIMDE_ALIGN_DEBUG) + #define SIMDE_ALIGN_ASSUME_TO(Pointer, Alignment) SIMDE_ALIGN_ASSUME_TO_UNCHECKED(Pointer, Alignment) +#else + #include + #if defined(__cplusplus) + template + static HEDLEY_ALWAYS_INLINE + T* + simde_align_assume_to_checked_uncapped(T* ptr, const size_t alignment, const char* file, int line, const char* ptrname) + #else + static HEDLEY_ALWAYS_INLINE + void* + simde_align_assume_to_checked_uncapped(void* ptr, const size_t alignment, const char* file, int line, const char* ptrname) + #endif + { + if (HEDLEY_UNLIKELY((HEDLEY_REINTERPRET_CAST(SIMDE_ALIGN_INTPTR_T_, (ptr)) % HEDLEY_STATIC_CAST(SIMDE_ALIGN_INTPTR_T_, SIMDE_ALIGN_CAP(alignment))) != 0)) { + fprintf(stderr, "%s:%d: alignment check failed for `%s' (%p %% %u == %u)\n", + file, line, ptrname, HEDLEY_REINTERPRET_CAST(const void*, ptr), + HEDLEY_STATIC_CAST(unsigned int, SIMDE_ALIGN_CAP(alignment)), + HEDLEY_STATIC_CAST(unsigned int, HEDLEY_REINTERPRET_CAST(SIMDE_ALIGN_INTPTR_T_, (ptr)) % HEDLEY_STATIC_CAST(SIMDE_ALIGN_INTPTR_T_, SIMDE_ALIGN_CAP(alignment)))); + } + + return ptr; + } + + #if defined(__cplusplus) + #define SIMDE_ALIGN_ASSUME_TO(Pointer, Alignment) simde_align_assume_to_checked_uncapped((Pointer), (Alignment), __FILE__, __LINE__, #Pointer) + #else + #define SIMDE_ALIGN_ASSUME_TO(Pointer, Alignment) simde_align_assume_to_checked_uncapped(HEDLEY_CONST_CAST(void*, HEDLEY_REINTERPRET_CAST(const void*, Pointer)), (Alignment), __FILE__, __LINE__, #Pointer) + #endif +#endif + +/* SIMDE_ALIGN_LIKE(Type) + * SIMDE_ALIGN_LIKE_#(Type) + * + * The SIMDE_ALIGN_LIKE macros are similar to the SIMDE_ALIGN_TO macros + * except instead of an integer they take a type; basically, it's just + * a more convenient way to do something like: + * + * SIMDE_ALIGN_TO(SIMDE_ALIGN_OF(Type)) + * + * The versions with a numeric suffix will fall back on using a numeric + * value in the event we can't use SIMDE_ALIGN_OF(Type). This is + * mainly for MSVC, where __declspec(align()) can't handle anything + * other than hard-coded numeric values. + */ +#if defined(SIMDE_ALIGN_OF) && defined(SIMDE_ALIGN_TO) && !defined(SIMDE_ALIGN_OF_UNUSABLE_FOR_LIKE) + #define SIMDE_ALIGN_LIKE(Type) SIMDE_ALIGN_TO(SIMDE_ALIGN_OF(Type)) + #define SIMDE_ALIGN_LIKE_64(Type) SIMDE_ALIGN_LIKE(Type) + #define SIMDE_ALIGN_LIKE_32(Type) SIMDE_ALIGN_LIKE(Type) + #define SIMDE_ALIGN_LIKE_16(Type) SIMDE_ALIGN_LIKE(Type) + #define SIMDE_ALIGN_LIKE_8(Type) SIMDE_ALIGN_LIKE(Type) +#else + #define SIMDE_ALIGN_LIKE_64(Type) SIMDE_ALIGN_TO_64 + #define SIMDE_ALIGN_LIKE_32(Type) SIMDE_ALIGN_TO_32 + #define SIMDE_ALIGN_LIKE_16(Type) SIMDE_ALIGN_TO_16 + #define SIMDE_ALIGN_LIKE_8(Type) SIMDE_ALIGN_TO_8 +#endif + +/* SIMDE_ALIGN_ASSUME_LIKE(Pointer, Type) + * + * This is similar to SIMDE_ALIGN_ASSUME_TO, except that it takes a + * type instead of a numeric value. */ +#if defined(SIMDE_ALIGN_OF) && defined(SIMDE_ALIGN_ASSUME_TO) + #define SIMDE_ALIGN_ASSUME_LIKE(Pointer, Type) SIMDE_ALIGN_ASSUME_TO(Pointer, SIMDE_ALIGN_OF(Type)) +#endif + +/* SIMDE_ALIGN_CAST(Type, Pointer) + * + * SIMDE_ALIGN_CAST is like C++'s reinterpret_cast, but it will try + * to silence warnings that some compilers may produce if you try + * to assign to a type with increased alignment requirements. + * + * Note that it does *not* actually attempt to tell the compiler that + * the pointer is aligned like the destination should be; that's the + * job of the next macro. This macro is necessary for stupid APIs + * like _mm_loadu_si128 where the input is a __m128i* but the function + * is specifically for data which isn't necessarily aligned to + * _Alignof(__m128i). + */ +#if HEDLEY_HAS_WARNING("-Wcast-align") || defined(__clang__) || HEDLEY_GCC_VERSION_CHECK(3,4,0) + #define SIMDE_ALIGN_CAST(Type, Pointer) (__extension__({ \ + HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("GCC diagnostic ignored \"-Wcast-align\"") \ + Type simde_r_ = HEDLEY_REINTERPRET_CAST(Type, Pointer); \ + HEDLEY_DIAGNOSTIC_POP \ + simde_r_; \ + })) +#else + #define SIMDE_ALIGN_CAST(Type, Pointer) HEDLEY_REINTERPRET_CAST(Type, Pointer) +#endif + +/* SIMDE_ALIGN_ASSUME_CAST(Type, Pointer) + * + * This is sort of like a combination of a reinterpret_cast and a + * SIMDE_ALIGN_ASSUME_LIKE. It uses SIMDE_ALIGN_ASSUME_LIKE to tell + * the compiler that the pointer is aligned like the specified type + * and casts the pointer to the specified type while suppressing any + * warnings from the compiler about casting to a type with greater + * alignment requirements. + */ +#define SIMDE_ALIGN_ASSUME_CAST(Type, Pointer) SIMDE_ALIGN_ASSUME_LIKE(SIMDE_ALIGN_CAST(Type, Pointer), Type) + +#endif /* !defined(SIMDE_ALIGN_H) */ +/* :: End simde/simde-align.h :: */ + +/* In some situations, SIMDe has to make large performance sacrifices + * for small increases in how faithfully it reproduces an API, but + * only a relatively small number of users will actually need the API + * to be completely accurate. The SIMDE_FAST_* options can be used to + * disable these trade-offs. + * + * They can be enabled by passing -DSIMDE_FAST_MATH to the compiler, or + * the individual defines (e.g., -DSIMDE_FAST_NANS) if you only want to + * enable some optimizations. Using -ffast-math and/or + * -ffinite-math-only will also enable the relevant options. If you + * don't want that you can pass -DSIMDE_NO_FAST_* to disable them. */ + +/* Most programs avoid NaNs by never passing values which can result in + * a NaN; for example, if you only pass non-negative values to the sqrt + * functions, it won't generate a NaN. On some platforms, similar + * functions handle NaNs differently; for example, the _mm_min_ps SSE + * function will return 0.0 if you pass it (0.0, NaN), but the NEON + * vminq_f32 function will return NaN. Making them behave like one + * another is expensive; it requires generating a mask of all lanes + * with NaNs, then performing the operation (e.g., vminq_f32), then + * blending together the result with another vector using the mask. + * + * If you don't want SIMDe to worry about the differences between how + * NaNs are handled on the two platforms, define this (or pass + * -ffinite-math-only) */ +#if !defined(SIMDE_FAST_MATH) && !defined(SIMDE_NO_FAST_MATH) && defined(__FAST_MATH__) + #define SIMDE_FAST_MATH +#endif + +#if !defined(SIMDE_FAST_NANS) && !defined(SIMDE_NO_FAST_NANS) + #if defined(SIMDE_FAST_MATH) + #define SIMDE_FAST_NANS + #elif defined(__FINITE_MATH_ONLY__) + #if __FINITE_MATH_ONLY__ + #define SIMDE_FAST_NANS + #endif + #endif +#endif + +/* Many functions are defined as using the current rounding mode + * (i.e., the SIMD version of fegetround()) when converting to + * an integer. For example, _mm_cvtpd_epi32. Unfortunately, + * on some platforms (such as ARMv8+ where round-to-nearest is + * always used, regardless of the FPSCR register) this means we + * have to first query the current rounding mode, then choose + * the proper function (rounnd + , ceil, floor, etc.) */ +#if !defined(SIMDE_FAST_ROUND_MODE) && !defined(SIMDE_NO_FAST_ROUND_MODE) && defined(SIMDE_FAST_MATH) + #define SIMDE_FAST_ROUND_MODE +#endif + +/* This controls how ties are rounded. For example, does 10.5 round to + * 10 or 11? IEEE 754 specifies round-towards-even, but ARMv7 (for + * example) doesn't support it and it must be emulated (which is rather + * slow). If you're okay with just using the default for whatever arch + * you're on, you should definitely define this. + * + * Note that we don't use this macro to avoid correct implementations + * in functions which are explicitly about rounding (such as vrnd* on + * NEON, _mm_round_* on x86, etc.); it is only used for code where + * rounding is a component in another function, and even then it isn't + * usually a problem since such functions will use the current rounding + * mode. */ +#if !defined(SIMDE_FAST_ROUND_TIES) && !defined(SIMDE_NO_FAST_ROUND_TIES) && defined(SIMDE_FAST_MATH) + #define SIMDE_FAST_ROUND_TIES +#endif + +/* For functions which convert from one type to another (mostly from + * floating point to integer types), sometimes we need to do a range + * check and potentially return a different result if the value + * falls outside that range. Skipping this check can provide a + * performance boost, at the expense of faithfulness to the API we're + * emulating. */ +#if !defined(SIMDE_FAST_CONVERSION_RANGE) && !defined(SIMDE_NO_FAST_CONVERSION_RANGE) && defined(SIMDE_FAST_MATH) + #define SIMDE_FAST_CONVERSION_RANGE +#endif + +/* Due to differences across platforms, sometimes it can be much + * faster for us to allow spurious floating point exceptions, + * or to no generate them when we should. */ +#if !defined(SIMDE_FAST_EXCEPTIONS) && !defined(SIMDE_NO_FAST_EXCEPTIONS) && defined(SIMDE_FAST_MATH) + #define SIMDE_FAST_EXCEPTIONS +#endif + +#if \ + HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ + HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ + HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + (HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ + HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define SIMDE_CHECK_CONSTANT_(expr) (__builtin_constant_p(expr)) +#elif defined(__cplusplus) && (__cplusplus > 201703L) + #include + #define SIMDE_CHECK_CONSTANT_(expr) (std::is_constant_evaluated()) +#endif + +#if !defined(SIMDE_NO_CHECK_IMMEDIATE_CONSTANT) + #if defined(SIMDE_CHECK_CONSTANT_) && \ + SIMDE_DETECT_CLANG_VERSION_CHECK(9,0,0) && \ + (!defined(__apple_build_version__) || ((__apple_build_version__ < 11000000) || (__apple_build_version__ >= 12000000))) + #define SIMDE_REQUIRE_CONSTANT(arg) HEDLEY_REQUIRE_MSG(SIMDE_CHECK_CONSTANT_(arg), "`" #arg "' must be constant") + #else + #define SIMDE_REQUIRE_CONSTANT(arg) + #endif +#else + #define SIMDE_REQUIRE_CONSTANT(arg) +#endif + +#define SIMDE_REQUIRE_RANGE(arg, min, max) \ + HEDLEY_REQUIRE_MSG((((arg) >= (min)) && ((arg) <= (max))), "'" #arg "' must be in [" #min ", " #max "]") + +#define SIMDE_REQUIRE_CONSTANT_RANGE(arg, min, max) \ + SIMDE_REQUIRE_CONSTANT(arg) \ + SIMDE_REQUIRE_RANGE(arg, min, max) + +/* A copy of HEDLEY_STATIC_ASSERT, except we don't define an empty + * fallback if we can't find an implementation; instead we have to + * check if SIMDE_STATIC_ASSERT is defined before using it. */ +#if \ + !defined(__cplusplus) && ( \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + HEDLEY_HAS_FEATURE(c_static_assert) || \ + HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + defined(_Static_assert) \ + ) + /* Sometimes _Static_assert is defined (in cdefs.h) using a symbol which + * starts with a double-underscore. This is a system header so we have no + * control over it, but since it's a macro it will emit a diagnostic which + * prevents compilation with -Werror. */ + #if HEDLEY_HAS_WARNING("-Wreserved-identifier") + #define SIMDE_STATIC_ASSERT(expr, message) (__extension__({ \ + HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wreserved-identifier\"") \ + _Static_assert(expr, message); \ + HEDLEY_DIAGNOSTIC_POP \ + })) + #else + #define SIMDE_STATIC_ASSERT(expr, message) _Static_assert(expr, message) + #endif +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + HEDLEY_MSVC_VERSION_CHECK(16,0,0) + #define SIMDE_STATIC_ASSERT(expr, message) HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) +#endif + +/* Statement exprs */ +#if \ + HEDLEY_GNUC_VERSION_CHECK(2,95,0) || \ + HEDLEY_TINYC_VERSION_CHECK(0,9,26) || \ + HEDLEY_INTEL_VERSION_CHECK(9,0,0) || \ + HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ + HEDLEY_SUNPRO_VERSION_CHECK(5,12,0) || \ + HEDLEY_IBM_VERSION_CHECK(11,1,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define SIMDE_STATEMENT_EXPR_(expr) (__extension__ expr) +#endif + +/* This is just a convenience macro to make it easy to call a single + * function with a specific diagnostic disabled. */ +#if defined(SIMDE_STATEMENT_EXPR_) + #define SIMDE_DISABLE_DIAGNOSTIC_EXPR_(diagnostic, expr) \ + SIMDE_STATEMENT_EXPR_(({ \ + HEDLEY_DIAGNOSTIC_PUSH \ + diagnostic \ + (expr); \ + HEDLEY_DIAGNOSTIC_POP \ + })) +#endif + +#if defined(SIMDE_CHECK_CONSTANT_) && defined(SIMDE_STATIC_ASSERT) + #define SIMDE_ASSERT_CONSTANT_(v) SIMDE_STATIC_ASSERT(SIMDE_CHECK_CONSTANT_(v), #v " must be constant.") +#endif + +#if \ + (HEDLEY_HAS_ATTRIBUTE(may_alias) && !defined(HEDLEY_SUNPRO_VERSION)) || \ + HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_IBM_VERSION_CHECK(13,1,0) +# define SIMDE_MAY_ALIAS __attribute__((__may_alias__)) +#else +# define SIMDE_MAY_ALIAS +#endif + +/* Lots of compilers support GCC-style vector extensions, but many + don't support all the features. Define different macros depending + on support for + + * SIMDE_VECTOR - Declaring a vector. + * SIMDE_VECTOR_OPS - basic operations (binary and unary). + * SIMDE_VECTOR_NEGATE - negating a vector + * SIMDE_VECTOR_SCALAR - For binary operators, the second argument + can be a scalar, in which case the result is as if that scalar + had been broadcast to all lanes of a vector. + * SIMDE_VECTOR_SUBSCRIPT - Supports array subscript notation for + extracting/inserting a single element.= + + SIMDE_VECTOR can be assumed if any others are defined, the + others are independent. */ +#if !defined(SIMDE_NO_VECTOR) +# if \ + HEDLEY_GCC_VERSION_CHECK(4,8,0) +# define SIMDE_VECTOR(size) __attribute__((__vector_size__(size))) +# define SIMDE_VECTOR_OPS +# define SIMDE_VECTOR_NEGATE +# define SIMDE_VECTOR_SCALAR +# define SIMDE_VECTOR_SUBSCRIPT +# elif HEDLEY_INTEL_VERSION_CHECK(16,0,0) +# define SIMDE_VECTOR(size) __attribute__((__vector_size__(size))) +# define SIMDE_VECTOR_OPS +# define SIMDE_VECTOR_NEGATE +/* ICC only supports SIMDE_VECTOR_SCALAR for constants */ +# define SIMDE_VECTOR_SUBSCRIPT +# elif \ + HEDLEY_GCC_VERSION_CHECK(4,1,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define SIMDE_VECTOR(size) __attribute__((__vector_size__(size))) +# define SIMDE_VECTOR_OPS +# elif HEDLEY_SUNPRO_VERSION_CHECK(5,12,0) +# define SIMDE_VECTOR(size) __attribute__((__vector_size__(size))) +# elif HEDLEY_HAS_ATTRIBUTE(vector_size) +# define SIMDE_VECTOR(size) __attribute__((__vector_size__(size))) +# define SIMDE_VECTOR_OPS +# define SIMDE_VECTOR_NEGATE +# define SIMDE_VECTOR_SUBSCRIPT +# if SIMDE_DETECT_CLANG_VERSION_CHECK(5,0,0) +# define SIMDE_VECTOR_SCALAR +# endif +# endif + +/* GCC and clang have built-in functions to handle shuffling and + converting of vectors, but the implementations are slightly + different. This macro is just an abstraction over them. Note that + elem_size is in bits but vec_size is in bytes. */ +# if !defined(SIMDE_NO_SHUFFLE_VECTOR) && defined(SIMDE_VECTOR_SUBSCRIPT) + HEDLEY_DIAGNOSTIC_PUSH + /* We don't care about -Wvariadic-macros; all compilers that support + * shufflevector/shuffle support them. */ +# if HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") +# pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +# endif +# if HEDLEY_HAS_WARNING("-Wvariadic-macros") || HEDLEY_GCC_VERSION_CHECK(4,0,0) +# pragma GCC diagnostic ignored "-Wvariadic-macros" +# endif + +# if HEDLEY_HAS_BUILTIN(__builtin_shufflevector) +# define SIMDE_SHUFFLE_VECTOR_(elem_size, vec_size, a, b, ...) __builtin_shufflevector(a, b, __VA_ARGS__) +# elif HEDLEY_GCC_HAS_BUILTIN(__builtin_shuffle,4,7,0) && !defined(__INTEL_COMPILER) +# define SIMDE_SHUFFLE_VECTOR_(elem_size, vec_size, a, b, ...) (__extension__ ({ \ + int##elem_size##_t SIMDE_VECTOR(vec_size) simde_shuffle_ = { __VA_ARGS__ }; \ + __builtin_shuffle(a, b, simde_shuffle_); \ + })) +# endif + HEDLEY_DIAGNOSTIC_POP +# endif + +/* TODO: this actually works on XL C/C++ without SIMDE_VECTOR_SUBSCRIPT + but the code needs to be refactored a bit to take advantage. */ +# if !defined(SIMDE_NO_CONVERT_VECTOR) && defined(SIMDE_VECTOR_SUBSCRIPT) +# if HEDLEY_HAS_BUILTIN(__builtin_convertvector) || HEDLEY_GCC_VERSION_CHECK(9,0,0) +# if HEDLEY_GCC_VERSION_CHECK(9,0,0) && !HEDLEY_GCC_VERSION_CHECK(9,3,0) + /* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93557 */ +# define SIMDE_CONVERT_VECTOR_(to, from) ((to) = (__extension__({ \ + __typeof__(from) from_ = (from); \ + ((void) from_); \ + __builtin_convertvector(from_, __typeof__(to)); \ + }))) +# else +# define SIMDE_CONVERT_VECTOR_(to, from) ((to) = __builtin_convertvector((from), __typeof__(to))) +# endif +# endif +# endif +#endif + +/* Since we currently require SUBSCRIPT before using a vector in a + union, we define these as dependencies of SUBSCRIPT. They are + likely to disappear in the future, once SIMDe learns how to make + use of vectors without using the union members. Do not use them + in your code unless you're okay with it breaking when SIMDe + changes. */ +#if defined(SIMDE_VECTOR_SUBSCRIPT) +# if defined(SIMDE_VECTOR_OPS) +# define SIMDE_VECTOR_SUBSCRIPT_OPS +# endif +# if defined(SIMDE_VECTOR_SCALAR) +# define SIMDE_VECTOR_SUBSCRIPT_SCALAR +# endif +#endif + +#if !defined(SIMDE_DISABLE_OPENMP) + #if !defined(SIMDE_ENABLE_OPENMP) && ((defined(_OPENMP) && (_OPENMP >= 201307L)) || (defined(_OPENMP_SIMD) && (_OPENMP_SIMD >= 201307L))) || defined(HEDLEY_MCST_LCC_VERSION) + #define SIMDE_ENABLE_OPENMP + #endif +#endif + +#if !defined(SIMDE_ENABLE_CILKPLUS) && (defined(__cilk) || defined(HEDLEY_INTEL_VERSION)) +# define SIMDE_ENABLE_CILKPLUS +#endif + +#if defined(SIMDE_ENABLE_OPENMP) +# define SIMDE_VECTORIZE HEDLEY_PRAGMA(omp simd) +# define SIMDE_VECTORIZE_SAFELEN(l) HEDLEY_PRAGMA(omp simd safelen(l)) +# if defined(__clang__) +# define SIMDE_VECTORIZE_REDUCTION(r) \ + HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wsign-conversion\"") \ + HEDLEY_PRAGMA(omp simd reduction(r)) \ + HEDLEY_DIAGNOSTIC_POP +# else +# define SIMDE_VECTORIZE_REDUCTION(r) HEDLEY_PRAGMA(omp simd reduction(r)) +# endif +# if !defined(HEDLEY_MCST_LCC_VERSION) +# define SIMDE_VECTORIZE_ALIGNED(a) HEDLEY_PRAGMA(omp simd aligned(a)) +# else +# define SIMDE_VECTORIZE_ALIGNED(a) HEDLEY_PRAGMA(omp simd) +# endif +#elif defined(SIMDE_ENABLE_CILKPLUS) +# define SIMDE_VECTORIZE HEDLEY_PRAGMA(simd) +# define SIMDE_VECTORIZE_SAFELEN(l) HEDLEY_PRAGMA(simd vectorlength(l)) +# define SIMDE_VECTORIZE_REDUCTION(r) HEDLEY_PRAGMA(simd reduction(r)) +# define SIMDE_VECTORIZE_ALIGNED(a) HEDLEY_PRAGMA(simd aligned(a)) +#elif defined(__clang__) && !defined(HEDLEY_IBM_VERSION) +# define SIMDE_VECTORIZE HEDLEY_PRAGMA(clang loop vectorize(enable)) +# define SIMDE_VECTORIZE_SAFELEN(l) HEDLEY_PRAGMA(clang loop vectorize_width(l)) +# define SIMDE_VECTORIZE_REDUCTION(r) SIMDE_VECTORIZE +# define SIMDE_VECTORIZE_ALIGNED(a) +#elif HEDLEY_GCC_VERSION_CHECK(4,9,0) +# define SIMDE_VECTORIZE HEDLEY_PRAGMA(GCC ivdep) +# define SIMDE_VECTORIZE_SAFELEN(l) SIMDE_VECTORIZE +# define SIMDE_VECTORIZE_REDUCTION(r) SIMDE_VECTORIZE +# define SIMDE_VECTORIZE_ALIGNED(a) +#elif HEDLEY_CRAY_VERSION_CHECK(5,0,0) +# define SIMDE_VECTORIZE HEDLEY_PRAGMA(_CRI ivdep) +# define SIMDE_VECTORIZE_SAFELEN(l) SIMDE_VECTORIZE +# define SIMDE_VECTORIZE_REDUCTION(r) SIMDE_VECTORIZE +# define SIMDE_VECTORIZE_ALIGNED(a) +#else +# define SIMDE_VECTORIZE +# define SIMDE_VECTORIZE_SAFELEN(l) +# define SIMDE_VECTORIZE_REDUCTION(r) +# define SIMDE_VECTORIZE_ALIGNED(a) +#endif + +#define SIMDE_MASK_NZ_(v, mask) (((v) & (mask)) | !((v) & (mask))) + +/* Intended for checking coverage, you should never use this in + production. */ +#if defined(SIMDE_NO_INLINE) +# define SIMDE_FUNCTION_ATTRIBUTES HEDLEY_NEVER_INLINE static +#else +# define SIMDE_FUNCTION_ATTRIBUTES HEDLEY_ALWAYS_INLINE static +#endif + +#if defined(SIMDE_NO_INLINE) +# define SIMDE_HUGE_FUNCTION_ATTRIBUTES HEDLEY_NEVER_INLINE static +#elif defined(SIMDE_CONSTRAINED_COMPILATION) +# define SIMDE_HUGE_FUNCTION_ATTRIBUTES static +#else +# define SIMDE_HUGE_FUNCTION_ATTRIBUTES HEDLEY_ALWAYS_INLINE static +#endif + +#if \ + HEDLEY_HAS_ATTRIBUTE(unused) || \ + HEDLEY_GCC_VERSION_CHECK(2,95,0) +# define SIMDE_FUNCTION_POSSIBLY_UNUSED_ __attribute__((__unused__)) +#else +# define SIMDE_FUNCTION_POSSIBLY_UNUSED_ +#endif + +HEDLEY_DIAGNOSTIC_PUSH +SIMDE_DIAGNOSTIC_DISABLE_USED_BUT_MARKED_UNUSED_ + +#if defined(_MSC_VER) +# define SIMDE_BEGIN_DECLS_ HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(disable:4996 4204)) HEDLEY_BEGIN_C_DECLS +# define SIMDE_END_DECLS_ HEDLEY_DIAGNOSTIC_POP HEDLEY_END_C_DECLS +#else +# define SIMDE_BEGIN_DECLS_ \ + HEDLEY_DIAGNOSTIC_PUSH \ + SIMDE_DIAGNOSTIC_DISABLE_USED_BUT_MARKED_UNUSED_ \ + HEDLEY_BEGIN_C_DECLS +# define SIMDE_END_DECLS_ \ + HEDLEY_END_C_DECLS \ + HEDLEY_DIAGNOSTIC_POP +#endif + +#if defined(__SIZEOF_INT128__) +# define SIMDE_HAVE_INT128_ +HEDLEY_DIAGNOSTIC_PUSH +SIMDE_DIAGNOSTIC_DISABLE_PEDANTIC_ +typedef __int128 simde_int128; +typedef unsigned __int128 simde_uint128; +HEDLEY_DIAGNOSTIC_POP +#endif + +#if !defined(SIMDE_ENDIAN_LITTLE) +# define SIMDE_ENDIAN_LITTLE 1234 +#endif +#if !defined(SIMDE_ENDIAN_BIG) +# define SIMDE_ENDIAN_BIG 4321 +#endif + +#if !defined(SIMDE_ENDIAN_ORDER) +/* GCC (and compilers masquerading as GCC) define __BYTE_ORDER__. */ +# if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +# define SIMDE_ENDIAN_ORDER SIMDE_ENDIAN_LITTLE +# elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +# define SIMDE_ENDIAN_ORDER SIMDE_ENDIAN_BIG +/* TI defines _BIG_ENDIAN or _LITTLE_ENDIAN */ +# elif defined(_BIG_ENDIAN) +# define SIMDE_ENDIAN_ORDER SIMDE_ENDIAN_BIG +# elif defined(_LITTLE_ENDIAN) +# define SIMDE_ENDIAN_ORDER SIMDE_ENDIAN_LITTLE +/* We know the endianness of some common architectures. Common + * architectures not listed (ARM, POWER, MIPS, etc.) here are + * bi-endian. */ +# elif defined(__amd64) || defined(_M_X64) || defined(__i386) || defined(_M_IX86) +# define SIMDE_ENDIAN_ORDER SIMDE_ENDIAN_LITTLE +# elif defined(__s390x__) || defined(__zarch__) +# define SIMDE_ENDIAN_ORDER SIMDE_ENDIAN_BIG +/* Looks like we'll have to rely on the platform. If we're missing a + * platform, please let us know. */ +# elif defined(_WIN32) +# define SIMDE_ENDIAN_ORDER SIMDE_ENDIAN_LITTLE +# elif defined(sun) || defined(__sun) /* Solaris */ +# include +# if defined(_LITTLE_ENDIAN) +# define SIMDE_ENDIAN_ORDER SIMDE_ENDIAN_LITTLE +# elif defined(_BIG_ENDIAN) +# define SIMDE_ENDIAN_ORDER SIMDE_ENDIAN_BIG +# endif +# elif defined(__APPLE__) +# include +# if defined(__LITTLE_ENDIAN__) +# define SIMDE_ENDIAN_ORDER SIMDE_ENDIAN_LITTLE +# elif defined(__BIG_ENDIAN__) +# define SIMDE_ENDIAN_ORDER SIMDE_ENDIAN_BIG +# endif +# elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__) || defined(BSD) +# include +# if defined(__BYTE_ORDER) && (__BYTE_ORDER == __LITTLE_ENDIAN) +# define SIMDE_ENDIAN_ORDER SIMDE_ENDIAN_LITTLE +# elif defined(__BYTE_ORDER) && (__BYTE_ORDER == __BIG_ENDIAN) +# define SIMDE_ENDIAN_ORDER SIMDE_ENDIAN_BIG +# endif +# elif defined(__linux__) || defined(__linux) || defined(__gnu_linux__) +# include +# if defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && (__BYTE_ORDER == __LITTLE_ENDIAN) +# define SIMDE_ENDIAN_ORDER SIMDE_ENDIAN_LITTLE +# elif defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && (__BYTE_ORDER == __BIG_ENDIAN) +# define SIMDE_ENDIAN_ORDER SIMDE_ENDIAN_BIG +# endif +# endif +#endif + +#if \ + HEDLEY_HAS_BUILTIN(__builtin_bswap64) || \ + HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ + HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define simde_bswap64(v) __builtin_bswap64(v) +#elif HEDLEY_MSVC_VERSION_CHECK(13,10,0) + #define simde_bswap64(v) _byteswap_uint64(v) +#else + SIMDE_FUNCTION_ATTRIBUTES + uint64_t + simde_bswap64(uint64_t v) { + return + ((v & (((uint64_t) 0xff) << 56)) >> 56) | + ((v & (((uint64_t) 0xff) << 48)) >> 40) | + ((v & (((uint64_t) 0xff) << 40)) >> 24) | + ((v & (((uint64_t) 0xff) << 32)) >> 8) | + ((v & (((uint64_t) 0xff) << 24)) << 8) | + ((v & (((uint64_t) 0xff) << 16)) << 24) | + ((v & (((uint64_t) 0xff) << 8)) << 40) | + ((v & (((uint64_t) 0xff) )) << 56); + } +#endif + +#if !defined(SIMDE_ENDIAN_ORDER) +# error Unknown byte order; please file a bug +#else +# if SIMDE_ENDIAN_ORDER == SIMDE_ENDIAN_LITTLE +# define simde_endian_bswap64_be(value) simde_bswap64(value) +# define simde_endian_bswap64_le(value) (value) +# elif SIMDE_ENDIAN_ORDER == SIMDE_ENDIAN_BIG +# define simde_endian_bswap64_be(value) (value) +# define simde_endian_bswap64_le(value) simde_bswap64(value) +# endif +#endif + +/* TODO: we should at least make an attempt to detect the correct + types for simde_float32/float64 instead of just assuming float and + double. */ + +#if !defined(SIMDE_FLOAT32_TYPE) +# define SIMDE_FLOAT32_TYPE float +# define SIMDE_FLOAT32_C(value) value##f +#else +# define SIMDE_FLOAT32_C(value) ((SIMDE_FLOAT32_TYPE) value) +#endif +typedef SIMDE_FLOAT32_TYPE simde_float32; + +#if !defined(SIMDE_FLOAT64_TYPE) +# define SIMDE_FLOAT64_TYPE double +# define SIMDE_FLOAT64_C(value) value +#else +# define SIMDE_FLOAT64_C(value) ((SIMDE_FLOAT64_TYPE) value) +#endif +typedef SIMDE_FLOAT64_TYPE simde_float64; + +#if defined(SIMDE_POLY8_TYPE) +# undef SIMDE_POLY8_TYPE +#endif +#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) +# define SIMDE_POLY8_TYPE poly8_t +# define SIMDE_POLY8_C(value) (HEDLEY_STATIC_CAST(poly8_t, value)) +#else +# define SIMDE_POLY8_TYPE uint8_t +# define SIMDE_POLY8_C(value) (HEDLEY_STATIC_CAST(uint8_t, value)) +#endif +typedef SIMDE_POLY8_TYPE simde_poly8; + +#if defined(SIMDE_POLY16_TYPE) +# undef SIMDE_POLY16_TYPE +#endif +#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) +# define SIMDE_POLY16_TYPE poly16_t +# define SIMDE_POLY16_C(value) (HEDLEY_STATIC_CAST(poly16_t, value)) +#else +# define SIMDE_POLY16_TYPE uint16_t +# define SIMDE_POLY16_C(value) (HEDLEY_STATIC_CAST(uint16_t, value)) +#endif +typedef SIMDE_POLY16_TYPE simde_poly16; + +#if defined(SIMDE_POLY64_TYPE) +# undef SIMDE_POLY64_TYPE +#endif +#if defined(SIMDE_ARM_NEON_A32V8_NATIVE) +# define SIMDE_POLY64_TYPE poly64_t +# define SIMDE_POLY64_C(value) (HEDLEY_STATIC_CAST(poly64_t, value ## ull)) +#else +# define SIMDE_POLY64_TYPE uint64_t +# define SIMDE_POLY64_C(value) value ## ull +#endif +typedef SIMDE_POLY64_TYPE simde_poly64; + +#if defined(SIMDE_POLY128_TYPE) +# undef SIMDE_POLY128_TYPE +#endif +#if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(SIMDE_ARCH_ARM_CRYPTO) +# define SIMDE_POLY128_TYPE poly128_t +# define SIMDE_POLY128_C(value) value +#elif defined(__SIZEOF_INT128__) +# define SIMDE_POLY128_TYPE __int128 +# define SIMDE_POLY128_C(value) (HEDLEY_STATIC_CAST(__int128, value)) +#else +# define SIMDE_POLY128_TYPE uint64_t +# define SIMDE_TARGET_NOT_SUPPORT_INT128_TYPE 1 +#endif +typedef SIMDE_POLY128_TYPE simde_poly128; + +#if defined(__cplusplus) + typedef bool simde_bool; +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) + typedef _Bool simde_bool; +#elif defined(bool) + typedef bool simde_bool; +#else + #include + typedef bool simde_bool; +#endif + +#if HEDLEY_HAS_WARNING("-Wbad-function-cast") +# define SIMDE_CONVERT_FTOI(T,v) \ + HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wbad-function-cast\"") \ + HEDLEY_STATIC_CAST(T, (v)) \ + HEDLEY_DIAGNOSTIC_POP +#else +# define SIMDE_CONVERT_FTOI(T,v) ((T) (v)) +#endif + +/* TODO: detect compilers which support this outside of C11 mode */ +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) + #define SIMDE_CHECKED_REINTERPRET_CAST(to, from, value) _Generic((value), to: (value), default: (_Generic((value), from: ((to) (value))))) + #define SIMDE_CHECKED_STATIC_CAST(to, from, value) _Generic((value), to: (value), default: (_Generic((value), from: ((to) (value))))) +#else + #define SIMDE_CHECKED_REINTERPRET_CAST(to, from, value) HEDLEY_REINTERPRET_CAST(to, value) + #define SIMDE_CHECKED_STATIC_CAST(to, from, value) HEDLEY_STATIC_CAST(to, value) +#endif + +#if HEDLEY_HAS_WARNING("-Wfloat-equal") +# define SIMDE_DIAGNOSTIC_DISABLE_FLOAT_EQUAL _Pragma("clang diagnostic ignored \"-Wfloat-equal\"") +#elif HEDLEY_GCC_VERSION_CHECK(3,0,0) +# define SIMDE_DIAGNOSTIC_DISABLE_FLOAT_EQUAL _Pragma("GCC diagnostic ignored \"-Wfloat-equal\"") +#else +# define SIMDE_DIAGNOSTIC_DISABLE_FLOAT_EQUAL +#endif + +/* Some functions can trade accuracy for speed. For those functions + you can control the trade-off using this macro. Possible values: + + 0: prefer speed + 1: reasonable trade-offs + 2: prefer accuracy */ +#if !defined(SIMDE_ACCURACY_PREFERENCE) +# define SIMDE_ACCURACY_PREFERENCE 1 +#endif + +#if defined(__STDC_HOSTED__) +# define SIMDE_STDC_HOSTED __STDC_HOSTED__ +#else +# if \ + defined(HEDLEY_PGI_VERSION) || \ + defined(HEDLEY_MSVC_VERSION) +# define SIMDE_STDC_HOSTED 1 +# else +# define SIMDE_STDC_HOSTED 0 +# endif +#endif + +/* Try to deal with environments without a standard library. */ +#if !defined(simde_memcpy) + #if HEDLEY_HAS_BUILTIN(__builtin_memcpy) + #define simde_memcpy(dest, src, n) __builtin_memcpy(dest, src, n) + #endif +#endif +#if !defined(simde_memset) + #if HEDLEY_HAS_BUILTIN(__builtin_memset) + #define simde_memset(s, c, n) __builtin_memset(s, c, n) + #endif +#endif +#if !defined(simde_memcmp) + #if HEDLEY_HAS_BUILTIN(__builtin_memcmp) + #define simde_memcmp(s1, s2, n) __builtin_memcmp(s1, s2, n) + #endif +#endif + +#if !defined(simde_memcpy) || !defined(simde_memset) || !defined(simde_memcmp) + #if !defined(SIMDE_NO_STRING_H) + #if defined(__has_include) + #if !__has_include() + #define SIMDE_NO_STRING_H + #endif + #elif (SIMDE_STDC_HOSTED == 0) + #define SIMDE_NO_STRING_H + #endif + #endif + + #if !defined(SIMDE_NO_STRING_H) + #include + #if !defined(simde_memcpy) + #define simde_memcpy(dest, src, n) memcpy(dest, src, n) + #endif + #if !defined(simde_memset) + #define simde_memset(s, c, n) memset(s, c, n) + #endif + #if !defined(simde_memcmp) + #define simde_memcmp(s1, s2, n) memcmp(s1, s2, n) + #endif + #else + /* These are meant to be portable, not fast. If you're hitting them you + * should think about providing your own (by defining the simde_memcpy + * macro prior to including any SIMDe files) or submitting a patch to + * SIMDe so we can detect your system-provided memcpy/memset, like by + * adding your compiler to the checks for __builtin_memcpy and/or + * __builtin_memset. */ + #if !defined(simde_memcpy) + SIMDE_FUNCTION_ATTRIBUTES + void + simde_memcpy_(void* dest, const void* src, size_t len) { + char* dest_ = HEDLEY_STATIC_CAST(char*, dest); + char* src_ = HEDLEY_STATIC_CAST(const char*, src); + for (size_t i = 0 ; i < len ; i++) { + dest_[i] = src_[i]; + } + } + #define simde_memcpy(dest, src, n) simde_memcpy_(dest, src, n) + #endif + + #if !defined(simde_memset) + SIMDE_FUNCTION_ATTRIBUTES + void + simde_memset_(void* s, int c, size_t len) { + char* s_ = HEDLEY_STATIC_CAST(char*, s); + char c_ = HEDLEY_STATIC_CAST(char, c); + for (size_t i = 0 ; i < len ; i++) { + s_[i] = c_[i]; + } + } + #define simde_memset(s, c, n) simde_memset_(s, c, n) + #endif + + #if !defined(simde_memcmp) + SIMDE_FUCTION_ATTRIBUTES + int + simde_memcmp_(const void *s1, const void *s2, size_t n) { + unsigned char* s1_ = HEDLEY_STATIC_CAST(unsigned char*, s1); + unsigned char* s2_ = HEDLEY_STATIC_CAST(unsigned char*, s2); + for (size_t i = 0 ; i < len ; i++) { + if (s1_[i] != s2_[i]) { + return (int) (s1_[i] - s2_[i]); + } + } + return 0; + } + #define simde_memcmp(s1, s2, n) simde_memcmp_(s1, s2, n) + #endif + #endif +#endif + +/*** Functions that quiet a signaling NaN ***/ + +static HEDLEY_INLINE +double +simde_math_quiet(double x) { + uint64_t tmp, mask; + if (!simde_math_isnan(x)) { + return x; + } + simde_memcpy(&tmp, &x, 8); + mask = 0x7ff80000; + mask <<= 32; + tmp |= mask; + simde_memcpy(&x, &tmp, 8); + return x; +} + +static HEDLEY_INLINE +float +simde_math_quietf(float x) { + uint32_t tmp; + if (!simde_math_isnanf(x)) { + return x; + } + simde_memcpy(&tmp, &x, 4); + tmp |= 0x7fc00000lu; + simde_memcpy(&x, &tmp, 4); + return x; +} + +#if defined(FE_ALL_EXCEPT) + #define SIMDE_HAVE_FENV_H +#elif defined(__has_include) + #if __has_include() + #include + #define SIMDE_HAVE_FENV_H + #endif +#elif SIMDE_STDC_HOSTED == 1 + #include + #define SIMDE_HAVE_FENV_H +#endif + +#if defined(EXIT_FAILURE) + #define SIMDE_HAVE_STDLIB_H +#elif defined(__has_include) + #if __has_include() + #include + #define SIMDE_HAVE_STDLIB_H + #endif +#elif SIMDE_STDC_HOSTED == 1 + #include + #define SIMDE_HAVE_STDLIB_H +#endif + +#if defined(__has_include) +# if defined(__cplusplus) && (__cplusplus >= 201103L) && __has_include() +# include +# elif __has_include() +# include +# endif +# if __has_include() +# include +# endif +#elif SIMDE_STDC_HOSTED == 1 +# include +# include +#endif + +#define SIMDE_DEFINE_CONVERSION_FUNCTION_(Name, T_To, T_From) \ + static HEDLEY_ALWAYS_INLINE HEDLEY_CONST SIMDE_FUNCTION_POSSIBLY_UNUSED_ \ + T_To \ + Name (T_From value) { \ + T_To r; \ + simde_memcpy(&r, &value, sizeof(r)); \ + return r; \ + } + +SIMDE_DEFINE_CONVERSION_FUNCTION_(simde_float32_as_uint32, uint32_t, simde_float32) +SIMDE_DEFINE_CONVERSION_FUNCTION_(simde_uint32_as_float32, simde_float32, uint32_t) +SIMDE_DEFINE_CONVERSION_FUNCTION_(simde_float64_as_uint64, uint64_t, simde_float64) +SIMDE_DEFINE_CONVERSION_FUNCTION_(simde_uint64_as_float64, simde_float64, uint64_t) + +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* :: Begin simde/check.h :: */ +/* Check (assertions) + * Portable Snippets - https://github.com/nemequ/portable-snippets + * Created by Evan Nemerson + * + * To the extent possible under law, the authors have waived all + * copyright and related or neighboring rights to this code. For + * details, see the Creative Commons Zero 1.0 Universal license at + * https://creativecommons.org/publicdomain/zero/1.0/ + * + * SPDX-License-Identifier: CC0-1.0 + */ + +#if !defined(SIMDE_CHECK_H) +#define SIMDE_CHECK_H + +#if !defined(SIMDE_NDEBUG) && !defined(SIMDE_DEBUG) +# define SIMDE_NDEBUG 1 +#endif + +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +#include + +#if !defined(_WIN32) +# define SIMDE_SIZE_MODIFIER "z" +# define SIMDE_CHAR_MODIFIER "hh" +# define SIMDE_SHORT_MODIFIER "h" +#else +# if defined(_M_X64) || defined(__amd64__) +# define SIMDE_SIZE_MODIFIER "I64" +# else +# define SIMDE_SIZE_MODIFIER "" +# endif +# define SIMDE_CHAR_MODIFIER "" +# define SIMDE_SHORT_MODIFIER "" +#endif + +#if defined(_MSC_VER) && (_MSC_VER >= 1500) +# define SIMDE_PUSH_DISABLE_MSVC_C4127_ __pragma(warning(push)) __pragma(warning(disable:4127)) +# define SIMDE_POP_DISABLE_MSVC_C4127_ __pragma(warning(pop)) +#else +# define SIMDE_PUSH_DISABLE_MSVC_C4127_ +# define SIMDE_POP_DISABLE_MSVC_C4127_ +#endif + +#if !defined(simde_errorf) +# if defined(__has_include) +# if __has_include() +# include +# endif +# elif defined(SIMDE_STDC_HOSTED) +# if SIMDE_STDC_HOSTED == 1 +# include +# endif +# elif defined(__STDC_HOSTED__) +# if __STDC_HOSTETD__ == 1 +# include +# endif +# endif + +/* AUTOMATICALLY GENERATED FILE, DO NOT MODIFY */ +/* 71fd833d9666141edcd1d3c109a80e228303d8d7 */ +/* :: Begin simde/debug-trap.h :: */ +/* Debugging assertions and traps + * Portable Snippets - https://github.com/nemequ/portable-snippets + * Created by Evan Nemerson + * + * To the extent possible under law, the authors have waived all + * copyright and related or neighboring rights to this code. For + * details, see the Creative Commons Zero 1.0 Universal license at + * https://creativecommons.org/publicdomain/zero/1.0/ + * + * SPDX-License-Identifier: CC0-1.0 + */ + +#if !defined(SIMDE_DEBUG_TRAP_H) +#define SIMDE_DEBUG_TRAP_H + +#if !defined(SIMDE_NDEBUG) && defined(NDEBUG) && !defined(SIMDE_DEBUG) +# define SIMDE_NDEBUG 1 +#endif + +#if defined(__has_builtin) && !defined(__ibmxl__) +# if __has_builtin(__builtin_debugtrap) +# define simde_trap() __builtin_debugtrap() +# elif __has_builtin(__debugbreak) +# define simde_trap() __debugbreak() +# endif +#endif +#if !defined(simde_trap) +# if defined(_MSC_VER) || defined(__INTEL_COMPILER) +# define simde_trap() __debugbreak() +# elif defined(__ARMCC_VERSION) +# define simde_trap() __breakpoint(42) +# elif defined(__ibmxl__) || defined(__xlC__) +# include +# define simde_trap() __trap(42) +# elif defined(__DMC__) && defined(_M_IX86) + static inline void simde_trap(void) { __asm int 3h; } +# elif defined(__i386__) || defined(__x86_64__) + static inline void simde_trap(void) { __asm__ __volatile__("int $03"); } +# elif defined(__thumb__) + static inline void simde_trap(void) { __asm__ __volatile__(".inst 0xde01"); } +# elif defined(__aarch64__) + static inline void simde_trap(void) { __asm__ __volatile__(".inst 0xd4200000"); } +# elif defined(__arm__) + static inline void simde_trap(void) { __asm__ __volatile__(".inst 0xe7f001f0"); } +# elif defined (__alpha__) && !defined(__osf__) + static inline void simde_trap(void) { __asm__ __volatile__("bpt"); } +# elif defined(_54_) + static inline void simde_trap(void) { __asm__ __volatile__("ESTOP"); } +# elif defined(_55_) + static inline void simde_trap(void) { __asm__ __volatile__(";\n .if (.MNEMONIC)\n ESTOP_1\n .else\n ESTOP_1()\n .endif\n NOP"); } +# elif defined(_64P_) + static inline void simde_trap(void) { __asm__ __volatile__("SWBP 0"); } +# elif defined(_6x_) + static inline void simde_trap(void) { __asm__ __volatile__("NOP\n .word 0x10000000"); } +# elif defined(__STDC_HOSTED__) && (__STDC_HOSTED__ == 0) && defined(__GNUC__) +# define simde_trap() __builtin_trap() +# else +# include +# if defined(SIGTRAP) +# define simde_trap() raise(SIGTRAP) +# else +# define simde_trap() raise(SIGABRT) +# endif +# endif +#endif + +#if defined(HEDLEY_LIKELY) +# define SIMDE_DBG_LIKELY(expr) HEDLEY_LIKELY(expr) +#elif defined(__GNUC__) && (__GNUC__ >= 3) +# define SIMDE_DBG_LIKELY(expr) __builtin_expect(!!(expr), 1) +#else +# define SIMDE_DBG_LIKELY(expr) (!!(expr)) +#endif + +#if !defined(SIMDE_NDEBUG) || (SIMDE_NDEBUG == 0) +# define simde_dbg_assert(expr) do { \ + if (!SIMDE_DBG_LIKELY(expr)) { \ + simde_trap(); \ + } \ + } while (0) +#else +# define simde_dbg_assert(expr) +#endif + +#endif /* !defined(SIMDE_DEBUG_TRAP_H) */ +/* :: End simde/debug-trap.h :: */ + + HEDLEY_DIAGNOSTIC_PUSH + SIMDE_DIAGNOSTIC_DISABLE_VARIADIC_MACROS_ +# if defined(EOF) +# define simde_errorf(format, ...) (fprintf(stderr, format, __VA_ARGS__), abort()) +# else +# define simde_errorf(format, ...) (simde_trap()) +# endif + HEDLEY_DIAGNOSTIC_POP +#endif + +#define simde_error(msg) simde_errorf("%s", msg) + +#if defined(SIMDE_NDEBUG) || \ + (defined(__cplusplus) && (__cplusplus < 201103L)) || \ + (defined(__STDC__) && (__STDC__ < 199901L)) +# if defined(SIMDE_CHECK_FAIL_DEFINED) +# define simde_assert(expr) +# else +# if defined(HEDLEY_ASSUME) +# define simde_assert(expr) HEDLEY_ASSUME(expr) +# elif HEDLEY_GCC_VERSION_CHECK(4,5,0) +# define simde_assert(expr) ((void) (!!(expr) ? 1 : (__builtin_unreachable(), 1))) +# elif HEDLEY_MSVC_VERSION_CHECK(13,10,0) +# define simde_assert(expr) __assume(expr) +# else +# define simde_assert(expr) +# endif +# endif +# define simde_assert_true(expr) simde_assert(expr) +# define simde_assert_false(expr) simde_assert(!(expr)) +# define simde_assert_type_full(prefix, suffix, T, fmt, a, op, b) simde_assert(((a) op (b))) +# define simde_assert_double_equal(a, b, precision) +# define simde_assert_string_equal(a, b) +# define simde_assert_string_not_equal(a, b) +# define simde_assert_memory_equal(size, a, b) +# define simde_assert_memory_not_equal(size, a, b) +#else +# define simde_assert(expr) \ + do { \ + if (!HEDLEY_LIKELY(expr)) { \ + simde_error("assertion failed: " #expr "\n"); \ + } \ + SIMDE_PUSH_DISABLE_MSVC_C4127_ \ + } while (0) \ + SIMDE_POP_DISABLE_MSVC_C4127_ + +# define simde_assert_true(expr) \ + do { \ + if (!HEDLEY_LIKELY(expr)) { \ + simde_error("assertion failed: " #expr " is not true\n"); \ + } \ + SIMDE_PUSH_DISABLE_MSVC_C4127_ \ + } while (0) \ + SIMDE_POP_DISABLE_MSVC_C4127_ + +# define simde_assert_false(expr) \ + do { \ + if (!HEDLEY_LIKELY(!(expr))) { \ + simde_error("assertion failed: " #expr " is not false\n"); \ + } \ + SIMDE_PUSH_DISABLE_MSVC_C4127_ \ + } while (0) \ + SIMDE_POP_DISABLE_MSVC_C4127_ + +# define simde_assert_type_full(prefix, suffix, T, fmt, a, op, b) \ + do { \ + T simde_tmp_a_ = (a); \ + T simde_tmp_b_ = (b); \ + if (!(simde_tmp_a_ op simde_tmp_b_)) { \ + simde_errorf("assertion failed: %s %s %s (" prefix "%" fmt suffix " %s " prefix "%" fmt suffix ")\n", \ + #a, #op, #b, simde_tmp_a_, #op, simde_tmp_b_); \ + } \ + SIMDE_PUSH_DISABLE_MSVC_C4127_ \ + } while (0) \ + SIMDE_POP_DISABLE_MSVC_C4127_ + +# define simde_assert_double_equal(a, b, precision) \ + do { \ + const double simde_tmp_a_ = (a); \ + const double simde_tmp_b_ = (b); \ + const double simde_tmp_diff_ = ((simde_tmp_a_ - simde_tmp_b_) < 0) ? \ + -(simde_tmp_a_ - simde_tmp_b_) : \ + (simde_tmp_a_ - simde_tmp_b_); \ + if (HEDLEY_UNLIKELY(simde_tmp_diff_ > 1e-##precision)) { \ + simde_errorf("assertion failed: %s == %s (%0." #precision "g == %0." #precision "g)\n", \ + #a, #b, simde_tmp_a_, simde_tmp_b_); \ + } \ + SIMDE_PUSH_DISABLE_MSVC_C4127_ \ + } while (0) \ + SIMDE_POP_DISABLE_MSVC_C4127_ + +# include +# define simde_assert_string_equal(a, b) \ + do { \ + const char* simde_tmp_a_ = a; \ + const char* simde_tmp_b_ = b; \ + if (HEDLEY_UNLIKELY(strcmp(simde_tmp_a_, simde_tmp_b_) != 0)) { \ + simde_errorf("assertion failed: string %s == %s (\"%s\" == \"%s\")\n", \ + #a, #b, simde_tmp_a_, simde_tmp_b_); \ + } \ + SIMDE_PUSH_DISABLE_MSVC_C4127_ \ + } while (0) \ + SIMDE_POP_DISABLE_MSVC_C4127_ + +# define simde_assert_string_not_equal(a, b) \ + do { \ + const char* simde_tmp_a_ = a; \ + const char* simde_tmp_b_ = b; \ + if (HEDLEY_UNLIKELY(strcmp(simde_tmp_a_, simde_tmp_b_) == 0)) { \ + simde_errorf("assertion failed: string %s != %s (\"%s\" == \"%s\")\n", \ + #a, #b, simde_tmp_a_, simde_tmp_b_); \ + } \ + SIMDE_PUSH_DISABLE_MSVC_C4127_ \ + } while (0) \ + SIMDE_POP_DISABLE_MSVC_C4127_ + +# define simde_assert_memory_equal(size, a, b) \ + do { \ + const unsigned char* simde_tmp_a_ = (const unsigned char*) (a); \ + const unsigned char* simde_tmp_b_ = (const unsigned char*) (b); \ + const size_t simde_tmp_size_ = (size); \ + if (HEDLEY_UNLIKELY(memcmp(simde_tmp_a_, simde_tmp_b_, simde_tmp_size_)) != 0) { \ + size_t simde_tmp_pos_; \ + for (simde_tmp_pos_ = 0 ; simde_tmp_pos_ < simde_tmp_size_ ; simde_tmp_pos_++) { \ + if (simde_tmp_a_[simde_tmp_pos_] != simde_tmp_b_[simde_tmp_pos_]) { \ + simde_errorf("assertion failed: memory %s == %s, at offset %" SIMDE_SIZE_MODIFIER "u\n", \ + #a, #b, simde_tmp_pos_); \ + break; \ + } \ + } \ + } \ + SIMDE_PUSH_DISABLE_MSVC_C4127_ \ + } while (0) \ + SIMDE_POP_DISABLE_MSVC_C4127_ + +# define simde_assert_memory_not_equal(size, a, b) \ + do { \ + const unsigned char* simde_tmp_a_ = (const unsigned char*) (a); \ + const unsigned char* simde_tmp_b_ = (const unsigned char*) (b); \ + const size_t simde_tmp_size_ = (size); \ + if (HEDLEY_UNLIKELY(memcmp(simde_tmp_a_, simde_tmp_b_, simde_tmp_size_)) == 0) { \ + simde_errorf("assertion failed: memory %s != %s (%" SIMDE_SIZE_MODIFIER "u bytes)\n", \ + #a, #b, simde_tmp_size_); \ + } \ + SIMDE_PUSH_DISABLE_MSVC_C4127_ \ + } while (0) \ + SIMDE_POP_DISABLE_MSVC_C4127_ +#endif + +#define simde_assert_type(T, fmt, a, op, b) \ + simde_assert_type_full("", "", T, fmt, a, op, b) + +#define simde_assert_char(a, op, b) \ + simde_assert_type_full("'\\x", "'", char, "02" SIMDE_CHAR_MODIFIER "x", a, op, b) +#define simde_assert_uchar(a, op, b) \ + simde_assert_type_full("'\\x", "'", unsigned char, "02" SIMDE_CHAR_MODIFIER "x", a, op, b) +#define simde_assert_short(a, op, b) \ + simde_assert_type(short, SIMDE_SHORT_MODIFIER "d", a, op, b) +#define simde_assert_ushort(a, op, b) \ + simde_assert_type(unsigned short, SIMDE_SHORT_MODIFIER "u", a, op, b) +#define simde_assert_int(a, op, b) \ + simde_assert_type(int, "d", a, op, b) +#define simde_assert_uint(a, op, b) \ + simde_assert_type(unsigned int, "u", a, op, b) +#define simde_assert_long(a, op, b) \ + simde_assert_type(long int, "ld", a, op, b) +#define simde_assert_ulong(a, op, b) \ + simde_assert_type(unsigned long int, "lu", a, op, b) +#define simde_assert_llong(a, op, b) \ + simde_assert_type(long long int, "lld", a, op, b) +#define simde_assert_ullong(a, op, b) \ + simde_assert_type(unsigned long long int, "llu", a, op, b) + +#define simde_assert_size(a, op, b) \ + simde_assert_type(size_t, SIMDE_SIZE_MODIFIER "u", a, op, b) + +#define simde_assert_float(a, op, b) \ + simde_assert_type(float, "f", a, op, b) +#define simde_assert_double(a, op, b) \ + simde_assert_type(double, "g", a, op, b) +#define simde_assert_ptr(a, op, b) \ + simde_assert_type(const void*, "p", a, op, b) + +#define simde_assert_int8(a, op, b) \ + simde_assert_type(int8_t, PRIi8, a, op, b) +#define simde_assert_uint8(a, op, b) \ + simde_assert_type(uint8_t, PRIu8, a, op, b) +#define simde_assert_int16(a, op, b) \ + simde_assert_type(int16_t, PRIi16, a, op, b) +#define simde_assert_uint16(a, op, b) \ + simde_assert_type(uint16_t, PRIu16, a, op, b) +#define simde_assert_int32(a, op, b) \ + simde_assert_type(int32_t, PRIi32, a, op, b) +#define simde_assert_uint32(a, op, b) \ + simde_assert_type(uint32_t, PRIu32, a, op, b) +#define simde_assert_int64(a, op, b) \ + simde_assert_type(int64_t, PRIi64, a, op, b) +#define simde_assert_uint64(a, op, b) \ + simde_assert_type(uint64_t, PRIu64, a, op, b) + +#define simde_assert_ptr_equal(a, b) \ + simde_assert_ptr(a, ==, b) +#define simde_assert_ptr_not_equal(a, b) \ + simde_assert_ptr(a, !=, b) +#define simde_assert_null(ptr) \ + simde_assert_ptr(ptr, ==, NULL) +#define simde_assert_not_null(ptr) \ + simde_assert_ptr(ptr, !=, NULL) +#define simde_assert_ptr_null(ptr) \ + simde_assert_ptr(ptr, ==, NULL) +#define simde_assert_ptr_not_null(ptr) \ + simde_assert_ptr(ptr, !=, NULL) + +#endif /* !defined(SIMDE_CHECK_H) */ +/* :: End simde/check.h :: */ + +/* GCC/clang have a bunch of functionality in builtins which we would + * like to access, but the suffixes indicate whether the operate on + * int, long, or long long, not fixed width types (e.g., int32_t). + * we use these macros to attempt to map from fixed-width to the + * names GCC uses. Note that you should still cast the input(s) and + * return values (to/from SIMDE_BUILTIN_TYPE_*_) since often even if + * types are the same size they may not be compatible according to the + * compiler. For example, on x86 long and long lonsg are generally + * both 64 bits, but platforms vary on whether an int64_t is mapped + * to a long or long long. */ + +#include + +HEDLEY_DIAGNOSTIC_PUSH +SIMDE_DIAGNOSTIC_DISABLE_CPP98_COMPAT_PEDANTIC_ + +#if (INT8_MAX == INT_MAX) && (INT8_MIN == INT_MIN) + #define SIMDE_BUILTIN_SUFFIX_8_ + #define SIMDE_BUILTIN_TYPE_8_ int +#elif (INT8_MAX == LONG_MAX) && (INT8_MIN == LONG_MIN) + #define SIMDE_BUILTIN_SUFFIX_8_ l + #define SIMDE_BUILTIN_TYPE_8_ long +#elif (INT8_MAX == LLONG_MAX) && (INT8_MIN == LLONG_MIN) + #define SIMDE_BUILTIN_SUFFIX_8_ ll + #define SIMDE_BUILTIN_TYPE_8_ long long +#endif + +#if (INT16_MAX == INT_MAX) && (INT16_MIN == INT_MIN) + #define SIMDE_BUILTIN_SUFFIX_16_ + #define SIMDE_BUILTIN_TYPE_16_ int +#elif (INT16_MAX == LONG_MAX) && (INT16_MIN == LONG_MIN) + #define SIMDE_BUILTIN_SUFFIX_16_ l + #define SIMDE_BUILTIN_TYPE_16_ long +#elif (INT16_MAX == LLONG_MAX) && (INT16_MIN == LLONG_MIN) + #define SIMDE_BUILTIN_SUFFIX_16_ ll + #define SIMDE_BUILTIN_TYPE_16_ long long +#endif + +#if (INT32_MAX == INT_MAX) && (INT32_MIN == INT_MIN) + #define SIMDE_BUILTIN_SUFFIX_32_ + #define SIMDE_BUILTIN_TYPE_32_ int +#elif (INT32_MAX == LONG_MAX) && (INT32_MIN == LONG_MIN) + #define SIMDE_BUILTIN_SUFFIX_32_ l + #define SIMDE_BUILTIN_TYPE_32_ long +#elif (INT32_MAX == LLONG_MAX) && (INT32_MIN == LLONG_MIN) + #define SIMDE_BUILTIN_SUFFIX_32_ ll + #define SIMDE_BUILTIN_TYPE_32_ long long +#endif + +#if (INT64_MAX == INT_MAX) && (INT64_MIN == INT_MIN) + #define SIMDE_BUILTIN_SUFFIX_64_ + #define SIMDE_BUILTIN_TYPE_64_ int +#elif (INT64_MAX == LONG_MAX) && (INT64_MIN == LONG_MIN) + #define SIMDE_BUILTIN_SUFFIX_64_ l + #define SIMDE_BUILTIN_TYPE_64_ long +#elif (INT64_MAX == LLONG_MAX) && (INT64_MIN == LLONG_MIN) + #define SIMDE_BUILTIN_SUFFIX_64_ ll + #define SIMDE_BUILTIN_TYPE_64_ long long +#endif + +/* SIMDE_DIAGNOSTIC_DISABLE_CPP98_COMPAT_PEDANTIC_ */ +HEDLEY_DIAGNOSTIC_POP + +#if defined(SIMDE_BUILTIN_SUFFIX_8_) + #define SIMDE_BUILTIN_8_(name) HEDLEY_CONCAT3(__builtin_, name, SIMDE_BUILTIN_SUFFIX_8_) + #define SIMDE_BUILTIN_HAS_8_(name) HEDLEY_HAS_BUILTIN(HEDLEY_CONCAT3(__builtin_, name, SIMDE_BUILTIN_SUFFIX_8_)) +#else + #define SIMDE_BUILTIN_HAS_8_(name) 0 +#endif +#if defined(SIMDE_BUILTIN_SUFFIX_16_) + #define SIMDE_BUILTIN_16_(name) HEDLEY_CONCAT3(__builtin_, name, SIMDE_BUILTIN_SUFFIX_16_) + #define SIMDE_BUILTIN_HAS_16_(name) HEDLEY_HAS_BUILTIN(HEDLEY_CONCAT3(__builtin_, name, SIMDE_BUILTIN_SUFFIX_16_)) +#else + #define SIMDE_BUILTIN_HAS_16_(name) 0 +#endif +#if defined(SIMDE_BUILTIN_SUFFIX_32_) + #define SIMDE_BUILTIN_32_(name) HEDLEY_CONCAT3(__builtin_, name, SIMDE_BUILTIN_SUFFIX_32_) + #define SIMDE_BUILTIN_HAS_32_(name) HEDLEY_HAS_BUILTIN(HEDLEY_CONCAT3(__builtin_, name, SIMDE_BUILTIN_SUFFIX_32_)) +#else + #define SIMDE_BUILTIN_HAS_32_(name) 0 +#endif +#if defined(SIMDE_BUILTIN_SUFFIX_64_) + #define SIMDE_BUILTIN_64_(name) HEDLEY_CONCAT3(__builtin_, name, SIMDE_BUILTIN_SUFFIX_64_) + #define SIMDE_BUILTIN_HAS_64_(name) HEDLEY_HAS_BUILTIN(HEDLEY_CONCAT3(__builtin_, name, SIMDE_BUILTIN_SUFFIX_64_)) +#else + #define SIMDE_BUILTIN_HAS_64_(name) 0 +#endif + +#if !defined(__cplusplus) + #if defined(__clang__) + #if HEDLEY_HAS_WARNING("-Wc11-extensions") + #define SIMDE_GENERIC_(...) (__extension__ ({ \ + HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc11-extensions\"") \ + _Generic(__VA_ARGS__); \ + HEDLEY_DIAGNOSTIC_POP \ + })) + #elif HEDLEY_HAS_WARNING("-Wc1x-extensions") + #define SIMDE_GENERIC_(...) (__extension__ ({ \ + HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc1x-extensions\"") \ + _Generic(__VA_ARGS__); \ + HEDLEY_DIAGNOSTIC_POP \ + })) + #endif + #elif \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) || \ + HEDLEY_HAS_EXTENSION(c_generic_selections) || \ + HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ + HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + HEDLEY_ARM_VERSION_CHECK(5,3,0) + #define SIMDE_GENERIC_(...) _Generic(__VA_ARGS__) + #endif +#endif + +/* Sometimes we run into problems with specific versions of compilers + which make the native versions unusable for us. Often this is due + to missing functions, sometimes buggy implementations, etc. These + macros are how we check for specific bugs. As they are fixed we'll + start only defining them for problematic compiler versions. */ + +#if !defined(SIMDE_IGNORE_COMPILER_BUGS) +# if defined(HEDLEY_GCC_VERSION) +# if !HEDLEY_GCC_VERSION_CHECK(4,9,0) +# define SIMDE_BUG_GCC_REV_208793 +# endif +# if !HEDLEY_GCC_VERSION_CHECK(5,0,0) +# define SIMDE_BUG_GCC_BAD_MM_SRA_EPI32 /* TODO: find relevant bug or commit */ +# endif +# if !HEDLEY_GCC_VERSION_CHECK(6,0,0) +# define SIMDE_BUG_GCC_SIZEOF_IMMEDIATE +# endif +# if !HEDLEY_GCC_VERSION_CHECK(4,6,0) +# define SIMDE_BUG_GCC_BAD_MM_EXTRACT_EPI8 /* TODO: find relevant bug or commit */ +# endif +# if !HEDLEY_GCC_VERSION_CHECK(7,4,0) || (HEDLEY_GCC_VERSION_CHECK(8,0,0) && !HEDLEY_GCC_VERSION_CHECK(8,3,0)) +# define SIMDE_BUG_GCC_87467 +# endif +# if !HEDLEY_GCC_VERSION_CHECK(8,0,0) +# define SIMDE_BUG_GCC_REV_247851 +# endif +# if !HEDLEY_GCC_VERSION_CHECK(10,0,0) +# define SIMDE_BUG_GCC_REV_274313 +# define SIMDE_BUG_GCC_91341 +# define SIMDE_BUG_GCC_92035 +# endif +# if !HEDLEY_GCC_VERSION_CHECK(9,0,0) && defined(SIMDE_ARCH_AARCH64) +# define SIMDE_BUG_GCC_ARM_SHIFT_SCALAR +# endif +# if !HEDLEY_GCC_VERSION_CHECK(9,0,0) && defined(SIMDE_ARCH_AARCH64) +# define SIMDE_BUG_GCC_BAD_VEXT_REV32 +# endif +# if !(HEDLEY_GCC_VERSION_CHECK(9,4,0) \ + || (HEDLEY_GCC_VERSION_CHECK(8,5,0) && !HEDLEY_GCC_VERSION_CHECK(9,0,0)) \ + ) && defined(SIMDE_ARCH_X86) && !defined(SIMDE_ARCH_AMD64) +# define SIMDE_BUG_GCC_94482 +# endif +# if (defined(SIMDE_ARCH_X86) && !defined(SIMDE_ARCH_AMD64)) || defined(SIMDE_ARCH_ZARCH) +# define SIMDE_BUG_GCC_53784 +# endif +# if defined(SIMDE_ARCH_X86) || defined(SIMDE_ARCH_AMD64) +# if HEDLEY_GCC_VERSION_CHECK(4,3,0) /* -Wsign-conversion */ +# define SIMDE_BUG_GCC_95144 +# endif +# if !HEDLEY_GCC_VERSION_CHECK(11,2,0) +# define SIMDE_BUG_GCC_95483 +# endif +# if defined(__OPTIMIZE__) +# define SIMDE_BUG_GCC_100927 +# endif +# if !(HEDLEY_GCC_VERSION_CHECK(10,3,0)) +# define SIMDE_BUG_GCC_98521 +# endif +# endif +# if !HEDLEY_GCC_VERSION_CHECK(9,4,0) && defined(SIMDE_ARCH_AARCH64) +# define SIMDE_BUG_GCC_94488 +# endif +# if !HEDLEY_GCC_VERSION_CHECK(9,1,0) && defined(SIMDE_ARCH_AARCH64) +# define SIMDE_BUG_GCC_REV_264019 +# endif +# if (!HEDLEY_GCC_VERSION_CHECK(9,0,0) && !defined(SIMDE_ARCH_AARCH64)) || (!defined(SIMDE_ARCH_AARCH64) && defined(SIMDE_ARCH_ARM)) +# define SIMDE_BUG_GCC_REV_260989 +# endif +# if defined(SIMDE_ARCH_ARM) && !defined(SIMDE_ARCH_AARCH64) +# define SIMDE_BUG_GCC_95399 +# define SIMDE_BUG_GCC_95471 +# define SIMDE_BUG_GCC_111609 +# if SIMDE_ARCH_ARM_CHECK(8,0) +# define SIMDE_BUG_GCC_113065 +# endif +# endif +# if defined(SIMDE_ARCH_POWER) +# define SIMDE_BUG_GCC_95227 +# define SIMDE_BUG_GCC_95782 +# if !HEDLEY_GCC_VERSION_CHECK(12,0,0) +# define SIMDE_BUG_VEC_CPSGN_REVERSED_ARGS +# endif +# endif +# if defined(SIMDE_ARCH_X86) || defined(SIMDE_ARCH_AMD64) +# if !HEDLEY_GCC_VERSION_CHECK(10,2,0) && !defined(__OPTIMIZE__) +# define SIMDE_BUG_GCC_96174 +# endif +# endif +# if defined(SIMDE_ARCH_ZARCH) +# define SIMDE_BUG_GCC_95782 +# if HEDLEY_GCC_VERSION_CHECK(10,0,0) +# define SIMDE_BUG_GCC_101614 +# endif +# endif +# if defined(SIMDE_ARCH_MIPS_MSA) +# define SIMDE_BUG_GCC_97248 +# if !HEDLEY_GCC_VERSION_CHECK(12,1,0) +# define SIMDE_BUG_GCC_100760 +# define SIMDE_BUG_GCC_100761 +# define SIMDE_BUG_GCC_100762 +# endif +# endif +# if !defined(__OPTIMIZE__) && !(\ + HEDLEY_GCC_VERSION_CHECK(11,4,0) \ + || (HEDLEY_GCC_VERSION_CHECK(10,4,0) && !(HEDLEY_GCC_VERSION_CHECK(11,0,0))) \ + || (HEDLEY_GCC_VERSION_CHECK(9,5,0) && !(HEDLEY_GCC_VERSION_CHECK(10,0,0)))) +# define SIMDE_BUG_GCC_105339 +# endif +# elif defined(__clang__) +# if defined(SIMDE_ARCH_AARCH64) +# define SIMDE_BUG_CLANG_48257 // https://github.com/llvm/llvm-project/issues/47601 +# define SIMDE_BUG_CLANG_71362 // https://github.com/llvm/llvm-project/issues/71362 +# define SIMDE_BUG_CLANG_71365 // https://github.com/llvm/llvm-project/issues/71365 +# define SIMDE_BUG_CLANG_71751 // https://github.com/llvm/llvm-project/issues/71751 +# if !SIMDE_DETECT_CLANG_VERSION_CHECK(15,0,0) +# define SIMDE_BUG_CLANG_45541 +# endif +# if !SIMDE_DETECT_CLANG_VERSION_CHECK(12,0,0) +# define SIMDE_BUG_CLANG_46840 +# define SIMDE_BUG_CLANG_46844 +# endif +# if SIMDE_DETECT_CLANG_VERSION_CHECK(10,0,0) && SIMDE_DETECT_CLANG_VERSION_NOT(11,0,0) +# define SIMDE_BUG_CLANG_BAD_VI64_OPS +# endif +# if SIMDE_DETECT_CLANG_VERSION_NOT(9,0,0) +# define SIMDE_BUG_CLANG_GIT_4EC445B8 +# define SIMDE_BUG_CLANG_REV_365298 /* 0464e07c8f6e3310c28eb210a4513bc2243c2a7e */ +# endif +# endif +# if defined(SIMDE_ARCH_ARM) +# if !SIMDE_DETECT_CLANG_VERSION_CHECK(11,0,0) +# define SIMDE_BUG_CLANG_BAD_VGET_SET_LANE_TYPES +# endif +# if defined(SIMDE_ARM_NEON_A32V7_NATIVE) && !defined(SIMDE_ARM_NEON_A32V8_NATIVE) +# define SIMDE_BUG_CLANG_71763 // https://github.com/llvm/llvm-project/issues/71763 +# endif +# endif +# if defined(SIMDE_ARCH_POWER) && !SIMDE_DETECT_CLANG_VERSION_CHECK(12,0,0) +# define SIMDE_BUG_CLANG_46770 +# endif +# if defined(SIMDE_ARCH_POWER) && (SIMDE_ARCH_POWER == 700) && (SIMDE_DETECT_CLANG_VERSION_CHECK(11,0,0)) +# if !SIMDE_DETECT_CLANG_VERSION_CHECK(13,0,0) +# define SIMDE_BUG_CLANG_50893 +# define SIMDE_BUG_CLANG_50901 +# endif +# endif +# if defined(_ARCH_PWR9) && !SIMDE_DETECT_CLANG_VERSION_CHECK(12,0,0) && !defined(__OPTIMIZE__) +# define SIMDE_BUG_CLANG_POWER9_16x4_BAD_SHIFT +# endif +# if defined(SIMDE_ARCH_POWER) +# if !SIMDE_DETECT_CLANG_VERSION_CHECK(14,0,0) +# define SIMDE_BUG_CLANG_50932 +# endif +# if !SIMDE_DETECT_CLANG_VERSION_CHECK(12,0,0) +# define SIMDE_BUG_VEC_CPSGN_REVERSED_ARGS +# endif +# endif +# if defined(SIMDE_ARCH_X86) || defined(SIMDE_ARCH_AMD64) +# if SIMDE_DETECT_CLANG_VERSION_NOT(5,0,0) +# define SIMDE_BUG_CLANG_REV_298042 /* 6afc436a7817a52e78ae7bcdc3faafd460124cac */ +# endif +# if SIMDE_DETECT_CLANG_VERSION_NOT(3,7,0) +# define SIMDE_BUG_CLANG_REV_234560 /* b929ad7b1726a32650a8051f69a747fb6836c540 */ +# endif +# if SIMDE_DETECT_CLANG_VERSION_CHECK(3,8,0) && SIMDE_DETECT_CLANG_VERSION_NOT(5,0,0) +# define SIMDE_BUG_CLANG_BAD_MADD +# endif +# if SIMDE_DETECT_CLANG_VERSION_CHECK(4,0,0) && SIMDE_DETECT_CLANG_VERSION_NOT(5,0,0) +# define SIMDE_BUG_CLANG_REV_299346 /* ac9959eb533a58482ea4da6c4db1e635a98de384 */ +# endif +# if SIMDE_DETECT_CLANG_VERSION_NOT(8,0,0) +# define SIMDE_BUG_CLANG_REV_344862 /* eae26bf73715994c2bd145f9b6dc3836aa4ffd4f */ +# endif +# if HEDLEY_HAS_WARNING("-Wsign-conversion") && SIMDE_DETECT_CLANG_VERSION_NOT(11,0,0) +# define SIMDE_BUG_CLANG_45931 +# endif +# if HEDLEY_HAS_WARNING("-Wvector-conversion") && SIMDE_DETECT_CLANG_VERSION_NOT(11,0,0) +# define SIMDE_BUG_CLANG_44589 +# endif +# define SIMDE_BUG_CLANG_48673 // https://github.com/llvm/llvm-project/issues/48017 +# endif +# define SIMDE_BUG_CLANG_45959 // https://github.com/llvm/llvm-project/issues/45304 +# if defined(SIMDE_ARCH_WASM_SIMD128) && !SIMDE_DETECT_CLANG_VERSION_CHECK(17,0,0) +# define SIMDE_BUG_CLANG_60655 +# endif +# elif defined(HEDLEY_MSVC_VERSION) +# if defined(SIMDE_ARCH_X86) +# define SIMDE_BUG_MSVC_ROUND_EXTRACT +# endif +# elif defined(HEDLEY_INTEL_VERSION) +# define SIMDE_BUG_INTEL_857088 +# elif defined(HEDLEY_MCST_LCC_VERSION) +# define SIMDE_BUG_MCST_LCC_MISSING_AVX_LOAD_STORE_M128_FUNCS +# define SIMDE_BUG_MCST_LCC_MISSING_CMOV_M256 +# define SIMDE_BUG_MCST_LCC_FMA_WRONG_RESULT +# elif defined(HEDLEY_PGI_VERSION) +# define SIMDE_BUG_PGI_30104 +# define SIMDE_BUG_PGI_30107 +# define SIMDE_BUG_PGI_30106 +# endif +#endif + +/* GCC and Clang both have the same issue: + * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95144 + * https://bugs.llvm.org/show_bug.cgi?id=45931 + * This is just an easy way to work around it. + */ +#if \ + (HEDLEY_HAS_WARNING("-Wsign-conversion") && SIMDE_DETECT_CLANG_VERSION_NOT(11,0,0)) || \ + HEDLEY_GCC_VERSION_CHECK(4,3,0) +# define SIMDE_BUG_IGNORE_SIGN_CONVERSION(expr) (__extension__ ({ \ + HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("GCC diagnostic ignored \"-Wsign-conversion\"") \ + __typeof__(expr) simde_bug_ignore_sign_conversion_v_= (expr); \ + HEDLEY_DIAGNOSTIC_POP \ + simde_bug_ignore_sign_conversion_v_; \ + })) +#else +# define SIMDE_BUG_IGNORE_SIGN_CONVERSION(expr) (expr) +#endif + +/* Usually the shift count is signed (for example, NEON or SSE). + * OTOH, unsigned is good for PPC (vec_srl uses unsigned), and the only option for E2K. + * Further info: https://github.com/simd-everywhere/simde/pull/700 + */ +#if defined(SIMDE_ARCH_E2K) || defined(SIMDE_ARCH_POWER) + #define SIMDE_CAST_VECTOR_SHIFT_COUNT(width, value) HEDLEY_STATIC_CAST(uint##width##_t, (value)) +#else + #define SIMDE_CAST_VECTOR_SHIFT_COUNT(width, value) HEDLEY_STATIC_CAST(int##width##_t, (value)) +#endif + +/* Initial support for RISCV V extensions based on ZVE64D. */ +#if defined(SIMDE_ARCH_RISCV_ZVE64D) && SIMDE_NATURAL_VECTOR_SIZE >= 64 + #define RVV_FIXED_TYPE_DEF(name, lmul) \ + typedef vint8##name##_t fixed_vint8##name##_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen * lmul))); \ + typedef vint16##name##_t fixed_vint16##name##_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen * lmul))); \ + typedef vint32##name##_t fixed_vint32##name##_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen * lmul))); \ + typedef vuint8##name##_t fixed_vuint8##name##_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen * lmul))); \ + typedef vuint16##name##_t fixed_vuint16##name##_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen * lmul))); \ + typedef vuint32##name##_t fixed_vuint32##name##_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen * lmul))); \ + typedef vfloat32##name##_t fixed_vfloat32##name##_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen * lmul))); + RVV_FIXED_TYPE_DEF(mf2, 1/2); + RVV_FIXED_TYPE_DEF(m1, 1); + RVV_FIXED_TYPE_DEF(m2, 2); + #define RVV_FIXED_TYPE_DEF_64B(name, lmul) \ + typedef vint64##name##_t fixed_vint64##name##_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen * lmul))); \ + typedef vuint64##name##_t fixed_vuint64##name##_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen * lmul))); \ + typedef vfloat64##name##_t fixed_vfloat64##name##_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen * lmul))); + RVV_FIXED_TYPE_DEF_64B(m1, 1); + RVV_FIXED_TYPE_DEF_64B(m2, 2); + #if defined(SIMDE_ARCH_RISCV_ZVFH) + #define RVV_FIXED_TYPE_DEF_16F(name, lmul) \ + typedef vfloat16##name##_t fixed_vfloat16##name##_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen * lmul))); + RVV_FIXED_TYPE_DEF_16F(mf2, 1/2); + RVV_FIXED_TYPE_DEF_16F(m1, 1); + RVV_FIXED_TYPE_DEF_16F(m2, 2); + #endif +#endif + +/* SIMDE_DIAGNOSTIC_DISABLE_USED_BUT_MARKED_UNUSED_ */ +HEDLEY_DIAGNOSTIC_POP + +#endif /* !defined(SIMDE_COMMON_H) */ +/* :: End simde/simde-common.h :: */ + +HEDLEY_DIAGNOSTIC_PUSH +SIMDE_DISABLE_UNWANTED_DIAGNOSTICS +SIMDE_BEGIN_DECLS_ + +typedef union { + #if defined(SIMDE_VECTOR_SUBSCRIPT) + SIMDE_ALIGN_TO_16 int8_t i8 SIMDE_VECTOR(16) SIMDE_MAY_ALIAS; + SIMDE_ALIGN_TO_16 int16_t i16 SIMDE_VECTOR(16) SIMDE_MAY_ALIAS; + SIMDE_ALIGN_TO_16 int32_t i32 SIMDE_VECTOR(16) SIMDE_MAY_ALIAS; + SIMDE_ALIGN_TO_16 int64_t i64 SIMDE_VECTOR(16) SIMDE_MAY_ALIAS; + SIMDE_ALIGN_TO_16 uint8_t u8 SIMDE_VECTOR(16) SIMDE_MAY_ALIAS; + SIMDE_ALIGN_TO_16 uint16_t u16 SIMDE_VECTOR(16) SIMDE_MAY_ALIAS; + SIMDE_ALIGN_TO_16 uint32_t u32 SIMDE_VECTOR(16) SIMDE_MAY_ALIAS; + SIMDE_ALIGN_TO_16 uint64_t u64 SIMDE_VECTOR(16) SIMDE_MAY_ALIAS; + #if defined(SIMDE_HAVE_INT128_) + SIMDE_ALIGN_TO_16 simde_int128 i128 SIMDE_VECTOR(16) SIMDE_MAY_ALIAS; + SIMDE_ALIGN_TO_16 simde_uint128 u128 SIMDE_VECTOR(16) SIMDE_MAY_ALIAS; + #endif + SIMDE_ALIGN_TO_16 simde_float32 f32 SIMDE_VECTOR(16) SIMDE_MAY_ALIAS; + SIMDE_ALIGN_TO_16 simde_float64 f64 SIMDE_VECTOR(16) SIMDE_MAY_ALIAS; + SIMDE_ALIGN_TO_16 int_fast32_t i32f SIMDE_VECTOR(16) SIMDE_MAY_ALIAS; + SIMDE_ALIGN_TO_16 uint_fast32_t u32f SIMDE_VECTOR(16) SIMDE_MAY_ALIAS; + #else + SIMDE_ALIGN_TO_16 int8_t i8[16]; + SIMDE_ALIGN_TO_16 int16_t i16[8]; + SIMDE_ALIGN_TO_16 int32_t i32[4]; + SIMDE_ALIGN_TO_16 int64_t i64[2]; + SIMDE_ALIGN_TO_16 uint8_t u8[16]; + SIMDE_ALIGN_TO_16 uint16_t u16[8]; + SIMDE_ALIGN_TO_16 uint32_t u32[4]; + SIMDE_ALIGN_TO_16 uint64_t u64[2]; + #if defined(SIMDE_HAVE_INT128_) + SIMDE_ALIGN_TO_16 simde_int128 i128[1]; + SIMDE_ALIGN_TO_16 simde_uint128 u128[1]; + #endif + SIMDE_ALIGN_TO_16 simde_float32 f32[4]; + SIMDE_ALIGN_TO_16 simde_float64 f64[2]; + SIMDE_ALIGN_TO_16 int_fast32_t i32f[16 / sizeof(int_fast32_t)]; + SIMDE_ALIGN_TO_16 uint_fast32_t u32f[16 / sizeof(uint_fast32_t)]; + #endif + + #if defined(SIMDE_X86_SSE_NATIVE) + SIMDE_ALIGN_TO_16 __m128 sse_m128; + #if defined(SIMDE_X86_SSE2_NATIVE) + SIMDE_ALIGN_TO_16 __m128i sse_m128i; + SIMDE_ALIGN_TO_16 __m128d sse_m128d; + #endif + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + SIMDE_ALIGN_TO_16 int8x16_t neon_i8; + SIMDE_ALIGN_TO_16 int16x8_t neon_i16; + SIMDE_ALIGN_TO_16 int32x4_t neon_i32; + SIMDE_ALIGN_TO_16 int64x2_t neon_i64; + SIMDE_ALIGN_TO_16 uint8x16_t neon_u8; + SIMDE_ALIGN_TO_16 uint16x8_t neon_u16; + SIMDE_ALIGN_TO_16 uint32x4_t neon_u32; + SIMDE_ALIGN_TO_16 uint64x2_t neon_u64; + SIMDE_ALIGN_TO_16 float32x4_t neon_f32; + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + SIMDE_ALIGN_TO_16 float64x2_t neon_f64; + #endif + #elif defined(SIMDE_WASM_SIMD128_NATIVE) + SIMDE_ALIGN_TO_16 v128_t wasm_v128; + #elif defined(SIMDE_MIPS_MSA_NATIVE) + SIMDE_ALIGN_TO_16 v16i8 msa_v16i8; + SIMDE_ALIGN_TO_16 v8i16 msa_v8i16; + SIMDE_ALIGN_TO_16 v4i32 msa_v4i32; + SIMDE_ALIGN_TO_16 v2i64 msa_v2i64; + SIMDE_ALIGN_TO_16 v16u8 msa_v16u8; + SIMDE_ALIGN_TO_16 v8u16 msa_v8u16; + SIMDE_ALIGN_TO_16 v4u32 msa_v4u32; + SIMDE_ALIGN_TO_16 v2u64 msa_v2u64; + SIMDE_ALIGN_TO_16 v4f32 msa_v4f32; + SIMDE_ALIGN_TO_16 v2f64 msa_v2f64; + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + SIMDE_ALIGN_TO_16 SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) altivec_u8; + SIMDE_ALIGN_TO_16 SIMDE_POWER_ALTIVEC_VECTOR(unsigned short) altivec_u16; + SIMDE_ALIGN_TO_16 SIMDE_POWER_ALTIVEC_VECTOR(unsigned int) altivec_u32; + SIMDE_ALIGN_TO_16 SIMDE_POWER_ALTIVEC_VECTOR(signed char) altivec_i8; + SIMDE_ALIGN_TO_16 SIMDE_POWER_ALTIVEC_VECTOR(signed short) altivec_i16; + SIMDE_ALIGN_TO_16 SIMDE_POWER_ALTIVEC_VECTOR(signed int) altivec_i32; + SIMDE_ALIGN_TO_16 SIMDE_POWER_ALTIVEC_VECTOR(float) altivec_f32; + #if defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + SIMDE_ALIGN_TO_16 SIMDE_POWER_ALTIVEC_VECTOR(unsigned long long) altivec_u64; + SIMDE_ALIGN_TO_16 SIMDE_POWER_ALTIVEC_VECTOR(signed long long) altivec_i64; + SIMDE_ALIGN_TO_16 SIMDE_POWER_ALTIVEC_VECTOR(double) altivec_f64; + #endif + #endif +} simde_v128_private; + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + typedef v128_t simde_v128_t; +#elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + typedef int32x4_t simde_v128_t; +#elif defined(SIMDE_X86_SSE2_NATIVE) + typedef __m128i simde_v128_t; +#elif defined(SIMDE_X86_SSE_NATIVE) + typedef __m128 simde_v128_t; +#elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + typedef SIMDE_POWER_ALTIVEC_VECTOR(signed int) simde_v128_t; +#elif defined(SIMDE_MIPS_MSA_NATIVE) + typedef v4i32 simde_v128_t; +#elif defined(SIMDE_VECTOR_SUBSCRIPT) + typedef int32_t simde_v128_t SIMDE_ALIGN_TO_16 SIMDE_VECTOR(16) SIMDE_MAY_ALIAS; +#else + typedef simde_v128_private simde_v128_t; +#endif + +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + typedef simde_v128_t v128_t; +#endif + +HEDLEY_STATIC_ASSERT(16 == sizeof(simde_v128_t), "simde_v128_t size incorrect"); +HEDLEY_STATIC_ASSERT(16 == sizeof(simde_v128_private), "simde_v128_private size incorrect"); +#if defined(SIMDE_CHECK_ALIGNMENT) && defined(SIMDE_ALIGN_OF) +HEDLEY_STATIC_ASSERT(SIMDE_ALIGN_OF(simde_v128_t) == 16, "simde_v128_t is not 16-byte aligned"); +HEDLEY_STATIC_ASSERT(SIMDE_ALIGN_OF(simde_v128_private) == 16, "simde_v128_private is not 16-byte aligned"); +#endif + +#define SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(Other_Type, SIMDe_Type, To_Name, From_Name) \ + SIMDE_FUNCTION_ATTRIBUTES \ + Other_Type To_Name(SIMDe_Type v) { \ + Other_Type r; \ + simde_memcpy(&r, &v, sizeof(r)); \ + return r; \ + } \ + \ + SIMDE_FUNCTION_ATTRIBUTES \ + SIMDe_Type From_Name(Other_Type v) { \ + SIMDe_Type r; \ + simde_memcpy(&r, &v, sizeof(r)); \ + return r; \ + } + +SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(simde_v128_private, simde_v128_t, simde_v128_to_private, simde_v128_from_private) + +#define SIMDE_WASM_SIMD128_FMIN(x, y) \ + (simde_math_isnan(x) ? SIMDE_MATH_NAN \ + : simde_math_isnan(y) ? SIMDE_MATH_NAN \ + : (((x) == 0) && ((y) == 0)) ? (simde_math_signbit(x) ? (x) : (y)) \ + : ((x) < (y) ? (x) : (y))) + +#define SIMDE_WASM_SIMD128_FMAX(x, y) \ + (simde_math_isnan(x) ? SIMDE_MATH_NAN \ + : simde_math_isnan(y) ? SIMDE_MATH_NAN \ + : (((x) == 0) && ((y) == 0)) ? (simde_math_signbit(x) ? (y) : (x)) \ + : ((x) > (y) ? (x) : (y))) + +#define SIMDE_WASM_SIMD128_FMINF(x, y) \ + (simde_math_isnanf(x) ? SIMDE_MATH_NANF \ + : simde_math_isnanf(y) ? SIMDE_MATH_NANF \ + : (((x) == 0) && ((y) == 0)) ? (simde_math_signbit(x) ? (x) : (y)) \ + : ((x) < (y) ? (x) : (y))) + +#define SIMDE_WASM_SIMD128_FMAXF(x, y) \ + (simde_math_isnanf(x) ? SIMDE_MATH_NANF \ + : simde_math_isnanf(y) ? SIMDE_MATH_NANF \ + : (((x) == 0) && ((y) == 0)) ? (simde_math_signbit(x) ? (y) : (x)) \ + : ((x) > (y) ? (x) : (y))) + +#if defined(SIMDE_X86_SSE_NATIVE) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(__m128 , simde_v128_t, simde_v128_to_m128 , simde_v128_from_m128 ) +#endif +#if defined(SIMDE_X86_SSE2_NATIVE) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(__m128i, simde_v128_t, simde_v128_to_m128i, simde_v128_from_m128i) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(__m128d, simde_v128_t, simde_v128_to_m128d, simde_v128_from_m128d) +#endif + +#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS( int8x16_t, simde_v128_t, simde_v128_to_neon_i8 , simde_v128_from_neon_i8 ) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS( int16x8_t, simde_v128_t, simde_v128_to_neon_i16, simde_v128_from_neon_i16) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS( int32x4_t, simde_v128_t, simde_v128_to_neon_i32, simde_v128_from_neon_i32) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS( int64x2_t, simde_v128_t, simde_v128_to_neon_i64, simde_v128_from_neon_i64) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS( uint8x16_t, simde_v128_t, simde_v128_to_neon_u8 , simde_v128_from_neon_u8 ) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS( uint16x8_t, simde_v128_t, simde_v128_to_neon_u16, simde_v128_from_neon_u16) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS( uint32x4_t, simde_v128_t, simde_v128_to_neon_u32, simde_v128_from_neon_u32) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS( uint64x2_t, simde_v128_t, simde_v128_to_neon_u64, simde_v128_from_neon_u64) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(float32x4_t, simde_v128_t, simde_v128_to_neon_f32, simde_v128_from_neon_f32) + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(float64x2_t, simde_v128_t, simde_v128_to_neon_f64, simde_v128_from_neon_f64) + #endif +#endif /* defined(SIMDE_ARM_NEON_A32V7_NATIVE) */ + +#if defined(SIMDE_MIPS_MSA_NATIVE) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(v16i8, simde_v128_t, simde_v128_to_msa_v16i8, simde_v128_from_msa_v16i8) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(v8i16, simde_v128_t, simde_v128_to_msa_v8i16, simde_v128_from_msa_v8i16) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(v4i32, simde_v128_t, simde_v128_to_msa_v4i32, simde_v128_from_msa_v4i32) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(v2i64, simde_v128_t, simde_v128_to_msa_v2i64, simde_v128_from_msa_v2i64) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(v16u8, simde_v128_t, simde_v128_to_msa_v16u8, simde_v128_from_msa_v16u8) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(v8u16, simde_v128_t, simde_v128_to_msa_v8u16, simde_v128_from_msa_v8u16) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(v4u32, simde_v128_t, simde_v128_to_msa_v4u32, simde_v128_from_msa_v4u32) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(v2u64, simde_v128_t, simde_v128_to_msa_v2u64, simde_v128_from_msa_v2u64) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(v4f32, simde_v128_t, simde_v128_to_msa_v4f32, simde_v128_from_msa_v4f32) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(v2f64, simde_v128_t, simde_v128_to_msa_v2f64, simde_v128_from_msa_v2f64) +#endif + +#if defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(SIMDE_POWER_ALTIVEC_VECTOR( signed char), simde_v128_t, simde_v128_to_altivec_i8 , simde_v128_from_altivec_i8 ) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(SIMDE_POWER_ALTIVEC_VECTOR( signed short), simde_v128_t, simde_v128_to_altivec_i16, simde_v128_from_altivec_i16) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(SIMDE_POWER_ALTIVEC_VECTOR( signed int), simde_v128_t, simde_v128_to_altivec_i32, simde_v128_from_altivec_i32) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(SIMDE_POWER_ALTIVEC_VECTOR(unsigned char), simde_v128_t, simde_v128_to_altivec_u8 , simde_v128_from_altivec_u8 ) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(SIMDE_POWER_ALTIVEC_VECTOR(unsigned short), simde_v128_t, simde_v128_to_altivec_u16, simde_v128_from_altivec_u16) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(SIMDE_POWER_ALTIVEC_VECTOR(unsigned int), simde_v128_t, simde_v128_to_altivec_u32, simde_v128_from_altivec_u32) + #if defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(SIMDE_POWER_ALTIVEC_VECTOR( signed long long), simde_v128_t, simde_v128_to_altivec_i64, simde_v128_from_altivec_i64) + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(SIMDE_POWER_ALTIVEC_VECTOR(unsigned long long), simde_v128_t, simde_v128_to_altivec_u64, simde_v128_from_altivec_u64) + #endif + + #if defined(SIMDE_BUG_GCC_95782) + SIMDE_FUNCTION_ATTRIBUTES + SIMDE_POWER_ALTIVEC_VECTOR(float) + simde_v128_to_altivec_f32(simde_v128_t value) { + simde_v128_private r_ = simde_v128_to_private(value); + return r_.altivec_f32; + } + + SIMDE_FUNCTION_ATTRIBUTES + simde_v128_t + simde_v128_from_altivec_f32(SIMDE_POWER_ALTIVEC_VECTOR(float) value) { + simde_v128_private r_; + r_.altivec_f32 = value; + return simde_v128_from_private(r_); + } + #else + SIMDE_WASM_SIMD128_GENERATE_CONVERSION_FUNCTIONS(SIMDE_POWER_ALTIVEC_VECTOR(float), simde_v128_t, simde_v128_to_altivec_f32, simde_v128_from_altivec_f32) + #endif +#endif /* defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) */ + +/* + * Begin function implementations + */ + +/* load */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_load (const void * mem) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_v128_load(mem); + #elif defined(SIMDE_X86_SSE2_NATIVE) + return _mm_loadu_si128(HEDLEY_REINTERPRET_CAST(const __m128i*, mem)); + #else + simde_v128_t r; + simde_memcpy(&r, mem, sizeof(r)); + return r; + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_load(mem) simde_wasm_v128_load((mem)) +#endif + +/* store */ + +SIMDE_FUNCTION_ATTRIBUTES +void +simde_wasm_v128_store (void * mem, simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + wasm_v128_store(mem, a); + #elif defined(SIMDE_X86_SSE2_NATIVE) + _mm_storeu_si128(HEDLEY_REINTERPRET_CAST(__m128i*, mem), a); + #else + simde_memcpy(mem, &a, sizeof(a)); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_store(mem, a) simde_wasm_v128_store((mem), (a)) +#endif + +/* make */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_make ( + int8_t c0, int8_t c1, int8_t c2, int8_t c3, int8_t c4, int8_t c5, int8_t c6, int8_t c7, + int8_t c8, int8_t c9, int8_t c10, int8_t c11, int8_t c12, int8_t c13, int8_t c14, int8_t c15) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return + wasm_i8x16_make( + c0, c1, c2, c3, c4, c5, c6, c7, + c8, c9, c10, c11, c12, c13, c14, c15); + #elif defined(SIMDE_X86_SSE2_NATIVE) + return + _mm_setr_epi8( + c0, c1, c2, c3, c4, c5, c6, c7, + c8, c9, c10, c11, c12, c13, c14, c15); + #else + simde_v128_private r_; + + r_.i8[ 0] = c0; + r_.i8[ 1] = c1; + r_.i8[ 2] = c2; + r_.i8[ 3] = c3; + r_.i8[ 4] = c4; + r_.i8[ 5] = c5; + r_.i8[ 6] = c6; + r_.i8[ 7] = c7; + r_.i8[ 8] = c8; + r_.i8[ 9] = c9; + r_.i8[10] = c10; + r_.i8[11] = c11; + r_.i8[12] = c12; + r_.i8[13] = c13; + r_.i8[14] = c14; + r_.i8[15] = c15; + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_i8x16_make( \ + c0, c1, c2, c3, c4, c5, c6, c7, \ + c8, c9, c10, c11, c12, c13, c14, c15) \ + simde_wasm_i8x16_make( \ + (c0), (c1), (c2), (c3), (c4), (c5), (c6), (c7), \ + (c8), (c9), (c10), (c11), (c12), (c13), (c14), (c15)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u8x16_make ( + uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, uint8_t c6, uint8_t c7, + uint8_t c8, uint8_t c9, uint8_t c10, uint8_t c11, uint8_t c12, uint8_t c13, uint8_t c14, uint8_t c15) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return + wasm_u8x16_make( + c0, c1, c2, c3, c4, c5, c6, c7, + c8, c9, c10, c11, c12, c13, c14, c15); + #elif defined(SIMDE_X86_SSE2_NATIVE) + return _mm_set_epi8( + HEDLEY_STATIC_CAST(char, c15), HEDLEY_STATIC_CAST(char, c14), HEDLEY_STATIC_CAST(char, c13), HEDLEY_STATIC_CAST(char, c12), + HEDLEY_STATIC_CAST(char, c11), HEDLEY_STATIC_CAST(char, c10), HEDLEY_STATIC_CAST(char, c9), HEDLEY_STATIC_CAST(char, c8), + HEDLEY_STATIC_CAST(char, c7), HEDLEY_STATIC_CAST(char, c6), HEDLEY_STATIC_CAST(char, c5), HEDLEY_STATIC_CAST(char, c4), + HEDLEY_STATIC_CAST(char, c3), HEDLEY_STATIC_CAST(char, c2), HEDLEY_STATIC_CAST(char, c1), HEDLEY_STATIC_CAST(char, c0)); + #else + simde_v128_private r_; + + r_.u8[ 0] = c0; + r_.u8[ 1] = c1; + r_.u8[ 2] = c2; + r_.u8[ 3] = c3; + r_.u8[ 4] = c4; + r_.u8[ 5] = c5; + r_.u8[ 6] = c6; + r_.u8[ 7] = c7; + r_.u8[ 8] = c8; + r_.u8[ 9] = c9; + r_.u8[10] = c10; + r_.u8[11] = c11; + r_.u8[12] = c12; + r_.u8[13] = c13; + r_.u8[14] = c14; + r_.u8[15] = c15; + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_u8x16_make( \ + c0, c1, c2, c3, c4, c5, c6, c7, \ + c8, c9, c10, c11, c12, c13, c14, c15) \ + simde_wasm_u8x16_make( \ + (c0), (c1), (c2), (c3), (c4), (c5), (c6), (c7), \ + (c8), (c9), (c10), (c11), (c12), (c13), (c14), (c15)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_make ( + int16_t c0, int16_t c1, int16_t c2, int16_t c3, int16_t c4, int16_t c5, int16_t c6, int16_t c7) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_make(c0, c1, c2, c3, c4, c5, c6, c7); + #elif defined(SIMDE_X86_SSE2_NATIVE) + return _mm_setr_epi16(c0, c1, c2, c3, c4, c5, c6, c7); + #else + simde_v128_private r_; + + r_.i16[0] = c0; + r_.i16[1] = c1; + r_.i16[2] = c2; + r_.i16[3] = c3; + r_.i16[4] = c4; + r_.i16[5] = c5; + r_.i16[6] = c6; + r_.i16[7] = c7; + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_i16x8_make(c0, c1, c2, c3, c4, c5, c6, c7) \ + simde_wasm_i16x8_make((c0), (c1), (c2), (c3), (c4), (c5), (c6), (c7)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_make ( + uint16_t c0, uint16_t c1, uint16_t c2, uint16_t c3, uint16_t c4, uint16_t c5, uint16_t c6, uint16_t c7) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_make(c0, c1, c2, c3, c4, c5, c6, c7); + #elif defined(SIMDE_X86_SSE2_NATIVE) + return _mm_set_epi16( + HEDLEY_STATIC_CAST(short, c7), HEDLEY_STATIC_CAST(short, c6), HEDLEY_STATIC_CAST(short, c5), HEDLEY_STATIC_CAST(short, c4), + HEDLEY_STATIC_CAST(short, c3), HEDLEY_STATIC_CAST(short, c2), HEDLEY_STATIC_CAST(short, c1), HEDLEY_STATIC_CAST(short, c0)); + #else + simde_v128_private r_; + + r_.u16[0] = c0; + r_.u16[1] = c1; + r_.u16[2] = c2; + r_.u16[3] = c3; + r_.u16[4] = c4; + r_.u16[5] = c5; + r_.u16[6] = c6; + r_.u16[7] = c7; + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_u16x8_make(c0, c1, c2, c3, c4, c5, c6, c7) \ + simde_wasm_u16x8_make((c0), (c1), (c2), (c3), (c4), (c5), (c6), (c7)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_make (int32_t c0, int32_t c1, int32_t c2, int32_t c3) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_make(c0, c1, c2, c3); + #elif defined(SIMDE_X86_SSE2_NATIVE) + return _mm_setr_epi32(c0, c1, c2, c3); + #else + simde_v128_private r_; + + r_.i32[0] = c0; + r_.i32[1] = c1; + r_.i32[2] = c2; + r_.i32[3] = c3; + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_make(c0, c1, c2, c3) simde_wasm_i32x4_make((c0), (c1), (c2), (c3)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_make (uint32_t c0, uint32_t c1, uint32_t c2, uint32_t c3) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_make(c0, c1, c2, c3); + #elif defined(SIMDE_X86_SSE2_NATIVE) + return _mm_set_epi32( + HEDLEY_STATIC_CAST(int, c3), HEDLEY_STATIC_CAST(int, c2), HEDLEY_STATIC_CAST(int, c1), HEDLEY_STATIC_CAST(int, c0)); + #else + simde_v128_private r_; + + r_.u32[0] = c0; + r_.u32[1] = c1; + r_.u32[2] = c2; + r_.u32[3] = c3; + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_make(c0, c1, c2, c3) simde_wasm_u32x4_make((c0), (c1), (c2), (c3)) +#endif + + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_make (int64_t c0, int64_t c1) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_make(c0, c1); + #elif defined(SIMDE_X86_SSE2_NATIVE) + return _mm_set_epi64x(c1, c0); + #else + simde_v128_private r_; + + r_.i64[0] = c0; + r_.i64[1] = c1; + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_make(c0, c1) simde_wasm_i64x2_make((c0), (c1)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u64x2_make (uint64_t c0, uint64_t c1) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u64x2_make(c0, c1); + #elif defined(SIMDE_X86_SSE2_NATIVE) + return _mm_set_epi64x(HEDLEY_STATIC_CAST(int64_t, c1), HEDLEY_STATIC_CAST(int64_t, c0)); + #else + simde_v128_private r_; + + r_.u64[0] = c0; + r_.u64[1] = c1; + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u64x2_make(c0, c1) simde_wasm_u64x2_make((c0), (c1)) +#endif + + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_make (simde_float32 c0, simde_float32 c1, simde_float32 c2, simde_float32 c3) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_make(c0, c1, c2, c3); + #else + simde_v128_private r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128 = _mm_setr_ps(c0, c1, c2, c3); + #else + r_.f32[0] = c0; + r_.f32[1] = c1; + r_.f32[2] = c2; + r_.f32[3] = c3; + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_make(c0, c1, c2, c3) simde_wasm_f32x4_make((c0), (c1), (c2), (c3)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_make (simde_float64 c0, simde_float64 c1) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_make(c0, c1); + #else + simde_v128_private r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_set_pd(c1, c0); + #else + r_.f64[ 0] = c0; + r_.f64[ 1] = c1; + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_make(c0, c1) simde_wasm_f64x2_make((c0), (c1)) +#endif + +/* const */ + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define \ + simde_wasm_i8x16_const( \ + c0, c1, c2, c3, c4, c5, c6, c7, \ + c8, c9, c10, c11, c12, c13, c14, c15) \ + wasm_i8x16_const( \ + (c0), (c1), (c2), (c3), (c4), (c5), (c6), (c7), \ + (c8), (c9), (c10), (c11), (c12), (c13), (c14), (c15)) +#elif defined(SIMDE_STATEMENT_EXPR_) && defined(SIMDE_ASSERT_CONSTANT_) && defined(SIMDE_STATIC_ASSERT) + #define \ + simde_wasm_i8x16_const( \ + c0, c1, c2, c3, c4, c5, c6, c7, \ + c8, c9, c10, c11, c12, c13, c14, c15) \ + SIMDE_STATEMENT_EXPR_(({ \ + SIMDE_ASSERT_CONSTANT_(c0); \ + SIMDE_ASSERT_CONSTANT_(c1); \ + SIMDE_ASSERT_CONSTANT_(c2); \ + SIMDE_ASSERT_CONSTANT_(c3); \ + SIMDE_ASSERT_CONSTANT_(c4); \ + SIMDE_ASSERT_CONSTANT_(c5); \ + SIMDE_ASSERT_CONSTANT_(c6); \ + SIMDE_ASSERT_CONSTANT_(c7); \ + SIMDE_ASSERT_CONSTANT_(c8); \ + SIMDE_ASSERT_CONSTANT_(c9); \ + SIMDE_ASSERT_CONSTANT_(c10); \ + SIMDE_ASSERT_CONSTANT_(c11); \ + SIMDE_ASSERT_CONSTANT_(c12); \ + SIMDE_ASSERT_CONSTANT_(c13); \ + SIMDE_ASSERT_CONSTANT_(c13); \ + SIMDE_ASSERT_CONSTANT_(c15); \ + \ + simde_wasm_i8x16_make( \ + c0, c1, c2, c3, c4, c5, c6, c7, \ + c8, c9, c10, c11, c12, c13, c14, c15); \ + })) +#else + SIMDE_FUNCTION_ATTRIBUTES + simde_v128_t + simde_wasm_i8x16_const ( + int8_t c0, int8_t c1, int8_t c2, int8_t c3, int8_t c4, int8_t c5, int8_t c6, int8_t c7, + int8_t c8, int8_t c9, int8_t c10, int8_t c11, int8_t c12, int8_t c13, int8_t c14, int8_t c15) { + return simde_wasm_i8x16_make( + c0, c1, c2, c3, c4, c5, c6, c7, + c8, c9, c10, c11, c12, c13, c14, c15); + } +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_i8x16_const( \ + c0, c1, c2, c3, c4, c5, c6, c7, \ + c8, c9, c10, c11, c12, c13, c14, c15) \ + simde_wasm_i8x16_const( \ + (c0), (c1), (c2), (c3), (c4), (c5), (c6), (c7), \ + (c8), (c9), (c10), (c11), (c12), (c13), (c14), (c15)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define \ + simde_wasm_u8x16_const( \ + c0, c1, c2, c3, c4, c5, c6, c7, \ + c8, c9, c10, c11, c12, c13, c14, c15) \ + wasm_u8x16_const( \ + (c0), (c1), (c2), (c3), (c4), (c5), (c6), (c7), \ + (c8), (c9), (c10), (c11), (c12), (c13), (c14), (c15)) +#elif defined(SIMDE_STATEMENT_EXPR_) && defined(SIMDE_ASSERT_CONSTANT_) && defined(SIMDE_STATIC_ASSERT) + #define \ + simde_wasm_u8x16_const( \ + c0, c1, c2, c3, c4, c5, c6, c7, \ + c8, c9, c10, c11, c12, c13, c14, c15) \ + SIMDE_STATEMENT_EXPR_(({ \ + SIMDE_ASSERT_CONSTANT_(c0); \ + SIMDE_ASSERT_CONSTANT_(c1); \ + SIMDE_ASSERT_CONSTANT_(c2); \ + SIMDE_ASSERT_CONSTANT_(c3); \ + SIMDE_ASSERT_CONSTANT_(c4); \ + SIMDE_ASSERT_CONSTANT_(c5); \ + SIMDE_ASSERT_CONSTANT_(c6); \ + SIMDE_ASSERT_CONSTANT_(c7); \ + SIMDE_ASSERT_CONSTANT_(c8); \ + SIMDE_ASSERT_CONSTANT_(c9); \ + SIMDE_ASSERT_CONSTANT_(c10); \ + SIMDE_ASSERT_CONSTANT_(c11); \ + SIMDE_ASSERT_CONSTANT_(c12); \ + SIMDE_ASSERT_CONSTANT_(c13); \ + SIMDE_ASSERT_CONSTANT_(c13); \ + SIMDE_ASSERT_CONSTANT_(c15); \ + \ + simde_wasm_u8x16_make( \ + c0, c1, c2, c3, c4, c5, c6, c7, \ + c8, c9, c10, c11, c12, c13, c14, c15); \ + })) +#else + SIMDE_FUNCTION_ATTRIBUTES + simde_v128_t + simde_wasm_u8x16_const ( + uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, uint8_t c6, uint8_t c7, + uint8_t c8, uint8_t c9, uint8_t c10, uint8_t c11, uint8_t c12, uint8_t c13, uint8_t c14, uint8_t c15) { + return simde_wasm_u8x16_make( + c0, c1, c2, c3, c4, c5, c6, c7, + c8, c9, c10, c11, c12, c13, c14, c15); + } +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_u8x16_const( \ + c0, c1, c2, c3, c4, c5, c6, c7, \ + c8, c9, c10, c11, c12, c13, c14, c15) \ + simde_wasm_u8x16_const( \ + (c0), (c1), (c2), (c3), (c4), (c5), (c6), (c7), \ + (c8), (c9), (c10), (c11), (c12), (c13), (c14), (c15)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define \ + simde_wasm_i16x8_const( \ + c0, c1, c2, c3, c4, c5, c6, c7) \ + wasm_i16x8_const( \ + (c0), (c1), (c2), (c3), (c4), (c5), (c6), (c7)) +#elif defined(SIMDE_STATEMENT_EXPR_) && defined(SIMDE_ASSERT_CONSTANT_) && defined(SIMDE_STATIC_ASSERT) + #define \ + simde_wasm_i16x8_const( \ + c0, c1, c2, c3, c4, c5, c6, c7) \ + SIMDE_STATEMENT_EXPR_(({ \ + SIMDE_ASSERT_CONSTANT_(c0); \ + SIMDE_ASSERT_CONSTANT_(c1); \ + SIMDE_ASSERT_CONSTANT_(c2); \ + SIMDE_ASSERT_CONSTANT_(c3); \ + SIMDE_ASSERT_CONSTANT_(c4); \ + SIMDE_ASSERT_CONSTANT_(c5); \ + SIMDE_ASSERT_CONSTANT_(c6); \ + SIMDE_ASSERT_CONSTANT_(c7); \ + \ + simde_wasm_i16x8_make( \ + c0, c1, c2, c3, c4, c5, c6, c7); \ + })) +#else + SIMDE_FUNCTION_ATTRIBUTES + simde_v128_t + simde_wasm_i16x8_const ( + int16_t c0, int16_t c1, int16_t c2, int16_t c3, int16_t c4, int16_t c5, int16_t c6, int16_t c7) { + return simde_wasm_i16x8_make( + c0, c1, c2, c3, c4, c5, c6, c7); + } +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_i16x8_const( \ + c0, c1, c2, c3, c4, c5, c6, c7) \ + simde_wasm_i16x8_const( \ + (c0), (c1), (c2), (c3), (c4), (c5), (c6), (c7)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define \ + simde_wasm_u16x8_const( \ + c0, c1, c2, c3, c4, c5, c6, c7) \ + wasm_u16x8_const( \ + (c0), (c1), (c2), (c3), (c4), (c5), (c6), (c7)) +#elif defined(SIMDE_STATEMENT_EXPR_) && defined(SIMDE_ASSERT_CONSTANT_) && defined(SIMDE_STATIC_ASSERT) + #define \ + simde_wasm_u16x8_const( \ + c0, c1, c2, c3, c4, c5, c6, c7) \ + SIMDE_STATEMENT_EXPR_(({ \ + SIMDE_ASSERT_CONSTANT_(c0); \ + SIMDE_ASSERT_CONSTANT_(c1); \ + SIMDE_ASSERT_CONSTANT_(c2); \ + SIMDE_ASSERT_CONSTANT_(c3); \ + SIMDE_ASSERT_CONSTANT_(c4); \ + SIMDE_ASSERT_CONSTANT_(c5); \ + SIMDE_ASSERT_CONSTANT_(c6); \ + SIMDE_ASSERT_CONSTANT_(c7); \ + \ + simde_wasm_u16x8_make( \ + c0, c1, c2, c3, c4, c5, c6, c7); \ + })) +#else + SIMDE_FUNCTION_ATTRIBUTES + simde_v128_t + simde_wasm_u16x8_const ( + uint16_t c0, uint16_t c1, uint16_t c2, uint16_t c3, uint16_t c4, uint16_t c5, uint16_t c6, uint16_t c7) { + return simde_wasm_u16x8_make( + c0, c1, c2, c3, c4, c5, c6, c7); + } +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_u16x8_const( \ + c0, c1, c2, c3, c4, c5, c6, c7) \ + simde_wasm_u16x8_const( \ + (c0), (c1), (c2), (c3), (c4), (c5), (c6), (c7)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define \ + simde_wasm_i32x4_const( \ + c0, c1, c2, c3) \ + wasm_i32x4_const( \ + (c0), (c1), (c2), (c3)) +#elif defined(SIMDE_STATEMENT_EXPR_) && defined(SIMDE_ASSERT_CONSTANT_) && defined(SIMDE_STATIC_ASSERT) + #define \ + simde_wasm_i32x4_const( \ + c0, c1, c2, c3) \ + SIMDE_STATEMENT_EXPR_(({ \ + SIMDE_ASSERT_CONSTANT_(c0); \ + SIMDE_ASSERT_CONSTANT_(c1); \ + SIMDE_ASSERT_CONSTANT_(c2); \ + SIMDE_ASSERT_CONSTANT_(c3); \ + \ + simde_wasm_i32x4_make( \ + c0, c1, c2, c3); \ + })) +#else + SIMDE_FUNCTION_ATTRIBUTES + simde_v128_t + simde_wasm_i32x4_const ( + int32_t c0, int32_t c1, int32_t c2, int32_t c3) { + return simde_wasm_i32x4_make( + c0, c1, c2, c3); + } +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_i32x4_const( \ + c0, c1, c2, c3) \ + simde_wasm_i32x4_const( \ + (c0), (c1), (c2), (c3)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define \ + simde_wasm_u32x4_const( \ + c0, c1, c2, c3) \ + wasm_u32x4_const( \ + (c0), (c1), (c2), (c3)) +#elif defined(SIMDE_STATEMENT_EXPR_) && defined(SIMDE_ASSERT_CONSTANT_) && defined(SIMDE_STATIC_ASSERT) + #define \ + simde_wasm_u32x4_const( \ + c0, c1, c2, c3) \ + SIMDE_STATEMENT_EXPR_(({ \ + SIMDE_ASSERT_CONSTANT_(c0); \ + SIMDE_ASSERT_CONSTANT_(c1); \ + SIMDE_ASSERT_CONSTANT_(c2); \ + SIMDE_ASSERT_CONSTANT_(c3); \ + \ + simde_wasm_u32x4_make( \ + c0, c1, c2, c3); \ + })) +#else + SIMDE_FUNCTION_ATTRIBUTES + simde_v128_t + simde_wasm_u32x4_const ( + uint32_t c0, uint32_t c1, uint32_t c2, uint32_t c3) { + return simde_wasm_u32x4_make( + c0, c1, c2, c3); + } +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_u32x4_const( \ + c0, c1, c2, c3) \ + simde_wasm_u32x4_const( \ + (c0), (c1), (c2), (c3)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define \ + simde_wasm_i64x2_const( \ + c0, c1) \ + wasm_i64x2_const( \ + (c0), (c1)) +#elif defined(SIMDE_STATEMENT_EXPR_) && defined(SIMDE_ASSERT_CONSTANT_) && defined(SIMDE_STATIC_ASSERT) + #define \ + simde_wasm_i64x2_const( \ + c0, c1) \ + SIMDE_STATEMENT_EXPR_(({ \ + SIMDE_ASSERT_CONSTANT_(c0); \ + SIMDE_ASSERT_CONSTANT_(c1); \ + \ + simde_wasm_i64x2_make( \ + c0, c1); \ + })) +#else + SIMDE_FUNCTION_ATTRIBUTES + simde_v128_t + simde_wasm_i64x2_const ( + int64_t c0, int64_t c1) { + return simde_wasm_i64x2_make( + c0, c1); + } +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_i64x2_const( \ + c0, c1) \ + simde_wasm_i64x2_const( \ + (c0), (c1)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define \ + simde_wasm_u64x2_const( \ + c0, c1) \ + wasm_u64x2_const( \ + (c0), (c1)) +#elif defined(SIMDE_STATEMENT_EXPR_) && defined(SIMDE_ASSERT_CONSTANT_) && defined(SIMDE_STATIC_ASSERT) + #define \ + simde_wasm_u64x2_const( \ + c0, c1) \ + SIMDE_STATEMENT_EXPR_(({ \ + SIMDE_ASSERT_CONSTANT_(c0); \ + SIMDE_ASSERT_CONSTANT_(c1); \ + \ + simde_wasm_u64x2_make( \ + c0, c1); \ + })) +#else + SIMDE_FUNCTION_ATTRIBUTES + simde_v128_t + simde_wasm_u64x2_const ( + uint64_t c0, uint64_t c1) { + return simde_wasm_u64x2_make( + c0, c1); + } +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_u64x2_const( \ + c0, c1) \ + simde_wasm_u64x2_const( \ + (c0), (c1)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define \ + simde_wasm_f32x4_const( \ + c0, c1, c2, c3) \ + wasm_f32x4_const( \ + (c0), (c1), (c2), (c3)) +#elif defined(SIMDE_STATEMENT_EXPR_) && defined(SIMDE_ASSERT_CONSTANT_) && defined(SIMDE_STATIC_ASSERT) + #define \ + simde_wasm_f32x4_const( \ + c0, c1, c2, c3) \ + SIMDE_STATEMENT_EXPR_(({ \ + SIMDE_ASSERT_CONSTANT_(c0); \ + SIMDE_ASSERT_CONSTANT_(c1); \ + SIMDE_ASSERT_CONSTANT_(c2); \ + SIMDE_ASSERT_CONSTANT_(c3); \ + \ + simde_wasm_f32x4_make( \ + c0, c1, c2, c3); \ + })) +#else + SIMDE_FUNCTION_ATTRIBUTES + simde_v128_t + simde_wasm_f32x4_const ( + simde_float32 c0, simde_float32 c1, simde_float32 c2, simde_float32 c3) { + return simde_wasm_f32x4_make( + c0, c1, c2, c3); + } +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_f32x4_const( \ + c0, c1, c2, c3) \ + simde_wasm_f32x4_const( \ + (c0), (c1), (c2), (c3)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define \ + simde_wasm_f64x2_const( \ + c0, c1) \ + wasm_f64x2_const( \ + (c0), (c1)) +#elif defined(SIMDE_STATEMENT_EXPR_) && defined(SIMDE_ASSERT_CONSTANT_) && defined(SIMDE_STATIC_ASSERT) + #define \ + simde_wasm_f64x2_const( \ + c0, c1) \ + SIMDE_STATEMENT_EXPR_(({ \ + SIMDE_ASSERT_CONSTANT_(c0); \ + SIMDE_ASSERT_CONSTANT_(c1); \ + \ + simde_wasm_f64x2_make( \ + c0, c1); \ + })) +#else + SIMDE_FUNCTION_ATTRIBUTES + simde_v128_t + simde_wasm_f64x2_const ( + simde_float64 c0, simde_float64 c1) { + return simde_wasm_f64x2_make( + c0, c1); + } +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_const(c0, c1) simde_wasm_f64x2_const((c0), (c1)) +#endif + +/* splat */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_splat (int8_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_splat(a); + #else + simde_v128_private r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_set1_epi8(a); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i8 = vdupq_n_s8(a); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_i8 = vec_splats(a); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = a; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_splat(a) simde_wasm_i8x16_splat((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u8x16_splat (uint8_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u8x16_splat(a); + #else + simde_v128_private r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_set1_epi8(HEDLEY_STATIC_CAST(int8_t, a)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u8 = vdupq_n_u8(a); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_u8 = vec_splats(HEDLEY_STATIC_CAST(unsigned char, a)); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u8) / sizeof(r_.u8[0])) ; i++) { + r_.u8[i] = a; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u8x16_splat(a) simde_wasm_u8x16_splat((a)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_i8x16_const_splat(a) wasm_i8x16_const_splat((a)) +#else + #define simde_wasm_i8x16_const_splat(a) simde_wasm_i8x16_splat(a); +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_const_splat(a) simde_wasm_i8x16_const_splat((a)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_u8x16_const_splat(a) wasm_u8x16_const_splat((a)) +#else + #define simde_wasm_u8x16_const_splat(a) simde_wasm_u8x16_splat(a); +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u8x16_const_splat(a) simde_wasm_u8x16_const_splat((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_splat (int16_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_splat(a); + #else + simde_v128_private r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_set1_epi16(a); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vdupq_n_s16(a); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_i16 = vec_splats(a); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = a; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_splat(a) simde_wasm_i16x8_splat((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_splat (uint16_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_splat(a); + #else + simde_v128_private r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_set1_epi16(HEDLEY_STATIC_CAST(int16_t, a)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vdupq_n_u16(a); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_u16 = vec_splats(HEDLEY_STATIC_CAST(unsigned short, a)); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { + r_.u16[i] = a; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_splat(a) simde_wasm_u16x8_splat((a)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_i16x8_const_splat(a) wasm_i16x8_const_splat((a)) +#else + #define simde_wasm_i16x8_const_splat(a) simde_wasm_i16x8_splat(a); +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_const_splat(a) simde_wasm_i16x8_const_splat((a)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_u16x8_const_splat(a) wasm_u16x8_const_splat((a)) +#else + #define simde_wasm_u16x8_const_splat(a) simde_wasm_u16x8_splat(a); +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_const_splat(a) simde_wasm_u16x8_const_splat((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_splat (int32_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_splat(a); + #else + simde_v128_private r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_set1_epi32(a); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vdupq_n_s32(a); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_i32 = vec_splats(a); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = a; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_splat(a) simde_wasm_i32x4_splat((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_splat (uint32_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_splat(a); + #else + simde_v128_private r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_set1_epi32(HEDLEY_STATIC_CAST(int32_t, a)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vdupq_n_u32(a); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_u32 = vec_splats(a); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u32) / sizeof(r_.u32[0])) ; i++) { + r_.u32[i] = a; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_splat(a) simde_wasm_u32x4_splat((a)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_i32x4_const_splat(a) wasm_i32x4_const_splat((a)) +#else + #define simde_wasm_i32x4_const_splat(a) simde_wasm_i32x4_splat(a); +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_const_splat(a) simde_wasm_i32x4_const_splat((a)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_u32x4_const_splat(a) wasm_u32x4_const_splat((a)) +#else + #define simde_wasm_u32x4_const_splat(a) simde_wasm_u32x4_splat(a); +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_const_splat(a) simde_wasm_u32x4_const_splat((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_splat (int64_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_splat(a); + #else + simde_v128_private r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) && (!defined(HEDLEY_MSVC_VERSION) || HEDLEY_MSVC_VERSION_CHECK(19,0,0)) + r_.sse_m128i = _mm_set1_epi64x(a); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i64 = vdupq_n_s64(a); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_i64 = vec_splats(HEDLEY_STATIC_CAST(signed long long, a)); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = a; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_splat(a) simde_wasm_i64x2_splat((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u64x2_splat (uint64_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u64x2_splat(a); + #else + simde_v128_private r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) && (!defined(HEDLEY_MSVC_VERSION) || HEDLEY_MSVC_VERSION_CHECK(19,0,0)) + r_.sse_m128i = _mm_set1_epi64x(HEDLEY_STATIC_CAST(int64_t, a)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u64 = vdupq_n_u64(a); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_u64 = vec_splats(HEDLEY_STATIC_CAST(unsigned long long, a)); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u64) / sizeof(r_.u64[0])) ; i++) { + r_.u64[i] = a; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u64x2_splat(a) simde_wasm_u64x2_splat((a)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_i64x2_const_splat(a) wasm_i64x2_const_splat((a)) +#else + #define simde_wasm_i64x2_const_splat(a) simde_wasm_i64x2_splat(a); +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_const_splat(a) simde_wasm_i64x2_const_splat((a)) +#endif + +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_u64x2_const_splat(a) wasm_u64x2_const_splat((a)) +#else + #define simde_wasm_u64x2_const_splat(a) simde_wasm_u64x2_splat(a); +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_const_splat(a) simde_wasm_i64x2_const_splat((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_splat (simde_float32 a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_splat(a); + #else + simde_v128_private r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128 = _mm_set1_ps(a); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_f32 = vdupq_n_f32(a); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_14_NATIVE) + r_.altivec_f32 = vec_splats(a); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = a; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_splat(a) simde_wasm_f32x4_splat((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_splat (simde_float64 a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_splat(a); + #else + simde_v128_private r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_set1_pd(a); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_f64 = vdupq_n_f64(a); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_f64 = vec_splats(a); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = a; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_splat(a) simde_wasm_f64x2_splat((a)) +#endif + +/* load_splat */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_load8_splat (const void * mem) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_v128_load8_splat(mem); + #else + int8_t v; + simde_memcpy(&v, mem, sizeof(v)); + return simde_wasm_i8x16_splat(v); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_load8_splat(mem) simde_wasm_v128_load8_splat((mem)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_load16_splat (const void * mem) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_v128_load16_splat(mem); + #else + int16_t v; + simde_memcpy(&v, mem, sizeof(v)); + return simde_wasm_i16x8_splat(v); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_load16_splat(mem) simde_wasm_v128_load16_splat((mem)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_load32_splat (const void * mem) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_v128_load32_splat(mem); + #else + int32_t v; + simde_memcpy(&v, mem, sizeof(v)); + return simde_wasm_i32x4_splat(v); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_load32_splat(mem) simde_wasm_v128_load32_splat((mem)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_load64_splat (const void * mem) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_v128_load64_splat(mem); + #else + int64_t v; + simde_memcpy(&v, mem, sizeof(v)); + return simde_wasm_i64x2_splat(v); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_load64_splat(mem) simde_wasm_v128_load64_splat((mem)) +#endif + +/* extract_lane + * + * Note that, unlike normal WASM SIMD128 we return intN_t instead of + * int for sizeof(X) <= sizeof(int). This is done for portability; + * the regular API doesn't have to worry about things like int being + * 16 bits (like on AVR). + * + * This does mean that code which works in SIMDe may not work without + * changes on WASM, but luckily the necessary changes (i.e., casting + * the return values to smaller type when assigning to the smaller + * type) mean the code will work in *both* SIMDe and a native + * implementation. If you use the simde_* prefixed functions it will + * always work. */ + +SIMDE_FUNCTION_ATTRIBUTES +int8_t +simde_wasm_i8x16_extract_lane (simde_v128_t a, const int lane) { + simde_v128_private a_ = simde_v128_to_private(a); + return a_.i8[lane & 15]; +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_i8x16_extract_lane(a, lane) HEDLEY_STATIC_CAST(int8_t, wasm_i8x16_extract_lane((a), (lane))) +#elif defined(SIMDE_X86_SSE4_1_NATIVE) + #define simde_wasm_i8x16_extract_lane(a, lane) HEDLEY_STATIC_CAST(int8_t, _mm_extract_epi8(simde_v128_to_m128i(a), (lane) & 15)) +#elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + #define simde_wasm_i8x16_extract_lane(a, lane) vgetq_lane_s8(simde_v128_to_neon_i8(a), (lane) & 15) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_extract_lane(a, lane) simde_wasm_i8x16_extract_lane((a), (lane)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +int16_t +simde_wasm_i16x8_extract_lane (simde_v128_t a, const int lane) { + simde_v128_private a_ = simde_v128_to_private(a); + return a_.i16[lane & 7]; +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_i16x8_extract_lane(a, lane) HEDLEY_STATIC_CAST(int16_t, wasm_i16x8_extract_lane((a), (lane))) +#elif defined(SIMDE_X86_SSE2_NATIVE) + #define simde_wasm_i16x8_extract_lane(a, lane) HEDLEY_STATIC_CAST(int16_t, _mm_extract_epi16((a), (lane) & 7)) +#elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) && !defined(SIMDE_BUG_CLANG_BAD_VGET_SET_LANE_TYPES) + #define simde_wasm_i16x8_extract_lane(a, lane) vgetq_lane_s16(simde_v128_to_neon_i16(a), (lane) & 7) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_extract_lane(a, lane) simde_wasm_i16x8_extract_lane((a), (lane)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +int32_t +simde_wasm_i32x4_extract_lane (simde_v128_t a, const int lane) { + simde_v128_private a_ = simde_v128_to_private(a); + return a_.i32[lane & 3]; +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_i32x4_extract_lane(a, lane) HEDLEY_STATIC_CAST(int32_t, wasm_i32x4_extract_lane((a), (lane))) +#elif defined(SIMDE_X86_SSE4_1_NATIVE) + #define simde_wasm_i32x4_extract_lane(a, lane) HEDLEY_STATIC_CAST(int32_t, _mm_extract_epi32((a), (lane) & 3)) +#elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) && !defined(SIMDE_BUG_CLANG_BAD_VGET_SET_LANE_TYPES) + #define simde_wasm_i32x4_extract_lane(a, lane) vgetq_lane_s32(simde_v128_to_neon_i32(a), (lane) & 3) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_extract_lane(a, lane) simde_wasm_i32x4_extract_lane((a), (lane)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +int64_t +simde_wasm_i64x2_extract_lane (simde_v128_t a, const int lane) { + simde_v128_private a_ = simde_v128_to_private(a); + return a_.i64[lane & 1]; +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_i64x2_extract_lane(a, lane) HEDLEY_STATIC_CAST(int64_t, wasm_i64x2_extract_lane((a), (lane))) +#elif defined(SIMDE_X86_SSE4_1_NATIVE) && defined(SIMDE_ARCH_AMD64) + #define simde_wasm_i64x2_extract_lane(a, lane) HEDLEY_STATIC_CAST(int64_t, _mm_extract_epi64((a), (lane) & 1)) +#elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) && !defined(SIMDE_BUG_CLANG_BAD_VGET_SET_LANE_TYPES) + #define simde_wasm_i64x2_extract_lane(a, lane) vgetq_lane_s64(simde_v128_to_neon_i64(a), (lane) & 1) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_extract_lane(a, lane) simde_wasm_i64x2_extract_lane((a), (lane)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +uint8_t +simde_wasm_u8x16_extract_lane (simde_v128_t a, const int lane) { + simde_v128_private a_ = simde_v128_to_private(a); + return a_.u8[lane & 15]; +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_u8x16_extract_lane(a, lane) HEDLEY_STATIC_CAST(uint8_t, wasm_u8x16_extract_lane((a), (lane))) +#elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + #define simde_wasm_u8x16_extract_lane(a, lane) vgetq_lane_u8(simde_v128_to_neon_u8(a), (lane) & 15) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u8x16_extract_lane(a, lane) simde_wasm_u8x16_extract_lane((a), (lane)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +uint16_t +simde_wasm_u16x8_extract_lane (simde_v128_t a, const int lane) { + simde_v128_private a_ = simde_v128_to_private(a); + return a_.u16[lane & 7]; +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_u16x8_extract_lane(a, lane) HEDLEY_STATIC_CAST(uint16_t, wasm_u16x8_extract_lane((a), (lane))) +#elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) && !defined(SIMDE_BUG_CLANG_BAD_VGET_SET_LANE_TYPES) + #define simde_wasm_u16x8_extract_lane(a, lane) vgetq_lane_u16(simde_v128_to_neon_u16(a), (lane) & 7) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_extract_lane(a, lane) simde_wasm_u16x8_extract_lane((a), (lane)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +uint32_t +simde_wasm_u32x4_extract_lane (simde_v128_t a, const int lane) { + simde_v128_private a_ = simde_v128_to_private(a); + return a_.u32[lane & 3]; +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_u32x4_extract_lane(a, lane) HEDLEY_STATIC_CAST(uint32_t, wasm_u32x4_extract_lane((a), (lane))) +#elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) && !defined(SIMDE_BUG_CLANG_BAD_VGET_SET_LANE_TYPES) + #define simde_wasm_u32x4_extract_lane(a, lane) vgetq_lane_u32(simde_v128_to_neon_u32(a), (lane) & 3) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_extract_lane(a, lane) simde_wasm_u32x4_extract_lane((a), (lane)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +uint64_t +simde_wasm_u64x2_extract_lane (simde_v128_t a, const int lane) { + simde_v128_private a_ = simde_v128_to_private(a); + return a_.u64[lane & 1]; +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_u64x2_extract_lane(a, lane) HEDLEY_STATIC_CAST(uint64_t, wasm_u64x2_extract_lane((a), (lane))) +#elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) && !defined(SIMDE_BUG_CLANG_BAD_VGET_SET_LANE_TYPES) + #define simde_wasm_u64x2_extract_lane(a, lane) vgetq_lane_u64(simde_v128_to_neon_u64(a), (lane) & 1) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u64x2_extract_lane(a, lane) simde_wasm_u64x2_extract_lane((a), (lane)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_float32 +simde_wasm_f32x4_extract_lane (simde_v128_t a, const int lane) { + simde_v128_private a_ = simde_v128_to_private(a); + return a_.f32[lane & 3]; +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_f32x4_extract_lane(a, lane) wasm_f32x4_extract_lane((a), (lane)) +#elif defined(SIMDE_X86_SSE4_1_NATIVE) + #define simde_wasm_f32x4(a, lane) _mm_extract_ps(simde_v128_to_m128(a), (lane) & 3) +#elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) && !defined(SIMDE_BUG_CLANG_BAD_VGET_SET_LANE_TYPES) + #define simde_wasm_f32x4_extract_lane(a, lane) vgetq_lane_f32(simde_v128_to_neon_f32(a), (lane) & 3) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_extract_lane(a, lane) simde_wasm_f32x4_extract_lane((a), (lane)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_float64 +simde_wasm_f64x2_extract_lane (simde_v128_t a, const int lane) { + simde_v128_private a_ = simde_v128_to_private(a); + return a_.f64[lane & 1]; +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_f64x2_extract_lane(a, lane) wasm_f64x2_extract_lane((a), (lane)) +#elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) && !defined(SIMDE_BUG_CLANG_BAD_VGET_SET_LANE_TYPES) + #define simde_wasm_f64x2_extract_lane(a, lane) vgetq_lane_f64(simde_v128_to_neon_f64(a), (lane) & 1) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_extract_lane(a, lane) simde_wasm_f64x2_extract_lane((a), (lane)) +#endif + +/* replace_lane */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_replace_lane (simde_v128_t a, const int lane, int8_t value) { + simde_v128_private a_ = simde_v128_to_private(a); + a_.i8[lane & 15] = value; + return simde_v128_from_private(a_); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_i8x16_replace_lane(a, lane, value) wasm_i8x16_replace_lane((a), (lane), (value)) +#elif defined(SIMDE_X86_SSE4_1_NATIVE) + #if defined(__clang__) && !SIMDE_DETECT_CLANG_VERSION_CHECK(7,0,0) + #define simde_wasm_i8x16_replace_lane(a, lane, value) HEDLEY_REINTERPRET_CAST(simde_v128_t, _mm_insert_epi8((a), (value), (lane) & 15)) + #else + #define simde_wasm_i8x16_replace_lane(a, lane, value) _mm_insert_epi8((a), (value), (lane) & 15) + #endif +#elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + #define simde_wasm_i8x16_replace_lane(a, lane, value) simde_v128_from_neon_i8(vsetq_lane_s8((value), simde_v128_to_neon_i8(a), (lane) & 15)) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_replace_lane(a, lane, value) simde_wasm_i8x16_replace_lane((a), (lane), (value)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_replace_lane (simde_v128_t a, const int lane, int16_t value) { + simde_v128_private a_ = simde_v128_to_private(a); + a_.i16[lane & 7] = value; + return simde_v128_from_private(a_); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_i16x8_replace_lane(a, lane, value) wasm_i16x8_replace_lane((a), (lane), (value)) +#elif defined(SIMDE_X86_SSE2_NATIVE) + #define simde_wasm_i16x8_replace_lane(a, lane, value) _mm_insert_epi16((a), (value), (lane) & 7) +#elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) && !defined(SIMDE_BUG_CLANG_BAD_VGET_SET_LANE_TYPES) + #define simde_wasm_i16x8_replace_lane(a, lane, value) simde_v128_from_neon_i16(vsetq_lane_s16((value), simde_v128_to_neon_i16(a), (lane) & 7)) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_replace_lane(a, lane, value) simde_wasm_i16x8_replace_lane((a), (lane), (value)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_replace_lane (simde_v128_t a, const int lane, int32_t value) { + simde_v128_private a_ = simde_v128_to_private(a); + a_.i32[lane & 3] = value; + return simde_v128_from_private(a_); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_i32x4_replace_lane(a, lane, value) wasm_i32x4_replace_lane((a), (lane), (value)) +#elif defined(SIMDE_X86_SSE4_1_NATIVE) + #if defined(__clang__) && !SIMDE_DETECT_CLANG_VERSION_CHECK(7,0,0) + #define simde_wasm_i32x4_replace_lane(a, lane, value) HEDLEY_REINTERPRET_CAST(simde_v128_t, _mm_insert_epi32((a), (value), (lane) & 3)) + #else + #define simde_wasm_i32x4_replace_lane(a, lane, value) _mm_insert_epi32((a), (value), (lane) & 3) + #endif +#elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) && !defined(SIMDE_BUG_CLANG_BAD_VGET_SET_LANE_TYPES) + #define simde_wasm_i32x4_replace_lane(a, lane, value) simde_v128_from_neon_i32(vsetq_lane_s32((value), simde_v128_to_neon_i32(a), (lane) & 3)) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_replace_lane(a, lane, value) simde_wasm_i32x4_replace_lane((a), (lane), (value)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_replace_lane (simde_v128_t a, const int lane, int64_t value) { + simde_v128_private a_ = simde_v128_to_private(a); + a_.i64[lane & 1] = value; + return simde_v128_from_private(a_); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_i64x2_replace_lane(a, lane, value) wasm_i64x2_replace_lane((a), (lane), (value)) +#elif defined(SIMDE_X86_SSE4_1_NATIVE) && defined(SIMDE_ARCH_AMD64) + #define simde_wasm_i64x2_replace_lane(a, lane, value) _mm_insert_epi64((a), (value), (lane) & 1) +#elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) && !defined(SIMDE_BUG_CLANG_BAD_VGET_SET_LANE_TYPES) + #define simde_wasm_i64x2_replace_lane(a, lane, value) simde_v128_from_neon_i64(vsetq_lane_s64((value), simde_v128_to_neon_i64(a), (lane) & 1)) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_replace_lane(a, lane, value) simde_wasm_i64x2_replace_lane((a), (lane), (value)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_replace_lane (simde_v128_t a, const int lane, simde_float32 value) { + simde_v128_private a_ = simde_v128_to_private(a); + a_.f32[lane & 3] = value; + return simde_v128_from_private(a_); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_f32x4_replace_lane(a, lane, value) wasm_f32x4_replace_lane((a), (lane), (value)) +#elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) && !defined(SIMDE_BUG_CLANG_BAD_VGET_SET_LANE_TYPES) + #define simde_wasm_f32x4_replace_lane(a, lane, value) simde_v128_from_neon_f32(vsetq_lane_f32((value), simde_v128_to_neon_f32(a), (lane) & 3)) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_replace_lane(a, lane, value) simde_wasm_f32x4_replace_lane((a), (lane), (value)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_replace_lane (simde_v128_t a, const int lane, simde_float64 value) { + simde_v128_private a_ = simde_v128_to_private(a); + a_.f64[lane & 1] = value; + return simde_v128_from_private(a_); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_f64x2_replace_lane(a, lane, value) wasm_f64x2_replace_lane((a), (lane), (value)) +#elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) && !defined(SIMDE_BUG_CLANG_BAD_VGET_SET_LANE_TYPES) + #define simde_wasm_f64x2_replace_lane(a, lane, value) simde_v128_from_neon_f64(vsetq_lane_f64((value), simde_v128_to_neon_f64(a), (lane) & 1)) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_replace_lane(a, lane, value) simde_wasm_f64x2_replace_lane((a), (lane), (value)) +#endif + +/* eq */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_eq (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_eq(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_cmpeq_epi8(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u8 = vceqq_s8(a_.neon_i8, b_.neon_i8); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i8 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i8), a_.i8 == b_.i8); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = (a_.i8[i] == b_.i8[i]) ? ~INT8_C(0) : INT8_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_eq(a, b) simde_wasm_i8x16_eq((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_eq (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_eq(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_cmpeq_epi16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vceqq_s16(a_.neon_i16, b_.neon_i16); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i16 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i16), a_.i16 == b_.i16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = (a_.i16[i] == b_.i16[i]) ? ~INT16_C(0) : INT16_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_eq(a, b) simde_wasm_i16x8_eq((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_eq (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_eq(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_cmpeq_epi32(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vceqq_s32(a_.neon_i32, b_.neon_i32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.i32 == b_.i32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = (a_.i32[i] == b_.i32[i]) ? ~INT32_C(0) : INT32_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_eq(a, b) simde_wasm_i32x4_eq((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_eq (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_eq(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cmpeq_epi64(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_u64 = vceqq_s64(a_.neon_i64, b_.neon_i64); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i64 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i64), a_.i64 == b_.i64); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = (a_.i64[i] == b_.i64[i]) ? ~INT64_C(0) : INT64_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_eq(a, b) simde_wasm_i64x2_eq((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_eq (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_eq(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128 = _mm_cmpeq_ps(a_.sse_m128, b_.sse_m128); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vceqq_f32(a_.neon_f32, b_.neon_f32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.f32 == b_.f32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.i32[i] = (a_.f32[i] == b_.f32[i]) ? ~INT32_C(0) : INT32_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_eq(a, b) simde_wasm_f32x4_eq((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_eq (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_eq(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_cmpeq_pd(a_.sse_m128d, b_.sse_m128d); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_u64 = vceqq_f64(a_.neon_f64, b_.neon_f64); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.f64 == b_.f64); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.i64[i] = (a_.f64[i] == b_.f64[i]) ? ~INT64_C(0) : INT64_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_eq(a, b) simde_wasm_f64x2_eq((a), (b)) +#endif + +/* ne */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_ne (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_ne(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u8 = vmvnq_u8(vceqq_s8(a_.neon_i8, b_.neon_i8)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i8 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i8), a_.i8 != b_.i8); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = (a_.i8[i] != b_.i8[i]) ? ~INT8_C(0) : INT8_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_ne(a, b) simde_wasm_i8x16_ne((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_ne (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_ne(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vmvnq_u16(vceqq_s16(a_.neon_i16, b_.neon_i16)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i16 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i16), a_.i16 != b_.i16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = (a_.i16[i] != b_.i16[i]) ? ~INT16_C(0) : INT16_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_ne(a, b) simde_wasm_i16x8_ne((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_ne (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_ne(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vmvnq_u32(vceqq_s32(a_.neon_i32, b_.neon_i32)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.i32 != b_.i32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = (a_.i32[i] != b_.i32[i]) ? ~INT32_C(0) : INT32_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_ne(a, b) simde_wasm_i32x4_ne((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_ne (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_ne(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_u32 = vmvnq_u32(vreinterpretq_u32_u64(vceqq_s64(a_.neon_i64, b_.neon_i64))); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i64 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i64), a_.i64 != b_.i64); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = (a_.i64[i] != b_.i64[i]) ? ~INT64_C(0) : INT64_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_ne(a, b) simde_wasm_i64x2_ne((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_ne (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_ne(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128 = _mm_cmpneq_ps(a_.sse_m128, b_.sse_m128); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vmvnq_u32(vceqq_f32(a_.neon_f32, b_.neon_f32)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.f32 != b_.f32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.i32[i] = (a_.f32[i] != b_.f32[i]) ? ~INT32_C(0) : INT32_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_ne(a, b) simde_wasm_f32x4_ne((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_ne (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_ne(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_cmpneq_pd(a_.sse_m128d, b_.sse_m128d); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_u32 = vmvnq_u32(vreinterpretq_u32_u64(vceqq_f64(a_.neon_f64, b_.neon_f64))); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.f64 != b_.f64); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.i64[i] = (a_.f64[i] != b_.f64[i]) ? ~INT64_C(0) : INT64_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_ne(a, b) simde_wasm_f64x2_ne((a), (b)) +#endif + +/* lt */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_lt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_lt(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_cmplt_epi8(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u8 = vcltq_s8(a_.neon_i8, b_.neon_i8); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i8 = HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed char), vec_cmplt(a_.altivec_i8, b_.altivec_i8)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i8 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i8), a_.i8 < b_.i8); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = (a_.i8[i] < b_.i8[i]) ? ~INT8_C(0) : INT8_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_lt(a, b) simde_wasm_i8x16_lt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_lt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_lt(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_cmplt_epi16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vcltq_s16(a_.neon_i16, b_.neon_i16); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i16 = HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed short), vec_cmplt(a_.altivec_i16, b_.altivec_i16)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i16 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i16), a_.i16 < b_.i16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = (a_.i16[i] < b_.i16[i]) ? ~INT16_C(0) : INT16_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_lt(a, b) simde_wasm_i16x8_lt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_lt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_lt(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_cmplt_epi32(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vcltq_s32(a_.neon_i32, b_.neon_i32); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i32 = HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed int), vec_cmplt(a_.altivec_i32, b_.altivec_i32)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.i32 < b_.i32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = (a_.i32[i] < b_.i32[i]) ? ~INT32_C(0) : INT32_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_lt(a, b) simde_wasm_i32x4_lt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_lt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_lt(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_u64 = vcltq_s64(a_.neon_i64, b_.neon_i64); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + int32x4_t tmp = vorrq_s32( + vandq_s32( + vreinterpretq_s32_u32(vceqq_s32(b_.neon_i32, a_.neon_i32)), + vsubq_s32(a_.neon_i32, b_.neon_i32) + ), + vreinterpretq_s32_u32(vcgtq_s32(b_.neon_i32, a_.neon_i32)) + ); + int32x4x2_t trn = vtrnq_s32(tmp, tmp); + r_.neon_i32 = trn.val[1]; + #elif defined(SIMDE_X86_SSE4_2_NATIVE) + r_.sse_m128i = _mm_cmpgt_epi64(b_.sse_m128i, a_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + /* https://stackoverflow.com/a/65175746 */ + r_.sse_m128i = + _mm_shuffle_epi32( + _mm_or_si128( + _mm_and_si128( + _mm_cmpeq_epi32(b_.sse_m128i, a_.sse_m128i), + _mm_sub_epi64(a_.sse_m128i, b_.sse_m128i) + ), + _mm_cmpgt_epi32( + b_.sse_m128i, + a_.sse_m128i + ) + ), + _MM_SHUFFLE(3, 3, 1, 1) + ); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(signed int) tmp = + vec_or( + vec_and( + HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed int), vec_cmpeq(b_.altivec_i32, a_.altivec_i32)), + HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed int), vec_sub( + HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed long long), a_.altivec_i32), + HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed long long), b_.altivec_i32) + )) + ), + vec_cmpgt(b_.altivec_i32, a_.altivec_i32) + ); + r_.altivec_i32 = vec_mergeo(tmp, tmp); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i64 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i64), a_.i64 < b_.i64); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = (a_.i64[i] < b_.i64[i]) ? ~INT64_C(0) : INT64_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_lt(a, b) simde_wasm_i64x2_lt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u8x16_lt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u8x16_lt(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u8 = vcltq_u8(a_.neon_u8, b_.neon_u8); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u8 = HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(unsigned char), vec_cmplt(a_.altivec_u8, b_.altivec_u8)); + #elif defined(SIMDE_X86_SSE2_NATIVE) + __m128i tmp = _mm_subs_epu8(b_.sse_m128i, a_.sse_m128i); + r_.sse_m128i = _mm_adds_epu8(tmp, _mm_sub_epi8(_mm_setzero_si128(), tmp)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.u8 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.u8), a_.u8 < b_.u8); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u8) / sizeof(r_.u8[0])) ; i++) { + r_.u8[i] = (a_.u8[i] < b_.u8[i]) ? ~UINT8_C(0) : UINT8_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u8x16_lt(a, b) simde_wasm_u8x16_lt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_lt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_lt(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vcltq_u16(a_.neon_u16, b_.neon_u16); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u16 = HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(unsigned short), vec_cmplt(a_.altivec_u16, b_.altivec_u16)); + #elif defined(SIMDE_X86_SSE2_NATIVE) + __m128i tmp = _mm_subs_epu16(b_.sse_m128i, a_.sse_m128i); + r_.sse_m128i = _mm_adds_epu16(tmp, _mm_sub_epi16(_mm_setzero_si128(), tmp)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.u16 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.u16), a_.u16 < b_.u16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { + r_.u16[i] = (a_.u16[i] < b_.u16[i]) ? ~UINT16_C(0) : UINT16_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_lt(a, b) simde_wasm_u16x8_lt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_lt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_lt(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vcltq_u32(a_.neon_u32, b_.neon_u32); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = + _mm_xor_si128( + _mm_cmpgt_epi32(b_.sse_m128i, a_.sse_m128i), + _mm_srai_epi32(_mm_xor_si128(b_.sse_m128i, a_.sse_m128i), 31) + ); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u32 = HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(unsigned int), vec_cmplt(a_.altivec_u32, b_.altivec_u32)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.u32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.u32), a_.u32 < b_.u32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u32) / sizeof(r_.u32[0])) ; i++) { + r_.u32[i] = (a_.u32[i] < b_.u32[i]) ? ~UINT32_C(0) : UINT32_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_lt(a, b) simde_wasm_u32x4_lt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_lt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_lt(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128 = _mm_cmplt_ps(a_.sse_m128, b_.sse_m128); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vcltq_f32(a_.neon_f32, b_.neon_f32); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_f32 = HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(float), vec_cmplt(a_.altivec_f32, b_.altivec_f32)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.f32 < b_.f32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.i32[i] = (a_.f32[i] < b_.f32[i]) ? ~INT32_C(0) : INT32_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_lt(a, b) simde_wasm_f32x4_lt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_lt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_lt(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_cmplt_pd(a_.sse_m128d, b_.sse_m128d); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_u64 = vcltq_f64(a_.neon_f64, b_.neon_f64); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + r_.altivec_f64 = HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(double), vec_cmplt(a_.altivec_f64, b_.altivec_f64)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.f64 < b_.f64); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.i64[i] = (a_.f64[i] < b_.f64[i]) ? ~INT64_C(0) : INT64_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_lt(a, b) simde_wasm_f64x2_lt((a), (b)) +#endif + +/* gt */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_gt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_gt(a, b); + #else + return simde_wasm_i8x16_lt(b, a); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_gt(a, b) simde_wasm_i8x16_gt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_gt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_gt(a, b); + #else + return simde_wasm_i16x8_lt(b, a); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_gt(a, b) simde_wasm_i16x8_gt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_gt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_gt(a, b); + #else + return simde_wasm_i32x4_lt(b, a); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_gt(a, b) simde_wasm_i32x4_gt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_gt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_gt(a, b); + #else + return simde_wasm_i64x2_lt(b, a); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_gt(a, b) simde_wasm_i64x2_gt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u8x16_gt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u8x16_gt(a, b); + #else + return simde_wasm_u8x16_lt(b, a); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u8x16_gt(a, b) simde_wasm_u8x16_gt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_gt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_gt(a, b); + #else + return simde_wasm_u16x8_lt(b, a); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_gt(a, b) simde_wasm_u16x8_gt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_gt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_gt(a, b); + #else + return simde_wasm_u32x4_lt(b, a); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_gt(a, b) simde_wasm_u32x4_gt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_gt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_gt(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128 = _mm_cmpgt_ps(a_.sse_m128, b_.sse_m128); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vcgtq_f32(a_.neon_f32, b_.neon_f32); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_f32 = HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(float), vec_cmpgt(a_.altivec_f32, b_.altivec_f32)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.f32 > b_.f32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.i32[i] = (a_.f32[i] > b_.f32[i]) ? ~INT32_C(0) : INT32_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_gt(a, b) simde_wasm_f32x4_gt((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_gt (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_gt(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_cmpgt_pd(a_.sse_m128d, b_.sse_m128d); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_u64 = vcgtq_f64(a_.neon_f64, b_.neon_f64); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + r_.altivec_f64 = HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(double), vec_cmpgt(a_.altivec_f64, b_.altivec_f64)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i64 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i64), a_.f64 > b_.f64); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.i64[i] = (a_.f64[i] > b_.f64[i]) ? ~INT64_C(0) : INT64_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_gt(a, b) simde_wasm_f64x2_gt((a), (b)) +#endif + +/* le */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_le (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_le(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cmpeq_epi8(a_.sse_m128i, _mm_min_epi8(a_.sse_m128i, b_.sse_m128i)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u8 = vcleq_s8(a_.neon_i8, b_.neon_i8); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i8 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i8), a_.i8 <= b_.i8); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = (a_.i8[i] <= b_.i8[i]) ? ~INT8_C(0) : INT8_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_le(a, b) simde_wasm_i8x16_le((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_le (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_le(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cmpeq_epi16(a_.sse_m128i, _mm_min_epi16(a_.sse_m128i, b_.sse_m128i)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vcleq_s16(a_.neon_i16, b_.neon_i16); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i16 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i16), a_.i16 <= b_.i16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = (a_.i16[i] <= b_.i16[i]) ? ~INT16_C(0) : INT16_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_le(a, b) simde_wasm_i16x8_le((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_le (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_le(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cmpeq_epi32(a_.sse_m128i, _mm_min_epi32(a_.sse_m128i, b_.sse_m128i)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vcleq_s32(a_.neon_i32, b_.neon_i32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.i32 <= b_.i32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = (a_.i32[i] <= b_.i32[i]) ? ~INT32_C(0) : INT32_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_le(a, b) simde_wasm_i32x4_le((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_le (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_le(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_AVX512VL_NATIVE) + r_.sse_m128i = _mm_cmpeq_epi64(a_.sse_m128i, _mm_min_epi64(a_.sse_m128i, b_.sse_m128i)); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_u64 = vcleq_s64(a_.neon_i64, b_.neon_i64); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i64 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i64), a_.i64 <= b_.i64); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = (a_.i64[i] <= b_.i64[i]) ? ~INT64_C(0) : INT64_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_le(a, b) simde_wasm_i64x2_le((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u8x16_le (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u8x16_le(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u8 = vcleq_u8(a_.neon_u8, b_.neon_u8); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.u8 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.u8), a_.u8 <= b_.u8); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u8) / sizeof(r_.u8[0])) ; i++) { + r_.u8[i] = (a_.u8[i] <= b_.u8[i]) ? ~UINT8_C(0) : UINT8_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u8x16_le(a, b) simde_wasm_u8x16_le((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_le (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_le(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vcleq_u16(a_.neon_u16, b_.neon_u16); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.u16 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.u16), a_.u16 <= b_.u16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { + r_.u16[i] = (a_.u16[i] <= b_.u16[i]) ? ~UINT16_C(0) : UINT16_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_le(a, b) simde_wasm_u16x8_le((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_le (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_le(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vcleq_u32(a_.neon_u32, b_.neon_u32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.u32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.u32), a_.u32 <= b_.u32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u32) / sizeof(r_.u32[0])) ; i++) { + r_.u32[i] = (a_.u32[i] <= b_.u32[i]) ? ~UINT32_C(0) : UINT32_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_le(a, b) simde_wasm_u32x4_le((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_le (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_le(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128 = _mm_cmple_ps(a_.sse_m128, b_.sse_m128); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vcleq_f32(a_.neon_f32, b_.neon_f32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.f32 <= b_.f32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.i32[i] = (a_.f32[i] <= b_.f32[i]) ? ~INT32_C(0) : INT32_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_le(a, b) simde_wasm_f32x4_le((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_le (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_le(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_cmple_pd(a_.sse_m128d, b_.sse_m128d); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_u64 = vcleq_f64(a_.neon_f64, b_.neon_f64); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.f64 <= b_.f64); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.i64[i] = (a_.f64[i] <= b_.f64[i]) ? ~INT64_C(0) : INT64_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_le(a, b) simde_wasm_f64x2_le((a), (b)) +#endif + +/* ge */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_ge (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_ge(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cmpeq_epi8(_mm_min_epi8(a_.sse_m128i, b_.sse_m128i), b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u8 = vcgeq_s8(a_.neon_i8, b_.neon_i8); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i8 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i8), a_.i8 >= b_.i8); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = (a_.i8[i] >= b_.i8[i]) ? ~INT8_C(0) : INT8_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_ge(a, b) simde_wasm_i8x16_ge((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_ge (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_ge(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cmpeq_epi16(_mm_min_epi16(a_.sse_m128i, b_.sse_m128i), b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vcgeq_s16(a_.neon_i16, b_.neon_i16); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i16 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i16), a_.i16 >= b_.i16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = (a_.i16[i] >= b_.i16[i]) ? ~INT16_C(0) : INT16_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_ge(a, b) simde_wasm_i16x8_ge((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_ge (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_ge(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cmpeq_epi32(_mm_min_epi32(a_.sse_m128i, b_.sse_m128i), b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vcgeq_s32(a_.neon_i32, b_.neon_i32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.i32 >= b_.i32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = (a_.i32[i] >= b_.i32[i]) ? ~INT32_C(0) : INT32_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_ge(a, b) simde_wasm_i32x4_ge((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_ge (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_ge(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_AVX512VL_NATIVE) + r_.sse_m128i = _mm_cmpeq_epi64(_mm_min_epi64(a_.sse_m128i, b_.sse_m128i), b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_u64 = vcgeq_s64(a_.neon_i64, b_.neon_i64); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i64 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i64), a_.i64 >= b_.i64); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = (a_.i64[i] >= b_.i64[i]) ? ~INT64_C(0) : INT64_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_ge(a, b) simde_wasm_i64x2_ge((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u8x16_ge (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u8x16_ge(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cmpeq_epi8(_mm_min_epu8(a_.sse_m128i, b_.sse_m128i), b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u8 = vcgeq_u8(a_.neon_u8, b_.neon_u8); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.u8 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.u8), a_.u8 >= b_.u8); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u8) / sizeof(r_.u8[0])) ; i++) { + r_.u8[i] = (a_.u8[i] >= b_.u8[i]) ? ~UINT8_C(0) : UINT8_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u8x16_ge(a, b) simde_wasm_u8x16_ge((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_ge (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_ge(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cmpeq_epi16(_mm_min_epu16(a_.sse_m128i, b_.sse_m128i), b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vcgeq_u16(a_.neon_u16, b_.neon_u16); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.u16 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.u16), a_.u16 >= b_.u16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { + r_.u16[i] = (a_.u16[i] >= b_.u16[i]) ? ~UINT16_C(0) : UINT16_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_ge(a, b) simde_wasm_u16x8_ge((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_ge (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_ge(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cmpeq_epi32(_mm_min_epu32(a_.sse_m128i, b_.sse_m128i), b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vcgeq_u32(a_.neon_u32, b_.neon_u32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.u32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.u32), a_.u32 >= b_.u32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u32) / sizeof(r_.u32[0])) ; i++) { + r_.u32[i] = (a_.u32[i] >= b_.u32[i]) ? ~UINT32_C(0) : UINT32_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_ge(a, b) simde_wasm_u32x4_ge((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_ge (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_ge(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128 = _mm_cmpge_ps(a_.sse_m128, b_.sse_m128); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vcgeq_f32(a_.neon_f32, b_.neon_f32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.f32 >= b_.f32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.i32[i] = (a_.f32[i] >= b_.f32[i]) ? ~INT32_C(0) : INT32_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_ge(a, b) simde_wasm_f32x4_ge((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_ge (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_ge(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_cmpge_pd(a_.sse_m128d, b_.sse_m128d); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_u64 = vcgeq_f64(a_.neon_f64, b_.neon_f64); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.f64 >= b_.f64); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.i64[i] = (a_.f64[i] >= b_.f64[i]) ? ~INT64_C(0) : INT64_C(0); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_ge(a, b) simde_wasm_f64x2_ge((a), (b)) +#endif + +/* not */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_not (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_v128_not(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_xor_si128(a_.sse_m128i, _mm_set1_epi32(~INT32_C(0))); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vmvnq_s32(a_.neon_i32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32f = ~a_.i32f; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32f) / sizeof(r_.i32f[0])) ; i++) { + r_.i32f[i] = ~(a_.i32f[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_not(a) simde_wasm_v128_not((a)) +#endif + +/* and */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_and (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_v128_and(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_and_si128(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vandq_s32(a_.neon_i32, b_.neon_i32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32f = a_.i32f & b_.i32f; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32f) / sizeof(r_.i32f[0])) ; i++) { + r_.i32f[i] = a_.i32f[i] & b_.i32f[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_and(a, b) simde_wasm_v128_and((a), (b)) +#endif + +/* or */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_or (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_v128_or(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_or_si128(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vorrq_s32(a_.neon_i32, b_.neon_i32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32f = a_.i32f | b_.i32f; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32f) / sizeof(r_.i32f[0])) ; i++) { + r_.i32f[i] = a_.i32f[i] | b_.i32f[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_or(a, b) simde_wasm_v128_or((a), (b)) +#endif + +/* xor */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_xor (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_v128_xor(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_xor_si128(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = veorq_s32(a_.neon_i32, b_.neon_i32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32f = a_.i32f ^ b_.i32f; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32f) / sizeof(r_.i32f[0])) ; i++) { + r_.i32f[i] = a_.i32f[i] ^ b_.i32f[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_xor(a, b) simde_wasm_v128_xor((a), (b)) +#endif + +/* andnot */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_andnot (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_v128_andnot(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_andnot_si128(b_.sse_m128i, a_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vbicq_s32(a_.neon_i32, b_.neon_i32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32f = a_.i32f & ~b_.i32f; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32f) / sizeof(r_.i32f[0])) ; i++) { + r_.i32f[i] = a_.i32f[i] & ~b_.i32f[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_andnot(a, b) simde_wasm_v128_andnot((a), (b)) +#endif + +/* bitselect */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_bitselect (simde_v128_t a, simde_v128_t b, simde_v128_t mask) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_v128_bitselect(a, b, mask); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + mask_ = simde_v128_to_private(mask), + r_; + + #if defined(SIMDE_X86_AVX512VL_NATIVE) + r_.sse_m128i = _mm_ternarylogic_epi32(mask_.sse_m128i, a_.sse_m128i, b_.sse_m128i, 0xca); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = + _mm_or_si128( + _mm_and_si128 (mask_.sse_m128i, a_.sse_m128i), + _mm_andnot_si128(mask_.sse_m128i, b_.sse_m128i)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vbslq_s32(mask_.neon_u32, a_.neon_i32, b_.neon_i32); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_i32 = vec_sel(b_.altivec_i32, a_.altivec_i32, mask_.altivec_u32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32f = (a_.i32f & mask_.i32f) | (b_.i32f & ~mask_.i32f); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32f) / sizeof(r_.i32f[0])) ; i++) { + r_.i32f[i] = (a_.i32f[i] & mask_.i32f[i]) | (b_.i32f[i] & ~mask_.i32f[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_bitselect(a, b, c) simde_wasm_v128_bitselect((a), (b), (c)) +#endif + +/* bitmask */ + +SIMDE_FUNCTION_ATTRIBUTES +uint32_t +simde_wasm_i8x16_bitmask (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_bitmask(a); + #else + simde_v128_private a_ = simde_v128_to_private(a); + uint32_t r = 0; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r = HEDLEY_STATIC_CAST(uint32_t, _mm_movemask_epi8(a_.sse_m128i)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + /* https://github.com/WebAssembly/simd/pull/201#issue-380682845 */ + static const uint8_t md[16] = { + 1 << 0, 1 << 1, 1 << 2, 1 << 3, + 1 << 4, 1 << 5, 1 << 6, 1 << 7, + 1 << 0, 1 << 1, 1 << 2, 1 << 3, + 1 << 4, 1 << 5, 1 << 6, 1 << 7, + }; + + /* Extend sign bit over entire lane */ + uint8x16_t extended = vreinterpretq_u8_s8(vshrq_n_s8(a_.neon_i8, 7)); + /* Clear all but the bit we're interested in. */ + uint8x16_t masked = vandq_u8(vld1q_u8(md), extended); + /* Alternate bytes from low half and high half */ + uint8x8x2_t tmp = vzip_u8(vget_low_u8(masked), vget_high_u8(masked)); + uint16x8_t x = vreinterpretq_u16_u8(vcombine_u8(tmp.val[0], tmp.val[1])); + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r = vaddvq_u16(x); + #else + uint64x2_t t64 = vpaddlq_u32(vpaddlq_u16(x)); + r = + HEDLEY_STATIC_CAST(uint32_t, vgetq_lane_u64(t64, 0)) + + HEDLEY_STATIC_CAST(uint32_t, vgetq_lane_u64(t64, 1)); + #endif + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) && defined(SIMDE_BUG_CLANG_50932) + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) idx = { 120, 112, 104, 96, 88, 80, 72, 64, 56, 48, 40, 32, 24, 16, 8, 0 }; + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) res = HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(unsigned char), vec_bperm(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(unsigned __int128), a_.altivec_u64), idx)); + r = HEDLEY_STATIC_CAST(uint32_t, vec_extract(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed int), res), 2)); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) idx = { 120, 112, 104, 96, 88, 80, 72, 64, 56, 48, 40, 32, 24, 16, 8, 0 }; + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) res = vec_bperm(a_.altivec_u8, idx); + r = HEDLEY_STATIC_CAST(uint32_t, vec_extract(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed int), res), 2)); + #else + SIMDE_VECTORIZE_REDUCTION(|:r) + for (size_t i = 0 ; i < (sizeof(a_.i8) / sizeof(a_.i8[0])) ; i++) { + r |= HEDLEY_STATIC_CAST(uint32_t, (a_.i8[i] < 0) << i); + } + #endif + + return r; + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_bitmask(a) simde_wasm_i8x16_bitmask((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +uint32_t +simde_wasm_i16x8_bitmask (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_bitmask(a); + #else + simde_v128_private a_ = simde_v128_to_private(a); + uint32_t r = 0; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r = HEDLEY_STATIC_CAST(uint32_t, _mm_movemask_epi8(_mm_packs_epi16(a_.sse_m128i, _mm_setzero_si128()))); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + static const uint16_t md[8] = { + 1 << 0, 1 << 1, 1 << 2, 1 << 3, + 1 << 4, 1 << 5, 1 << 6, 1 << 7, + }; + + uint16x8_t extended = vreinterpretq_u16_s16(vshrq_n_s16(a_.neon_i16, 15)); + uint16x8_t masked = vandq_u16(vld1q_u16(md), extended); + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r = vaddvq_u16(masked); + #else + uint64x2_t t64 = vpaddlq_u32(vpaddlq_u16(masked)); + r = + HEDLEY_STATIC_CAST(uint32_t, vgetq_lane_u64(t64, 0)) + + HEDLEY_STATIC_CAST(uint32_t, vgetq_lane_u64(t64, 1)); + #endif + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) && defined(SIMDE_BUG_CLANG_50932) + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) idx = { 112, 96, 80, 64, 48, 32, 16, 0, 128, 128, 128, 128, 128, 128, 128, 128 }; + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) res = HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(unsigned char), vec_bperm(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(unsigned __int128), a_.altivec_u64), idx)); + r = HEDLEY_STATIC_CAST(uint32_t, vec_extract(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed int), res), 2)); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) idx = { 112, 96, 80, 64, 48, 32, 16, 0, 128, 128, 128, 128, 128, 128, 128, 128 }; + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) res = vec_bperm(a_.altivec_u8, idx); + r = HEDLEY_STATIC_CAST(uint32_t, vec_extract(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed int), res), 2)); + #else + SIMDE_VECTORIZE_REDUCTION(|:r) + for (size_t i = 0 ; i < (sizeof(a_.i16) / sizeof(a_.i16[0])) ; i++) { + r |= HEDLEY_STATIC_CAST(uint32_t, (a_.i16[i] < 0) << i); + } + #endif + + return r; + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_bitmask(a) simde_wasm_i16x8_bitmask((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +uint32_t +simde_wasm_i32x4_bitmask (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_bitmask(a); + #else + simde_v128_private a_ = simde_v128_to_private(a); + uint32_t r = 0; + + #if defined(SIMDE_X86_SSE_NATIVE) + r = HEDLEY_STATIC_CAST(uint32_t, _mm_movemask_ps(a_.sse_m128)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + static const uint32_t md[4] = { + 1 << 0, 1 << 1, 1 << 2, 1 << 3 + }; + + uint32x4_t extended = vreinterpretq_u32_s32(vshrq_n_s32(a_.neon_i32, 31)); + uint32x4_t masked = vandq_u32(vld1q_u32(md), extended); + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r = HEDLEY_STATIC_CAST(uint32_t, vaddvq_u32(masked)); + #else + uint64x2_t t64 = vpaddlq_u32(masked); + r = + HEDLEY_STATIC_CAST(uint32_t, vgetq_lane_u64(t64, 0)) + + HEDLEY_STATIC_CAST(uint32_t, vgetq_lane_u64(t64, 1)); + #endif + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) && defined(SIMDE_BUG_CLANG_50932) + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) idx = { 96, 64, 32, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }; + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) res = HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(unsigned char), vec_bperm(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(unsigned __int128), a_.altivec_u64), idx)); + r = HEDLEY_STATIC_CAST(uint32_t, vec_extract(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed int), res), 2)); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) idx = { 96, 64, 32, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }; + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) res = vec_bperm(a_.altivec_u8, idx); + r = HEDLEY_STATIC_CAST(uint32_t, vec_extract(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed int), res), 2)); + #else + SIMDE_VECTORIZE_REDUCTION(|:r) + for (size_t i = 0 ; i < (sizeof(a_.i32) / sizeof(a_.i32[0])) ; i++) { + r |= HEDLEY_STATIC_CAST(uint32_t, (a_.i32[i] < 0) << i); + } + #endif + + return r; + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_bitmask(a) simde_wasm_i32x4_bitmask((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +uint32_t +simde_wasm_i64x2_bitmask (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_bitmask(a); + #else + simde_v128_private a_ = simde_v128_to_private(a); + uint32_t r = 0; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r = HEDLEY_STATIC_CAST(uint32_t, _mm_movemask_pd(a_.sse_m128d)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + HEDLEY_DIAGNOSTIC_PUSH + SIMDE_DIAGNOSTIC_DISABLE_VECTOR_CONVERSION_ + uint64x2_t shifted = vshrq_n_u64(a_.neon_u64, 63); + r = + HEDLEY_STATIC_CAST(uint32_t, vgetq_lane_u64(shifted, 0)) + + (HEDLEY_STATIC_CAST(uint32_t, vgetq_lane_u64(shifted, 1)) << 1); + HEDLEY_DIAGNOSTIC_POP + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) && defined(SIMDE_BUG_CLANG_50932) + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) idx = { 64, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }; + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) res = HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(unsigned char), vec_bperm(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(unsigned __int128), a_.altivec_u64), idx)); + r = HEDLEY_STATIC_CAST(uint32_t, vec_extract(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed int), res), 2)); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) idx = { 64, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }; + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) res = vec_bperm(a_.altivec_u8, idx); + r = HEDLEY_STATIC_CAST(uint32_t, vec_extract(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed int), res), 2)); + #else + SIMDE_VECTORIZE_REDUCTION(|:r) + for (size_t i = 0 ; i < (sizeof(a_.i64) / sizeof(a_.i64[0])) ; i++) { + r |= HEDLEY_STATIC_CAST(uint32_t, (a_.i64[i] < 0) << i); + } + #endif + + return r; + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_bitmask(a) simde_wasm_i64x2_bitmask((a)) +#endif + +/* abs */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_abs (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_abs(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_abs_epi8(a_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i8 = vabsq_s8(a_.neon_i8); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i8 = vec_abs(a_.altivec_i8); + #elif defined(SIMDE_VECTOR_SCALAR) + __typeof__(r_.i8) mask = HEDLEY_REINTERPRET_CAST(__typeof__(mask), a_.i8 < 0); + r_.i8 = (-a_.i8 & mask) | (a_.i8 & ~mask); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = (a_.i8[i] < INT8_C(0)) ? -a_.i8[i] : a_.i8[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_abs(a) simde_wasm_i8x16_abs((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_abs (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_abs(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_abs_epi16(a_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vabsq_s16(a_.neon_i16); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i16 = vec_abs(a_.altivec_i16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = (a_.i16[i] < INT8_C(0)) ? -a_.i16[i] : a_.i16[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_abs(a) simde_wasm_i16x8_abs((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_abs (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_abs(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_abs_epi32(a_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_i32 = vabsq_s32(a_.neon_i32); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i32 = vec_abs(a_.altivec_i32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) + __typeof__(r_.i32) z = { 0, }; + __typeof__(r_.i32) m = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.i32 < z); + r_.i32 = (-a_.i32 & m) | (a_.i32 & ~m); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = (a_.i32[i] < INT32_C(0)) ? -a_.i32[i] : a_.i32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_abs(a) simde_wasm_i32x4_abs((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_abs (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_abs(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_AVX512VL_NATIVE) + r_.sse_m128i = _mm_abs_epi64(a_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_i64 = vabsq_s64(a_.neon_i64); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + r_.altivec_i64 = vec_abs(a_.altivec_i64); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) + __typeof__(r_.i64) z = { 0, }; + __typeof__(r_.i64) m = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i64), a_.i64 < z); + r_.i64 = (-a_.i64 & m) | (a_.i64 & ~m); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = (a_.i64[i] < INT64_C(0)) ? -a_.i64[i] : a_.i64[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_abs(a) simde_wasm_i64x2_abs((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_abs (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_abs(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_andnot_si128(_mm_set1_epi32(HEDLEY_STATIC_CAST(int32_t, UINT32_C(1) << 31)), a_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_f32 = vabsq_f32(a_.neon_f32); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_f32 = vec_abs(a_.altivec_f32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = simde_math_signbit(a_.f32[i]) ? -a_.f32[i] : a_.f32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_abs(a) simde_wasm_f32x4_abs((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_abs (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_abs(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_andnot_si128(_mm_set1_epi64x(HEDLEY_STATIC_CAST(int64_t, UINT64_C(1) << 63)), a_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_f64 = vabsq_f64(a_.neon_f64); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + r_.altivec_f64 = vec_abs(a_.altivec_f64); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = simde_math_signbit(a_.f64[i]) ? -a_.f64[i] : a_.f64[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_abs(a) simde_wasm_f64x2_abs((a)) +#endif + +/* neg */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_neg (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_neg(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_sub_epi8(_mm_setzero_si128(), a_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i8 = vnegq_s8(a_.neon_i8); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) && (!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(8,1,0)) + r_.altivec_i8 = vec_neg(a_.altivec_i8); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i8 = -a_.i8; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = -a_.i8[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_neg(a) simde_wasm_i8x16_neg((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_neg (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_neg(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_sub_epi16(_mm_setzero_si128(), a_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vnegq_s16(a_.neon_i16); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + r_.altivec_i16 = vec_neg(a_.altivec_i16); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i16 = -a_.i16; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = -a_.i16[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_neg(a) simde_wasm_i16x8_neg((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_neg (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_neg(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_sub_epi32(_mm_setzero_si128(), a_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vnegq_s32(a_.neon_i32); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + r_.altivec_i32 = vec_neg(a_.altivec_i32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = -a_.i32; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = -a_.i32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_neg(a) simde_wasm_i32x4_neg((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_neg (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_neg(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_sub_epi64(_mm_setzero_si128(), a_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_i64 = vnegq_s64(a_.neon_i64); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + r_.altivec_i64 = vec_neg(a_.altivec_i64); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i64 = -a_.i64; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = -a_.i64[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_neg(a) simde_wasm_i64x2_neg((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_neg (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_neg(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_xor_si128(_mm_set1_epi32(HEDLEY_STATIC_CAST(int32_t, UINT32_C(1) << 31)), a_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_f32 = vnegq_f32(a_.neon_f32); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + r_.altivec_f32 = vec_neg(a_.altivec_f32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.f32 = -a_.f32; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = -a_.f32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_neg(a) simde_wasm_f32x4_neg((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_neg (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_neg(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_xor_si128(_mm_set1_epi64x(HEDLEY_STATIC_CAST(int64_t, UINT64_C(1) << 63)), a_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_f64 = vnegq_f64(a_.neon_f64); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + r_.altivec_f64 = vec_neg(a_.altivec_f64); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.f64 = -a_.f64; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = -a_.f64[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_neg(a) simde_wasm_f64x2_neg((a)) +#endif + +/* any_true */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_bool +simde_wasm_v128_any_true (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_v128_any_true(a); + #else + simde_v128_private a_ = simde_v128_to_private(a); + simde_bool r = 0; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r = !_mm_test_all_zeros(a_.sse_m128i, _mm_set1_epi32(~INT32_C(0))); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r = _mm_movemask_epi8(_mm_cmpeq_epi8(a_.sse_m128i, _mm_setzero_si128())) != 0xffff; + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r = !!vmaxvq_u32(a_.neon_u32); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + uint32x2_t tmp = vpmax_u32(vget_low_u32(a_.u32), vget_high_u32(a_.u32)); + r = vget_lane_u32(tmp, 0); + r |= vget_lane_u32(tmp, 1); + r = !!r; + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r = HEDLEY_STATIC_CAST(simde_bool, vec_any_ne(a_.altivec_i32, vec_splats(0))); + #else + int_fast32_t ri = 0; + SIMDE_VECTORIZE_REDUCTION(|:ri) + for (size_t i = 0 ; i < (sizeof(a_.i32f) / sizeof(a_.i32f[0])) ; i++) { + ri |= (a_.i32f[i]); + } + r = !!ri; + #endif + + return r; + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_any_true(a) simde_wasm_v128_any_true((a)) +#endif + +/* all_true */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_bool +simde_wasm_i8x16_all_true (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_all_true(a); + #else + simde_v128_private a_ = simde_v128_to_private(a); + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + return _mm_test_all_zeros(_mm_cmpeq_epi8(a_.sse_m128i, _mm_set1_epi8(INT8_C(0))), _mm_set1_epi8(~INT8_C(0))); + #elif defined(SIMDE_X86_SSE2_NATIVE) + return _mm_movemask_epi8(_mm_cmpeq_epi8(a_.sse_m128i, _mm_setzero_si128())) == 0; + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return !vmaxvq_u8(vceqzq_u8(a_.neon_u8)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + uint8x16_t zeroes = vdupq_n_u8(0); + uint8x16_t false_set = vceqq_u8(a_.neon_u8, vdupq_n_u8(0)); + uint32x4_t d_all_true = vceqq_u32(vreinterpretq_u32_u8(false_set), vreinterpretq_u32_u8(zeroes)); + uint32x2_t q_all_true = vpmin_u32(vget_low_u32(d_all_true), vget_high_u32(d_all_true)); + + return !!( + vget_lane_u32(q_all_true, 0) & + vget_lane_u32(q_all_true, 1)); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + return HEDLEY_STATIC_CAST(simde_bool, vec_all_ne(a_.altivec_i8, vec_splats(HEDLEY_STATIC_CAST(signed char, 0)))); + #else + int8_t r = !INT8_C(0); + + SIMDE_VECTORIZE_REDUCTION(&:r) + for (size_t i = 0 ; i < (sizeof(a_.i8) / sizeof(a_.i8[0])) ; i++) { + r &= !!(a_.i8[i]); + } + + return r; + #endif + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_all_true(a) simde_wasm_i8x16_all_true((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_bool +simde_wasm_i16x8_all_true (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_all_true(a); + #else + simde_v128_private a_ = simde_v128_to_private(a); + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + return _mm_test_all_zeros(_mm_cmpeq_epi16(a_.sse_m128i, _mm_setzero_si128()), _mm_set1_epi16(~INT16_C(0))); + #elif defined(SIMDE_X86_SSE2_NATIVE) + return _mm_movemask_epi8(_mm_cmpeq_epi16(a_.sse_m128i, _mm_setzero_si128())) == 0; + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return !vmaxvq_u16(vceqzq_u16(a_.neon_u16)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + uint16x8_t zeroes = vdupq_n_u16(0); + uint16x8_t false_set = vceqq_u16(a_.neon_u16, vdupq_n_u16(0)); + uint32x4_t d_all_true = vceqq_u32(vreinterpretq_u32_u16(false_set), vreinterpretq_u32_u16(zeroes)); + uint32x2_t q_all_true = vpmin_u32(vget_low_u32(d_all_true), vget_high_u32(d_all_true)); + + return !!( + vget_lane_u32(q_all_true, 0) & + vget_lane_u32(q_all_true, 1)); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + return HEDLEY_STATIC_CAST(simde_bool, vec_all_ne(a_.altivec_i16, vec_splats(HEDLEY_STATIC_CAST(signed short, 0)))); + #else + int16_t r = !INT16_C(0); + + SIMDE_VECTORIZE_REDUCTION(&:r) + for (size_t i = 0 ; i < (sizeof(a_.i16) / sizeof(a_.i16[0])) ; i++) { + r &= !!(a_.i16[i]); + } + + return r; + #endif + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_all_true(a) simde_wasm_i16x8_all_true((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_bool +simde_wasm_i32x4_all_true (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_all_true(a); + #else + simde_v128_private a_ = simde_v128_to_private(a); + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + return _mm_test_all_zeros(_mm_cmpeq_epi32(a_.sse_m128i, _mm_setzero_si128()), _mm_set1_epi32(~INT32_C(0))); + #elif defined(SIMDE_X86_SSE2_NATIVE) + return _mm_movemask_ps(_mm_castsi128_ps(_mm_cmpeq_epi32(a_.sse_m128i, _mm_setzero_si128()))) == 0; + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + return !vmaxvq_u32(vceqzq_u32(a_.neon_u32)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + uint32x4_t d_all_true = vmvnq_u32(vceqq_u32(a_.neon_u32, vdupq_n_u32(0))); + uint32x2_t q_all_true = vpmin_u32(vget_low_u32(d_all_true), vget_high_u32(d_all_true)); + + return !!( + vget_lane_u32(q_all_true, 0) & + vget_lane_u32(q_all_true, 1)); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + return HEDLEY_STATIC_CAST(simde_bool, vec_all_ne(a_.altivec_i32, vec_splats(HEDLEY_STATIC_CAST(signed int, 0)))); + #else + int32_t r = !INT32_C(0); + + SIMDE_VECTORIZE_REDUCTION(&:r) + for (size_t i = 0 ; i < (sizeof(a_.i32) / sizeof(a_.i32[0])) ; i++) { + r &= !!(a_.i32[i]); + } + + return r; + #endif + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_all_true(a) simde_wasm_i32x4_all_true((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_bool +simde_wasm_i64x2_all_true (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) && defined(__wasm_unimplemented_simd128__) + return wasm_i64x2_all_true(a); + #else + simde_v128_private a_ = simde_v128_to_private(a); + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + return _mm_test_all_zeros(_mm_cmpeq_epi64(a_.sse_m128i, _mm_setzero_si128()), _mm_set1_epi32(~INT32_C(0))); + #elif defined(SIMDE_X86_SSE2_NATIVE) + return _mm_movemask_pd(_mm_cmpeq_pd(a_.sse_m128d, _mm_setzero_pd())) == 0; + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + return HEDLEY_STATIC_CAST(simde_bool, vec_all_ne(a_.altivec_i64, HEDLEY_REINTERPRET_CAST(__typeof__(a_.altivec_i64), vec_splats(0)))); + #else + int64_t r = !INT32_C(0); + + SIMDE_VECTORIZE_REDUCTION(&:r) + for (size_t i = 0 ; i < (sizeof(a_.i64) / sizeof(a_.i64[0])) ; i++) { + r &= !!(a_.i64[i]); + } + + return r; + #endif + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) || (defined(SIMDE_ENABLE_NATIVE_ALIASES) && !defined(__wasm_unimplemented_simd128__)) + #define wasm_i64x2_all_true(a) simde_wasm_i64x2_all_true((a)) +#endif + +/* shl */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_shl (simde_v128_t a, uint32_t count) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_shl(a, count); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i8 = vshlq_s8(a_.neon_i8, vdupq_n_s8(HEDLEY_STATIC_CAST(int8_t, count & 7))); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i8 = vec_sl(a_.altivec_i8, vec_splats(HEDLEY_STATIC_CAST(unsigned char, count & 7))); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) && defined(SIMDE_VECTOR_SCALAR) + r_.i8 = a_.i8 << (count & 7); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = HEDLEY_STATIC_CAST(int8_t, a_.i8[i] << (count & 7)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_shl(a, count) simde_wasm_i8x16_shl((a), (count)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_shl (simde_v128_t a, uint32_t count) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_shl(a, count); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + return _mm_sll_epi16(a_.sse_m128i, _mm_cvtsi32_si128(count & 15)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vshlq_s16(a_.neon_i16, vdupq_n_s16(HEDLEY_STATIC_CAST(int16_t, count & 15))); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i16 = vec_sl(a_.altivec_i16, vec_splats(HEDLEY_STATIC_CAST(unsigned short, count & 15))); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) && defined(SIMDE_VECTOR_SCALAR) + r_.i16 = a_.i16 << (count & 15); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = HEDLEY_STATIC_CAST(int16_t, a_.i16[i] << (count & 15)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_shl(a, count) simde_wasm_i16x8_shl((a), (count)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_shl (simde_v128_t a, uint32_t count) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_shl(a, count); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + return _mm_sll_epi32(a_.sse_m128i, _mm_cvtsi32_si128(count & 31)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vshlq_s32(a_.neon_i32, vdupq_n_s32(HEDLEY_STATIC_CAST(int32_t, count & 31))); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i32 = vec_sl(a_.altivec_i32, vec_splats(HEDLEY_STATIC_CAST(unsigned int, count & 31))); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) && defined(SIMDE_VECTOR_SCALAR) + r_.i32 = a_.i32 << (count & 31); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = HEDLEY_STATIC_CAST(int32_t, a_.i32[i] << (count & 31)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_shl(a, count) simde_wasm_i32x4_shl((a), (count)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_shl (simde_v128_t a, uint32_t count) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + #if defined(SIMDE_BUG_CLANG_60655) + count = count & 63; + #endif + return wasm_i64x2_shl(a, count); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + return _mm_sll_epi64(a_.sse_m128i, _mm_cvtsi32_si128(count & 63)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i64 = vshlq_s64(a_.neon_i64, vdupq_n_s64(HEDLEY_STATIC_CAST(int64_t, count & 63))); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + r_.altivec_i64 = vec_sl(a_.altivec_i64, vec_splats(HEDLEY_STATIC_CAST(unsigned long long, count & 63))); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) && defined(SIMDE_VECTOR_SCALAR) + r_.i64 = a_.i64 << (count & 63); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = HEDLEY_STATIC_CAST(int64_t, a_.i64[i] << (count & 63)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_shl(a, count) simde_wasm_i64x2_shl((a), (count)) +#endif + +/* shr */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_shr (simde_v128_t a, uint32_t count) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_shr(a, count); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i8 = vshlq_s8(a_.neon_i8, vdupq_n_s8(-HEDLEY_STATIC_CAST(int8_t, count & 7))); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i8 = vec_sra(a_.altivec_i8, vec_splats(HEDLEY_STATIC_CAST(unsigned char, count & 7))); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) && defined(SIMDE_VECTOR_SCALAR) + r_.i8 = a_.i8 >> (count & 7); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = HEDLEY_STATIC_CAST(int8_t, a_.i8[i] >> (count & 7)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_shr(a, count) simde_wasm_i8x16_shr((a), (count)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_shr (simde_v128_t a, uint32_t count) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_shr(a, count); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + return _mm_sra_epi16(a_.sse_m128i, _mm_cvtsi32_si128(count & 15)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vshlq_s16(a_.neon_i16, vdupq_n_s16(-HEDLEY_STATIC_CAST(int16_t, count & 15))); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i16 = vec_sra(a_.altivec_i16, vec_splats(HEDLEY_STATIC_CAST(unsigned short, count & 15))); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) && defined(SIMDE_VECTOR_SCALAR) + r_.i16 = a_.i16 >> (count & 15); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = HEDLEY_STATIC_CAST(int16_t, a_.i16[i] >> (count & 15)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_shr(a, count) simde_wasm_i16x8_shr((a), (count)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_shr (simde_v128_t a, uint32_t count) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_shr(a, count); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + return _mm_sra_epi32(a_.sse_m128i, _mm_cvtsi32_si128(count & 31)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vshlq_s32(a_.neon_i32, vdupq_n_s32(-HEDLEY_STATIC_CAST(int32_t, count & 31))); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i32 = vec_sra(a_.altivec_i32, vec_splats(HEDLEY_STATIC_CAST(unsigned int, count & 31))); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) && defined(SIMDE_VECTOR_SCALAR) + r_.i32 = a_.i32 >> (count & 31); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = HEDLEY_STATIC_CAST(int32_t, a_.i32[i] >> (count & 31)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_shr(a, count) simde_wasm_i32x4_shr((a), (count)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_shr (simde_v128_t a, uint32_t count) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + #if defined(SIMDE_BUG_CLANG_60655) + count = count & 63; + #endif + return wasm_i64x2_shr(a, count); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_AVX512VL_NATIVE) + return _mm_sra_epi64(a_.sse_m128i, _mm_cvtsi32_si128(count & 63)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i64 = vshlq_s64(a_.neon_i64, vdupq_n_s64(-HEDLEY_STATIC_CAST(int64_t, count & 63))); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + r_.altivec_i64 = vec_sra(a_.altivec_i64, vec_splats(HEDLEY_STATIC_CAST(unsigned long long, count & 63))); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) && defined(SIMDE_VECTOR_SCALAR) + r_.i64 = a_.i64 >> (count & 63); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = HEDLEY_STATIC_CAST(int64_t, a_.i64[i] >> (count & 63)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_shr(a, count) simde_wasm_i64x2_shr((a), (count)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u8x16_shr (simde_v128_t a, uint32_t count) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u8x16_shr(a, count); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u8 = vshlq_u8(a_.neon_u8, vdupq_n_s8(-HEDLEY_STATIC_CAST(int8_t, count & 7))); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u8 = vec_sr(a_.altivec_u8, vec_splats(HEDLEY_STATIC_CAST(unsigned char, count & 7))); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) && defined(SIMDE_VECTOR_SCALAR) + r_.u8 = a_.u8 >> (count & 7); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u8) / sizeof(r_.u8[0])) ; i++) { + r_.u8[i] = HEDLEY_STATIC_CAST(uint8_t, a_.u8[i] >> (count & 7)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u8x16_shr(a, count) simde_wasm_u8x16_shr((a), (count)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_shr (simde_v128_t a, uint32_t count) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_shr(a, count); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + return _mm_srl_epi16(a_.sse_m128i, _mm_cvtsi32_si128(count & 15)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vshlq_u16(a_.neon_u16, vdupq_n_s16(-HEDLEY_STATIC_CAST(int16_t, count & 15))); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u16 = vec_sr(a_.altivec_u16, vec_splats(HEDLEY_STATIC_CAST(unsigned short, count & 15))); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) && defined(SIMDE_VECTOR_SCALAR) + r_.u16 = a_.u16 >> (count & 15); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { + r_.u16[i] = HEDLEY_STATIC_CAST(uint16_t, a_.u16[i] >> (count & 15)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_shr(a, count) simde_wasm_u16x8_shr((a), (count)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_shr (simde_v128_t a, uint32_t count) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_shr(a, count); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + return _mm_srl_epi32(a_.sse_m128i, _mm_cvtsi32_si128(count & 31)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vshlq_u32(a_.neon_u32, vdupq_n_s32(-HEDLEY_STATIC_CAST(int32_t, count & 31))); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u32 = vec_sr(a_.altivec_u32, vec_splats(HEDLEY_STATIC_CAST(unsigned int, count & 31))); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) && defined(SIMDE_VECTOR_SCALAR) + r_.u32 = a_.u32 >> (count & 31); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u32) / sizeof(r_.u32[0])) ; i++) { + r_.u32[i] = HEDLEY_STATIC_CAST(uint32_t, a_.u32[i] >> (count & 31)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_shr(a, count) simde_wasm_u32x4_shr((a), (count)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u64x2_shr (simde_v128_t a, uint32_t count) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + #if defined(SIMDE_BUG_CLANG_60655) + count = count & 63; + #endif + return wasm_u64x2_shr(a, count); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + return _mm_srl_epi64(a_.sse_m128i, _mm_cvtsi32_si128(count & 63)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u64 = vshlq_u64(a_.neon_u64, vdupq_n_s64(-HEDLEY_STATIC_CAST(int64_t, count & 63))); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + r_.altivec_u64 = vec_sr(a_.altivec_u64, vec_splats(HEDLEY_STATIC_CAST(unsigned long long, count & 63))); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) && defined(SIMDE_VECTOR_SCALAR) + r_.u64 = a_.u64 >> (count & 63); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u64) / sizeof(r_.u64[0])) ; i++) { + r_.u64[i] = HEDLEY_STATIC_CAST(uint64_t, a_.u64[i] >> (count & 63)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u64x2_shr(a, count) simde_wasm_u64x2_shr((a), (count)) +#endif + +/* add */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_add (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_add(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_add_epi8(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i8 = a_.i8 + b_.i8; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = a_.i8[i] + b_.i8[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_add(a, b) simde_wasm_i8x16_add((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_add (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_add(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_add_epi16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i16 = a_.i16 + b_.i16; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = a_.i16[i] + b_.i16[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_add(a, b) simde_wasm_i16x8_add((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_add (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_add(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_add_epi32(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = a_.i32 + b_.i32; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = a_.i32[i] + b_.i32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_add(a, b) simde_wasm_i32x4_add((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_add (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_add(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_add_epi64(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i64 = a_.i64 + b_.i64; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = a_.i64[i] + b_.i64[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_add(a, b) simde_wasm_i64x2_add((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_add (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_add(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128 = _mm_add_ps(a_.sse_m128, b_.sse_m128); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.f32 = a_.f32 + b_.f32; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = a_.f32[i] + b_.f32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_add(a, b) simde_wasm_f32x4_add((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_add (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_add(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_add_pd(a_.sse_m128d, b_.sse_m128d); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.f64 = a_.f64 + b_.f64; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = a_.f64[i] + b_.f64[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_add(a, b) simde_wasm_f64x2_add((a), (b)) +#endif + +/* sub */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_sub (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_sub(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_sub_epi8(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i8 = a_.i8 - b_.i8; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = a_.i8[i] - b_.i8[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_sub(a, b) simde_wasm_i8x16_sub((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_sub (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_sub(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_sub_epi16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i16 = a_.i16 - b_.i16; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = a_.i16[i] - b_.i16[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_sub(a, b) simde_wasm_i16x8_sub((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_sub (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_sub(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_sub_epi32(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = a_.i32 - b_.i32; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = a_.i32[i] - b_.i32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_sub(a, b) simde_wasm_i32x4_sub((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_sub (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_sub(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_sub_epi64(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i64 = a_.i64 - b_.i64; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = a_.i64[i] - b_.i64[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_sub(a, b) simde_wasm_i64x2_sub((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_sub (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_sub(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128 = _mm_sub_ps(a_.sse_m128, b_.sse_m128); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.f32 = a_.f32 - b_.f32; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = a_.f32[i] - b_.f32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_sub(a, b) simde_wasm_f32x4_sub((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_sub (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_sub(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_sub_pd(a_.sse_m128d, b_.sse_m128d); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.f64 = a_.f64 - b_.f64; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = a_.f64[i] - b_.f64[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_sub(a, b) simde_wasm_f64x2_sub((a), (b)) +#endif + +/* mul */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_mul (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_mul(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_mullo_epi16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vmulq_s16(a_.neon_i16, b_.neon_i16); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i16 = a_.i16 * b_.i16; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = a_.i16[i] * b_.i16[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_mul(a, b) simde_wasm_i16x8_mul((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_mul (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_mul(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_mullo_epi32(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i32 = a_.i32 * b_.i32; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = a_.i32[i] * b_.i32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_mul(a, b) simde_wasm_i32x4_mul((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_mul (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_mul(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_AVX512VL_NATIVE) && defined(SIMDE_X86_AVX512DQ_NATIVE) + r_.sse_m128i = _mm_mullo_epi64(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.i64 = a_.i64 * b_.i64; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = a_.i64[i] * b_.i64[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_mul(a, b) simde_wasm_i64x2_mul((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_mul (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_mul(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128 = _mm_mul_ps(a_.sse_m128, b_.sse_m128); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.f32 = a_.f32 * b_.f32; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = a_.f32[i] * b_.f32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_mul(a, b) simde_wasm_f32x4_mul((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_mul (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_mul(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_mul_pd(a_.sse_m128d, b_.sse_m128d); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.f64 = a_.f64 * b_.f64; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = a_.f64[i] * b_.f64[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_mul(a, b) simde_wasm_f64x2_mul((a), (b)) +#endif + +/* q15mulr_sat */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_q15mulr_sat (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_q15mulr_sat(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + /* https://github.com/WebAssembly/simd/pull/365 */ + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vqrdmulhq_s16(a_.neon_i16, b_.neon_i16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + int32_t tmp = HEDLEY_STATIC_CAST(int32_t, a_.i16[i]) * HEDLEY_STATIC_CAST(int32_t, b_.i16[i]); + tmp += UINT32_C(0x4000); + tmp >>= 15; + r_.i16[i] = (tmp < INT16_MIN) ? INT16_MIN : ((tmp > INT16_MAX) ? (INT16_MAX) : HEDLEY_STATIC_CAST(int16_t, tmp)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_q15mulr_sat(a, b) simde_wasm_i16x8_q15mulr_sat((a), (b)) +#endif + +/* min */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_min (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_min(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_min_epi8(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + __m128i m = _mm_cmplt_epi8(a_.sse_m128i, b_.sse_m128i); + r_.sse_m128i = + _mm_or_si128( + _mm_and_si128(m, a_.sse_m128i), + _mm_andnot_si128(m, b_.sse_m128i) + ); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i8 = vminq_s8(a_.neon_i8, b_.neon_i8); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i8 = vec_min(a_.altivec_i8, b_.altivec_i8); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = (a_.i8[i] < b_.i8[i]) ? a_.i8[i] : b_.i8[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_min(a, b) simde_wasm_i8x16_min((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_min (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_min(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_min_epi16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vminq_s16(a_.neon_i16, b_.neon_i16); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i16 = vec_min(a_.altivec_i16, b_.altivec_i16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = (a_.i16[i] < b_.i16[i]) ? a_.i16[i] : b_.i16[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_min(a, b) simde_wasm_i16x8_min((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_min (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_min(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_min_epi32(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + __m128i m = _mm_cmplt_epi32(a_.sse_m128i, b_.sse_m128i); + r_.sse_m128i = + _mm_or_si128( + _mm_and_si128(m, a_.sse_m128i), + _mm_andnot_si128(m, b_.sse_m128i) + ); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vminq_s32(a_.neon_i32, b_.neon_i32); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i32 = vec_min(a_.altivec_i32, b_.altivec_i32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = (a_.i32[i] < b_.i32[i]) ? a_.i32[i] : b_.i32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_min(a, b) simde_wasm_i32x4_min((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u8x16_min (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u8x16_min(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_min_epu8(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u8 = vminq_u8(a_.neon_u8, b_.neon_u8); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u8 = vec_min(a_.altivec_u8, b_.altivec_u8); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u8) / sizeof(r_.u8[0])) ; i++) { + r_.u8[i] = (a_.u8[i] < b_.u8[i]) ? a_.u8[i] : b_.u8[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u8x16_min(a, b) simde_wasm_u8x16_min((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_min (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_min(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_min_epu16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + /* https://github.com/simd-everywhere/simde/issues/855#issuecomment-881656284 */ + r_.sse_m128i = _mm_sub_epi16(a, _mm_subs_epu16(a_.sse_m128i, b_.sse_m128i)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vminq_u16(a_.neon_u16, b_.neon_u16); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u16 = vec_min(a_.altivec_u16, b_.altivec_u16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { + r_.u16[i] = (a_.u16[i] < b_.u16[i]) ? a_.u16[i] : b_.u16[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_min(a, b) simde_wasm_u16x8_min((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_min (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_min(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_min_epu32(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + const __m128i i32_min = _mm_set1_epi32(INT32_MIN); + const __m128i difference = _mm_sub_epi32(a_.sse_m128i, b_.sse_m128i); + __m128i m = + _mm_cmpeq_epi32( + /* _mm_subs_epu32(a_.sse_m128i, b_.sse_m128i) */ + _mm_and_si128( + difference, + _mm_xor_si128( + _mm_cmpgt_epi32( + _mm_xor_si128(difference, i32_min), + _mm_xor_si128(a_.sse_m128i, i32_min) + ), + _mm_set1_epi32(~INT32_C(0)) + ) + ), + _mm_setzero_si128() + ); + r_.sse_m128i = + _mm_or_si128( + _mm_and_si128(m, a_.sse_m128i), + _mm_andnot_si128(m, b_.sse_m128i) + ); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vminq_u32(a_.neon_u32, b_.neon_u32); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_u32 = vec_min(a_.altivec_u32, b_.altivec_u32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.u32[i] = (a_.u32[i] < b_.u32[i]) ? a_.u32[i] : b_.u32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_min(a, b) simde_wasm_u32x4_min((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_min (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_min(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) && (!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(6,0,0)) + // Inspired by https://github.com/v8/v8/blob/c750b6c85bd1ad1d27f7acc1812165f465515144/src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.cc#L202 + simde_v128_private scratch; + scratch.sse_m128 = a_.sse_m128; + scratch.sse_m128 = _mm_min_ps(scratch.sse_m128, b_.sse_m128); + r_.sse_m128 = b_.sse_m128; + r_.sse_m128 = _mm_min_ps(r_.sse_m128, a_.sse_m128); + scratch.sse_m128 = _mm_or_ps(scratch.sse_m128, r_.sse_m128); + r_.sse_m128 = _mm_cmpunord_ps(r_.sse_m128, scratch.sse_m128); + scratch.sse_m128 = _mm_or_ps(scratch.sse_m128, r_.sse_m128); + r_.sse_m128i = _mm_srli_epi32(r_.sse_m128i, 10); + r_.sse_m128 = _mm_andnot_ps(r_.sse_m128, scratch.sse_m128); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = SIMDE_WASM_SIMD128_FMINF(a_.f32[i], b_.f32[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_min(a, b) simde_wasm_f32x4_min((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_min (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_min(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) && (!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(6,0,0)) + // Inspired by https://github.com/v8/v8/blob/c750b6c85bd1ad1d27f7acc1812165f465515144/src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.cc#L263 + simde_v128_private scratch; + scratch.sse_m128d = a_.sse_m128d; + scratch.sse_m128d = _mm_min_pd(scratch.sse_m128d, b_.sse_m128d); + r_.sse_m128d = b_.sse_m128d; + r_.sse_m128d = _mm_min_pd(r_.sse_m128d, a_.sse_m128d); + scratch.sse_m128d = _mm_or_pd(scratch.sse_m128d, r_.sse_m128d); + r_.sse_m128d = _mm_cmpunord_pd(r_.sse_m128d, scratch.sse_m128d); + scratch.sse_m128d = _mm_or_pd(scratch.sse_m128d, r_.sse_m128d); + r_.sse_m128i = _mm_srli_epi64(r_.sse_m128i, 13); + r_.sse_m128d = _mm_andnot_pd(r_.sse_m128d, scratch.sse_m128d); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = SIMDE_WASM_SIMD128_FMIN(a_.f64[i], b_.f64[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_min(a, b) simde_wasm_f64x2_min((a), (b)) +#endif + +/* max */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_max (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_max(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_max_epi8(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + __m128i m = _mm_cmpgt_epi8(a_.sse_m128i, b_.sse_m128i); + r_.sse_m128i = _mm_or_si128(_mm_and_si128(m, a_.sse_m128i), _mm_andnot_si128(m, b_.sse_m128i)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i8 = vmaxq_s8(a_.neon_i8, b_.neon_i8); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_i8 = vec_max(a_.altivec_i8, b_.altivec_i8); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) + __typeof__(r_.i8) m = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i8), a_.i8 > b_.i8); + r_.i8 = (m & a_.i8) | (~m & b_.i8); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = (a_.i8[i] > b_.i8[i]) ? a_.i8[i] : b_.i8[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_max(a, b) simde_wasm_i8x16_max((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_max (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_max(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_max_epi16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vmaxq_s16(a_.neon_i16, b_.neon_i16); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_i16 = vec_max(a_.altivec_i16, b_.altivec_i16); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) + __typeof__(r_.i16) m = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i16), a_.i16 > b_.i16); + r_.i16 = (m & a_.i16) | (~m & b_.i16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = (a_.i16[i] > b_.i16[i]) ? a_.i16[i] : b_.i16[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_max(a, b) simde_wasm_i16x8_max((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_max (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_max(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_max_epi32(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + __m128i m = _mm_cmpgt_epi32(a_.sse_m128i, b_.sse_m128i); + r_.sse_m128i = _mm_or_si128(_mm_and_si128(m, a_.sse_m128i), _mm_andnot_si128(m, b_.sse_m128i)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vmaxq_s32(a_.neon_i32, b_.neon_i32); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_i32 = vec_max(a_.altivec_i32, b_.altivec_i32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) + __typeof__(r_.i32) m = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.i32 > b_.i32); + r_.i32 = (m & a_.i32) | (~m & b_.i32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = (a_.i32[i] > b_.i32[i]) ? a_.i32[i] : b_.i32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_max(a, b) simde_wasm_i32x4_max((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u8x16_max (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u8x16_max(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_max_epu8(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u8 = vmaxq_u8(a_.neon_u8, b_.neon_u8); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_u8 = vec_max(a_.altivec_u8, b_.altivec_u8); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) + __typeof__(r_.u8) m = HEDLEY_REINTERPRET_CAST(__typeof__(r_.u8), a_.u8 > b_.u8); + r_.u8 = (m & a_.u8) | (~m & b_.u8); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u8) / sizeof(r_.u8[0])) ; i++) { + r_.u8[i] = (a_.u8[i] > b_.u8[i]) ? a_.u8[i] : b_.u8[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u8x16_max(a, b) simde_wasm_u8x16_max((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_max (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_max(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_max_epu16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + /* https://github.com/simd-everywhere/simde/issues/855#issuecomment-881656284 */ + r_.sse_m128i = _mm_add_epi16(b, _mm_subs_epu16(a_.sse_m128i, b_.sse_m128i)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vmaxq_u16(a_.neon_u16, b_.neon_u16); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_u16 = vec_max(a_.altivec_u16, b_.altivec_u16); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) + __typeof__(r_.u16) m = HEDLEY_REINTERPRET_CAST(__typeof__(r_.u16), a_.u16 > b_.u16); + r_.u16 = (m & a_.u16) | (~m & b_.u16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { + r_.u16[i] = (a_.u16[i] > b_.u16[i]) ? a_.u16[i] : b_.u16[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_max(a, b) simde_wasm_u16x8_max((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_max (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_max(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_max_epu32(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + /* https://github.com/simd-everywhere/simde/issues/855#issuecomment-886057227 */ + __m128i m = + _mm_xor_si128( + _mm_cmpgt_epi32(a_.sse_m128i, b_.sse_m128i), + _mm_srai_epi32(_mm_xor_si128(a_.sse_m128i, b_.sse_m128i), 31) + ); + r_.sse_m128i = _mm_or_si128(_mm_and_si128(m, a_.sse_m128i), _mm_andnot_si128(m, b_.sse_m128i)); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vmaxq_u32(a_.neon_u32, b_.neon_u32); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_u32 = vec_max(a_.altivec_u32, b_.altivec_u32); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) + __typeof__(r_.u32) m = HEDLEY_REINTERPRET_CAST(__typeof__(r_.u32), a_.u32 > b_.u32); + r_.u32 = (m & a_.u32) | (~m & b_.u32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.u32[i] = (a_.u32[i] > b_.u32[i]) ? a_.u32[i] : b_.u32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_max(a, b) simde_wasm_u32x4_max((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_max (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_max(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) && (!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(6,0,0)) + // Inspired by https://github.com/v8/v8/blob/c750b6c85bd1ad1d27f7acc1812165f465515144/src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.cc#L231 + simde_v128_private scratch; + scratch.sse_m128 = a_.sse_m128; + scratch.sse_m128 = _mm_max_ps(scratch.sse_m128, b_.sse_m128); + r_.sse_m128 = b_.sse_m128; + r_.sse_m128 = _mm_max_ps(r_.sse_m128, a_.sse_m128); + r_.sse_m128 = _mm_xor_ps(r_.sse_m128, scratch.sse_m128); + scratch.sse_m128 = _mm_or_ps(scratch.sse_m128, r_.sse_m128); + scratch.sse_m128 = _mm_sub_ps(scratch.sse_m128, r_.sse_m128); + r_.sse_m128 = _mm_cmpunord_ps(r_.sse_m128, scratch.sse_m128); + r_.sse_m128i = _mm_srli_epi32(r_.sse_m128i, 10); + r_.sse_m128 = _mm_andnot_ps(r_.sse_m128, scratch.sse_m128); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = SIMDE_WASM_SIMD128_FMAXF(a_.f32[i], b_.f32[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_max(a, b) simde_wasm_f32x4_max((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_max (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_max(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) && (!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(6,0,0)) + // Inspired by https://github.com/v8/v8/blob/c750b6c85bd1ad1d27f7acc1812165f465515144/src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.cc#L301 + simde_v128_private scratch; + scratch.sse_m128d = a_.sse_m128d; + scratch.sse_m128d = _mm_max_pd(scratch.sse_m128d, b_.sse_m128d); + r_.sse_m128d = b_.sse_m128d; + r_.sse_m128d = _mm_max_pd(r_.sse_m128d, a_.sse_m128d); + r_.sse_m128d = _mm_xor_pd(r_.sse_m128d, scratch.sse_m128d); + scratch.sse_m128d = _mm_or_pd(scratch.sse_m128d, r_.sse_m128d); + scratch.sse_m128d = _mm_sub_pd(scratch.sse_m128d, r_.sse_m128d); + r_.sse_m128d = _mm_cmpunord_pd(r_.sse_m128d, scratch.sse_m128d); + r_.sse_m128i = _mm_srli_epi64(r_.sse_m128i, 13); + r_.sse_m128d = _mm_andnot_pd(r_.sse_m128d, scratch.sse_m128d); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = SIMDE_WASM_SIMD128_FMAX(a_.f64[i], b_.f64[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_max(a, b) simde_wasm_f64x2_max((a), (b)) +#endif + +/* add_sat */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_add_sat (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_add_sat(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_adds_epi8(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i8 = vqaddq_s8(a_.neon_i8, b_.neon_i8); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i8 = vec_adds(a_.altivec_i8, b_.altivec_i8); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) + __typeof__(a_.u8) r1, r2, m; + r1 = a_.u8 + b_.u8; + r2 = (a_.u8 >> 7) + INT8_MAX; + m = HEDLEY_REINTERPRET_CAST(__typeof__(m), HEDLEY_REINTERPRET_CAST(__typeof__(r_.i8), (r2 ^ b_.u8) | ~(b_.u8 ^ r1)) < 0); + r_.i8 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i8), (r1 & m) | (r2 & ~m)); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = simde_math_adds_i8(a_.i8[i], b_.i8[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_add_sat(a, b) simde_wasm_i8x16_add_sat((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_add_sat (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_add_sat(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_adds_epi16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vqaddq_s16(a_.neon_i16, b_.neon_i16); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i16 = vec_adds(a_.altivec_i16, b_.altivec_i16); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) + __typeof__(a_.u16) r1, r2, m; + r1 = a_.u16 + b_.u16; + r2 = (a_.u16 >> 15) + INT16_MAX; + m = HEDLEY_REINTERPRET_CAST(__typeof__(m), HEDLEY_REINTERPRET_CAST(__typeof__(r_.i16), (r2 ^ b_.u16) | ~(b_.u16 ^ r1)) < 0); + r_.i16 = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i16), (r1 & m) | (r2 & ~m)); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = simde_math_adds_i16(a_.i16[i], b_.i16[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_add_sat(a, b) simde_wasm_i16x8_add_sat((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u8x16_add_sat (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u8x16_add_sat(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_adds_epu8(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u8 = vqaddq_u8(a_.neon_u8, b_.neon_u8); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u8 = vec_adds(a_.altivec_u8, b_.altivec_u8); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) + r_.u8 = a_.u8 + b_.u8; + r_.u8 |= HEDLEY_REINTERPRET_CAST(__typeof__(r_.u8), r_.u8 < a_.u8); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u8) / sizeof(r_.u8[0])) ; i++) { + r_.u8[i] = simde_math_adds_u8(a_.u8[i], b_.u8[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u8x16_add_sat(a, b) simde_wasm_u8x16_add_sat((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_add_sat (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_add_sat(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_adds_epu16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vqaddq_u16(a_.neon_u16, b_.neon_u16); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u16 = vec_adds(a_.altivec_u16, b_.altivec_u16); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) + r_.u16 = a_.u16 + b_.u16; + r_.u16 |= HEDLEY_REINTERPRET_CAST(__typeof__(r_.u16), r_.u16 < a_.u16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { + r_.u16[i] = simde_math_adds_u16(a_.u16[i], b_.u16[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_add_sat(a, b) simde_wasm_u16x8_add_sat((a), (b)) +#endif + +/* avgr */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u8x16_avgr (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u8x16_avgr(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_avg_epu8(a_.sse_m128i, b_.sse_m128i); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u8) / sizeof(r_.u8[0])) ; i++) { + r_.u8[i] = (a_.u8[i] + b_.u8[i] + 1) >> 1; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u8x16_avgr(a, b) simde_wasm_u8x16_avgr((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_avgr (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_avgr(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_avg_epu16(a_.sse_m128i, b_.sse_m128i); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { + r_.u16[i] = (a_.u16[i] + b_.u16[i] + 1) >> 1; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_avgr(a, b) simde_wasm_u16x8_avgr((a), (b)) +#endif + +/* sub_sat */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_sub_sat (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_sub_sat(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_subs_epi8(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i8 = vqsubq_s8(a_.neon_i8, b_.neon_i8); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i8 = vec_subs(a_.altivec_i8, b_.altivec_i8); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) + const __typeof__(r_.i8) diff_sat = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i8), (b_.i8 > a_.i8) ^ INT8_MAX); + const __typeof__(r_.i8) diff = a_.i8 - b_.i8; + const __typeof__(r_.i8) saturate = diff_sat ^ diff; + const __typeof__(r_.i8) m = saturate >> 7; + r_.i8 = (diff_sat & m) | (diff & ~m); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = simde_math_subs_i8(a_.i8[i], b_.i8[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_sub_sat(a, b) simde_wasm_i8x16_sub_sat((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_sub_sat (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_sub_sat(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_subs_epi16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vqsubq_s16(a_.neon_i16, b_.neon_i16); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i16 = vec_subs(a_.altivec_i16, b_.altivec_i16); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) + const __typeof__(r_.i16) diff_sat = HEDLEY_REINTERPRET_CAST(__typeof__(r_.i16), (b_.i16 > a_.i16) ^ INT16_MAX); + const __typeof__(r_.i16) diff = a_.i16 - b_.i16; + const __typeof__(r_.i16) saturate = diff_sat ^ diff; + const __typeof__(r_.i16) m = saturate >> 15; + r_.i16 = (diff_sat & m) | (diff & ~m); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = simde_math_subs_i16(a_.i16[i], b_.i16[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_sub_sat(a, b) simde_wasm_i16x8_sub_sat((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u8x16_sub_sat (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u8x16_sub_sat(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_subs_epu8(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u8 = vqsubq_u8(a_.neon_u8, b_.neon_u8); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u8 = vec_subs(a_.altivec_u8, b_.altivec_u8); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) + r_.u8 = a_.u8 - b_.u8; + r_.u8 &= HEDLEY_REINTERPRET_CAST(__typeof__(r_.u8), r_.u8 <= a_.u8); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u8) / sizeof(r_.u8[0])) ; i++) { + r_.u8[i] = simde_math_subs_u8(a_.u8[i], b_.u8[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u8x16_sub_sat(a, b) simde_wasm_u8x16_sub_sat((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_sub_sat (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_sub_sat(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_subs_epu16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vqsubq_u16(a_.neon_u16, b_.neon_u16); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u16 = vec_subs(a_.altivec_u16, b_.altivec_u16); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) + r_.u16 = a_.u16 - b_.u16; + r_.u16 &= HEDLEY_REINTERPRET_CAST(__typeof__(r_.u16), r_.u16 <= a_.u16); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { + r_.u16[i] = simde_math_subs_u16(a_.u16[i], b_.u16[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_sub_sat(a, b) simde_wasm_u16x8_sub_sat((a), (b)) +#endif + +/* pmin */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_pmin (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_pmin(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128 = _mm_min_ps(b_.sse_m128, a_.sse_m128); + #elif defined(SIMDE_FAST_NANS) && defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_f32 = vminq_f32(a_.neon_f32, b_.neon_f32); + #elif defined(SIMDE_FAST_NANS) && defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_f32 = vec_min(a_.altivec_f32, b_.altivec_f32); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_f32 = + vbslq_f32( + vcltq_f32(b_.neon_f32, a_.neon_f32), + b_.neon_f32, + a_.neon_f32 + ); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_f32 = + vec_sel( + a_.altivec_f32, + b_.altivec_f32, + vec_cmpgt(a_.altivec_f32, b_.altivec_f32) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = (b_.f32[i] < a_.f32[i]) ? b_.f32[i] : a_.f32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_pmin(a, b) simde_wasm_f32x4_pmin((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_pmin (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_pmin(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_min_pd(b_.sse_m128d, a_.sse_m128d); + #elif defined(SIMDE_FAST_NANS) && defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_f32 = vminq_f64(a_.neon_f64, b_.neon_f64); + #elif defined(SIMDE_FAST_NANS) && defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + r_.altivec_f64 = vec_min(a_.altivec_f64, b_.altivec_f64); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_f64 = + vbslq_f64( + vcltq_f64(b_.neon_f64, a_.neon_f64), + b_.neon_f64, + a_.neon_f64 + ); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + r_.altivec_f64 = + vec_sel( + a_.altivec_f64, + b_.altivec_f64, + vec_cmpgt(a_.altivec_f64, b_.altivec_f64) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = (b_.f64[i] < a_.f64[i]) ? b_.f64[i] : a_.f64[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_pmin(a, b) simde_wasm_f64x2_pmin((a), (b)) +#endif + +/* pmax */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_pmax (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_pmax(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE_NATIVE) + r_.sse_m128 = _mm_max_ps(b_.sse_m128, a_.sse_m128); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_f32 = vbslq_f32(vcltq_f32(a_.neon_f32, b_.neon_f32), b_.neon_f32, a_.neon_f32); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_14_NATIVE) + r_.altivec_f32 = vec_sel(a_.altivec_f32, b_.altivec_f32, vec_cmplt(a_.altivec_f32, b_.altivec_f32)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) + int32_t SIMDE_VECTOR(16) m = HEDLEY_REINTERPRET_CAST(__typeof__(m), a_.f32 < b_.f32); + r_.f32 = + HEDLEY_REINTERPRET_CAST( + __typeof__(r_.f32), + ( + ( m & HEDLEY_REINTERPRET_CAST(__typeof__(m), b_.f32)) | + (~m & HEDLEY_REINTERPRET_CAST(__typeof__(m), a_.f32)) + ) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = (a_.f32[i] < b_.f32[i]) ? b_.f32[i] : a_.f32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_pmax(a, b) simde_wasm_f32x4_pmax((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_pmax (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_pmax(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_max_pd(b_.sse_m128d, a_.sse_m128d); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_f64 = vbslq_f64(vcltq_f64(a_.neon_f64, b_.neon_f64), b_.neon_f64, a_.neon_f64); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_f64 = vec_sel(a_.altivec_f64, b_.altivec_f64, vec_cmplt(a_.altivec_f64, b_.altivec_f64)); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) + int64_t SIMDE_VECTOR(16) m = HEDLEY_REINTERPRET_CAST(__typeof__(m), a_.f64 < b_.f64); + r_.f64 = + HEDLEY_REINTERPRET_CAST( + __typeof__(r_.f64), + ( + ( m & HEDLEY_REINTERPRET_CAST(__typeof__(m), b_.f64)) | + (~m & HEDLEY_REINTERPRET_CAST(__typeof__(m), a_.f64)) + ) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = (a_.f64[i] < b_.f64[i]) ? b_.f64[i] : a_.f64[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_pmax(a, b) simde_wasm_f64x2_pmax((a), (b)) +#endif + +/* div */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_div (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_div(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128 = _mm_div_ps(a_.sse_m128, b_.sse_m128); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.f32 = a_.f32 / b_.f32; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = a_.f32[i] / b_.f32[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_div(a, b) simde_wasm_f32x4_div((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_div (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_div(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_div_pd(a_.sse_m128d, b_.sse_m128d); + #elif defined(SIMDE_VECTOR_SUBSCRIPT) + r_.f64 = a_.f64 / b_.f64; + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = a_.f64[i] / b_.f64[i]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_div(a, b) simde_wasm_f64x2_div((a), (b)) +#endif + +/* shuffle */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_shuffle ( + simde_v128_t a, simde_v128_t b, + const int c0, const int c1, const int c2, const int c3, const int c4, const int c5, const int c6, const int c7, + const int c8, const int c9, const int c10, const int c11, const int c12, const int c13, const int c14, const int c15) { + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + r_.i8[ 0] = ( c0 < 16) ? a_.i8[ c0] : b_.i8[ c0 & 15]; + r_.i8[ 1] = ( c1 < 16) ? a_.i8[ c1] : b_.i8[ c1 & 15]; + r_.i8[ 2] = ( c2 < 16) ? a_.i8[ c2] : b_.i8[ c2 & 15]; + r_.i8[ 3] = ( c3 < 16) ? a_.i8[ c3] : b_.i8[ c3 & 15]; + r_.i8[ 4] = ( c4 < 16) ? a_.i8[ c4] : b_.i8[ c4 & 15]; + r_.i8[ 5] = ( c5 < 16) ? a_.i8[ c5] : b_.i8[ c5 & 15]; + r_.i8[ 6] = ( c6 < 16) ? a_.i8[ c6] : b_.i8[ c6 & 15]; + r_.i8[ 7] = ( c7 < 16) ? a_.i8[ c7] : b_.i8[ c7 & 15]; + r_.i8[ 8] = ( c8 < 16) ? a_.i8[ c8] : b_.i8[ c8 & 15]; + r_.i8[ 9] = ( c9 < 16) ? a_.i8[ c9] : b_.i8[ c9 & 15]; + r_.i8[10] = (c10 < 16) ? a_.i8[c10] : b_.i8[c10 & 15]; + r_.i8[11] = (c11 < 16) ? a_.i8[c11] : b_.i8[c11 & 15]; + r_.i8[12] = (c12 < 16) ? a_.i8[c12] : b_.i8[c12 & 15]; + r_.i8[13] = (c13 < 16) ? a_.i8[c13] : b_.i8[c13 & 15]; + r_.i8[14] = (c14 < 16) ? a_.i8[c14] : b_.i8[c14 & 15]; + r_.i8[15] = (c15 < 16) ? a_.i8[c15] : b_.i8[c15 & 15]; + + return simde_v128_from_private(r_); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define \ + simde_wasm_i8x16_shuffle( \ + a, b, \ + c0, c1, c2, c3, c4, c5, c6, c7, \ + c8, c9, c10, c11, c12, c13, c14, c15) \ + wasm_i8x16_shuffle( \ + a, b, \ + c0, c1, c2, c3, c4, c5, c6, c7, \ + c8, c9, c10, c11, c12, c13, c14, c15) +#elif defined(SIMDE_SHUFFLE_VECTOR_) + #define \ + simde_wasm_i8x16_shuffle( \ + a, b, \ + c0, c1, c2, c3, c4, c5, c6, c7, \ + c8, c9, c10, c11, c12, c13, c14, c15) \ + (__extension__ ({ \ + HEDLEY_REINTERPRET_CAST(simde_v128_t, SIMDE_SHUFFLE_VECTOR_(8, 16, \ + HEDLEY_REINTERPRET_CAST(int8_t SIMDE_VECTOR(16), a), \ + HEDLEY_REINTERPRET_CAST(int8_t SIMDE_VECTOR(16), b), \ + c0, c1, c2, c3, c4, c5, c6, c7, \ + c8, c9, c10, c11, c12, c13, c14, c15)); \ + })) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_i8x16_shuffle(a, b, \ + c0, c1, c2, c3, c4, c5, c6, c7, \ + c8, c9, c10, c11, c12, c13, c14, c15) \ + simde_wasm_i8x16_shuffle((a), (b), \ + (c0), (c1), (c2), (c3), (c4), (c5), (c6), (c7), \ + (c8), (c9), (c10), (c11), (c12), (c13), (c14), (c15)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_shuffle ( + simde_v128_t a, simde_v128_t b, + const int c0, const int c1, const int c2, const int c3, const int c4, const int c5, const int c6, const int c7) { + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + r_.i16[ 0] = (c0 < 8) ? a_.i16[ c0] : b_.i16[ c0 & 7]; + r_.i16[ 1] = (c1 < 8) ? a_.i16[ c1] : b_.i16[ c1 & 7]; + r_.i16[ 2] = (c2 < 8) ? a_.i16[ c2] : b_.i16[ c2 & 7]; + r_.i16[ 3] = (c3 < 8) ? a_.i16[ c3] : b_.i16[ c3 & 7]; + r_.i16[ 4] = (c4 < 8) ? a_.i16[ c4] : b_.i16[ c4 & 7]; + r_.i16[ 5] = (c5 < 8) ? a_.i16[ c5] : b_.i16[ c5 & 7]; + r_.i16[ 6] = (c6 < 8) ? a_.i16[ c6] : b_.i16[ c6 & 7]; + r_.i16[ 7] = (c7 < 8) ? a_.i16[ c7] : b_.i16[ c7 & 7]; + + return simde_v128_from_private(r_); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define \ + simde_wasm_i16x8_shuffle( \ + a, b, \ + c0, c1, c2, c3, c4, c5, c6, c7) \ + wasm_i16x8_shuffle( \ + a, b, \ + c0, c1, c2, c3, c4, c5, c6, c7) +#elif defined(SIMDE_SHUFFLE_VECTOR_) + #define \ + simde_wasm_i16x8_shuffle( \ + a, b, \ + c0, c1, c2, c3, c4, c5, c6, c7) \ + (__extension__ ({ \ + HEDLEY_REINTERPRET_CAST(simde_v128_t, SIMDE_SHUFFLE_VECTOR_(16, 16, \ + HEDLEY_REINTERPRET_CAST(int16_t SIMDE_VECTOR(16), a), \ + HEDLEY_REINTERPRET_CAST(int16_t SIMDE_VECTOR(16), b), \ + c0, c1, c2, c3, c4, c5, c6, c7)); \ + })) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_i16x8_shuffle(a, b, \ + c0, c1, c2, c3, c4, c5, c6, c7) \ + simde_wasm_i16x8_shuffle((a), (b), \ + (c0), (c1), (c2), (c3), (c4), (c5), (c6), (c7)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_shuffle ( + simde_v128_t a, simde_v128_t b, + const int c0, const int c1, const int c2, const int c3) { + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + r_.i32[ 0] = (c0 < 4) ? a_.i32[ c0] : b_.i32[ c0 & 3]; + r_.i32[ 1] = (c1 < 4) ? a_.i32[ c1] : b_.i32[ c1 & 3]; + r_.i32[ 2] = (c2 < 4) ? a_.i32[ c2] : b_.i32[ c2 & 3]; + r_.i32[ 3] = (c3 < 4) ? a_.i32[ c3] : b_.i32[ c3 & 3]; + + return simde_v128_from_private(r_); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define \ + simde_wasm_i32x4_shuffle( \ + a, b, \ + c0, c1, c2, c3) \ + wasm_i32x4_shuffle( \ + a, b, \ + c0, c1, c2, c3) +#elif defined(SIMDE_SHUFFLE_VECTOR_) + #define \ + simde_wasm_i32x4_shuffle( \ + a, b, \ + c0, c1, c2, c3) \ + (__extension__ ({ \ + HEDLEY_REINTERPRET_CAST(simde_v128_t, SIMDE_SHUFFLE_VECTOR_(32, 16, \ + HEDLEY_REINTERPRET_CAST(int32_t SIMDE_VECTOR(16), a), \ + HEDLEY_REINTERPRET_CAST(int32_t SIMDE_VECTOR(16), b), \ + c0, c1, c2, c3)); \ + })) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_i32x4_shuffle(a, b, \ + c0, c1, c2, c3) \ + simde_wasm_i32x4_shuffle((a), (b), \ + (c0), (c1), (c2), (c3)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_shuffle ( + simde_v128_t a, simde_v128_t b, + const int c0, const int c1) { + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + r_.i64[ 0] = (c0 < 2) ? a_.i64[ c0] : b_.i64[ c0 & 1]; + r_.i64[ 1] = (c1 < 2) ? a_.i64[ c1] : b_.i64[ c1 & 1]; + + return simde_v128_from_private(r_); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define \ + simde_wasm_i64x2_shuffle( \ + a, b, \ + c0, c1) \ + wasm_i64x2_shuffle( \ + a, b, \ + c0, c1) +#elif defined(SIMDE_SHUFFLE_VECTOR_) + #define \ + simde_wasm_i64x2_shuffle( \ + a, b, \ + c0, c1) \ + (__extension__ ({ \ + HEDLEY_REINTERPRET_CAST(simde_v128_t, SIMDE_SHUFFLE_VECTOR_(64, 16, \ + HEDLEY_REINTERPRET_CAST(int64_t SIMDE_VECTOR(16), a), \ + HEDLEY_REINTERPRET_CAST(int64_t SIMDE_VECTOR(16), b), \ + c0, c1)); \ + })) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define \ + wasm_i64x2_shuffle(a, b, \ + c0, c1) \ + simde_wasm_i64x2_shuffle((a), (b), \ + (c0), (c1)) +#endif + +/* swizzle */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_swizzle (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_swizzle(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + int8x8x2_t tmp = { { vget_low_s8(a_.neon_i8), vget_high_s8(a_.neon_i8) } }; + r_.neon_i8 = vcombine_s8( + vtbl2_s8(tmp, vget_low_s8(b_.neon_i8)), + vtbl2_s8(tmp, vget_high_s8(b_.neon_i8)) + ); + #elif defined(SIMDE_X86_SSSE3_NATIVE) + /* https://github.com/WebAssembly/simd/issues/68#issuecomment-470825324 */ + r_.sse_m128i = + _mm_shuffle_epi8( + a_.sse_m128i, + _mm_adds_epu8( + _mm_set1_epi8(0x70), + b_.sse_m128i)); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i8 = vec_perm( + a_.altivec_i8, + a_.altivec_i8, + b_.altivec_u8 + ); + r_.altivec_i8 = vec_and(r_.altivec_i8, vec_cmple(b_.altivec_u8, vec_splat_u8(15))); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + r_.i8[i] = (b_.u8[i] > 15) ? INT8_C(0) : a_.i8[b_.u8[i]]; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_swizzle(a, b) simde_wasm_i8x16_swizzle((a), (b)) +#endif + +/* narrow */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_narrow_i16x8 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_narrow_i16x8(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_i8 = vqmovn_high_s16(vqmovn_s16(a_.neon_i16), b_.neon_i16); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i8 = vcombine_s8(vqmovn_s16(a_.neon_i16), vqmovn_s16(b_.neon_i16)); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i8 = vec_packs(a_.altivec_i16, b_.altivec_i16); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_packs_epi16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_CONVERT_VECTOR_) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) + int16_t SIMDE_VECTOR(32) v = SIMDE_SHUFFLE_VECTOR_(16, 32, a_.i16, b_.i16, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + const int16_t SIMDE_VECTOR(32) min = { INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN }; + const int16_t SIMDE_VECTOR(32) max = { INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MAX }; + + int16_t m SIMDE_VECTOR(32); + m = HEDLEY_REINTERPRET_CAST(__typeof__(m), v < min); + v = (v & ~m) | (min & m); + + m = v > max; + v = (v & ~m) | (max & m); + + SIMDE_CONVERT_VECTOR_(r_.i8, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + int16_t v = (i < (sizeof(a_.i16) / sizeof(a_.i16[0]))) ? a_.i16[i] : b_.i16[i & 7]; + r_.i8[i] = (v < INT8_MIN) ? INT8_MIN : ((v > INT8_MAX) ? INT8_MAX : HEDLEY_STATIC_CAST(int8_t, v)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_narrow_i16x8(a, b) simde_wasm_i8x16_narrow_i16x8((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_narrow_i32x4 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_narrow_i32x4(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_i16 = vqmovn_high_s32(vqmovn_s32(a_.neon_i32), b_.neon_i32); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vcombine_s16(vqmovn_s32(a_.neon_i32), vqmovn_s32(b_.neon_i32)); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i16 = vec_packs(a_.altivec_i32, b_.altivec_i32); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_packs_epi32(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_CONVERT_VECTOR_) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) + int32_t SIMDE_VECTOR(32) v = SIMDE_SHUFFLE_VECTOR_(32, 32, a_.i32, b_.i32, 0, 1, 2, 3, 4, 5, 6, 7); + const int32_t SIMDE_VECTOR(32) min = { INT16_MIN, INT16_MIN, INT16_MIN, INT16_MIN, INT16_MIN, INT16_MIN, INT16_MIN, INT16_MIN }; + const int32_t SIMDE_VECTOR(32) max = { INT16_MAX, INT16_MAX, INT16_MAX, INT16_MAX, INT16_MAX, INT16_MAX, INT16_MAX, INT16_MAX }; + + int32_t m SIMDE_VECTOR(32); + m = HEDLEY_REINTERPRET_CAST(__typeof__(m), v < min); + v = (v & ~m) | (min & m); + + m = HEDLEY_REINTERPRET_CAST(__typeof__(m), v > max); + v = (v & ~m) | (max & m); + + SIMDE_CONVERT_VECTOR_(r_.i16, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + int32_t v = (i < (sizeof(a_.i32) / sizeof(a_.i32[0]))) ? a_.i32[i] : b_.i32[i & 3]; + r_.i16[i] = (v < INT16_MIN) ? INT16_MIN : ((v > INT16_MAX) ? INT16_MAX : HEDLEY_STATIC_CAST(int16_t, v)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_narrow_i32x4(a, b) simde_wasm_i16x8_narrow_i32x4((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u8x16_narrow_i16x8 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u8x16_narrow_i16x8(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + #if defined(SIMDE_BUG_CLANG_46840) + r_.neon_u8 = vqmovun_high_s16(vreinterpret_s8_u8(vqmovun_s16(a_.neon_i16)), b_.neon_i16); + #else + r_.neon_u8 = vqmovun_high_s16(vqmovun_s16(a_.neon_i16), b_.neon_i16); + #endif + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u8 = + vcombine_u8( + vqmovun_s16(a_.neon_i16), + vqmovun_s16(b_.neon_i16) + ); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_packus_epi16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u8 = vec_packsu(a_.altivec_i16, b_.altivec_i16); + #elif defined(SIMDE_CONVERT_VECTOR_) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) && defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) + int16_t v SIMDE_VECTOR(32) = SIMDE_SHUFFLE_VECTOR_(16, 32, a_.i16, b_.i16, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + + v &= ~(v >> 15); + v |= HEDLEY_REINTERPRET_CAST(__typeof__(v), v > UINT8_MAX); + + SIMDE_CONVERT_VECTOR_(r_.i8, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) { + int16_t v = (i < (sizeof(a_.i16) / sizeof(a_.i16[0]))) ? a_.i16[i] : b_.i16[i & 7]; + r_.u8[i] = (v < 0) ? UINT8_C(0) : ((v > UINT8_MAX) ? UINT8_MAX : HEDLEY_STATIC_CAST(uint8_t, v)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u8x16_narrow_i16x8(a, b) simde_wasm_u8x16_narrow_i16x8((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_narrow_i32x4 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_narrow_i32x4(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + #if defined(SIMDE_BUG_CLANG_46840) + r_.neon_u16 = vqmovun_high_s32(vreinterpret_s16_u16(vqmovun_s32(a_.neon_i32)), b_.neon_i32); + #else + r_.neon_u16 = vqmovun_high_s32(vqmovun_s32(a_.neon_i32), b_.neon_i32); + #endif + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = + vcombine_u16( + vqmovun_s32(a_.neon_i32), + vqmovun_s32(b_.neon_i32) + ); + #elif defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_packus_epi32(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + const __m128i max = _mm_set1_epi32(UINT16_MAX); + const __m128i tmpa = _mm_andnot_si128(_mm_srai_epi32(a_.sse_m128i, 31), a_.sse_m128i); + const __m128i tmpb = _mm_andnot_si128(_mm_srai_epi32(b_.sse_m128i, 31), b_.sse_m128i); + r_.sse_m128i = + _mm_packs_epi32( + _mm_srai_epi32(_mm_slli_epi32(_mm_or_si128(tmpa, _mm_cmpgt_epi32(tmpa, max)), 16), 16), + _mm_srai_epi32(_mm_slli_epi32(_mm_or_si128(tmpb, _mm_cmpgt_epi32(tmpb, max)), 16), 16) + ); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u16 = vec_packsu(a_.altivec_i32, b_.altivec_i32); + #elif defined(SIMDE_CONVERT_VECTOR_) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) && defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) + int32_t v SIMDE_VECTOR(32) = SIMDE_SHUFFLE_VECTOR_(32, 32, a_.i32, b_.i32, 0, 1, 2, 3, 4, 5, 6, 7); + + v &= ~(v >> 31); + v |= HEDLEY_REINTERPRET_CAST(__typeof__(v), v > UINT16_MAX); + + SIMDE_CONVERT_VECTOR_(r_.i16, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + int32_t v = (i < (sizeof(a_.i32) / sizeof(a_.i32[0]))) ? a_.i32[i] : b_.i32[i & 3]; + r_.u16[i] = (v < 0) ? UINT16_C(0) : ((v > UINT16_MAX) ? UINT16_MAX : HEDLEY_STATIC_CAST(uint16_t, v)); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_narrow_i32x4(a, b) simde_wasm_u16x8_narrow_i32x4((a), (b)) +#endif + +/* demote */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_demote_f64x2_zero (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_demote_f64x2_zero(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128 = _mm_cvtpd_ps(a_.sse_m128d); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_f32 = vcombine_f32(vcvt_f32_f64(a_.neon_f64), vdup_n_f32(0.0f)); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + r_.altivec_f32 = vec_floate(a_.altivec_f64); + #if defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + r_.altivec_f32 = + HEDLEY_REINTERPRET_CAST( + SIMDE_POWER_ALTIVEC_VECTOR(float), + vec_pack( + HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(long long), r_.altivec_f32), + HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(long long), vec_splat_s32(0)) + ) + ); + #else + const SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) perm = { + 0x00, 0x01, 0x02, 0x03, /* 0 */ + 0x08, 0x09, 0x0a, 0x0b, /* 2 */ + 0x10, 0x11, 0x12, 0x13, /* 4 */ + 0x18, 0x19, 0x1a, 0x1b /* 6 */ + }; + r_.altivec_f32 = vec_perm(r_.altivec_f32, HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(float), vec_splat_s32(0)), perm); + #endif + #elif HEDLEY_HAS_BUILTIN(__builtin_shufflevector) && HEDLEY_HAS_BUILTIN(__builtin_convertvector) + float __attribute__((__vector_size__(8))) z = { 0.0f, 0.0f }; + r_.f32 = __builtin_shufflevector(__builtin_convertvector(a_.f64, __typeof__(z)), z, 0, 1, 2, 3); + #else + r_.f32[0] = HEDLEY_STATIC_CAST(simde_float32, a_.f64[0]); + r_.f32[1] = HEDLEY_STATIC_CAST(simde_float32, a_.f64[1]); + r_.f32[2] = SIMDE_FLOAT32_C(0.0); + r_.f32[3] = SIMDE_FLOAT32_C(0.0); + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_demote_f64x2_zero(a) simde_wasm_f32x4_demote_f64x2_zero((a)) +#endif + +/* extend_low */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_extend_low_i8x16 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_extend_low_i8x16(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vmovl_s8(vget_low_s8(a_.neon_i8)); + #elif defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cvtepi8_epi16(a_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_srai_epi16(_mm_unpacklo_epi8(a_.sse_m128i, a_.sse_m128i), 8); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i16 = + vec_sra( + HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(short), vec_mergeh(a_.altivec_i8, a_.altivec_i8)), + vec_splats(HEDLEY_STATIC_CAST(unsigned short, 8) + ) + ); + #elif defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + const int8_t v SIMDE_VECTOR(8) = { + a_.i8[0], a_.i8[1], a_.i8[2], a_.i8[3], + a_.i8[4], a_.i8[5], a_.i8[6], a_.i8[7] + }; + + SIMDE_CONVERT_VECTOR_(r_.i16, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = HEDLEY_STATIC_CAST(int16_t, a_.i8[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_extend_low_i8x16(a) simde_wasm_i16x8_extend_low_i8x16((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_extend_low_i16x8 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_extend_low_i16x8(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vmovl_s16(vget_low_s16(a_.neon_i16)); + #elif defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cvtepi16_epi32(a_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_srai_epi32(_mm_unpacklo_epi16(a_.sse_m128i, a_.sse_m128i), 16); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i32 = + vec_sra(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(int), vec_mergeh(a_.altivec_i16, a_.altivec_i16)), + vec_splats(HEDLEY_STATIC_CAST(unsigned int, 16)) + ); + #elif defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + const int16_t v SIMDE_VECTOR(8) = { a_.i16[0], a_.i16[1], a_.i16[2], a_.i16[3] }; + + SIMDE_CONVERT_VECTOR_(r_.i32, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = HEDLEY_STATIC_CAST(int32_t, a_.i16[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_extend_low_i16x8(a) simde_wasm_i32x4_extend_low_i16x8((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_extend_low_i32x4 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_extend_low_i32x4(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i64 = vmovl_s32(vget_low_s32(a_.neon_i32)); + #elif defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cvtepi32_epi64(a_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_unpacklo_epi32(a_.sse_m128i, _mm_cmpgt_epi32(_mm_setzero_si128(), a_.sse_m128i)); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + r_.altivec_i64 = + vec_sra(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(long long), vec_mergeh(a_.altivec_i32, a_.altivec_i32)), + vec_splats(HEDLEY_STATIC_CAST(unsigned long long, 32)) + ); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i32 = + vec_mergeh( + a_.altivec_i32, + HEDLEY_REINTERPRET_CAST( + SIMDE_POWER_ALTIVEC_VECTOR(int), + vec_cmpgt(vec_splat_s32(0), a_.altivec_i32) + ) + ); + #elif defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + const int32_t v SIMDE_VECTOR(8) = { a_.i32[0], a_.i32[1] }; + + SIMDE_CONVERT_VECTOR_(r_.i64, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = HEDLEY_STATIC_CAST(int64_t, a_.i32[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_extend_low_i32x4(a) simde_wasm_i64x2_extend_low_i32x4((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_extend_low_u8x16 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_extend_low_u8x16(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vmovl_u8(vget_low_u8(a_.neon_u8)); + #elif defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cvtepu8_epi16(a_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_srli_epi16(_mm_unpacklo_epi8(a_.sse_m128i, a_.sse_m128i), 8); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i8 = vec_mergeh(a_.altivec_i8, vec_splat_s8(0)); + #elif defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + const uint8_t v SIMDE_VECTOR(8) = { + a_.u8[0], a_.u8[1], a_.u8[2], a_.u8[3], + a_.u8[4], a_.u8[5], a_.u8[6], a_.u8[7] + }; + + SIMDE_CONVERT_VECTOR_(r_.i16, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = HEDLEY_STATIC_CAST(int16_t, a_.u8[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_extend_low_u8x16(a) simde_wasm_u16x8_extend_low_u8x16((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_extend_low_u16x8 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_extend_low_u16x8(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vmovl_u16(vget_low_u16(a_.neon_u16)); + #elif defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cvtepu16_epi32(a_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_srli_epi32(_mm_unpacklo_epi16(a_.sse_m128i, a_.sse_m128i), 16); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i16 = vec_mergeh(a_.altivec_i16, vec_splat_s16(0)); + #elif defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + const uint16_t v SIMDE_VECTOR(8) = { a_.u16[0], a_.u16[1], a_.u16[2], a_.u16[3] }; + + SIMDE_CONVERT_VECTOR_(r_.i32, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = HEDLEY_STATIC_CAST(int32_t, a_.u16[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_extend_low_u16x8(a) simde_wasm_u32x4_extend_low_u16x8((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u64x2_extend_low_u32x4 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u64x2_extend_low_u32x4(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u64 = vmovl_u32(vget_low_u32(a_.neon_u32)); + #elif defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cvtepu32_epi64(a_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i =_mm_unpacklo_epi32(a_.sse_m128i, _mm_setzero_si128()); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i32 = vec_mergeh(a_.altivec_i32, vec_splat_s32(0)); + #elif defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + const uint32_t v SIMDE_VECTOR(8) = { a_.u32[0], a_.u32[1] }; + + SIMDE_CONVERT_VECTOR_(r_.u64, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u64) / sizeof(r_.u64[0])) ; i++) { + r_.u64[i] = HEDLEY_STATIC_CAST(int64_t, a_.u32[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u64x2_extend_low_u32x4(a) simde_wasm_u64x2_extend_low_u32x4((a)) +#endif + +/* promote */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_promote_low_f32x4 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_promote_low_f32x4(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_cvtps_pd(a_.sse_m128); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_f64 = vcvt_f64_f32(vget_low_f32(a_.neon_f32)); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + r_.altivec_f64 = vec_unpackh(a_.altivec_f32); + #elif HEDLEY_HAS_BUILTIN(__builtin_shufflevector) && HEDLEY_HAS_BUILTIN(__builtin_convertvector) + r_.f64 = __builtin_convertvector(__builtin_shufflevector(a_.f32, a_.f32, 0, 1), __typeof__(r_.f64)); + #else + r_.f64[0] = HEDLEY_STATIC_CAST(simde_float64, a_.f32[0]); + r_.f64[1] = HEDLEY_STATIC_CAST(simde_float64, a_.f32[1]); + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_promote_low_f32x4(a) simde_wasm_f64x2_promote_low_f32x4((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_extend_high_i8x16 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_extend_high_i8x16(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vmovl_s8(vget_high_s8(a_.neon_i8)); + #elif defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cvtepi8_epi16(_mm_shuffle_epi32(a_.sse_m128i, _MM_SHUFFLE(3, 2, 3, 2))); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_srai_epi16(_mm_unpackhi_epi8(a_.sse_m128i, a_.sse_m128i), 8); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i16 = + vec_sra( + HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(short), vec_mergel(a_.altivec_i8, a_.altivec_i8)), + vec_splats(HEDLEY_STATIC_CAST(unsigned short, 8) + ) + ); + #elif defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + const int8_t v SIMDE_VECTOR(8) = { + a_.i8[ 8], a_.i8[ 9], a_.i8[10], a_.i8[11], + a_.i8[12], a_.i8[13], a_.i8[14], a_.i8[15] + }; + + SIMDE_CONVERT_VECTOR_(r_.i16, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = HEDLEY_STATIC_CAST(int16_t, a_.i8[i + 8]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_extend_high_i8x16(a) simde_wasm_i16x8_extend_high_i8x16((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_extend_high_i16x8 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_extend_high_i16x8(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vmovl_s16(vget_high_s16(a_.neon_i16)); + #elif defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cvtepi16_epi32(_mm_shuffle_epi32(a_.sse_m128i, _MM_SHUFFLE(3, 2, 3, 2))); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_srai_epi32(_mm_unpackhi_epi16(a_.sse_m128i, a_.sse_m128i), 16); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i32 = + vec_sra(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(int), vec_mergel(a_.altivec_i16, a_.altivec_i16)), + vec_splats(HEDLEY_STATIC_CAST(unsigned int, 16)) + ); + #elif defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + const int16_t v SIMDE_VECTOR(8) = { a_.i16[4], a_.i16[5], a_.i16[6], a_.i16[7] }; + + SIMDE_CONVERT_VECTOR_(r_.i32, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = HEDLEY_STATIC_CAST(int32_t, a_.i16[i + 4]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_extend_high_i16x8(a) simde_wasm_i32x4_extend_high_i16x8((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_extend_high_i32x4 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_extend_high_i32x4(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i64 = vmovl_s32(vget_high_s32(a_.neon_i32)); + #elif defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cvtepi32_epi64(_mm_shuffle_epi32(a_.sse_m128i, _MM_SHUFFLE(3, 2, 3, 2))); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_unpackhi_epi32(a_.sse_m128i, _mm_cmpgt_epi32(_mm_setzero_si128(), a_.sse_m128i)); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + r_.altivec_i64 = + vec_sra(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(long long), vec_mergel(a_.altivec_i32, a_.altivec_i32)), + vec_splats(HEDLEY_STATIC_CAST(unsigned long long, 32)) + ); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i32 = + vec_mergel( + a_.altivec_i32, + HEDLEY_REINTERPRET_CAST( + SIMDE_POWER_ALTIVEC_VECTOR(int), + vec_cmpgt(vec_splat_s32(0), a_.altivec_i32) + ) + ); + #elif defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + const int32_t v SIMDE_VECTOR(8) = { a_.i32[2], a_.i32[3] }; + + SIMDE_CONVERT_VECTOR_(r_.i64, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = HEDLEY_STATIC_CAST(int64_t, a_.i32[i + 2]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_extend_high_i32x4(a) simde_wasm_i64x2_extend_high_i32x4((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_extend_high_u8x16 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_extend_high_u8x16(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vmovl_u8(vget_high_u8(a_.neon_u8)); + #elif defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cvtepu8_epi16(_mm_shuffle_epi32(a_.sse_m128i, _MM_SHUFFLE(3, 2, 3, 2))); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_srli_epi16(_mm_unpackhi_epi8(a_.sse_m128i, a_.sse_m128i), 8); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i8 = vec_mergel(a_.altivec_i8, vec_splat_s8(0)); + #elif defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + const uint8_t v SIMDE_VECTOR(8) = { + a_.u8[ 8], a_.u8[ 9], a_.u8[10], a_.u8[11], + a_.u8[12], a_.u8[13], a_.u8[14], a_.u8[15] + }; + + SIMDE_CONVERT_VECTOR_(r_.u16, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = HEDLEY_STATIC_CAST(uint16_t, a_.u8[i + 8]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_extend_high_u8x16(a) simde_wasm_u16x8_extend_high_u8x16((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_extend_high_u16x8 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_extend_high_u16x8(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vmovl_u16(vget_high_u16(a_.neon_u16)); + #elif defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cvtepu16_epi32(_mm_shuffle_epi32(a_.sse_m128i, _MM_SHUFFLE(3, 2, 3, 2))); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_srli_epi32(_mm_unpackhi_epi16(a_.sse_m128i, a_.sse_m128i), 16); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i16 = vec_mergel(a_.altivec_i16, vec_splat_s16(0)); + #elif defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + const uint16_t v SIMDE_VECTOR(8) = { a_.u16[4], a_.u16[5], a_.u16[6], a_.u16[7] }; + + SIMDE_CONVERT_VECTOR_(r_.u32, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = HEDLEY_STATIC_CAST(uint32_t, a_.u16[i + 4]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_extend_high_u16x8(a) simde_wasm_u32x4_extend_high_u16x8((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u64x2_extend_high_u32x4 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u64x2_extend_high_u32x4(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u64 = vmovl_u32(vget_high_u32(a_.neon_u32)); + #elif defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = _mm_cvtepu32_epi64(_mm_shuffle_epi32(a_.sse_m128i, _MM_SHUFFLE(3, 2, 3, 2))); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i =_mm_unpackhi_epi32(a_.sse_m128i, _mm_setzero_si128()); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i32 = vec_mergel(a_.altivec_i32, vec_splat_s32(0)); + #elif defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + const uint32_t v SIMDE_VECTOR(8) = { a_.u32[2], a_.u32[3] }; + + SIMDE_CONVERT_VECTOR_(r_.u64, v); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = HEDLEY_STATIC_CAST(uint32_t, a_.u32[i + 2]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u64x2_extend_high_u32x4(a) simde_wasm_u64x2_extend_high_u32x4((a)) +#endif + +/* extmul_low */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_extmul_low_i8x16 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_extmul_low_i8x16(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vmull_s8(vget_low_s8(a_.neon_i8), vget_low_s8(b_.neon_i8)); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(signed char) ashuf; + SIMDE_POWER_ALTIVEC_VECTOR(signed char) bshuf; + + #if defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + ashuf = vec_mergeh(a_.altivec_i8, a_.altivec_i8); + bshuf = vec_mergeh(b_.altivec_i8, b_.altivec_i8); + #else + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) perm = { + 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 + }; + ashuf = vec_perm(a_.altivec_i8, a_.altivec_i8, perm); + bshuf = vec_perm(b_.altivec_i8, b_.altivec_i8, perm); + #endif + + r_.altivec_i16 = vec_mule(ashuf, bshuf); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = + _mm_mullo_epi16( + _mm_srai_epi16(_mm_unpacklo_epi8(a_.sse_m128i, a_.sse_m128i), 8), + _mm_srai_epi16(_mm_unpacklo_epi8(b_.sse_m128i, b_.sse_m128i), 8) + ); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) + r_.i16 = + __builtin_convertvector( + __builtin_shufflevector(a_.i8, a_.i8, 0, 1, 2, 3, 4, 5, 6, 7), + __typeof__(r_.i16) + ) + * + __builtin_convertvector( + __builtin_shufflevector(b_.i8, b_.i8, 0, 1, 2, 3, 4, 5, 6, 7), + __typeof__(r_.i16) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = HEDLEY_STATIC_CAST(int16_t, a_.i8[i]) * HEDLEY_STATIC_CAST(int16_t, b_.i8[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_extmul_low_i8x16(a, b) simde_wasm_i16x8_extmul_low_i8x16((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_extmul_low_i16x8 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_extmul_low_i16x8(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vmull_s16(vget_low_s16(a_.neon_i16), vget_low_s16(b_.neon_i16)); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(signed short) ashuf; + SIMDE_POWER_ALTIVEC_VECTOR(signed short) bshuf; + + #if defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + ashuf = vec_mergeh(a_.altivec_i16, a_.altivec_i16); + bshuf = vec_mergeh(b_.altivec_i16, b_.altivec_i16); + #else + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) perm = { + 0, 1, 0, 1, + 2, 3, 2, 3, + 4, 5, 4, 5, + 6, 7, 6, 7 + }; + ashuf = vec_perm(a_.altivec_i16, a_.altivec_i16, perm); + bshuf = vec_perm(b_.altivec_i16, b_.altivec_i16, perm); + #endif + + r_.altivec_i32 = vec_mule(ashuf, bshuf); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = + _mm_unpacklo_epi16( + _mm_mullo_epi16(a_.sse_m128i, b_.sse_m128i), + _mm_mulhi_epi16(a_.sse_m128i, b_.sse_m128i) + ); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) + r_.i32 = + __builtin_convertvector( + __builtin_shufflevector(a_.i16, a_.i16, 0, 1, 2, 3), + __typeof__(r_.i32) + ) + * + __builtin_convertvector( + __builtin_shufflevector(b_.i16, b_.i16, 0, 1, 2, 3), + __typeof__(r_.i32) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = HEDLEY_STATIC_CAST(int32_t, a_.i16[i]) * HEDLEY_STATIC_CAST(int32_t, b_.i16[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_extmul_low_i16x8(a, b) simde_wasm_i32x4_extmul_low_i16x8((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_extmul_low_i32x4 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_extmul_low_i32x4(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i64 = vmull_s32(vget_low_s32(a_.neon_i32), vget_low_s32(b_.neon_i32)); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(signed int) ashuf; + SIMDE_POWER_ALTIVEC_VECTOR(signed int) bshuf; + + #if defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + ashuf = vec_mergeh(a_.altivec_i32, a_.altivec_i32); + bshuf = vec_mergeh(b_.altivec_i32, b_.altivec_i32); + #else + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) perm = { + 0, 1, 2, 3, 0, 1, 2, 3, + 4, 5, 6, 7, 4, 5, 6, 7 + }; + ashuf = vec_perm(a_.altivec_i32, a_.altivec_i32, perm); + bshuf = vec_perm(b_.altivec_i32, b_.altivec_i32, perm); + #endif + + r_.altivec_i64 = vec_mule(ashuf, bshuf); + #elif defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = + _mm_mul_epi32( + _mm_shuffle_epi32(a_.sse_m128i, _MM_SHUFFLE(1, 1, 0, 0)), + _mm_shuffle_epi32(b_.sse_m128i, _MM_SHUFFLE(1, 1, 0, 0)) + ); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) + r_.i64 = + __builtin_convertvector( + __builtin_shufflevector(a_.i32, a_.i32, 0, 1), + __typeof__(r_.i64) + ) + * + __builtin_convertvector( + __builtin_shufflevector(b_.i32, b_.i32, 0, 1), + __typeof__(r_.i64) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = HEDLEY_STATIC_CAST(int64_t, a_.i32[i]) * HEDLEY_STATIC_CAST(int64_t, b_.i32[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_extmul_low_i32x4(a, b) simde_wasm_i64x2_extmul_low_i32x4((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_extmul_low_u8x16 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_extmul_low_u8x16(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vmull_u8(vget_low_u8(a_.neon_u8), vget_low_u8(b_.neon_u8)); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) ashuf; + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) bshuf; + + #if defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + ashuf = vec_mergeh(a_.altivec_u8, a_.altivec_u8); + bshuf = vec_mergeh(b_.altivec_u8, b_.altivec_u8); + #else + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) perm = { + 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 + }; + ashuf = vec_perm(a_.altivec_u8, a_.altivec_u8, perm); + bshuf = vec_perm(b_.altivec_u8, b_.altivec_u8, perm); + #endif + + r_.altivec_u16 = vec_mule(ashuf, bshuf); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) + r_.u16 = + __builtin_convertvector( + __builtin_shufflevector(a_.u8, a_.u8, 0, 1, 2, 3, 4, 5, 6, 7), + __typeof__(r_.u16) + ) + * + __builtin_convertvector( + __builtin_shufflevector(b_.u8, b_.u8, 0, 1, 2, 3, 4, 5, 6, 7), + __typeof__(r_.u16) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { + r_.u16[i] = HEDLEY_STATIC_CAST(uint16_t, a_.u8[i]) * HEDLEY_STATIC_CAST(uint16_t, b_.u8[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_extmul_low_u8x16(a, b) simde_wasm_u16x8_extmul_low_u8x16((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_extmul_low_u16x8 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_extmul_low_u16x8(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vmull_u16(vget_low_u16(a_.neon_u16), vget_low_u16(b_.neon_u16)); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(unsigned short) ashuf; + SIMDE_POWER_ALTIVEC_VECTOR(unsigned short) bshuf; + + #if defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + ashuf = vec_mergeh(a_.altivec_u16, a_.altivec_u16); + bshuf = vec_mergeh(b_.altivec_u16, b_.altivec_u16); + #else + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) perm = { + 0, 1, 0, 1, + 2, 3, 2, 3, + 4, 5, 4, 5, + 6, 7, 6, 7 + }; + ashuf = vec_perm(a_.altivec_u16, a_.altivec_u16, perm); + bshuf = vec_perm(b_.altivec_u16, b_.altivec_u16, perm); + #endif + + r_.altivec_u32 = vec_mule(ashuf, bshuf); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = + _mm_unpacklo_epi16( + _mm_mullo_epi16(a_.sse_m128i, b_.sse_m128i), + _mm_mulhi_epu16(a_.sse_m128i, b_.sse_m128i) + ); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) + r_.u32 = + __builtin_convertvector( + __builtin_shufflevector(a_.u16, a_.u16, 0, 1, 2, 3), + __typeof__(r_.u32) + ) + * + __builtin_convertvector( + __builtin_shufflevector(b_.u16, b_.u16, 0, 1, 2, 3), + __typeof__(r_.u32) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u32) / sizeof(r_.u32[0])) ; i++) { + r_.u32[i] = HEDLEY_STATIC_CAST(uint32_t, a_.u16[i]) * HEDLEY_STATIC_CAST(uint32_t, b_.u16[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_extmul_low_u16x8(a, b) simde_wasm_u32x4_extmul_low_u16x8((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u64x2_extmul_low_u32x4 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u64x2_extmul_low_u32x4(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u64 = vmull_u32(vget_low_u32(a_.neon_u32), vget_low_u32(b_.neon_u32)); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(unsigned int) ashuf; + SIMDE_POWER_ALTIVEC_VECTOR(unsigned int) bshuf; + + #if defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + ashuf = vec_mergeh(a_.altivec_u32, a_.altivec_u32); + bshuf = vec_mergeh(b_.altivec_u32, b_.altivec_u32); + #else + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) perm = { + 0, 1, 2, 3, 0, 1, 2, 3, + 4, 5, 6, 7, 4, 5, 6, 7 + }; + ashuf = vec_perm(a_.altivec_u32, a_.altivec_u32, perm); + bshuf = vec_perm(b_.altivec_u32, b_.altivec_u32, perm); + #endif + + r_.altivec_u64 = vec_mule(ashuf, bshuf); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = + _mm_mul_epu32( + _mm_shuffle_epi32(a_.sse_m128i, _MM_SHUFFLE(1, 1, 0, 0)), + _mm_shuffle_epi32(b_.sse_m128i, _MM_SHUFFLE(1, 1, 0, 0)) + ); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) + r_.u64 = + __builtin_convertvector( + __builtin_shufflevector(a_.u32, a_.u32, 0, 1), + __typeof__(r_.u64) + ) + * + __builtin_convertvector( + __builtin_shufflevector(b_.u32, b_.u32, 0, 1), + __typeof__(r_.u64) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.u64[i] = HEDLEY_STATIC_CAST(uint64_t, a_.u32[i]) * HEDLEY_STATIC_CAST(uint64_t, b_.u32[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u64x2_extmul_low_u32x4(a, b) simde_wasm_u64x2_extmul_low_u32x4((a), (b)) +#endif + +/* extmul_high */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_extmul_high_i8x16 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_extmul_high_i8x16(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_i16 = vmull_high_s8(a_.neon_i8, b_.neon_i8); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vmull_s8(vget_high_s8(a_.neon_i8), vget_high_s8(b_.neon_i8)); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i16 = + vec_mule( + vec_mergel(a_.altivec_i8, a_.altivec_i8), + vec_mergel(b_.altivec_i8, b_.altivec_i8) + ); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = + _mm_mullo_epi16( + _mm_srai_epi16(_mm_unpackhi_epi8(a_.sse_m128i, a_.sse_m128i), 8), + _mm_srai_epi16(_mm_unpackhi_epi8(b_.sse_m128i, b_.sse_m128i), 8) + ); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) + r_.i16 = + __builtin_convertvector( + __builtin_shufflevector(a_.i8, a_.i8, 8, 9, 10, 11, 12, 13, 14, 15), + __typeof__(r_.i16) + ) + * + __builtin_convertvector( + __builtin_shufflevector(b_.i8, b_.i8, 8, 9, 10, 11, 12, 13, 14, 15), + __typeof__(r_.i16) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = HEDLEY_STATIC_CAST(int16_t, a_.i8[i + 8]) * HEDLEY_STATIC_CAST(int16_t, b_.i8[i + 8]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_extmul_high_i8x16(a, b) simde_wasm_i16x8_extmul_high_i8x16((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_extmul_high_i16x8 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_extmul_high_i16x8(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_i32 = vmull_high_s16(a_.neon_i16, b_.neon_i16); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vmull_s16(vget_high_s16(a_.neon_i16), vget_high_s16(b_.neon_i16)); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i32 = + vec_mule( + vec_mergel(a_.altivec_i16, a_.altivec_i16), + vec_mergel(b_.altivec_i16, b_.altivec_i16) + ); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = + _mm_unpackhi_epi16( + _mm_mullo_epi16(a_.sse_m128i, b_.sse_m128i), + _mm_mulhi_epi16(a_.sse_m128i, b_.sse_m128i) + ); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) + r_.i32 = + __builtin_convertvector( + __builtin_shufflevector(a_.i16, a_.i16, 4, 5, 6, 7), + __typeof__(r_.i32) + ) + * + __builtin_convertvector( + __builtin_shufflevector(b_.i16, b_.i16, 4, 5, 6, 7), + __typeof__(r_.i32) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = HEDLEY_STATIC_CAST(int32_t, a_.i16[i + 4]) * HEDLEY_STATIC_CAST(int32_t, b_.i16[i + 4]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_extmul_high_i16x8(a, b) simde_wasm_i32x4_extmul_high_i16x8((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_extmul_high_i32x4 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_extmul_high_i32x4(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_i64 = vmull_high_s32(a_.neon_i32, b_.neon_i32); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i64 = vmull_s32(vget_high_s32(a_.neon_i32), vget_high_s32(b_.neon_i32)); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(signed int) ashuf; + SIMDE_POWER_ALTIVEC_VECTOR(signed int) bshuf; + + #if defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + ashuf = vec_mergel(a_.altivec_i32, a_.altivec_i32); + bshuf = vec_mergel(b_.altivec_i32, b_.altivec_i32); + #else + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) perm = { + 8, 9, 10, 11, 8, 9, 10, 11, + 12, 13, 14, 15, 12, 13, 14, 15 + }; + ashuf = vec_perm(a_.altivec_i32, a_.altivec_i32, perm); + bshuf = vec_perm(b_.altivec_i32, b_.altivec_i32, perm); + #endif + + r_.altivec_i64 = vec_mule(ashuf, bshuf); + #elif defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = + _mm_mul_epi32( + _mm_shuffle_epi32(a_.sse_m128i, _MM_SHUFFLE(3, 3, 2, 2)), + _mm_shuffle_epi32(b_.sse_m128i, _MM_SHUFFLE(3, 3, 2, 2)) + ); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) + r_.i64 = + __builtin_convertvector( + __builtin_shufflevector(a_.i32, a_.i32, 2, 3), + __typeof__(r_.i64) + ) + * + __builtin_convertvector( + __builtin_shufflevector(b_.i32, b_.i32, 2, 3), + __typeof__(r_.i64) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = HEDLEY_STATIC_CAST(int64_t, a_.i32[i + 2]) * HEDLEY_STATIC_CAST(int64_t, b_.i32[i + 2]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_extmul_high_i32x4(a, b) simde_wasm_i64x2_extmul_high_i32x4((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_extmul_high_u8x16 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_extmul_high_u8x16(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_u16 = vmull_high_u8(a_.neon_u8, b_.neon_u8); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vmull_u8(vget_high_u8(a_.neon_u8), vget_high_u8(b_.neon_u8)); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u16 = + vec_mule( + vec_mergel(a_.altivec_u8, a_.altivec_u8), + vec_mergel(b_.altivec_u8, b_.altivec_u8) + ); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) + r_.u16 = + __builtin_convertvector( + __builtin_shufflevector(a_.u8, a_.u8, 8, 9, 10, 11, 12, 13, 14, 15), + __typeof__(r_.u16) + ) + * + __builtin_convertvector( + __builtin_shufflevector(b_.u8, b_.u8, 8, 9, 10, 11, 12, 13, 14, 15), + __typeof__(r_.u16) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { + r_.u16[i] = HEDLEY_STATIC_CAST(uint16_t, a_.u8[i + 8]) * HEDLEY_STATIC_CAST(uint16_t, b_.u8[i + 8]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_extmul_high_u8x16(a, b) simde_wasm_u16x8_extmul_high_u8x16((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_extmul_high_u16x8 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_extmul_high_u16x8(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_u32 = vmull_high_u16(a_.neon_u16, b_.neon_u16); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vmull_u16(vget_high_u16(a_.neon_u16), vget_high_u16(b_.neon_u16)); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_u32 = + vec_mule( + vec_mergel(a_.altivec_u16, a_.altivec_u16), + vec_mergel(b_.altivec_u16, b_.altivec_u16) + ); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = + _mm_unpackhi_epi16( + _mm_mullo_epi16(a_.sse_m128i, b_.sse_m128i), + _mm_mulhi_epu16(a_.sse_m128i, b_.sse_m128i) + ); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) + r_.u32 = + __builtin_convertvector( + __builtin_shufflevector(a_.u16, a_.u16, 4, 5, 6, 7), + __typeof__(r_.u32) + ) + * + __builtin_convertvector( + __builtin_shufflevector(b_.u16, b_.u16, 4, 5, 6, 7), + __typeof__(r_.u32) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u32) / sizeof(r_.u32[0])) ; i++) { + r_.u32[i] = HEDLEY_STATIC_CAST(uint32_t, a_.u16[i + 4]) * HEDLEY_STATIC_CAST(uint32_t, b_.u16[i + 4]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_extmul_high_u16x8(a, b) simde_wasm_u32x4_extmul_high_u16x8((a), (b)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u64x2_extmul_high_u32x4 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u64x2_extmul_high_u32x4(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_u64 = vmull_high_u32(a_.neon_u32, b_.neon_u32); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u64 = vmull_u32(vget_high_u32(a_.neon_u32), vget_high_u32(b_.neon_u32)); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + r_.altivec_u64 = + vec_mule( + vec_mergel(a_.altivec_u32, a_.altivec_u32), + vec_mergel(b_.altivec_u32, b_.altivec_u32) + ); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = + _mm_mul_epu32( + _mm_shuffle_epi32(a_.sse_m128i, _MM_SHUFFLE(3, 3, 2, 2)), + _mm_shuffle_epi32(b_.sse_m128i, _MM_SHUFFLE(3, 3, 2, 2)) + ); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) + r_.u64 = + __builtin_convertvector( + __builtin_shufflevector(a_.u32, a_.u32, 2, 3), + __typeof__(r_.u64) + ) + * + __builtin_convertvector( + __builtin_shufflevector(b_.u32, b_.u32, 2, 3), + __typeof__(r_.u64) + ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u64) / sizeof(r_.u64[0])) ; i++) { + r_.u64[i] = HEDLEY_STATIC_CAST(uint64_t, a_.u32[i + 2]) * HEDLEY_STATIC_CAST(uint64_t, b_.u32[i + 2]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u64x2_extmul_high_u32x4(a, b) simde_wasm_u64x2_extmul_high_u32x4((a), (b)) +#endif + +/* extadd_pairwise */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_extadd_pairwise_i8x16 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_extadd_pairwise_i8x16(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i16 = vpaddlq_s8(a_.neon_i8); + #elif defined(SIMDE_X86_XOP_NATIVE) + r_.sse_m128i = _mm_haddw_epi8(a_.sse_m128i); + #elif defined(SIMDE_X86_SSSE3_NATIVE) + r_.sse_m128i = _mm_maddubs_epi16(_mm_set1_epi8(INT8_C(1)), a_.sse_m128i); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(signed char) one = vec_splat_s8(1); + r_.altivec_i16 = + vec_add( + vec_mule(a_.altivec_i8, one), + vec_mulo(a_.altivec_i8, one) + ); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) + r_.i16 = + ((a_.i16 << 8) >> 8) + + ((a_.i16 >> 8) ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = HEDLEY_STATIC_CAST(int16_t, a_.i8[(i * 2)]) + HEDLEY_STATIC_CAST(int16_t, a_.i8[(i * 2) + 1]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_extadd_pairwise_i8x16(a) simde_wasm_i16x8_extadd_pairwise_i8x16((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_extadd_pairwise_i16x8 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_extadd_pairwise_i16x8(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vpaddlq_s16(a_.neon_i16); + #elif defined(SIMDE_X86_XOP_NATIVE) + r_.sse_m128i = _mm_haddd_epi16(a_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_madd_epi16(a_.sse_m128i, _mm_set1_epi16(INT8_C(1))); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(signed short) one = vec_splat_s16(1); + r_.altivec_i32 = + vec_add( + vec_mule(a_.altivec_i16, one), + vec_mulo(a_.altivec_i16, one) + ); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) + r_.i32 = + ((a_.i32 << 16) >> 16) + + ((a_.i32 >> 16) ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = HEDLEY_STATIC_CAST(int32_t, a_.i16[(i * 2)]) + HEDLEY_STATIC_CAST(int32_t, a_.i16[(i * 2) + 1]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_extadd_pairwise_i16x8(a) simde_wasm_i32x4_extadd_pairwise_i16x8((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_extadd_pairwise_u8x16 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_extadd_pairwise_u8x16(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u16 = vpaddlq_u8(a_.neon_u8); + #elif defined(SIMDE_X86_XOP_NATIVE) + r_.sse_m128i = _mm_haddw_epu8(a_.sse_m128i); + #elif defined(SIMDE_X86_SSSE3_NATIVE) + r_.sse_m128i = _mm_maddubs_epi16(a_.sse_m128i, _mm_set1_epi8(INT8_C(1))); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) one = vec_splat_u8(1); + r_.altivec_u16 = + vec_add( + vec_mule(a_.altivec_u8, one), + vec_mulo(a_.altivec_u8, one) + ); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) + r_.u16 = + ((a_.u16 << 8) >> 8) + + ((a_.u16 >> 8) ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { + r_.u16[i] = HEDLEY_STATIC_CAST(uint16_t, a_.u8[(i * 2)]) + HEDLEY_STATIC_CAST(uint16_t, a_.u8[(i * 2) + 1]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_extadd_pairwise_u8x16(a) simde_wasm_u16x8_extadd_pairwise_u8x16((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_extadd_pairwise_u16x8 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_extadd_pairwise_u16x8(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vpaddlq_u16(a_.neon_u16); + #elif defined(SIMDE_X86_XOP_NATIVE) + r_.sse_m128i = _mm_haddd_epu16(a_.sse_m128i); + #elif defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = + _mm_add_epi32( + _mm_srli_epi32(a_.sse_m128i, 16), + _mm_and_si128(a_.sse_m128i, _mm_set1_epi32(INT32_C(0x0000ffff))) + ); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(unsigned short) one = vec_splat_u16(1); + r_.altivec_u32 = + vec_add( + vec_mule(a_.altivec_u16, one), + vec_mulo(a_.altivec_u16, one) + ); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) + r_.u32 = + ((a_.u32 << 16) >> 16) + + ((a_.u32 >> 16) ); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u32) / sizeof(r_.u32[0])) ; i++) { + r_.u32[i] = HEDLEY_STATIC_CAST(uint32_t, a_.u16[(i * 2)]) + HEDLEY_STATIC_CAST(uint32_t, a_.u16[(i * 2) + 1]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_extadd_pairwise_u16x8(a) simde_wasm_u32x4_extadd_pairwise_u16x8((a)) +#endif + +/* X_load_Y */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i16x8_load8x8 (const void * mem) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i16x8_load8x8(mem); + #else + simde_v128_private r_; + + #if defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + int8_t v SIMDE_VECTOR(8); + simde_memcpy(&v, mem, sizeof(v)); + SIMDE_CONVERT_VECTOR_(r_.i16, v); + #else + SIMDE_ALIGN_TO_16 int8_t v[8]; + simde_memcpy(v, mem, sizeof(v)); + + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { + r_.i16[i] = HEDLEY_STATIC_CAST(int16_t, v[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i16x8_load8x8(mem) simde_wasm_i16x8_load8x8((mem)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_load16x4 (const void * mem) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_load16x4(mem); + #else + simde_v128_private r_; + + #if defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + int16_t v SIMDE_VECTOR(8); + simde_memcpy(&v, mem, sizeof(v)); + SIMDE_CONVERT_VECTOR_(r_.i32, v); + #else + SIMDE_ALIGN_TO_16 int16_t v[4]; + simde_memcpy(v, mem, sizeof(v)); + + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + r_.i32[i] = HEDLEY_STATIC_CAST(int32_t, v[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_load16x4(mem) simde_wasm_i32x4_load16x4((mem)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i64x2_load32x2 (const void * mem) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i64x2_load32x2(mem); + #else + simde_v128_private r_; + + #if defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) && !defined(SIMDE_BUG_CLANG_50893) + int32_t v SIMDE_VECTOR(8); + simde_memcpy(&v, mem, sizeof(v)); + SIMDE_CONVERT_VECTOR_(r_.i64, v); + #else + SIMDE_ALIGN_TO_16 int32_t v[2]; + simde_memcpy(v, mem, sizeof(v)); + + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { + r_.i64[i] = HEDLEY_STATIC_CAST(int64_t, v[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i64x2_load32x2(mem) simde_wasm_i64x2_load32x2((mem)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u16x8_load8x8 (const void * mem) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u16x8_load8x8(mem); + #else + simde_v128_private r_; + + #if defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + uint8_t v SIMDE_VECTOR(8); + simde_memcpy(&v, mem, sizeof(v)); + SIMDE_CONVERT_VECTOR_(r_.u16, v); + #else + SIMDE_ALIGN_TO_16 uint8_t v[8]; + simde_memcpy(v, mem, sizeof(v)); + + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { + r_.u16[i] = HEDLEY_STATIC_CAST(uint16_t, v[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u16x8_load8x8(mem) simde_wasm_u16x8_load8x8((mem)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_load16x4 (const void * mem) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_load16x4(mem); + #else + simde_v128_private r_; + + #if defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + uint16_t v SIMDE_VECTOR(8); + simde_memcpy(&v, mem, sizeof(v)); + SIMDE_CONVERT_VECTOR_(r_.u32, v); + #else + SIMDE_ALIGN_TO_16 uint16_t v[4]; + simde_memcpy(v, mem, sizeof(v)); + + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u32) / sizeof(r_.u32[0])) ; i++) { + r_.u32[i] = HEDLEY_STATIC_CAST(uint32_t, v[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_load16x4(mem) simde_wasm_u32x4_load16x4((mem)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u64x2_load32x2 (const void * mem) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u64x2_load32x2(mem); + #else + simde_v128_private r_; + + #if defined(SIMDE_CONVERT_VECTOR_) && !defined(SIMDE_BUG_GCC_100762) + uint32_t v SIMDE_VECTOR(8); + simde_memcpy(&v, mem, sizeof(v)); + SIMDE_CONVERT_VECTOR_(r_.u64, v); + #else + SIMDE_ALIGN_TO_16 uint32_t v[2]; + simde_memcpy(v, mem, sizeof(v)); + + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u64) / sizeof(r_.u64[0])) ; i++) { + r_.u64[i] = HEDLEY_STATIC_CAST(uint64_t, v[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u64x2_load32x2(mem) simde_wasm_u64x2_load32x2((mem)) +#endif + +/* load*_zero */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_load32_zero (const void * a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_v128_load32_zero(a); + #else + simde_v128_private r_; + + int32_t a_; + simde_memcpy(&a_, a, sizeof(a_)); + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_cvtsi32_si128(a_); + #else + r_.i32[0] = a_; + r_.i32[1] = 0; + r_.i32[2] = 0; + r_.i32[3] = 0; + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_load32_zero(a) simde_wasm_v128_load32_zero((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_load64_zero (const void * a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_v128_load64_zero(a); + #else + simde_v128_private r_; + + int64_t a_; + simde_memcpy(&a_, a, sizeof(a_)); + + #if defined(SIMDE_X86_SSE2_NATIVE) && defined(SIMDE_ARCH_AMD64) + r_.sse_m128i = _mm_cvtsi64_si128(a_); + #else + r_.i64[0] = a_; + r_.i64[1] = 0; + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_load64_zero(a) simde_wasm_v128_load64_zero((a)) +#endif + +/* load*_lane */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_load8_lane (const void * a, simde_v128_t vec, const int lane) + SIMDE_REQUIRE_CONSTANT_RANGE(lane, 0, 15) { + simde_v128_private + a_ = simde_v128_to_private(vec); + + #if defined(SIMDE_BUG_CLANG_50901) + simde_v128_private r_ = simde_v128_to_private(vec); + r_.altivec_i8 = vec_insert(*HEDLEY_REINTERPRET_CAST(const signed char *, a), a_.altivec_i8, lane); + return simde_v128_from_private(r_); + #else + a_.i8[lane] = *HEDLEY_REINTERPRET_CAST(const int8_t *, a); + return simde_v128_from_private(a_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_v128_load8_lane(a, vec, lane) wasm_v128_load8_lane(HEDLEY_CONST_CAST(int8_t *, (a)), (vec), (lane)) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_load8_lane(a, vec, lane) simde_wasm_v128_load8_lane((a), (vec), (lane)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_load16_lane (const void * a, simde_v128_t vec, const int lane) + SIMDE_REQUIRE_CONSTANT_RANGE(lane, 0, 7) { + simde_v128_private + a_ = simde_v128_to_private(vec); + + int16_t tmp = 0; + simde_memcpy(&tmp, a, sizeof(int16_t)); + a_.i16[lane] = tmp; + + return simde_v128_from_private(a_); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_v128_load16_lane(a, vec, lane) wasm_v128_load16_lane(HEDLEY_CONST_CAST(int16_t *, (a)), (vec), (lane)) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_load16_lane(a, vec, lane) simde_wasm_v128_load16_lane((a), (vec), (lane)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_load32_lane (const void * a, simde_v128_t vec, const int lane) + SIMDE_REQUIRE_CONSTANT_RANGE(lane, 0, 3) { + simde_v128_private + a_ = simde_v128_to_private(vec); + + int32_t tmp = 0; + simde_memcpy(&tmp, a, sizeof(int32_t)); + a_.i32[lane] = tmp; + + return simde_v128_from_private(a_); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_v128_load32_lane(a, vec, lane) wasm_v128_load32_lane(HEDLEY_CONST_CAST(int32_t *, (a)), (vec), (lane)) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_load32_lane(a, vec, lane) simde_wasm_v128_load32_lane((a), (vec), (lane)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_v128_load64_lane (const void * a, simde_v128_t vec, const int lane) + SIMDE_REQUIRE_CONSTANT_RANGE(lane, 0, 1) { + simde_v128_private + a_ = simde_v128_to_private(vec); + + int64_t tmp = 0; + simde_memcpy(&tmp, a, sizeof(int64_t)); + a_.i64[lane] = tmp; + + return simde_v128_from_private(a_); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_v128_load64_lane(a, vec, lane) wasm_v128_load64_lane(HEDLEY_CONST_CAST(int64_t *, (a)), (vec), (lane)) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_load64_lane(a, vec, lane) simde_wasm_v128_load64_lane((a), (vec), (lane)) +#endif + +/* store*_lane */ + +SIMDE_FUNCTION_ATTRIBUTES +void +simde_wasm_v128_store8_lane (void * a, simde_v128_t vec, const int lane) + SIMDE_REQUIRE_CONSTANT_RANGE(lane, 0, 15) { + simde_v128_private + vec_ = simde_v128_to_private(vec); + + int8_t tmp = vec_.i8[lane]; + simde_memcpy(a, &tmp, sizeof(tmp)); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_v128_store8_lane(a, vec, lane) wasm_v128_store8_lane((a), (vec), (lane)) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_store8_lane(a, vec, lane) simde_wasm_v128_store8_lane((a), (vec), (lane)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +void +simde_wasm_v128_store16_lane (void * a, simde_v128_t vec, const int lane) + SIMDE_REQUIRE_CONSTANT_RANGE(lane, 0, 7) { + simde_v128_private + vec_ = simde_v128_to_private(vec); + + int16_t tmp = vec_.i16[lane]; + simde_memcpy(a, &tmp, sizeof(tmp)); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_v128_store16_lane(a, vec, lane) wasm_v128_store16_lane((a), (vec), (lane)) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_store16_lane(a, vec, lane) simde_wasm_v128_store16_lane((a), (vec), (lane)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +void +simde_wasm_v128_store32_lane (void * a, simde_v128_t vec, const int lane) + SIMDE_REQUIRE_CONSTANT_RANGE(lane, 0, 3) { + simde_v128_private + vec_ = simde_v128_to_private(vec); + + int32_t tmp = vec_.i32[lane]; + simde_memcpy(a, &tmp, sizeof(tmp)); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_v128_store32_lane(a, vec, lane) wasm_v128_store32_lane((a), (vec), (lane)) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_store32_lane(a, vec, lane) simde_wasm_v128_store32_lane((a), (vec), (lane)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +void +simde_wasm_v128_store64_lane (void * a, simde_v128_t vec, const int lane) + SIMDE_REQUIRE_CONSTANT_RANGE(lane, 0, 1) { + simde_v128_private + vec_ = simde_v128_to_private(vec); + + int64_t tmp = vec_.i64[lane]; + simde_memcpy(a, &tmp, sizeof(tmp)); +} +#if defined(SIMDE_WASM_SIMD128_NATIVE) + #define simde_wasm_v128_store64_lane(a, vec, lane) wasm_v128_store64_lane((a), (vec), (lane)) +#endif +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_v128_store64_lane(a, vec, lane) simde_wasm_v128_store64_lane((a), (vec), (lane)) +#endif + +/* convert */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_convert_i32x4 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_convert_i32x4(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128 = _mm_cvtepi32_ps(a_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A32V7) + r_.neon_f32 = vcvtq_f32_s32(a_.neon_i32); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + HEDLEY_DIAGNOSTIC_PUSH + #if HEDLEY_HAS_WARNING("-Wc11-extensions") + #pragma clang diagnostic ignored "-Wc11-extensions" + #endif + r_.altivec_f32 = vec_ctf(a_.altivec_i32, 0); + HEDLEY_DIAGNOSTIC_POP + #elif defined(SIMDE_CONVERT_VECTOR_) + SIMDE_CONVERT_VECTOR_(r_.f32, a_.i32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = HEDLEY_STATIC_CAST(simde_float32, a_.i32[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_convert_i32x4(a) simde_wasm_f32x4_convert_i32x4((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_convert_u32x4 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_convert_u32x4(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_CONVERT_VECTOR_) + SIMDE_CONVERT_VECTOR_(r_.f32, a_.u32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = HEDLEY_STATIC_CAST(simde_float32, a_.u32[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_convert_u32x4(a) simde_wasm_f32x4_convert_u32x4((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_convert_low_i32x4 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_convert_low_i32x4(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if HEDLEY_HAS_BUILTIN(__builtin_shufflevector) && HEDLEY_HAS_BUILTIN(__builtin_convertvector) + r_.f64 = __builtin_convertvector(__builtin_shufflevector(a_.i32, a_.i32, 0, 1), __typeof__(r_.f64)); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = HEDLEY_STATIC_CAST(simde_float64, a_.i32[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_convert_low_i32x4(a) simde_wasm_f64x2_convert_low_i32x4((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_convert_low_u32x4 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_convert_low_u32x4(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if HEDLEY_HAS_BUILTIN(__builtin_shufflevector) && HEDLEY_HAS_BUILTIN(__builtin_convertvector) + r_.f64 = __builtin_convertvector(__builtin_shufflevector(a_.u32, a_.u32, 0, 1), __typeof__(r_.f64)); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = HEDLEY_STATIC_CAST(simde_float64, a_.u32[i]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_convert_low_u32x4(a) simde_wasm_f64x2_convert_low_u32x4((a)) +#endif + +/* trunc_sat */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_trunc_sat_f32x4 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_trunc_sat_f32x4(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i32 = vcvtq_s32_f32(a_.neon_f32); + #elif defined(SIMDE_CONVERT_VECTOR_) && defined(SIMDE_FAST_CONVERSION_RANGE) + SIMDE_CONVERT_VECTOR_(r_.i32, a_.f32); + #elif defined(SIMDE_X86_SSE2_NATIVE) + const __m128i i32_max_mask = _mm_castps_si128(_mm_cmpgt_ps(a_.sse_m128, _mm_set1_ps(SIMDE_FLOAT32_C(2147483520.0)))); + const __m128 clamped = _mm_max_ps(a_.sse_m128, _mm_set1_ps(HEDLEY_STATIC_CAST(simde_float32, INT32_MIN))); + r_.sse_m128i = _mm_cvttps_epi32(clamped); + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128i = + _mm_castps_si128( + _mm_blendv_ps( + _mm_castsi128_ps(r_.sse_m128i), + _mm_castsi128_ps(_mm_set1_epi32(INT32_MAX)), + _mm_castsi128_ps(i32_max_mask) + ) + ); + #else + r_.sse_m128i = + _mm_or_si128( + _mm_and_si128(i32_max_mask, _mm_set1_epi32(INT32_MAX)), + _mm_andnot_si128(i32_max_mask, r_.sse_m128i) + ); + #endif + r_.sse_m128i = _mm_and_si128(r_.sse_m128i, _mm_castps_si128(_mm_cmpord_ps(a_.sse_m128, a_.sse_m128))); + #elif defined(SIMDE_CONVERT_VECTOR_) && defined(SIMDE_IEEE754_STORAGE) && !defined(SIMDE_ARCH_POWER) + SIMDE_CONVERT_VECTOR_(r_.i32, a_.f32); + + const __typeof__(a_.f32) max_representable = { SIMDE_FLOAT32_C(2147483520.0), SIMDE_FLOAT32_C(2147483520.0), SIMDE_FLOAT32_C(2147483520.0), SIMDE_FLOAT32_C(2147483520.0) }; + __typeof__(r_.i32) max_mask = HEDLEY_REINTERPRET_CAST(__typeof__(max_mask), a_.f32 > max_representable); + __typeof__(r_.i32) max_i32 = { INT32_MAX, INT32_MAX, INT32_MAX, INT32_MAX }; + r_.i32 = (max_i32 & max_mask) | (r_.i32 & ~max_mask); + + const __typeof__(a_.f32) min_representable = { HEDLEY_STATIC_CAST(simde_float32, INT32_MIN), HEDLEY_STATIC_CAST(simde_float32, INT32_MIN), HEDLEY_STATIC_CAST(simde_float32, INT32_MIN), HEDLEY_STATIC_CAST(simde_float32, INT32_MIN) }; + __typeof__(r_.i32) min_mask = HEDLEY_REINTERPRET_CAST(__typeof__(min_mask), a_.f32 < min_representable); + __typeof__(r_.i32) min_i32 = { INT32_MIN, INT32_MIN, INT32_MIN, INT32_MIN }; + r_.i32 = (min_i32 & min_mask) | (r_.i32 & ~min_mask); + + r_.i32 &= HEDLEY_REINTERPRET_CAST(__typeof__(r_.i32), a_.f32 == a_.f32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { + if (simde_math_isnanf(a_.f32[i])) { + r_.i32[i] = INT32_C(0); + } else if (a_.f32[i] < HEDLEY_STATIC_CAST(simde_float32, INT32_MIN)) { + r_.i32[i] = INT32_MIN; + } else if (a_.f32[i] > HEDLEY_STATIC_CAST(simde_float32, INT32_MAX)) { + r_.i32[i] = INT32_MAX; + } else { + r_.i32[i] = HEDLEY_STATIC_CAST(int32_t, a_.f32[i]); + } + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_trunc_sat_f32x4(a) simde_wasm_i32x4_trunc_sat_f32x4((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_trunc_sat_f32x4 (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_trunc_sat_f32x4(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_u32 = vcvtq_u32_f32(a_.neon_f32); + #elif defined(SIMDE_X86_SSE2_NATIVE) + #if defined(SIMDE_X86_AVX512VL_NATIVE) + r_.sse_m128i = _mm_cvttps_epu32(a_.sse_m128); + #else + __m128 first_oob_high = _mm_set1_ps(SIMDE_FLOAT32_C(4294967296.0)); + __m128 neg_zero_if_too_high = + _mm_castsi128_ps( + _mm_slli_epi32( + _mm_castps_si128(_mm_cmple_ps(first_oob_high, a_.sse_m128)), + 31 + ) + ); + r_.sse_m128i = + _mm_xor_si128( + _mm_cvttps_epi32( + _mm_sub_ps(a_.sse_m128, _mm_and_ps(neg_zero_if_too_high, first_oob_high)) + ), + _mm_castps_si128(neg_zero_if_too_high) + ); + #endif + + #if !defined(SIMDE_FAST_CONVERSION_RANGE) + r_.sse_m128i = _mm_and_si128(r_.sse_m128i, _mm_castps_si128(_mm_cmpgt_ps(a_.sse_m128, _mm_set1_ps(SIMDE_FLOAT32_C(0.0))))); + r_.sse_m128i = _mm_or_si128 (r_.sse_m128i, _mm_castps_si128(_mm_cmpge_ps(a_.sse_m128, _mm_set1_ps(SIMDE_FLOAT32_C(4294967296.0))))); + #endif + + #if !defined(SIMDE_FAST_NANS) + r_.sse_m128i = _mm_and_si128(r_.sse_m128i, _mm_castps_si128(_mm_cmpord_ps(a_.sse_m128, a_.sse_m128))); + #endif + #elif defined(SIMDE_CONVERT_VECTOR_) && defined(SIMDE_IEEE754_STORAGE) + SIMDE_CONVERT_VECTOR_(r_.u32, a_.f32); + + const __typeof__(a_.f32) max_representable = { SIMDE_FLOAT32_C(4294967040.0), SIMDE_FLOAT32_C(4294967040.0), SIMDE_FLOAT32_C(4294967040.0), SIMDE_FLOAT32_C(4294967040.0) }; + r_.u32 |= HEDLEY_REINTERPRET_CAST(__typeof__(r_.u32), a_.f32 > max_representable); + + const __typeof__(a_.f32) min_representable = { SIMDE_FLOAT32_C(0.0), }; + r_.u32 &= HEDLEY_REINTERPRET_CAST(__typeof__(r_.u32), a_.f32 > min_representable); + + r_.u32 &= HEDLEY_REINTERPRET_CAST(__typeof__(r_.u32), a_.f32 == a_.f32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u32) / sizeof(r_.u32[0])) ; i++) { + if (simde_math_isnan(a_.f32[i]) || + a_.f32[i] < SIMDE_FLOAT32_C(0.0)) { + r_.u32[i] = UINT32_C(0); + } else if (a_.f32[i] > HEDLEY_STATIC_CAST(simde_float32, UINT32_MAX)) { + r_.u32[i] = UINT32_MAX; + } else { + r_.u32[i] = HEDLEY_STATIC_CAST(uint32_t, a_.f32[i]); + } + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_trunc_sat_f32x4(a) simde_wasm_u32x4_trunc_sat_f32x4((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_trunc_sat_f64x2_zero (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_trunc_sat_f64x2_zero(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_i32 = vcombine_s32(vqmovn_s64(vcvtq_s64_f64(a_.neon_f64)), vdup_n_s32(INT32_C(0))); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + SIMDE_POWER_ALTIVEC_VECTOR(double) in_not_nan = + vec_and(a_.altivec_f64, vec_cmpeq(a_.altivec_f64, a_.altivec_f64)); + r_.altivec_i32 = vec_signede(in_not_nan); + #if defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + r_.altivec_i32 = + vec_pack( + HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(long long), r_.altivec_i32), + HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(long long), vec_splat_s32(0)) + ); + #else + SIMDE_POWER_ALTIVEC_VECTOR(unsigned char) perm = { + 0, 1, 2, 3, 4, 5, 6, 7, + 16, 17, 18, 19, 20, 21, 22, 23 + }; + r_.altivec_i32 = + HEDLEY_REINTERPRET_CAST( + SIMDE_POWER_ALTIVEC_VECTOR(signed int), + vec_perm( + HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed char), r_.altivec_i32), + vec_splat_s8(0), + perm + ) + ); + #endif + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(a_.f64) / sizeof(a_.f64[0])) ; i++) { + if (simde_math_isnan(a_.f64[i])) { + r_.i32[i] = INT32_C(0); + } else if (a_.f64[i] < HEDLEY_STATIC_CAST(simde_float64, INT32_MIN)) { + r_.i32[i] = INT32_MIN; + } else if (a_.f64[i] > HEDLEY_STATIC_CAST(simde_float64, INT32_MAX)) { + r_.i32[i] = INT32_MAX; + } else { + r_.i32[i] = HEDLEY_STATIC_CAST(int32_t, a_.f64[i]); + } + } + r_.i32[2] = 0; + r_.i32[3] = 0; + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_trunc_sat_f64x2_zero(a) simde_wasm_i32x4_trunc_sat_f64x2_zero((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_u32x4_trunc_sat_f64x2_zero (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_u32x4_trunc_sat_f64x2_zero(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_u32 = vcombine_u32(vqmovn_u64(vcvtq_u64_f64(a_.neon_f64)), vdup_n_u32(UINT32_C(0))); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(a_.f64) / sizeof(a_.f64[0])) ; i++) { + if (simde_math_isnanf(a_.f64[i]) || + a_.f64[i] < SIMDE_FLOAT64_C(0.0)) { + r_.u32[i] = UINT32_C(0); + } else if (a_.f64[i] > HEDLEY_STATIC_CAST(simde_float64, UINT32_MAX)) { + r_.u32[i] = UINT32_MAX; + } else { + r_.u32[i] = HEDLEY_STATIC_CAST(uint32_t, a_.f64[i]); + } + } + r_.u32[2] = 0; + r_.u32[3] = 0; + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_u32x4_trunc_sat_f64x2_zero(a) simde_wasm_u32x4_trunc_sat_f64x2_zero((a)) +#endif + +/* popcnt */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i8x16_popcnt (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i8x16_popcnt(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_ARM_NEON_A32V7_NATIVE) + r_.neon_i8 = vcntq_s8(a_.neon_i8); + #elif defined(SIMDE_X86_AVX512VL_NATIVE) && defined(SIMDE_X86_AVX512BITALG_NATIVE) + r_.sse_m128i = _mm_popcnt_epi8(a_.sse_m128i); + #elif defined(SIMDE_X86_AVX2_NATIVE) + __m128i tmp0 = _mm_set1_epi8(0x0f); + __m128i tmp1 = _mm_andnot_si128(tmp0, a_.sse_m128i); + __m128i y = _mm_and_si128(tmp0, a_.sse_m128i); + tmp0 = _mm_set_epi8(4, 3, 3, 2, 3, 2, 2, 1, 3, 2, 2, 1, 2, 1, 1, 0); + tmp1 = _mm_srli_epi16(tmp1, 4); + y = _mm_shuffle_epi8(tmp0, y); + tmp1 = _mm_shuffle_epi8(tmp0, tmp1); + return _mm_add_epi8(y, tmp1); + #elif defined(SIMDE_X86_SSSE3_NATIVE) + __m128i tmp0 = _mm_set1_epi8(0x0f); + __m128i tmp1 = _mm_and_si128(a_.sse_m128i, tmp0); + tmp0 = _mm_andnot_si128(tmp0, a_.sse_m128i); + __m128i y = _mm_set_epi8(4, 3, 3, 2, 3, 2, 2, 1, 3, 2, 2, 1, 2, 1, 1, 0); + tmp0 = _mm_srli_epi16(tmp0, 4); + y = _mm_shuffle_epi8(y, tmp1); + tmp1 = _mm_set_epi8(4, 3, 3, 2, 3, 2, 2, 1, 3, 2, 2, 1, 2, 1, 1, 0); + tmp1 = _mm_shuffle_epi8(tmp1, tmp0); + return _mm_add_epi8(y, tmp1); + #elif defined(SIMDE_X86_SSE2_NATIVE) + __m128i tmp0 = _mm_and_si128(_mm_srli_epi16(a_.sse_m128i, 1), _mm_set1_epi8(0x55)); + __m128i tmp1 = _mm_sub_epi8(a_.sse_m128i, tmp0); + tmp0 = tmp1; + tmp1 = _mm_and_si128(tmp1, _mm_set1_epi8(0x33)); + tmp0 = _mm_and_si128(_mm_srli_epi16(tmp0, 2), _mm_set1_epi8(0x33)); + tmp1 = _mm_add_epi8(tmp1, tmp0); + tmp0 = _mm_srli_epi16(tmp1, 4); + tmp1 = _mm_add_epi8(tmp1, tmp0); + r_.sse_m128i = _mm_and_si128(tmp1, _mm_set1_epi8(0x0f)); + #elif defined(SIMDE_POWER_ALTIVEC_P8_NATIVE) + r_.altivec_i8 = HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(signed char), vec_popcnt(HEDLEY_REINTERPRET_CAST(SIMDE_POWER_ALTIVEC_VECTOR(unsigned char), a_.altivec_i8))); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.u8) / sizeof(r_.u8[0])) ; i++) { + uint8_t v = HEDLEY_STATIC_CAST(uint8_t, a_.u8[i]); + v = v - ((v >> 1) & (85)); + v = (v & (51)) + ((v >> (2)) & (51)); + v = (v + (v >> (4))) & (15); + r_.u8[i] = v >> (sizeof(uint8_t) - 1) * CHAR_BIT; + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i8x16_popcnt(a) simde_wasm_i8x16_popcnt((a)) +#endif + +/* dot */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_i32x4_dot_i16x8 (simde_v128_t a, simde_v128_t b) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_i32x4_dot_i16x8(a, b); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + b_ = simde_v128_to_private(b), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128i = _mm_madd_epi16(a_.sse_m128i, b_.sse_m128i); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + int32x4_t pl = vmull_s16(vget_low_s16(a_.neon_i16), vget_low_s16(b_.neon_i16)); + int32x4_t ph = vmull_high_s16(a_.neon_i16, b_.neon_i16); + r_.neon_i32 = vpaddq_s32(pl, ph); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + int32x4_t pl = vmull_s16(vget_low_s16(a_.neon_i16), vget_low_s16(b_.neon_i16)); + int32x4_t ph = vmull_s16(vget_high_s16(a_.neon_i16), vget_high_s16(b_.neon_i16)); + int32x2_t rl = vpadd_s32(vget_low_s32(pl), vget_high_s32(pl)); + int32x2_t rh = vpadd_s32(vget_low_s32(ph), vget_high_s32(ph)); + r_.neon_i32 = vcombine_s32(rl, rh); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_i32 = vec_msum(a_.altivec_i16, b_.altivec_i16, vec_splats(0)); + #elif defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) + r_.altivec_i32 = vec_mule(a_.altivec_i16, b_.altivec_i16) + vec_mulo(a_.altivec_i16, b_.altivec_i16); + #elif defined(SIMDE_VECTOR_SUBSCRIPT_OPS) && defined(SIMDE_CONVERT_VECTOR_) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) + int32_t SIMDE_VECTOR(32) a32, b32, p32; + SIMDE_CONVERT_VECTOR_(a32, a_.i16); + SIMDE_CONVERT_VECTOR_(b32, b_.i16); + p32 = a32 * b32; + r_.i32 = + __builtin_shufflevector(p32, p32, 0, 2, 4, 6) + + __builtin_shufflevector(p32, p32, 1, 3, 5, 7); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_) / sizeof(r_.i16[0])) ; i += 2) { + r_.i32[i / 2] = (a_.i16[i] * b_.i16[i]) + (a_.i16[i + 1] * b_.i16[i + 1]); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_i32x4_dot_i16x8(a, b) simde_wasm_i32x4_dot_i16x8((a), (b)) +#endif + +/* ceil */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_ceil (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_ceil(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128 = _mm_round_ps(a_.sse_m128, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC); + #elif defined(SIMDE_X86_SSE2_NATIVE) + /* https://github.com/WebAssembly/simd/pull/232 */ + const __m128i input_as_i32 = _mm_cvttps_epi32(a_.sse_m128); + const __m128i i32_min = _mm_set1_epi32(INT32_MIN); + const __m128i input_is_out_of_range = _mm_or_si128(_mm_cmpeq_epi32(input_as_i32, i32_min), i32_min); + const __m128 truncated = + _mm_or_ps( + _mm_andnot_ps( + _mm_castsi128_ps(input_is_out_of_range), + _mm_cvtepi32_ps(input_as_i32) + ), + _mm_castsi128_ps( + _mm_castps_si128( + _mm_and_ps( + _mm_castsi128_ps(input_is_out_of_range), + a_.sse_m128 + ) + ) + ) + ); + + const __m128 trunc_is_ge_input = + _mm_or_ps( + _mm_cmple_ps(a_.sse_m128, truncated), + _mm_castsi128_ps(i32_min) + ); + r_.sse_m128 = + _mm_or_ps( + _mm_andnot_ps( + trunc_is_ge_input, + _mm_add_ps(truncated, _mm_set1_ps(SIMDE_FLOAT32_C(1.0))) + ), + _mm_and_ps(trunc_is_ge_input, truncated) + ); + #elif defined(SIMDE_ARM_NEON_A32V8_NATIVE) + r_.neon_f32 = vrndpq_f32(a_.neon_f32); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) + r_.altivec_f32 = vec_ceil(a_.altivec_f32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = simde_math_quietf(simde_math_ceilf(a_.f32[i])); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_ceil(a) simde_wasm_f32x4_ceil((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_ceil (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_ceil(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128d = _mm_round_pd(a_.sse_m128d, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_f64 = vrndpq_f64(a_.neon_f64); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + r_.altivec_f64 = vec_ceil(a_.altivec_f64); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = simde_math_quiet(simde_math_ceil(a_.f64[i])); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_ceil(a) simde_wasm_f64x2_ceil((a)) +#endif + +/* floor */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_floor (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_floor(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE4_1_NATIVE) + r_.sse_m128 = _mm_floor_ps(a_.sse_m128); + #elif defined(SIMDE_X86_SSE2_NATIVE) + const __m128i vint_min = _mm_set1_epi32(INT_MIN); + const __m128i input_as_int = _mm_cvttps_epi32(a_.sse_m128); + const __m128 input_truncated = _mm_cvtepi32_ps(input_as_int); + const __m128i oor_all_or_neg = _mm_or_si128(_mm_cmpeq_epi32(input_as_int, vint_min), vint_min); + const __m128 tmp = + _mm_castsi128_ps( + _mm_or_si128( + _mm_andnot_si128( + oor_all_or_neg, + _mm_castps_si128(input_truncated) + ), + _mm_and_si128( + oor_all_or_neg, + _mm_castps_si128(a_.sse_m128) + ) + ) + ); + r_.sse_m128 = + _mm_sub_ps( + tmp, + _mm_and_ps( + _mm_cmplt_ps( + a_.sse_m128, + tmp + ), + _mm_set1_ps(SIMDE_FLOAT32_C(1.0)) + ) + ); + #elif defined(SIMDE_ARM_NEON_A32V8_NATIVE) + r_.neon_f32 = vrndmq_f32(a_.neon_f32); + #elif defined(SIMDE_ARM_NEON_A32V7_NATIVE) + const int32x4_t input_as_int = vcvtq_s32_f32(a_.f32); + const float32x4_t input_truncated = vcvtq_f32_s32(input_as_int); + const float32x4_t tmp = + vbslq_f32( + vbicq_u32( + vcagtq_f32( + vreinterpretq_f32_u32(vdupq_n_u32(UINT32_C(0x4B000000))), + a_.f32 + ), + vdupq_n_u32(UINT32_C(0x80000000)) + ), + input_truncated, + a_.f32); + r_.neon_f32 = + vsubq_f32( + tmp, + vreinterpretq_f32_u32( + vandq_u32( + vcgtq_f32( + tmp, + a_.f32 + ), + vdupq_n_u32(UINT32_C(0x3F800000)) + ) + ) + ); + #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE) || defined(SIMDE_ZARCH_ZVECTOR_14_NATIVE) + r_.altivec_f32 = vec_floor(a_.altivec_f32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = simde_math_quietf(simde_math_floorf(a_.f32[i])); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_floor(a) simde_wasm_f32x4_floor((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_floor (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_floor(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = simde_math_quiet(simde_math_floor(a_.f64[i])); + } + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_floor(a) simde_wasm_f64x2_floor((a)) +#endif + +/* trunc */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_trunc (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_trunc(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = simde_math_quietf(simde_math_truncf(a_.f32[i])); + } + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_trunc(a) simde_wasm_f32x4_trunc((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_trunc (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_trunc(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = simde_math_quiet(simde_math_trunc(a_.f64[i])); + } + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_trunc(a) simde_wasm_f64x2_trunc((a)) +#endif + +/* nearest */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_nearest (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_nearest(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = simde_math_quietf(simde_math_nearbyintf(a_.f32[i])); + } + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_nearest(a) simde_wasm_f32x4_nearest((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_nearest (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_nearest(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = simde_math_quiet(simde_math_nearbyint(a_.f64[i])); + } + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_nearest(a) simde_wasm_f64x2_nearest((a)) +#endif + +/* sqrt */ + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f32x4_sqrt (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f32x4_sqrt(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE_NATIVE) + r_.sse_m128 = _mm_sqrt_ps(a_.sse_m128); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_f32 = vsqrtq_f32(a_.neon_f32); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + r_.altivec_f32 = vec_sqrt(a_.altivec_f32); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) { + r_.f32[i] = simde_math_quietf(simde_math_sqrtf(a_.f32[i])); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f32x4_sqrt(a) simde_wasm_f32x4_sqrt((a)) +#endif + +SIMDE_FUNCTION_ATTRIBUTES +simde_v128_t +simde_wasm_f64x2_sqrt (simde_v128_t a) { + #if defined(SIMDE_WASM_SIMD128_NATIVE) + return wasm_f64x2_sqrt(a); + #else + simde_v128_private + a_ = simde_v128_to_private(a), + r_; + + #if defined(SIMDE_X86_SSE2_NATIVE) + r_.sse_m128d = _mm_sqrt_pd(a_.sse_m128d); + #elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) + r_.neon_f64 = vsqrtq_f64(a_.neon_f64); + #elif defined(SIMDE_POWER_ALTIVEC_P7_NATIVE) + r_.altivec_f64 = vec_sqrt(a_.altivec_f64); + #else + SIMDE_VECTORIZE + for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) { + r_.f64[i] = simde_math_quiet(simde_math_sqrt(a_.f64[i])); + } + #endif + + return simde_v128_from_private(r_); + #endif +} +#if defined(SIMDE_WASM_SIMD128_ENABLE_NATIVE_ALIASES) + #define wasm_f64x2_sqrt(a) simde_wasm_f64x2_sqrt((a)) +#endif + +SIMDE_END_DECLS_ + +HEDLEY_DIAGNOSTIC_POP + +#endif /* !defined(SIMDE_WASM_SIMD128_H) */ +/* :: End simde/wasm/simd128.h :: */ diff --git a/apps/mobile/modules/t3-highlights/Vendor/wasm2c/LICENSE b/apps/mobile/modules/t3-highlights/Vendor/wasm2c/LICENSE new file mode 100644 index 0000000000000..d645695673349 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/Vendor/wasm2c/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt-impl-tableops.inc b/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt-impl-tableops.inc new file mode 100644 index 0000000000000..323a32f8db109 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt-impl-tableops.inc @@ -0,0 +1,90 @@ +/* + * Copyright 2018 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// This file is used as a template to generate code for table operations for +// funcref or externref. For this, the file must be included after defining +// either WASM_RT_TABLE_OPS_FUNCREF or WASM_RT_TABLE_OPS_EXTERNREF + +#if defined(WASM_RT_TABLE_OPS_FUNCREF) + \ + defined(WASM_RT_TABLE_OPS_EXTERNREF) + \ + defined(WASM_RT_TABLE_OPS_EXNREF) > \ + 1 +#error \ + "Expected only one of { WASM_RT_TABLE_OPS_FUNCREF, WASM_RT_TABLE_OPS_EXTERNREF, WASM_RT_TABLE_OPS_EXNREF } to be defined" +#elif defined(WASM_RT_TABLE_OPS_FUNCREF) + \ + defined(WASM_RT_TABLE_OPS_EXTERNREF) + \ + defined(WASM_RT_TABLE_OPS_EXNREF) < \ + 1 +#error \ + "Expected one of { WASM_RT_TABLE_OPS_FUNCREF, WASM_RT_TABLE_OPS_EXTERNREF, WASM_RT_TABLE_OPS_EXNREF } to be defined" +#endif + +#if defined(WASM_RT_TABLE_OPS_FUNCREF) +#define WASM_RT_TABLE_TYPE wasm_rt_funcref_table_t +#define WASM_RT_TABLE_ELEMENT_TYPE wasm_rt_funcref_t +#define WASM_RT_TABLE_APINAME(name) name##_funcref_table +#elif defined(WASM_RT_TABLE_OPS_EXTERNREF) +#define WASM_RT_TABLE_TYPE wasm_rt_externref_table_t +#define WASM_RT_TABLE_ELEMENT_TYPE wasm_rt_externref_t +#define WASM_RT_TABLE_APINAME(name) name##_externref_table +#elif defined(WASM_RT_TABLE_OPS_EXNREF) +#define WASM_RT_TABLE_TYPE wasm_rt_exnref_table_t +#define WASM_RT_TABLE_ELEMENT_TYPE wasm_rt_exnref_t +#define WASM_RT_TABLE_APINAME(name) name##_exnref_table +#endif + +void WASM_RT_TABLE_APINAME(wasm_rt_allocate)(WASM_RT_TABLE_TYPE* table, + uint32_t elements, + uint32_t max_elements) { + table->size = elements; + table->max_size = max_elements; + table->data = calloc(table->size, sizeof(WASM_RT_TABLE_ELEMENT_TYPE)); +} + +void WASM_RT_TABLE_APINAME(wasm_rt_free)(WASM_RT_TABLE_TYPE* table) { + free(table->data); +} + +uint32_t WASM_RT_TABLE_APINAME(wasm_rt_grow)(WASM_RT_TABLE_TYPE* table, + uint32_t delta, + WASM_RT_TABLE_ELEMENT_TYPE init) { + uint32_t old_elems = table->size; + uint64_t new_elems = (uint64_t)table->size + delta; + if (new_elems == 0) { + return 0; + } + if ((new_elems < old_elems) || (new_elems > table->max_size)) { + return (uint32_t)-1; + } + if (new_elems > SIZE_MAX / sizeof(WASM_RT_TABLE_ELEMENT_TYPE)) { + return (uint32_t)-1; + } + void* new_data = + realloc(table->data, new_elems * sizeof(WASM_RT_TABLE_ELEMENT_TYPE)); + if (!new_data) { + return (uint32_t)-1; + } + table->data = new_data; + table->size = new_elems; + for (uint32_t i = old_elems; i < new_elems; i++) { + table->data[i] = init; + } + return old_elems; +} + +#undef WASM_RT_TABLE_APINAME +#undef WASM_RT_TABLE_ELEMENT_TYPE +#undef WASM_RT_TABLE_TYPE diff --git a/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt-impl.c b/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt-impl.c new file mode 100644 index 0000000000000..0cf0723a95de0 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt-impl.c @@ -0,0 +1,401 @@ +/* + * Copyright 2018 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm-rt-impl.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#if WASM_RT_INSTALL_SIGNAL_HANDLER && !defined(_WIN32) +#include +#include +#endif + +#ifdef _WIN32 +#include +#else +#include +#endif + +#ifndef NDEBUG +#define DEBUG_PRINTF(...) fprintf(stderr, __VA_ARGS__); +#else +#define DEBUG_PRINTF(...) +#endif + +#if WASM_RT_INSTALL_SIGNAL_HANDLER +static bool g_signal_handler_installed = false; +#ifdef _WIN32 +static void* g_sig_handler_handle = 0; +#endif +#endif + +#if WASM_RT_USE_SEGUE +bool wasm_rt_fsgsbase_inst_supported = false; +#ifdef __linux__ +#include +#ifdef __GLIBC__ +#include +#endif +#include // For ARCH_SET_GS +#include // For SYS_arch_prctl +#include // For syscall +#ifndef HWCAP2_FSGSBASE +#define HWCAP2_FSGSBASE (1 << 1) +#endif +#elif defined(__FreeBSD__) +#include // For amd64_set_gsbase etc. +#endif +#endif + +#if WASM_RT_SEGUE_FREE_SEGMENT +WASM_RT_THREAD_LOCAL void* wasm_rt_last_segment_val = NULL; +#endif + +#if WASM_RT_STACK_DEPTH_COUNT +WASM_RT_THREAD_LOCAL uint32_t wasm_rt_call_stack_depth; +WASM_RT_THREAD_LOCAL uint32_t wasm_rt_saved_call_stack_depth; +#elif WASM_RT_STACK_EXHAUSTION_HANDLER +static WASM_RT_THREAD_LOCAL void* g_alt_stack = NULL; +#endif + +#ifndef WASM_RT_TRAP_HANDLER +WASM_RT_THREAD_LOCAL wasm_rt_jmp_buf g_wasm_rt_jmp_buf; +#endif + +#ifdef WASM_RT_TRAP_HANDLER +extern void WASM_RT_TRAP_HANDLER(wasm_rt_trap_t code); +#endif + +void wasm_rt_trap(wasm_rt_trap_t code) { + assert(code != WASM_RT_TRAP_NONE); +#if WASM_RT_STACK_DEPTH_COUNT + wasm_rt_call_stack_depth = wasm_rt_saved_call_stack_depth; +#endif + +#ifdef WASM_RT_TRAP_HANDLER + WASM_RT_TRAP_HANDLER(code); + wasm_rt_unreachable(); +#else + WASM_RT_LONGJMP(g_wasm_rt_jmp_buf, code); +#endif +} + +#ifdef _WIN32 + +#if WASM_RT_INSTALL_SIGNAL_HANDLER + +static LONG os_signal_handler(PEXCEPTION_POINTERS info) { + if (info->ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION) { + wasm_rt_trap(WASM_RT_TRAP_OOB); + } else if (info->ExceptionRecord->ExceptionCode == EXCEPTION_STACK_OVERFLOW) { + wasm_rt_trap(WASM_RT_TRAP_EXHAUSTION); + } + return EXCEPTION_CONTINUE_SEARCH; +} + +static void os_install_signal_handler(void) { + g_sig_handler_handle = + AddVectoredExceptionHandler(1 /* CALL_FIRST */, os_signal_handler); +} + +static void os_cleanup_signal_handler(void) { + RemoveVectoredExceptionHandler(g_sig_handler_handle); +} + +#endif + +#else + +#if WASM_RT_INSTALL_SIGNAL_HANDLER +static void os_signal_handler(int sig, siginfo_t* si, void* unused) { + if (si->si_code == SEGV_ACCERR) { + wasm_rt_trap(WASM_RT_TRAP_OOB); + } else { + wasm_rt_trap(WASM_RT_TRAP_EXHAUSTION); + } +} + +static void os_install_signal_handler(void) { + struct sigaction sa; + memset(&sa, '\0', sizeof(sa)); + sa.sa_flags = SA_SIGINFO; +#if WASM_RT_STACK_EXHAUSTION_HANDLER + sa.sa_flags |= SA_ONSTACK; +#endif + sigemptyset(&sa.sa_mask); + sa.sa_sigaction = os_signal_handler; + + /* Install SIGSEGV and SIGBUS handlers, since macOS seems to use SIGBUS. */ + if (sigaction(SIGSEGV, &sa, NULL) != 0 || sigaction(SIGBUS, &sa, NULL) != 0) { + perror("sigaction failed"); + abort(); + } +} + +static void os_cleanup_signal_handler(void) { + /* Undo what was done in os_install_signal_handler */ + struct sigaction sa; + memset(&sa, '\0', sizeof(sa)); + sa.sa_handler = SIG_DFL; + if (sigaction(SIGSEGV, &sa, NULL) != 0 || sigaction(SIGBUS, &sa, NULL)) { + perror("sigaction failed"); + abort(); + } +} +#endif + +#if WASM_RT_STACK_EXHAUSTION_HANDLER +static bool os_has_altstack_installed() { + /* check for altstack already in place */ + stack_t ss; + if (sigaltstack(NULL, &ss) != 0) { + perror("os_has_altstack_installed: sigaltstack failed"); + abort(); + } + + return !(ss.ss_flags & SS_DISABLE); +} + +/* These routines set up an altstack to handle SIGSEGV from stack overflow. */ +static void os_allocate_and_install_altstack(void) { + /* verify altstack not already allocated */ + assert(!g_alt_stack && + "wasm-rt error: tried to re-allocate thread-local alternate stack"); + + /* We could check and warn if an altstack is already installed, but some + * sanitizers install their own altstack, so this warning would fire + * spuriously and break the test outputs. */ + + /* allocate altstack */ + g_alt_stack = malloc(SIGSTKSZ); + if (g_alt_stack == NULL) { + perror("malloc failed"); + abort(); + } + + /* install altstack */ + stack_t ss; + ss.ss_sp = g_alt_stack; + ss.ss_flags = 0; + ss.ss_size = SIGSTKSZ; + if (sigaltstack(&ss, NULL) != 0) { + perror("os_allocate_and_install_altstack: sigaltstack failed"); + abort(); + } +} + +static void os_disable_and_deallocate_altstack(void) { + /* in debug build, verify altstack allocated */ + assert(g_alt_stack && + "wasm-rt error: thread-local alternate stack not allocated"); + + /* verify altstack was still in place */ + stack_t ss; + if (sigaltstack(NULL, &ss) != 0) { + perror("os_disable_and_deallocate_altstack: sigaltstack failed"); + abort(); + } + + if ((!g_alt_stack) || (ss.ss_flags & SS_DISABLE) || + (ss.ss_sp != g_alt_stack) || (ss.ss_size != SIGSTKSZ)) { + DEBUG_PRINTF( + "wasm-rt warning: alternate stack was modified unexpectedly\n"); + return; + } + + assert(!(ss.ss_flags & SS_ONSTACK) && + "attempt to deallocate altstack while in use"); + + /* disable and free */ + ss.ss_flags = SS_DISABLE; + if (sigaltstack(&ss, NULL) != 0) { + perror("sigaltstack disable failed"); + abort(); + } + assert(!os_has_altstack_installed()); + free(g_alt_stack); + g_alt_stack = NULL; +} +#endif + +#endif + +#if WASM_RT_USE_SEGUE && defined(__FreeBSD__) +static void call_cpuid(uint64_t* rax, + uint64_t* rbx, + uint64_t* rcx, + uint64_t* rdx) { + __asm__ volatile( + "cpuid" + : "=a"(*rax), "=b"(*rbx), "=c"(*rcx), "=d"(*rdx) // output operands + : "a"(*rax), "c"(*rcx) // input operands + ); +} +#endif + +void wasm_rt_init(void) { + wasm_rt_init_thread(); +#if WASM_RT_INSTALL_SIGNAL_HANDLER + if (!g_signal_handler_installed) { + g_signal_handler_installed = true; + os_install_signal_handler(); + } +#endif + +#if WASM_RT_USE_SEGUE +#if defined(__linux__) && defined(__GLIBC__) && __GLIBC__ >= 2 && \ + __GLIBC_MINOR__ >= 18 + // Check for support for userspace wrgsbase instructions + unsigned long val = getauxval(AT_HWCAP2); + wasm_rt_fsgsbase_inst_supported = val & HWCAP2_FSGSBASE; +#elif defined(__FreeBSD__) + // FreeBSD enables fsgsbase on the newer kernels if the hardware supports it. + // We just need to check if the hardware supports it by querying the correct + // cpuid leaf. + uint64_t rax, rbx, rcx, rdx; + rax = 0; + call_cpuid(&rax, &rbx, &rcx, &rdx); + + if (rax > 7) { + rax = 7; + rcx = 0; + call_cpuid(&rax, &rbx, &rcx, &rdx); + if (rbx & 0x1) { + wasm_rt_fsgsbase_inst_supported = true; + } + } +#endif +#endif + + assert(wasm_rt_is_initialized()); +} + +bool wasm_rt_is_initialized(void) { +#if WASM_RT_STACK_EXHAUSTION_HANDLER + if (!os_has_altstack_installed()) { + return false; + } +#endif +#if WASM_RT_INSTALL_SIGNAL_HANDLER + return g_signal_handler_installed; +#else + return true; +#endif +} + +void wasm_rt_free(void) { + assert(wasm_rt_is_initialized()); +#if WASM_RT_INSTALL_SIGNAL_HANDLER + os_cleanup_signal_handler(); + g_signal_handler_installed = false; +#endif + wasm_rt_free_thread(); +} + +void wasm_rt_init_thread(void) { +#if WASM_RT_STACK_EXHAUSTION_HANDLER + os_allocate_and_install_altstack(); +#endif +} + +void wasm_rt_free_thread(void) { +#if WASM_RT_STACK_EXHAUSTION_HANDLER + os_disable_and_deallocate_altstack(); +#endif +} + +#if WASM_RT_USE_SEGUE +void wasm_rt_syscall_set_segue_base(void* base) { + int error_code = 0; +#ifdef __linux__ + error_code = syscall(SYS_arch_prctl, ARCH_SET_GS, base); +#elif defined(__FreeBSD__) + error_code = amd64_set_gsbase(base); +#else +#error "Unknown platform" +#endif + if (error_code != 0) { + perror("wasm_rt_syscall_set_segue_base error"); + abort(); + } +} +void* wasm_rt_syscall_get_segue_base() { + void* base; + int error_code = 0; +#ifdef __linux__ + error_code = syscall(SYS_arch_prctl, ARCH_GET_GS, &base); +#elif defined(__FreeBSD__) + error_code = amd64_get_gsbase(&base); +#else +#error "Unknown platform" +#endif + if (error_code != 0) { + perror("wasm_rt_syscall_get_segue_base error"); + abort(); + } + return base; +} +#endif + +// Include table operations for funcref +#define WASM_RT_TABLE_OPS_FUNCREF +#include "wasm-rt-impl-tableops.inc" +#undef WASM_RT_TABLE_OPS_FUNCREF + +// Include table operations for externref +#define WASM_RT_TABLE_OPS_EXTERNREF +#include "wasm-rt-impl-tableops.inc" +#undef WASM_RT_TABLE_OPS_EXTERNREF + +const char* wasm_rt_strerror(wasm_rt_trap_t trap) { + switch (trap) { + case WASM_RT_TRAP_NONE: + return "No error"; + case WASM_RT_TRAP_OOB: +#if WASM_RT_MERGED_OOB_AND_EXHAUSTION_TRAPS + return "Out-of-bounds access in linear memory or a table, or call stack " + "exhausted"; +#else + return "Out-of-bounds access in linear memory or a table"; + case WASM_RT_TRAP_EXHAUSTION: + return "Call stack exhausted"; +#endif + case WASM_RT_TRAP_INT_OVERFLOW: + return "Integer overflow on divide or truncation"; + case WASM_RT_TRAP_DIV_BY_ZERO: + return "Integer divide by zero"; + case WASM_RT_TRAP_INVALID_CONVERSION: + return "Conversion from NaN to integer"; + case WASM_RT_TRAP_UNREACHABLE: + return "Unreachable instruction executed"; + case WASM_RT_TRAP_CALL_INDIRECT: + return "Invalid call_indirect or return_call_indirect"; + case WASM_RT_TRAP_UNCAUGHT_EXCEPTION: + return "Uncaught exception"; + case WASM_RT_TRAP_UNALIGNED: + return "Unaligned atomic memory access"; + case WASM_RT_TRAP_NULL_REF: + return "Null reference"; + } + return "invalid trap code"; +} diff --git a/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt-impl.h b/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt-impl.h new file mode 100644 index 0000000000000..ed46b097211cb --- /dev/null +++ b/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt-impl.h @@ -0,0 +1,68 @@ +/* + * Copyright 2018 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef WASM_RT_IMPL_H_ +#define WASM_RT_IMPL_H_ + +#include "wasm-rt.h" + +#ifdef _WIN32 +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef WASM_RT_TRAP_HANDLER +/** A setjmp buffer used for handling traps. */ +extern WASM_RT_THREAD_LOCAL wasm_rt_jmp_buf g_wasm_rt_jmp_buf; +#endif + +#if WASM_RT_STACK_DEPTH_COUNT +/** Saved call stack depth that will be restored in case a trap occurs. */ +extern WASM_RT_THREAD_LOCAL uint32_t wasm_rt_saved_call_stack_depth; +#define WASM_RT_SAVE_STACK_DEPTH() \ + wasm_rt_saved_call_stack_depth = wasm_rt_call_stack_depth +#else +#define WASM_RT_SAVE_STACK_DEPTH() (void)0 +#endif + +/** + * Convenience macro to use before calling a wasm function. On first execution + * it will return `WASM_RT_TRAP_NONE` (i.e. 0). If the function traps, it will + * jump back and return the trap that occurred. + * + * ``` + * wasm_rt_trap_t code = wasm_rt_impl_try(); + * if (code != 0) { + * printf("A trap occurred with code: %d\n", code); + * ... + * } + * + * // Call the potentially-trapping function. + * my_wasm_func(); + * ``` + */ +#define wasm_rt_impl_try() \ + (WASM_RT_SAVE_STACK_DEPTH(), wasm_rt_set_unwind_target(&g_wasm_rt_jmp_buf), \ + WASM_RT_SETJMP(g_wasm_rt_jmp_buf)) + +#ifdef __cplusplus +} +#endif + +#endif /* WASM_RT_IMPL_H_ */ diff --git a/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt-mem-impl-helper.inc b/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt-mem-impl-helper.inc new file mode 100644 index 0000000000000..4e209ee55e0b8 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt-mem-impl-helper.inc @@ -0,0 +1,207 @@ +/* + * Copyright 2018 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// This file is used as a template to generate code for regular memories or for +// shared memories. For this, the file must be included after defining either +// WASM_RT_MEM_OPS or WASM_RT_MEM_OPS_SHARED. + +#if defined(WASM_RT_MEM_OPS) && defined(WASM_RT_MEM_OPS_SHARED) +#error \ + "Expected only one of { WASM_RT_MEM_OPS, WASM_RT_MEM_OPS_SHARED } to be defined" +#elif !defined(WASM_RT_MEM_OPS) && !defined(WASM_RT_MEM_OPS_SHARED) +#error \ + "Expected one of { WASM_RT_MEM_OPS, WASM_RT_MEM_OPS_SHARED } to be defined" +#endif + +// Shared memory operations are defined only if we have C11 +#if defined(WASM_RT_MEM_OPS) || \ + (defined(WASM_RT_MEM_OPS_SHARED) && defined(WASM_RT_C11_AVAILABLE)) + +#ifdef WASM_RT_MEM_OPS + +// Memory operations on wasm_rt_memory_t +#define MEMORY_TYPE wasm_rt_memory_t +#define MEMORY_API_NAME(name) name +#define MEMORY_CELL_TYPE uint8_t* +#define MEMORY_LOCK_VAR_INIT(name) +#define MEMORY_LOCK_AQUIRE(name) +#define MEMORY_LOCK_RELEASE(name) + +#else + +// Memory operations on wasm_rt_shared_memory_t +#define MEMORY_TYPE wasm_rt_shared_memory_t +#define MEMORY_API_NAME(name) name##_shared +#define MEMORY_CELL_TYPE _Atomic volatile uint8_t* + +#if WASM_RT_USE_CRITICALSECTION +#define MEMORY_LOCK_VAR_INIT(name) WIN_MEMORY_LOCK_VAR_INIT(name) +#define MEMORY_LOCK_AQUIRE(name) WIN_MEMORY_LOCK_AQUIRE(name) +#define MEMORY_LOCK_RELEASE(name) WIN_MEMORY_LOCK_RELEASE(name) +#elif WASM_RT_USE_PTHREADS +#define MEMORY_LOCK_VAR_INIT(name) PTHREAD_MEMORY_LOCK_VAR_INIT(name) +#define MEMORY_LOCK_AQUIRE(name) PTHREAD_MEMORY_LOCK_AQUIRE(name) +#define MEMORY_LOCK_RELEASE(name) PTHREAD_MEMORY_LOCK_RELEASE(name) +#endif + +#endif + +bool MEMORY_API_NAME(wasm_rt_memory_is_default32)(const MEMORY_TYPE* memory) { + return memory->page_size == WASM_DEFAULT_PAGE_SIZE && !memory->is64; +} + +void MEMORY_API_NAME(wasm_rt_allocate_memory)(MEMORY_TYPE* memory, + uint64_t initial_pages, + uint64_t max_pages, + bool is64, + uint32_t page_size) { + uint64_t byte_length; + if (u64_mult_overflow(initial_pages, page_size, &byte_length)) { + abort(); + } + memory->size = byte_length; + memory->pages = initial_pages; + memory->max_pages = max_pages; + memory->is64 = is64; + memory->page_size = page_size; + MEMORY_LOCK_VAR_INIT(memory->mem_lock); + +#if WASM_RT_USE_MMAP + if (MEMORY_API_NAME(wasm_rt_memory_is_default32)(memory)) { + const uint64_t mmap_size = + get_alloc_size_for_mmap_default32(memory->max_pages); + uint8_t* addr = os_mmap(mmap_size); + if (!addr) { + os_print_last_error("os_mmap failed."); + abort(); + } + uint8_t* data_end = addr + mmap_size; +#if !WABT_BIG_ENDIAN + int ret = os_mprotect(addr, byte_length); +#else + int ret = os_mprotect(data_end - byte_length, byte_length); +#endif + if (ret != 0) { + os_print_last_error("os_mprotect failed."); + abort(); + } + memory->data = (MEMORY_CELL_TYPE)addr; + memory->data_end = (MEMORY_CELL_TYPE)data_end; + return; + } +#endif + + memory->data = (MEMORY_CELL_TYPE)calloc(byte_length, 1); + if (byte_length != 0 && !memory->data) { + abort(); + } + memory->data_end = memory->data + byte_length; +} + +// Returns 0 on success +static int MEMORY_API_NAME(expand_data_allocation)(MEMORY_TYPE* memory, + uint64_t old_size, + uint64_t new_size, + uint64_t delta_size) { +#if WASM_RT_USE_MMAP + if (MEMORY_API_NAME(wasm_rt_memory_is_default32)(memory)) { +#if !WABT_BIG_ENDIAN + return os_mprotect((void*)(memory->data + old_size), delta_size); +#else + return os_mprotect((void*)(memory->data_end - old_size - delta_size), + delta_size); +#endif + } +#endif + + uint8_t* new_data = realloc((void*)memory->data, new_size); + if (new_data == NULL) { + return -1; + } +#if !WABT_BIG_ENDIAN + memset((void*)(new_data + old_size), 0, delta_size); +#else + memmove((void*)(new_data + new_size - old_size), (void*)new_data, old_size); + memset((void*)new_data, 0, delta_size); +#endif + + memory->data = (MEMORY_CELL_TYPE)new_data; + memory->data_end = memory->data + new_size; + return 0; +} + +static uint64_t MEMORY_API_NAME(grow_memory_impl)(MEMORY_TYPE* memory, + uint64_t delta) { + uint64_t old_pages = memory->pages; + uint64_t new_pages = memory->pages + delta; + if (delta == 0) { + return old_pages; + } + if (new_pages < old_pages || new_pages > memory->max_pages) { + return (uint64_t)-1; + } + + uint64_t old_size, new_size, delta_size; + if (u64_mult_overflow(old_pages, memory->page_size, &old_size) || + u64_mult_overflow(new_pages, memory->page_size, &new_size) || + u64_mult_overflow(delta, memory->page_size, &delta_size)) { + return (uint64_t)-1; + } + + int err = MEMORY_API_NAME(expand_data_allocation)(memory, old_size, new_size, + delta_size); + if (err != 0) { + return (uint64_t)-1; + } + + memory->pages = new_pages; + memory->size = new_size; + return old_pages; +} + +uint64_t MEMORY_API_NAME(wasm_rt_grow_memory)(MEMORY_TYPE* memory, + uint64_t delta) { + MEMORY_LOCK_AQUIRE(memory->mem_lock); + uint64_t ret = MEMORY_API_NAME(grow_memory_impl)(memory, delta); + MEMORY_LOCK_RELEASE(memory->mem_lock); +#ifdef WASM_RT_GROW_FAILED_HANDLER + if (ret == (uint64_t)-1) { + WASM_RT_GROW_FAILED_HANDLER(); + } +#endif + return ret; +} + +void MEMORY_API_NAME(wasm_rt_free_memory)(MEMORY_TYPE* memory) { +#if WASM_RT_USE_MMAP + if (MEMORY_API_NAME(wasm_rt_memory_is_default32)(memory)) { + const uint64_t mmap_size = + get_alloc_size_for_mmap_default32(memory->max_pages); + os_munmap((void*)memory->data, mmap_size); // ignore error + return; + } +#endif + free((void*)memory->data); +} + +#undef MEMORY_LOCK_RELEASE +#undef MEMORY_LOCK_AQUIRE +#undef MEMORY_LOCK_VAR_INIT +#undef MEMORY_CELL_TYPE +#undef MEMORY_API_NAME +#undef MEMORY_TYPE + +#endif diff --git a/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt-mem-impl.c b/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt-mem-impl.c new file mode 100644 index 0000000000000..2a335dd72acd3 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt-mem-impl.c @@ -0,0 +1,171 @@ +/* + * Copyright 2018 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm-rt-impl.h" + +#include +#include + +#ifdef _WIN32 +#include +#else +#include +#endif + +#ifdef WASM_RT_GROW_FAILED_HANDLER +extern void WASM_RT_GROW_FAILED_HANDLER(); +#endif + +#define PTHREAD_MEMORY_LOCK_VAR_INIT(name) \ + if (pthread_mutex_init(&(name), NULL) != 0) { \ + fprintf(stderr, "Lock init failed\n"); \ + abort(); \ + } +#define PTHREAD_MEMORY_LOCK_AQUIRE(name) \ + if (pthread_mutex_lock(&(name)) != 0) { \ + fprintf(stderr, "Lock acquire failed\n"); \ + abort(); \ + } +#define PTHREAD_MEMORY_LOCK_RELEASE(name) \ + if (pthread_mutex_unlock(&(name)) != 0) { \ + fprintf(stderr, "Lock release failed\n"); \ + abort(); \ + } + +#define WIN_MEMORY_LOCK_VAR_INIT(name) InitializeCriticalSection(&(name)) +#define WIN_MEMORY_LOCK_AQUIRE(name) EnterCriticalSection(&(name)) +#define WIN_MEMORY_LOCK_RELEASE(name) LeaveCriticalSection(&(name)) + +#if WASM_RT_USE_MMAP + +#ifdef _WIN32 +static void* os_mmap(size_t size) { + void* ret = VirtualAlloc(NULL, size, MEM_RESERVE, PAGE_NOACCESS); + return ret; +} + +static int os_munmap(void* addr, size_t size) { + // Windows can only unmap the whole mapping + (void)size; /* unused */ + BOOL succeeded = VirtualFree(addr, 0, MEM_RELEASE); + return succeeded ? 0 : -1; +} + +static int os_mprotect(void* addr, size_t size) { + if (size == 0) { + return 0; + } + void* ret = VirtualAlloc(addr, size, MEM_COMMIT, PAGE_READWRITE); + if (ret == addr) { + return 0; + } + VirtualFree(addr, 0, MEM_RELEASE); + return -1; +} + +static void os_print_last_error(const char* msg) { + DWORD errorMessageID = GetLastError(); + if (errorMessageID != 0) { + LPSTR messageBuffer = 0; + // The api creates the buffer that holds the message + size_t size = FormatMessageA( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPSTR)&messageBuffer, 0, NULL); + (void)size; + printf("%s. %s\n", msg, messageBuffer); + LocalFree(messageBuffer); + } else { + printf("%s. No error code.\n", msg); + } +} + +#else /* !_WIN32 */ +static void* os_mmap(size_t size) { + int map_prot = PROT_NONE; + int map_flags = MAP_ANONYMOUS | MAP_PRIVATE; + uint8_t* addr = mmap(NULL, size, map_prot, map_flags, -1, 0); + if (addr == MAP_FAILED) + return NULL; + return addr; +} + +static int os_munmap(void* addr, size_t size) { + return munmap(addr, size); +} + +static int os_mprotect(void* addr, size_t size) { + if (size == 0) { + return 0; + } + return mprotect(addr, size, PROT_READ | PROT_WRITE); +} + +static void os_print_last_error(const char* msg) { + perror(msg); +} + +#endif /* _WIN32 */ + +static uint64_t get_alloc_size_for_mmap_default32(uint64_t max_pages) { +#if WASM_RT_MEMCHECK_GUARD_PAGES + /* Reserve 8GiB. */ + const uint64_t max_size = 0x200000000ul; + return max_size; +#else + if (max_pages != 0) { + const uint64_t max_size = max_pages * WASM_DEFAULT_PAGE_SIZE; + return max_size; + } + + /* Reserve 4GiB. */ + const uint64_t max_size = 0x100000000ul; + return max_size; +#endif +} + +#endif /* WASM_RT_USE_MMAP */ + +static bool u64_mult_overflow(uint64_t a, uint64_t b, uint64_t* result) { + uint64_t x = a * b; + *result = x; + if (a != 0 && x / a != b) { + // overflow + return true; + } + return false; +} + +// Include operations for memory +#define WASM_RT_MEM_OPS +#include "wasm-rt-mem-impl-helper.inc" +#undef WASM_RT_MEM_OPS + +// Include operations for shared memory +#define WASM_RT_MEM_OPS_SHARED +#include "wasm-rt-mem-impl-helper.inc" +#undef WASM_RT_MEM_OPS_SHARED + +#undef C11_MEMORY_LOCK_VAR_INIT +#undef C11_MEMORY_LOCK_AQUIRE +#undef C11_MEMORY_LOCK_RELEASE +#undef PTHREAD_MEMORY_LOCK_VAR_INIT +#undef PTHREAD_MEMORY_LOCK_AQUIRE +#undef PTHREAD_MEMORY_LOCK_RELEASE +#undef WIN_MEMORY_LOCK_VAR_INIT +#undef WIN_MEMORY_LOCK_AQUIRE +#undef WIN_MEMORY_LOCK_RELEASE diff --git a/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt.h b/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt.h new file mode 100644 index 0000000000000..537c322345517 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/Vendor/wasm2c/wasm-rt.h @@ -0,0 +1,739 @@ +/* + * Copyright 2018 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef WASM_RT_H_ +#define WASM_RT_H_ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef __has_builtin +#define __has_builtin(x) 0 /** Compatibility with non-clang compilers. */ +#endif + +#if __has_builtin(__builtin_expect) +#define UNLIKELY(x) __builtin_expect(!!(x), 0) +#define LIKELY(x) __builtin_expect(!!(x), 1) +#else +#define UNLIKELY(x) (x) +#define LIKELY(x) (x) +#endif + +#if __has_builtin(__builtin_memcpy) +#define wasm_rt_memcpy __builtin_memcpy +#else +#define wasm_rt_memcpy memcpy +#endif + +#if __has_builtin(__builtin_unreachable) +#define wasm_rt_unreachable __builtin_unreachable +#else +#define wasm_rt_unreachable abort +#endif + +#ifdef __STDC_VERSION__ +#if __STDC_VERSION__ >= 201112L +#define WASM_RT_C11_AVAILABLE +#endif +#endif + +/** + * Many devices don't implement the C11 threads.h. We use CriticalSection APIs + * for Windows and pthreads on other platforms where threads are not available. + */ +#ifdef WASM_RT_C11_AVAILABLE + +#if defined(_WIN32) +#include +#define WASM_RT_MUTEX CRITICAL_SECTION +#define WASM_RT_USE_CRITICALSECTION 1 +#else +#include +#define WASM_RT_MUTEX pthread_mutex_t +#define WASM_RT_USE_PTHREADS 1 +#endif + +#endif + +#ifdef WASM_RT_C11_AVAILABLE +#define WASM_RT_THREAD_LOCAL _Thread_local +#elif defined(_MSC_VER) +#define WASM_RT_THREAD_LOCAL __declspec(thread) +#elif (defined(__GNUC__) || defined(__clang__)) && !defined(__APPLE__) +// Disabled on Apple systems due to sporadic test failures. +#define WASM_RT_THREAD_LOCAL __thread +#else +#define WASM_RT_THREAD_LOCAL +#endif + +/** + * If enabled, perform additional sanity checks in the generated wasm2c code and + * wasm2c runtime. This is useful to enable on debug builds. + */ +#ifndef WASM_RT_SANITY_CHECKS +#define WASM_RT_SANITY_CHECKS 0 +#endif + +/** + * Backward compatibility: Convert the previously exposed + * WASM_RT_MEMCHECK_SIGNAL_HANDLER macro to the ALLOCATION and CHECK macros that + * are now used. + */ +#if defined(WASM_RT_MEMCHECK_SIGNAL_HANDLER) + +#if WASM_RT_MEMCHECK_SIGNAL_HANDLER +#define WASM_RT_USE_MMAP 1 +#define WASM_RT_MEMCHECK_GUARD_PAGES 1 +#else +#define WASM_RT_USE_MMAP 0 +#define WASM_RT_MEMCHECK_BOUNDS_CHECK 1 +#endif + +#warning \ + "WASM_RT_MEMCHECK_SIGNAL_HANDLER has been deprecated in favor of WASM_RT_USE_MMAP and WASM_RT_MEMORY_CHECK_* macros" +#endif + +/** + * Specify if we use OR mmap/mprotect (+ Windows equivalents) OR malloc/realloc + * for the Wasm memory allocation and growth. mmap/mprotect guarantees memory + * will grow without being moved, while malloc ensures the virtual memory is + * consumed only as needed, but may relocate the memory to handle memory + * fragmentation. + * + * This defaults to malloc on 32-bit platforms or if memory64 support is needed. + * It defaults to mmap on 64-bit platforms assuming memory64 support is not + * needed (so we can use the guard based range checks below). + */ +#ifndef WASM_RT_USE_MMAP +#if UINTPTR_MAX > 0xffffffff +#define WASM_RT_USE_MMAP 1 +#else +#define WASM_RT_USE_MMAP 0 +#endif +#endif + +/** + * This macro, if defined, allows the embedder to permit elimination of unused + * memory loads. Note, this a non conformant configuration, i.e., this does not + * respect Wasm's specification, as Wasm requires all loads (even the eliminated + * loads to trap), whereas this configuration could eliminate an out-of-bound + * load, and thus allow the Wasm module to not trap. Use with caution. + */ +#ifndef WASM_RT_NONCONFORMING_ALLOW_OOB_READ_ELIMINATION +#define WASM_RT_NONCONFORMING_ALLOW_OOB_READ_ELIMINATION 0 +#endif + +/** + * Set the range checking strategy for Wasm memories. + * + * GUARD_PAGES: memory accesses rely on unmapped pages/guard pages to trap + * out-of-bound accesses. + * + * BOUNDS_CHECK: memory accesses are checked with explicit bounds checks. + * + * This defaults to GUARD_PAGES as this is the fastest option, iff the + * requirements of GUARD_PAGES --- 64-bit platforms, MMAP allocation strategy, + * no 64-bit memories, and platforms with a supported FORCE_READ_STRATEGY + * described below --- are met. This falls back to BOUNDS otherwise. + * + * FORCE_READ_STRATEGY --- either the compiler should be a gcc/clang-like + * compiler or the embedder must permit a non-conforming setting (allow dead + * read elimination from linear memory) + */ +#if UINTPTR_MAX > 0xffffffff && WASM_RT_USE_MMAP && \ + (WASM_RT_NONCONFORMING_ALLOW_OOB_READ_ELIMINATION || defined(__GNUC__)) +#define WASM_RT_GUARD_PAGES_SUPPORTED 1 +#else +#define WASM_RT_GUARD_PAGES_SUPPORTED 0 +#endif + +/** Specify defaults for memory checks if unspecified */ +#if !defined(WASM_RT_MEMCHECK_GUARD_PAGES) && \ + !defined(WASM_RT_MEMCHECK_BOUNDS_CHECK) +#if WASM_RT_GUARD_PAGES_SUPPORTED +#define WASM_RT_MEMCHECK_GUARD_PAGES 1 +#else +#define WASM_RT_MEMCHECK_BOUNDS_CHECK 1 +#endif +#endif + +/** Ensure the macros are defined */ +#ifndef WASM_RT_MEMCHECK_GUARD_PAGES +#define WASM_RT_MEMCHECK_GUARD_PAGES 0 +#endif +#ifndef WASM_RT_MEMCHECK_BOUNDS_CHECK +#define WASM_RT_MEMCHECK_BOUNDS_CHECK 0 +#endif + +/** Sanity check the use of guard pages */ +#if WASM_RT_MEMCHECK_GUARD_PAGES && !WASM_RT_GUARD_PAGES_SUPPORTED +#error \ + "WASM_RT_MEMCHECK_GUARD_PAGES not supported on this platform/configuration" +#endif + +#if WASM_RT_MEMCHECK_GUARD_PAGES && WASM_RT_MEMCHECK_BOUNDS_CHECK +#error \ + "Cannot use both WASM_RT_MEMCHECK_GUARD_PAGES and WASM_RT_MEMCHECK_BOUNDS_CHECK" + +#elif !WASM_RT_MEMCHECK_GUARD_PAGES && !WASM_RT_MEMCHECK_BOUNDS_CHECK +#error \ + "Must choose at least one from WASM_RT_MEMCHECK_GUARD_PAGES and WASM_RT_MEMCHECK_BOUNDS_CHECK" +#endif + +/** + * Some configurations above require the Wasm runtime to install a signal + * handler. However, this can be explicitly disallowed by the host using + * WASM_RT_SKIP_SIGNAL_RECOVERY. In this case, when the wasm code encounters an + * OOB access, it may either trap or abort. + */ +#ifndef WASM_RT_SKIP_SIGNAL_RECOVERY +#define WASM_RT_SKIP_SIGNAL_RECOVERY 0 +#endif + +#if WASM_RT_MEMCHECK_GUARD_PAGES && !WASM_RT_SKIP_SIGNAL_RECOVERY +#define WASM_RT_INSTALL_SIGNAL_HANDLER 1 +#else +#define WASM_RT_INSTALL_SIGNAL_HANDLER 0 +#endif + +/** + * This macro, if defined to 1 (i.e., allows the "segue" optimization), allows + * Wasm2c to use segment registers to speedup access to the linear heap. Note + * that even if allowed in this way, the segment registers would only be used if + * Wasm2c output is compiled for a suitable architecture and OS and the produces + * C file is compiled by supported compilers. The extact restrictions are listed + * in detail in src/template/wasm2c.declarations.c + */ +#ifndef WASM_RT_ALLOW_SEGUE +#define WASM_RT_ALLOW_SEGUE 0 +#endif + +/** + * The segue optimization restores x86 segments to their old values when exiting + * wasm2c code. If WASM_RT_SEGUE_FREE_SEGMENT is defined, wasm2c assumes it has + * exclusive use of the segment and optimizes performance in two ways. First, it + * does not restore the "old" value of the segment during exits. Second, wasm2c + * only sets the segment register if the value has changed since the last time + * it was set. + */ +#ifndef WASM_RT_SEGUE_FREE_SEGMENT +#define WASM_RT_SEGUE_FREE_SEGMENT 0 +#endif + +#ifndef WASM_RT_USE_SEGUE +// Memory functions can use the segue optimization if allowed. The segue +// optimization uses x86 segments to point to a linear memory. We use this +// optimization when: +// +// (1) Segue is allowed using WASM_RT_ALLOW_SEGUE +// (2) on x86_64 without WABT_BIG_ENDIAN enabled +// (3) the compiler supports: intrinsics for (rd|wr)gsbase, "address namespaces" +// for accessing pointers, and supports memcpy on pointers with custom +// "address namespaces". GCC does not support the memcpy requirement, so +// this leaves only clang (version 9 or later) for now. +// (4) The OS provides a way to query if (rd|wr)gsbase is allowed by the kernel +// or the implementation has to use a syscall for this. +// (5) The OS doesn't replace the segment register on context switch which +// eliminates windows for now +// +// While more OS can be supported in the future, we only support linux for now +#if WASM_RT_ALLOW_SEGUE && !WABT_BIG_ENDIAN && \ + (defined(__x86_64__) || defined(_M_X64)) && __clang__ && \ + (__clang_major__ >= 9) && __has_builtin(__builtin_ia32_wrgsbase64) && \ + !defined(_WIN32) && !defined(__ANDROID__) && \ + (defined(__linux__) || defined(__FreeBSD__)) +#define WASM_RT_USE_SEGUE 1 +#else +#define WASM_RT_USE_SEGUE 0 +#endif +#endif + +/** + * This macro, if defined, allows the embedder to disable all stack exhaustion + * checks. This a non conformant configuration, i.e., this does not respect + * Wasm's specification, and may compromise security. Use with caution. + */ +#ifndef WASM_RT_NONCONFORMING_UNCHECKED_STACK_EXHAUSTION +#define WASM_RT_NONCONFORMING_UNCHECKED_STACK_EXHAUSTION 0 +#endif + +/** + * We need to detect and trap stack overflows. If we use a signal handler on + * POSIX systems, this can detect call stack overflows. On windows, or platforms + * without a signal handler, we use stack depth counting. The s390x big endian + * platform additionally seems to have issues with stack guard pages, so we play + * it safe and use stack counting on big endian platforms. + */ +#if !defined(WASM_RT_STACK_DEPTH_COUNT) && \ + !defined(WASM_RT_STACK_EXHAUSTION_HANDLER) && \ + !WASM_RT_NONCONFORMING_UNCHECKED_STACK_EXHAUSTION + +#if WASM_RT_INSTALL_SIGNAL_HANDLER && !defined(_WIN32) && !WABT_BIG_ENDIAN +#define WASM_RT_STACK_EXHAUSTION_HANDLER 1 +#else +#define WASM_RT_STACK_DEPTH_COUNT 1 +#endif + +#endif + +/** Ensure the stack macros are defined */ +#ifndef WASM_RT_STACK_DEPTH_COUNT +#define WASM_RT_STACK_DEPTH_COUNT 0 +#endif +#ifndef WASM_RT_STACK_EXHAUSTION_HANDLER +#define WASM_RT_STACK_EXHAUSTION_HANDLER 0 +#endif + +#if WASM_RT_NONCONFORMING_UNCHECKED_STACK_EXHAUSTION + +#if (WASM_RT_STACK_EXHAUSTION_HANDLER + WASM_RT_STACK_DEPTH_COUNT) != 0 +#error \ + "Cannot specify WASM_RT_NONCONFORMING_UNCHECKED_STACK_EXHAUSTION along with WASM_RT_STACK_EXHAUSTION_HANDLER or WASM_RT_STACK_DEPTH_COUNT" +#endif + +#else + +#if (WASM_RT_STACK_EXHAUSTION_HANDLER + WASM_RT_STACK_DEPTH_COUNT) > 1 +#error \ + "Cannot specify multiple options from WASM_RT_STACK_EXHAUSTION_HANDLER , WASM_RT_STACK_DEPTH_COUNT" +#elif (WASM_RT_STACK_EXHAUSTION_HANDLER + WASM_RT_STACK_DEPTH_COUNT) == 0 +#error \ + "Must specify one of WASM_RT_STACK_EXHAUSTION_HANDLER , WASM_RT_STACK_DEPTH_COUNT" +#endif + +#endif + +#if WASM_RT_STACK_EXHAUSTION_HANDLER && !WASM_RT_INSTALL_SIGNAL_HANDLER +#error \ + "WASM_RT_STACK_EXHAUSTION_HANDLER can only be used if WASM_RT_INSTALL_SIGNAL_HANDLER is enabled" +#endif + +#if WASM_RT_STACK_DEPTH_COUNT +/** + * When the signal handler cannot be used to detect stack overflows, stack depth + * is limited explicitly. The maximum stack depth before trapping can be + * configured by defining this symbol before including wasm-rt when building the + * generated c files, for example: + * + * ``` + * cc -c -DWASM_RT_MAX_CALL_STACK_DEPTH=100 my_module.c -o my_module.o + * ``` + */ +#ifndef WASM_RT_MAX_CALL_STACK_DEPTH +#define WASM_RT_MAX_CALL_STACK_DEPTH 500 +#endif + +/** Current call stack depth. */ +extern WASM_RT_THREAD_LOCAL uint32_t wasm_rt_call_stack_depth; + +#endif + +#if WASM_RT_USE_SEGUE +/** + * The segue optimization uses x86 segments to point to a linear memory. If + * used, the runtime must query whether it can use the fast userspace wrgsbase + * instructions or whether it must invoke syscalls to set the segment base, + * depending on the supported CPU features. The result of this query is saved in + * this variable. + */ +extern bool wasm_rt_fsgsbase_inst_supported; +/** + * If fast userspace wrgsbase instructions don't exist, the runtime most provide + * a function that invokes the OS' underlying syscall to set the segment base. + */ +void wasm_rt_syscall_set_segue_base(void* base); +/** + * If fast userspace rdgsbase instructions don't exist, the runtime most provide + * a function that invokes the OS' underlying syscall to get the segment base. + */ +void* wasm_rt_syscall_get_segue_base(); +/** + * If WASM_RT_SEGUE_FREE_SEGMENT is defined, we must only set the segment + * register if it was changed since the last time it was set. The last value set + * on the segment register is stored in this variable. + */ +#if WASM_RT_SEGUE_FREE_SEGMENT +extern WASM_RT_THREAD_LOCAL void* wasm_rt_last_segment_val; +#endif +#endif + +#if defined(_MSC_VER) +#define WASM_RT_NO_RETURN __declspec(noreturn) +#else +#define WASM_RT_NO_RETURN __attribute__((noreturn)) +#endif + +#if defined(__APPLE__) && WASM_RT_STACK_EXHAUSTION_HANDLER +#define WASM_RT_MERGED_OOB_AND_EXHAUSTION_TRAPS 1 +#else +#define WASM_RT_MERGED_OOB_AND_EXHAUSTION_TRAPS 0 +#endif + +/** Reason a trap occurred. Provide this to `wasm_rt_trap`. */ +typedef enum { + WASM_RT_TRAP_NONE, /** No error. */ + WASM_RT_TRAP_OOB, /** Out-of-bounds access in linear memory or a table. */ + WASM_RT_TRAP_INT_OVERFLOW, /** Integer overflow on divide or truncation. */ + WASM_RT_TRAP_DIV_BY_ZERO, /** Integer divide by zero. */ + WASM_RT_TRAP_INVALID_CONVERSION, /** Conversion from NaN to integer. */ + WASM_RT_TRAP_UNREACHABLE, /** Unreachable instruction executed. */ + WASM_RT_TRAP_CALL_INDIRECT, /** Invalid call_indirect, for any reason. */ + WASM_RT_TRAP_NULL_REF, /** Null reference. */ + WASM_RT_TRAP_UNCAUGHT_EXCEPTION, /** Exception thrown and not caught. */ + WASM_RT_TRAP_UNALIGNED, /** Unaligned atomic instruction executed. */ +#if WASM_RT_MERGED_OOB_AND_EXHAUSTION_TRAPS + WASM_RT_TRAP_EXHAUSTION = WASM_RT_TRAP_OOB, +#else + WASM_RT_TRAP_EXHAUSTION, /** Call stack exhausted. */ +#endif +} wasm_rt_trap_t; + +/** Value types. Used to define function signatures. */ +typedef enum { + WASM_RT_I32, + WASM_RT_I64, + WASM_RT_F32, + WASM_RT_F64, + WASM_RT_V128, + WASM_RT_FUNCREF, + WASM_RT_EXTERNREF, + WASM_RT_EXNREF, +} wasm_rt_type_t; + +/** + * A generic function pointer type, both for Wasm functions (`code`) + * and host functions (`hostcode`). All function pointers are stored + * in this canonical form, but must be cast to their proper signature + * to call. + */ +typedef void (*wasm_rt_function_ptr_t)(void); + +/** + * A pointer to a "tail-callee" function, called by a tail-call + * trampoline or by another tail-callee function. (The definition uses a + * single-member struct to allow a recursive definition.) + */ +typedef struct wasm_rt_tailcallee_t { + void (*fn)(void** instance_ptr, + void* tail_call_stack, + struct wasm_rt_tailcallee_t* next); +} wasm_rt_tailcallee_t; + +/** + * The type of a function (an arbitrary number of param and result types). + * This is represented as an opaque 256-bit ID. + */ +typedef const char* wasm_rt_func_type_t; + +/** + * A function instance (the runtime representation of a function). + * These can be stored in tables of type funcref, or used as values. + */ +typedef struct { + /** The function's type. */ + wasm_rt_func_type_t func_type; + /** + * The function. The embedder must know the actual C signature of the function + * and cast to it before calling. + */ + wasm_rt_function_ptr_t func; + /** An alternate version of the function to be used when tail-called. */ + wasm_rt_tailcallee_t func_tailcallee; + /** + * A function instance is a closure of the function over an instance + * of the originating module. The module_instance element will be passed into + * the function at runtime. + */ + void* module_instance; +} wasm_rt_funcref_t; + +/** Default (null) value of a funcref */ +#define wasm_rt_funcref_null_value \ + ((wasm_rt_funcref_t){NULL, NULL, {NULL}, NULL}) + +/** The type of an external reference (opaque to WebAssembly). */ +typedef void* wasm_rt_externref_t; + +/** Default (null) value of an externref */ +#define wasm_rt_externref_null_value ((wasm_rt_externref_t){NULL}) + +/** A Memory object. */ +typedef struct { + /** The linear memory data, with a byte length of `size`. */ + uint8_t* data; + /** The location after the the reserved space for the linear memory data. */ + uint8_t* data_end; + /** The page size for this Memory object + (always 64 KiB without the custom-page-sizes feature) */ + uint32_t page_size; + /** The current page count for this Memory object. */ + uint64_t pages; + /** The maximum page count for this Memory object. */ + uint64_t max_pages; + /** The current size of the linear memory, in bytes. */ + uint64_t size; + /** Is this memory indexed by u64 (as opposed to default u32) */ + bool is64; +} wasm_rt_memory_t; + +#ifdef WASM_RT_C11_AVAILABLE +/** A shared Memory object. */ +typedef struct { + /** + * The linear memory data, with a byte length of `size`. The memory is marked + * atomic as it is shared and may have to be accessed with different memory + * orders --- sequential when being accessed atomically, relaxed otherwise. + * Unfortunately, the C standard does not state what happens if there are + * overlaps in two memory accesses which have a memory order, e.g., an + * atomic32 being read from the same location an atomic64 is read. One way to + * prevent optimizations from assuming non-overlapping behavior as typically + * done in C is to mark the memory as volatile. Thus the memory is atomic and + * volatile. + */ + _Atomic volatile uint8_t* data; + /** The location one byte after the reserved space for the linear memory data. + * This includes any reserved pages that are not yet allocated. */ + _Atomic volatile uint8_t* data_end; + /** The page size for this Memory object + (always 64 KiB without the custom-page-sizes feature) */ + uint32_t page_size; + /** The current page count for this Memory object. */ + uint64_t pages; + /* The maximum page count for this Memory object. */ + uint64_t max_pages; + /** The current size of the linear memory, in bytes. */ + uint64_t size; + /** Is this memory indexed by u64 (as opposed to default u32) */ + bool is64; + /** Lock used to ensure operations such as memory grow are threadsafe */ + WASM_RT_MUTEX mem_lock; +} wasm_rt_shared_memory_t; +#endif + +/** A Table of type funcref. */ +typedef struct { + /** The table element data, with an element count of `size`. */ + wasm_rt_funcref_t* data; + /** + * The maximum element count of this Table object. If there is no maximum, + * `max_size` is 0xffffffffu (i.e. UINT32_MAX). + */ + uint32_t max_size; + /** The current element count of the table. */ + uint32_t size; +} wasm_rt_funcref_table_t; + +/** A Table of type externref. */ +typedef struct { + /** The table element data, with an element count of `size`. */ + wasm_rt_externref_t* data; + /** + * The maximum element count of this Table object. If there is no maximum, + * `max_size` is 0xffffffffu (i.e. UINT32_MAX). + */ + uint32_t max_size; + /** The current element count of the table. */ + uint32_t size; +} wasm_rt_externref_table_t; + +/** Initialize the runtime. */ +void wasm_rt_init(void); + +/** Is the runtime initialized? */ +bool wasm_rt_is_initialized(void); + +/** Free the runtime's state. */ +void wasm_rt_free(void); + +/* + * Initialize the multithreaded runtime for a given thread. Must be + * called by each thread (other than the one that called wasm_rt_init) + * before initializing a Wasm module or calling an exported + * function. + */ +void wasm_rt_init_thread(void); + +/* + * Free the individual thread's state. + */ +void wasm_rt_free_thread(void); + +/** A hardened jmp_buf that allows checking for initialization before use */ +typedef struct { + /** Is the jmp buf intialized? */ + bool initialized; + /** jmp_buf contents */ + jmp_buf buffer; +} wasm_rt_jmp_buf; + +#ifndef _WIN32 +#define WASM_RT_SETJMP_TRAP_SETBUF(buf) sigsetjmp(buf, 1) + +/** + * On macOS XNU, there is a bug where nested `sigsetjmp` and `siglongjmp` + * across threads that have an allocated alternate signal stack (`SS_ONSTACK`) + * will erroneously cause the kernel to preserve the `SS_ONSTACK` flag in the + * thread state + * + * See: https://github.com/WebAssembly/wabt/issues/2654 + * See: https://github.com/golang/go/issues/44501 + */ +#define WASM_RT_SETJMP_EXN_SETBUF(buf) sigsetjmp(buf, 0) +#else +#define WASM_RT_SETJMP_TRAP_SETBUF(buf) setjmp(buf) +#define WASM_RT_SETJMP_EXN_SETBUF(buf) setjmp(buf) +#endif + +#define WASM_RT_SETJMP(buf) \ + ((buf).initialized = true, WASM_RT_SETJMP_TRAP_SETBUF((buf).buffer)) +#define WASM_RT_SETJMP_EXN(buf) \ + ((buf).initialized = true, WASM_RT_SETJMP_EXN_SETBUF((buf).buffer)) + +#ifndef _WIN32 +#define WASM_RT_LONGJMP_UNCHECKED(buf, val) siglongjmp(buf, val) +#else +#define WASM_RT_LONGJMP_UNCHECKED(buf, val) longjmp(buf, val) +#endif + +#define WASM_RT_LONGJMP(buf, val) \ + /** Abort on failure as this may be called in the trap handler */ \ + if (!((buf).initialized)) \ + abort(); \ + (buf).initialized = false; \ + WASM_RT_LONGJMP_UNCHECKED((buf).buffer, val) + +/** + * Stop execution immediately and jump back to the call to `wasm_rt_impl_try`. + * The result of `wasm_rt_impl_try` will be the provided trap reason. + * + * This is typically called by the generated code, and not the embedder. + */ +WASM_RT_NO_RETURN void wasm_rt_trap(wasm_rt_trap_t); + +/** Return a human readable error string based on a trap type. */ +const char* wasm_rt_strerror(wasm_rt_trap_t trap); + +#define wasm_rt_try(target) WASM_RT_SETJMP_EXN(target) + +/** WebAssembly's default page size (64 KiB) */ +#define WASM_DEFAULT_PAGE_SIZE 65536 + +/** + * Initialize a Memory object with an initial page size of `initial_pages` and + * a maximum page size of `max_pages`, indexed with an i32 or i64. + * + * ``` + * wasm_rt_memory_t my_memory; + * // 1 initial page (65536 bytes), and a maximum of 2 pages, + * // indexed with an i32 + * wasm_rt_allocate_memory(&my_memory, 1, 2, false, WASM_DEFAULT_PAGE_SIZE); + * ``` + */ +void wasm_rt_allocate_memory(wasm_rt_memory_t*, + uint64_t initial_pages, + uint64_t max_pages, + bool is64, + uint32_t page_size); + +/** + * Grow a Memory object by `pages`, and return the previous page count. If + * this new page count is greater than the maximum page count, the grow fails + * and 0xffffffffu (UINT32_MAX) is returned instead. + * + * ``` + * wasm_rt_memory_t my_memory; + * ... + * // Grow memory by 10 pages. + * uint32_t old_page_size = wasm_rt_grow_memory(&my_memory, 10); + * if (old_page_size == UINT32_MAX) { + * // Failed to grow memory. + * } + * ``` + */ +uint64_t wasm_rt_grow_memory(wasm_rt_memory_t*, uint64_t pages); + +/** Free a Memory object. */ +void wasm_rt_free_memory(wasm_rt_memory_t*); + +#ifdef WASM_RT_C11_AVAILABLE +/** Shared memory version of wasm_rt_allocate_memory */ +void wasm_rt_allocate_memory_shared(wasm_rt_shared_memory_t*, + uint64_t initial_pages, + uint64_t max_pages, + bool is64, + uint32_t page_size); + +/** Shared memory version of wasm_rt_grow_memory */ +uint64_t wasm_rt_grow_memory_shared(wasm_rt_shared_memory_t*, uint64_t pages); + +/** Shared memory version of wasm_rt_free_memory */ +void wasm_rt_free_memory_shared(wasm_rt_shared_memory_t*); +#endif + +/** + * Initialize a funcref Table object with an element count of `elements` and a + * maximum size of `max_elements`. + * + * ``` + * wasm_rt_funcref_table_t my_table; + * // 5 elements and a maximum of 10 elements. + * wasm_rt_allocate_funcref_table(&my_table, 5, 10); + * ``` + */ +void wasm_rt_allocate_funcref_table(wasm_rt_funcref_table_t*, + uint32_t elements, + uint32_t max_elements); + +/** Free a funcref Table object. */ +void wasm_rt_free_funcref_table(wasm_rt_funcref_table_t*); + +/** + * Initialize an externref Table object with an element count + * of `elements` and a maximum size of `max_elements`. + * Usage as per wasm_rt_allocate_funcref_table. + */ +void wasm_rt_allocate_externref_table(wasm_rt_externref_table_t*, + uint32_t elements, + uint32_t max_elements); + +/** Free an externref Table object. */ +void wasm_rt_free_externref_table(wasm_rt_externref_table_t*); + +/** + * Grow a Table object by `delta` elements (giving the new elements the value + * `init`), and return the previous element count. If this new element count is + * greater than the maximum element count, the grow fails and 0xffffffffu + * (UINT32_MAX) is returned instead. + */ +uint32_t wasm_rt_grow_funcref_table(wasm_rt_funcref_table_t*, + uint32_t delta, + wasm_rt_funcref_t init); +uint32_t wasm_rt_grow_externref_table(wasm_rt_externref_table_t*, + uint32_t delta, + wasm_rt_externref_t init); + +#ifdef __cplusplus +} +#endif + +#endif /* WASM_RT_H_ */ diff --git a/apps/mobile/modules/t3-highlights/android/.gitignore b/apps/mobile/modules/t3-highlights/android/.gitignore new file mode 100644 index 0000000000000..3166b90b0423d --- /dev/null +++ b/apps/mobile/modules/t3-highlights/android/.gitignore @@ -0,0 +1 @@ +.cxx/ diff --git a/apps/mobile/modules/t3-highlights/android/build.gradle b/apps/mobile/modules/t3-highlights/android/build.gradle new file mode 100644 index 0000000000000..58f05125d3f50 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/android/build.gradle @@ -0,0 +1,34 @@ +apply plugin: 'com.android.library' +apply plugin: 'org.jetbrains.kotlin.android' + +group = 'com.t3tools.highlights' +version = '0.0.0' + +android { + namespace 'expo.modules.t3highlights' + ndkVersion rootProject.ext.ndkVersion + compileSdk rootProject.ext.compileSdkVersion + + defaultConfig { + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + + def requestedArchitectures = project.findProperty('reactNativeArchitectures') + if (requestedArchitectures) { + ndk { + abiFilters(*requestedArchitectures.split(',')) + } + } + } + + externalNativeBuild { + cmake { + path 'src/main/cpp/CMakeLists.txt' + version '3.22.1' + } + } +} + +dependencies { + implementation project(':expo-modules-core') +} diff --git a/apps/mobile/modules/t3-highlights/android/src/main/AndroidManifest.xml b/apps/mobile/modules/t3-highlights/android/src/main/AndroidManifest.xml new file mode 100644 index 0000000000000..94cbbcfc396ac --- /dev/null +++ b/apps/mobile/modules/t3-highlights/android/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/apps/mobile/modules/t3-highlights/android/src/main/cpp/CMakeLists.txt b/apps/mobile/modules/t3-highlights/android/src/main/cpp/CMakeLists.txt new file mode 100644 index 0000000000000..297ac3d2cb260 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/android/src/main/cpp/CMakeLists.txt @@ -0,0 +1,34 @@ +cmake_minimum_required(VERSION 3.22.1) + +project(t3highlights LANGUAGES C) + +set(T3_HIGHLIGHTS_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../../../..") + +add_library( + t3highlights SHARED + t3_highlights_jni.c + "${T3_HIGHLIGHTS_ROOT}/cpp/t3_highlights.c" + "${T3_HIGHLIGHTS_ROOT}/Vendor/highlights/highlights.c" + "${T3_HIGHLIGHTS_ROOT}/Vendor/wasm2c/wasm-rt-impl.c" + "${T3_HIGHLIGHTS_ROOT}/Vendor/wasm2c/wasm-rt-mem-impl.c" +) + +target_include_directories( + t3highlights + PRIVATE "${T3_HIGHLIGHTS_ROOT}/cpp" "${T3_HIGHLIGHTS_ROOT}/Vendor" + "${T3_HIGHLIGHTS_ROOT}/Vendor/highlights" "${T3_HIGHLIGHTS_ROOT}/Vendor/wasm2c" +) + +# Plain malloc memory with explicit bounds checks: no guard-page signal +# handlers competing with ART's. +target_compile_definitions( + t3highlights PRIVATE WASM_RT_USE_MMAP=0 WASM_RT_MEMCHECK_BOUNDS_CHECK=1 + WASM_RT_SKIP_SIGNAL_RECOVERY=1 +) + +# The lexers are generated code; keep them fast in debug builds too. +target_compile_options(t3highlights PRIVATE -O2) + +target_link_options( + t3highlights PRIVATE "-Wl,-z,common-page-size=16384" "-Wl,-z,max-page-size=16384" +) diff --git a/apps/mobile/modules/t3-highlights/android/src/main/cpp/t3_highlights_jni.c b/apps/mobile/modules/t3-highlights/android/src/main/cpp/t3_highlights_jni.c new file mode 100644 index 0000000000000..2e45d618d22a8 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/android/src/main/cpp/t3_highlights_jni.c @@ -0,0 +1,41 @@ +#include +#include + +#include "t3_highlights.h" + +// HighlightsNative serializes both calls, so the copy reads the records the +// tokenize call just produced. +static const uint32_t* last_records = NULL; +static int64_t last_count = 0; + +JNIEXPORT jint JNICALL Java_expo_modules_t3highlights_HighlightsNative_nativeTokenize( + JNIEnv* env, jclass clazz, jbyteArray source, jint language) { + (void)clazz; + last_records = NULL; + last_count = 0; + if (language < 0 || language > UINT8_MAX) return -1; + + jsize length = (*env)->GetArrayLength(env, source); + jbyte* bytes = (*env)->GetByteArrayElements(env, source, NULL); + if (bytes == NULL) return -1; + int64_t count = t3_highlights_tokenize((const uint8_t*)bytes, (size_t)length, + (uint8_t)language, &last_records); + (*env)->ReleaseByteArrayElements(env, source, bytes, JNI_ABORT); + + if (count < 0 || count > INT32_MAX / 4) { + last_records = NULL; + return -1; + } + last_count = count; + return (jint)count; +} + +JNIEXPORT void JNICALL Java_expo_modules_t3highlights_HighlightsNative_nativeCopyRecords( + JNIEnv* env, jclass clazz, jobject destination) { + (void)clazz; + void* address = (*env)->GetDirectBufferAddress(env, destination); + jlong capacity = (*env)->GetDirectBufferCapacity(env, destination); + size_t byte_count = (size_t)last_count * sizeof(uint32_t); + if (address == NULL || last_records == NULL || capacity < (jlong)byte_count) return; + memcpy(address, last_records, byte_count); +} diff --git a/apps/mobile/modules/t3-highlights/android/src/main/java/expo/modules/t3highlights/T3HighlightsModule.kt b/apps/mobile/modules/t3-highlights/android/src/main/java/expo/modules/t3highlights/T3HighlightsModule.kt new file mode 100644 index 0000000000000..3b5fcaddd0c44 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/android/src/main/java/expo/modules/t3highlights/T3HighlightsModule.kt @@ -0,0 +1,37 @@ +package expo.modules.t3highlights + +import expo.modules.kotlin.jni.ArrayBuffer +import expo.modules.kotlin.modules.Module +import expo.modules.kotlin.modules.ModuleDefinition +import java.nio.ByteBuffer +import java.nio.ByteOrder + +class T3HighlightsModule : Module() { + override fun definition() = ModuleDefinition { + Name("T3Highlights") + + Function("tokenize") { source: String, language: Int -> + HighlightsNative.tokenize(source, language) + } + } +} + +internal object HighlightsNative { + init { + System.loadLibrary("t3highlights") + } + + // The records live in the lexer's memory until its next run. + @Synchronized + fun tokenize(source: String, language: Int): ArrayBuffer? { + val count = nativeTokenize(source.toByteArray(Charsets.UTF_8), language) + if (count < 0) return null + val records = ByteBuffer.allocateDirect(count * Int.SIZE_BYTES).order(ByteOrder.nativeOrder()) + nativeCopyRecords(records) + return ArrayBuffer(records) + } + + @JvmStatic private external fun nativeTokenize(source: ByteArray, language: Int): Int + + @JvmStatic private external fun nativeCopyRecords(destination: ByteBuffer) +} diff --git a/apps/mobile/modules/t3-highlights/cpp/generated/id_ranges.inc b/apps/mobile/modules/t3-highlights/cpp/generated/id_ranges.inc new file mode 100644 index 0000000000000..370b0a8f9ead3 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/cpp/generated/id_ranges.inc @@ -0,0 +1,376 @@ +/* Unicode 17.0 identifier classes. */ +static const uint32_t id_start_ranges[][2] = { + {0x41, 0x5a}, {0x61, 0x7a}, {0xaa, 0xaa}, {0xb5, 0xb5}, + {0xba, 0xba}, {0xc0, 0xd6}, {0xd8, 0xf6}, {0xf8, 0x2c1}, + {0x2c6, 0x2d1}, {0x2e0, 0x2e4}, {0x2ec, 0x2ec}, {0x2ee, 0x2ee}, + {0x370, 0x374}, {0x376, 0x377}, {0x37a, 0x37d}, {0x37f, 0x37f}, + {0x386, 0x386}, {0x388, 0x38a}, {0x38c, 0x38c}, {0x38e, 0x3a1}, + {0x3a3, 0x3f5}, {0x3f7, 0x481}, {0x48a, 0x52f}, {0x531, 0x556}, + {0x559, 0x559}, {0x560, 0x588}, {0x5d0, 0x5ea}, {0x5ef, 0x5f2}, + {0x620, 0x64a}, {0x66e, 0x66f}, {0x671, 0x6d3}, {0x6d5, 0x6d5}, + {0x6e5, 0x6e6}, {0x6ee, 0x6ef}, {0x6fa, 0x6fc}, {0x6ff, 0x6ff}, + {0x710, 0x710}, {0x712, 0x72f}, {0x74d, 0x7a5}, {0x7b1, 0x7b1}, + {0x7ca, 0x7ea}, {0x7f4, 0x7f5}, {0x7fa, 0x7fa}, {0x800, 0x815}, + {0x81a, 0x81a}, {0x824, 0x824}, {0x828, 0x828}, {0x840, 0x858}, + {0x860, 0x86a}, {0x870, 0x887}, {0x889, 0x88f}, {0x8a0, 0x8c9}, + {0x904, 0x939}, {0x93d, 0x93d}, {0x950, 0x950}, {0x958, 0x961}, + {0x971, 0x980}, {0x985, 0x98c}, {0x98f, 0x990}, {0x993, 0x9a8}, + {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, {0x9bd, 0x9bd}, + {0x9ce, 0x9ce}, {0x9dc, 0x9dd}, {0x9df, 0x9e1}, {0x9f0, 0x9f1}, + {0x9fc, 0x9fc}, {0xa05, 0xa0a}, {0xa0f, 0xa10}, {0xa13, 0xa28}, + {0xa2a, 0xa30}, {0xa32, 0xa33}, {0xa35, 0xa36}, {0xa38, 0xa39}, + {0xa59, 0xa5c}, {0xa5e, 0xa5e}, {0xa72, 0xa74}, {0xa85, 0xa8d}, + {0xa8f, 0xa91}, {0xa93, 0xaa8}, {0xaaa, 0xab0}, {0xab2, 0xab3}, + {0xab5, 0xab9}, {0xabd, 0xabd}, {0xad0, 0xad0}, {0xae0, 0xae1}, + {0xaf9, 0xaf9}, {0xb05, 0xb0c}, {0xb0f, 0xb10}, {0xb13, 0xb28}, + {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb35, 0xb39}, {0xb3d, 0xb3d}, + {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb71, 0xb71}, {0xb83, 0xb83}, + {0xb85, 0xb8a}, {0xb8e, 0xb90}, {0xb92, 0xb95}, {0xb99, 0xb9a}, + {0xb9c, 0xb9c}, {0xb9e, 0xb9f}, {0xba3, 0xba4}, {0xba8, 0xbaa}, + {0xbae, 0xbb9}, {0xbd0, 0xbd0}, {0xc05, 0xc0c}, {0xc0e, 0xc10}, + {0xc12, 0xc28}, {0xc2a, 0xc39}, {0xc3d, 0xc3d}, {0xc58, 0xc5a}, + {0xc5c, 0xc5d}, {0xc60, 0xc61}, {0xc80, 0xc80}, {0xc85, 0xc8c}, + {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, + {0xcbd, 0xcbd}, {0xcdc, 0xcde}, {0xce0, 0xce1}, {0xcf1, 0xcf2}, + {0xd04, 0xd0c}, {0xd0e, 0xd10}, {0xd12, 0xd3a}, {0xd3d, 0xd3d}, + {0xd4e, 0xd4e}, {0xd54, 0xd56}, {0xd5f, 0xd61}, {0xd7a, 0xd7f}, + {0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb}, {0xdbd, 0xdbd}, + {0xdc0, 0xdc6}, {0xe01, 0xe30}, {0xe32, 0xe33}, {0xe40, 0xe46}, + {0xe81, 0xe82}, {0xe84, 0xe84}, {0xe86, 0xe8a}, {0xe8c, 0xea3}, + {0xea5, 0xea5}, {0xea7, 0xeb0}, {0xeb2, 0xeb3}, {0xebd, 0xebd}, + {0xec0, 0xec4}, {0xec6, 0xec6}, {0xedc, 0xedf}, {0xf00, 0xf00}, + {0xf40, 0xf47}, {0xf49, 0xf6c}, {0xf88, 0xf8c}, {0x1000, 0x102a}, + {0x103f, 0x103f}, {0x1050, 0x1055}, {0x105a, 0x105d}, {0x1061, 0x1061}, + {0x1065, 0x1066}, {0x106e, 0x1070}, {0x1075, 0x1081}, {0x108e, 0x108e}, + {0x10a0, 0x10c5}, {0x10c7, 0x10c7}, {0x10cd, 0x10cd}, {0x10d0, 0x10fa}, + {0x10fc, 0x1248}, {0x124a, 0x124d}, {0x1250, 0x1256}, {0x1258, 0x1258}, + {0x125a, 0x125d}, {0x1260, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12b0}, + {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c0, 0x12c0}, {0x12c2, 0x12c5}, + {0x12c8, 0x12d6}, {0x12d8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135a}, + {0x1380, 0x138f}, {0x13a0, 0x13f5}, {0x13f8, 0x13fd}, {0x1401, 0x166c}, + {0x166f, 0x167f}, {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x16ee, 0x16f8}, + {0x1700, 0x1711}, {0x171f, 0x1731}, {0x1740, 0x1751}, {0x1760, 0x176c}, + {0x176e, 0x1770}, {0x1780, 0x17b3}, {0x17d7, 0x17d7}, {0x17dc, 0x17dc}, + {0x1820, 0x1878}, {0x1880, 0x18a8}, {0x18aa, 0x18aa}, {0x18b0, 0x18f5}, + {0x1900, 0x191e}, {0x1950, 0x196d}, {0x1970, 0x1974}, {0x1980, 0x19ab}, + {0x19b0, 0x19c9}, {0x1a00, 0x1a16}, {0x1a20, 0x1a54}, {0x1aa7, 0x1aa7}, + {0x1b05, 0x1b33}, {0x1b45, 0x1b4c}, {0x1b83, 0x1ba0}, {0x1bae, 0x1baf}, + {0x1bba, 0x1be5}, {0x1c00, 0x1c23}, {0x1c4d, 0x1c4f}, {0x1c5a, 0x1c7d}, + {0x1c80, 0x1c8a}, {0x1c90, 0x1cba}, {0x1cbd, 0x1cbf}, {0x1ce9, 0x1cec}, + {0x1cee, 0x1cf3}, {0x1cf5, 0x1cf6}, {0x1cfa, 0x1cfa}, {0x1d00, 0x1dbf}, + {0x1e00, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, + {0x1f50, 0x1f57}, {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d}, + {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, {0x1fbe, 0x1fbe}, + {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb}, + {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, {0x2071, 0x2071}, + {0x207f, 0x207f}, {0x2090, 0x209c}, {0x2102, 0x2102}, {0x2107, 0x2107}, + {0x210a, 0x2113}, {0x2115, 0x2115}, {0x2118, 0x211d}, {0x2124, 0x2124}, + {0x2126, 0x2126}, {0x2128, 0x2128}, {0x212a, 0x2139}, {0x213c, 0x213f}, + {0x2145, 0x2149}, {0x214e, 0x214e}, {0x2160, 0x2188}, {0x2c00, 0x2ce4}, + {0x2ceb, 0x2cee}, {0x2cf2, 0x2cf3}, {0x2d00, 0x2d25}, {0x2d27, 0x2d27}, + {0x2d2d, 0x2d2d}, {0x2d30, 0x2d67}, {0x2d6f, 0x2d6f}, {0x2d80, 0x2d96}, + {0x2da0, 0x2da6}, {0x2da8, 0x2dae}, {0x2db0, 0x2db6}, {0x2db8, 0x2dbe}, + {0x2dc0, 0x2dc6}, {0x2dc8, 0x2dce}, {0x2dd0, 0x2dd6}, {0x2dd8, 0x2dde}, + {0x3005, 0x3007}, {0x3021, 0x3029}, {0x3031, 0x3035}, {0x3038, 0x303c}, + {0x3041, 0x3096}, {0x309b, 0x309f}, {0x30a1, 0x30fa}, {0x30fc, 0x30ff}, + {0x3105, 0x312f}, {0x3131, 0x318e}, {0x31a0, 0x31bf}, {0x31f0, 0x31ff}, + {0x3400, 0x4dbf}, {0x4e00, 0xa48c}, {0xa4d0, 0xa4fd}, {0xa500, 0xa60c}, + {0xa610, 0xa61f}, {0xa62a, 0xa62b}, {0xa640, 0xa66e}, {0xa67f, 0xa69d}, + {0xa6a0, 0xa6ef}, {0xa717, 0xa71f}, {0xa722, 0xa788}, {0xa78b, 0xa7dc}, + {0xa7f1, 0xa801}, {0xa803, 0xa805}, {0xa807, 0xa80a}, {0xa80c, 0xa822}, + {0xa840, 0xa873}, {0xa882, 0xa8b3}, {0xa8f2, 0xa8f7}, {0xa8fb, 0xa8fb}, + {0xa8fd, 0xa8fe}, {0xa90a, 0xa925}, {0xa930, 0xa946}, {0xa960, 0xa97c}, + {0xa984, 0xa9b2}, {0xa9cf, 0xa9cf}, {0xa9e0, 0xa9e4}, {0xa9e6, 0xa9ef}, + {0xa9fa, 0xa9fe}, {0xaa00, 0xaa28}, {0xaa40, 0xaa42}, {0xaa44, 0xaa4b}, + {0xaa60, 0xaa76}, {0xaa7a, 0xaa7a}, {0xaa7e, 0xaaaf}, {0xaab1, 0xaab1}, + {0xaab5, 0xaab6}, {0xaab9, 0xaabd}, {0xaac0, 0xaac0}, {0xaac2, 0xaac2}, + {0xaadb, 0xaadd}, {0xaae0, 0xaaea}, {0xaaf2, 0xaaf4}, {0xab01, 0xab06}, + {0xab09, 0xab0e}, {0xab11, 0xab16}, {0xab20, 0xab26}, {0xab28, 0xab2e}, + {0xab30, 0xab5a}, {0xab5c, 0xab69}, {0xab70, 0xabe2}, {0xac00, 0xd7a3}, + {0xd7b0, 0xd7c6}, {0xd7cb, 0xd7fb}, {0xf900, 0xfa6d}, {0xfa70, 0xfad9}, + {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xfb1d, 0xfb1d}, {0xfb1f, 0xfb28}, + {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb3e, 0xfb3e}, {0xfb40, 0xfb41}, + {0xfb43, 0xfb44}, {0xfb46, 0xfbb1}, {0xfbd3, 0xfd3d}, {0xfd50, 0xfd8f}, + {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb}, {0xfe70, 0xfe74}, {0xfe76, 0xfefc}, + {0xff21, 0xff3a}, {0xff41, 0xff5a}, {0xff66, 0xffbe}, {0xffc2, 0xffc7}, + {0xffca, 0xffcf}, {0xffd2, 0xffd7}, {0xffda, 0xffdc}, {0x10000, 0x1000b}, + {0x1000d, 0x10026}, {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d}, + {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10140, 0x10174}, {0x10280, 0x1029c}, + {0x102a0, 0x102d0}, {0x10300, 0x1031f}, {0x1032d, 0x1034a}, {0x10350, 0x10375}, + {0x10380, 0x1039d}, {0x103a0, 0x103c3}, {0x103c8, 0x103cf}, {0x103d1, 0x103d5}, + {0x10400, 0x1049d}, {0x104b0, 0x104d3}, {0x104d8, 0x104fb}, {0x10500, 0x10527}, + {0x10530, 0x10563}, {0x10570, 0x1057a}, {0x1057c, 0x1058a}, {0x1058c, 0x10592}, + {0x10594, 0x10595}, {0x10597, 0x105a1}, {0x105a3, 0x105b1}, {0x105b3, 0x105b9}, + {0x105bb, 0x105bc}, {0x105c0, 0x105f3}, {0x10600, 0x10736}, {0x10740, 0x10755}, + {0x10760, 0x10767}, {0x10780, 0x10785}, {0x10787, 0x107b0}, {0x107b2, 0x107ba}, + {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080a, 0x10835}, {0x10837, 0x10838}, + {0x1083c, 0x1083c}, {0x1083f, 0x10855}, {0x10860, 0x10876}, {0x10880, 0x1089e}, + {0x108e0, 0x108f2}, {0x108f4, 0x108f5}, {0x10900, 0x10915}, {0x10920, 0x10939}, + {0x10940, 0x10959}, {0x10980, 0x109b7}, {0x109be, 0x109bf}, {0x10a00, 0x10a00}, + {0x10a10, 0x10a13}, {0x10a15, 0x10a17}, {0x10a19, 0x10a35}, {0x10a60, 0x10a7c}, + {0x10a80, 0x10a9c}, {0x10ac0, 0x10ac7}, {0x10ac9, 0x10ae4}, {0x10b00, 0x10b35}, + {0x10b40, 0x10b55}, {0x10b60, 0x10b72}, {0x10b80, 0x10b91}, {0x10c00, 0x10c48}, + {0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2}, {0x10d00, 0x10d23}, {0x10d4a, 0x10d65}, + {0x10d6f, 0x10d85}, {0x10e80, 0x10ea9}, {0x10eb0, 0x10eb1}, {0x10ec2, 0x10ec7}, + {0x10f00, 0x10f1c}, {0x10f27, 0x10f27}, {0x10f30, 0x10f45}, {0x10f70, 0x10f81}, + {0x10fb0, 0x10fc4}, {0x10fe0, 0x10ff6}, {0x11003, 0x11037}, {0x11071, 0x11072}, + {0x11075, 0x11075}, {0x11083, 0x110af}, {0x110d0, 0x110e8}, {0x11103, 0x11126}, + {0x11144, 0x11144}, {0x11147, 0x11147}, {0x11150, 0x11172}, {0x11176, 0x11176}, + {0x11183, 0x111b2}, {0x111c1, 0x111c4}, {0x111da, 0x111da}, {0x111dc, 0x111dc}, + {0x11200, 0x11211}, {0x11213, 0x1122b}, {0x1123f, 0x11240}, {0x11280, 0x11286}, + {0x11288, 0x11288}, {0x1128a, 0x1128d}, {0x1128f, 0x1129d}, {0x1129f, 0x112a8}, + {0x112b0, 0x112de}, {0x11305, 0x1130c}, {0x1130f, 0x11310}, {0x11313, 0x11328}, + {0x1132a, 0x11330}, {0x11332, 0x11333}, {0x11335, 0x11339}, {0x1133d, 0x1133d}, + {0x11350, 0x11350}, {0x1135d, 0x11361}, {0x11380, 0x11389}, {0x1138b, 0x1138b}, + {0x1138e, 0x1138e}, {0x11390, 0x113b5}, {0x113b7, 0x113b7}, {0x113d1, 0x113d1}, + {0x113d3, 0x113d3}, {0x11400, 0x11434}, {0x11447, 0x1144a}, {0x1145f, 0x11461}, + {0x11480, 0x114af}, {0x114c4, 0x114c5}, {0x114c7, 0x114c7}, {0x11580, 0x115ae}, + {0x115d8, 0x115db}, {0x11600, 0x1162f}, {0x11644, 0x11644}, {0x11680, 0x116aa}, + {0x116b8, 0x116b8}, {0x11700, 0x1171a}, {0x11740, 0x11746}, {0x11800, 0x1182b}, + {0x118a0, 0x118df}, {0x118ff, 0x11906}, {0x11909, 0x11909}, {0x1190c, 0x11913}, + {0x11915, 0x11916}, {0x11918, 0x1192f}, {0x1193f, 0x1193f}, {0x11941, 0x11941}, + {0x119a0, 0x119a7}, {0x119aa, 0x119d0}, {0x119e1, 0x119e1}, {0x119e3, 0x119e3}, + {0x11a00, 0x11a00}, {0x11a0b, 0x11a32}, {0x11a3a, 0x11a3a}, {0x11a50, 0x11a50}, + {0x11a5c, 0x11a89}, {0x11a9d, 0x11a9d}, {0x11ab0, 0x11af8}, {0x11bc0, 0x11be0}, + {0x11c00, 0x11c08}, {0x11c0a, 0x11c2e}, {0x11c40, 0x11c40}, {0x11c72, 0x11c8f}, + {0x11d00, 0x11d06}, {0x11d08, 0x11d09}, {0x11d0b, 0x11d30}, {0x11d46, 0x11d46}, + {0x11d60, 0x11d65}, {0x11d67, 0x11d68}, {0x11d6a, 0x11d89}, {0x11d98, 0x11d98}, + {0x11db0, 0x11ddb}, {0x11ee0, 0x11ef2}, {0x11f02, 0x11f02}, {0x11f04, 0x11f10}, + {0x11f12, 0x11f33}, {0x11fb0, 0x11fb0}, {0x12000, 0x12399}, {0x12400, 0x1246e}, + {0x12480, 0x12543}, {0x12f90, 0x12ff0}, {0x13000, 0x1342f}, {0x13441, 0x13446}, + {0x13460, 0x143fa}, {0x14400, 0x14646}, {0x16100, 0x1611d}, {0x16800, 0x16a38}, + {0x16a40, 0x16a5e}, {0x16a70, 0x16abe}, {0x16ad0, 0x16aed}, {0x16b00, 0x16b2f}, + {0x16b40, 0x16b43}, {0x16b63, 0x16b77}, {0x16b7d, 0x16b8f}, {0x16d40, 0x16d6c}, + {0x16e40, 0x16e7f}, {0x16ea0, 0x16eb8}, {0x16ebb, 0x16ed3}, {0x16f00, 0x16f4a}, + {0x16f50, 0x16f50}, {0x16f93, 0x16f9f}, {0x16fe0, 0x16fe1}, {0x16fe3, 0x16fe3}, + {0x16ff2, 0x16ff6}, {0x17000, 0x18cd5}, {0x18cff, 0x18d1e}, {0x18d80, 0x18df2}, + {0x1aff0, 0x1aff3}, {0x1aff5, 0x1affb}, {0x1affd, 0x1affe}, {0x1b000, 0x1b122}, + {0x1b132, 0x1b132}, {0x1b150, 0x1b152}, {0x1b155, 0x1b155}, {0x1b164, 0x1b167}, + {0x1b170, 0x1b2fb}, {0x1bc00, 0x1bc6a}, {0x1bc70, 0x1bc7c}, {0x1bc80, 0x1bc88}, + {0x1bc90, 0x1bc99}, {0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d49e, 0x1d49f}, + {0x1d4a2, 0x1d4a2}, {0x1d4a5, 0x1d4a6}, {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b9}, + {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, + {0x1d50d, 0x1d514}, {0x1d516, 0x1d51c}, {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e}, + {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, {0x1d54a, 0x1d550}, {0x1d552, 0x1d6a5}, + {0x1d6a8, 0x1d6c0}, {0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6fa}, {0x1d6fc, 0x1d714}, + {0x1d716, 0x1d734}, {0x1d736, 0x1d74e}, {0x1d750, 0x1d76e}, {0x1d770, 0x1d788}, + {0x1d78a, 0x1d7a8}, {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7cb}, {0x1df00, 0x1df1e}, + {0x1df25, 0x1df2a}, {0x1e030, 0x1e06d}, {0x1e100, 0x1e12c}, {0x1e137, 0x1e13d}, + {0x1e14e, 0x1e14e}, {0x1e290, 0x1e2ad}, {0x1e2c0, 0x1e2eb}, {0x1e4d0, 0x1e4eb}, + {0x1e5d0, 0x1e5ed}, {0x1e5f0, 0x1e5f0}, {0x1e6c0, 0x1e6de}, {0x1e6e0, 0x1e6e2}, + {0x1e6e4, 0x1e6e5}, {0x1e6e7, 0x1e6ed}, {0x1e6f0, 0x1e6f4}, {0x1e6fe, 0x1e6ff}, + {0x1e7e0, 0x1e7e6}, {0x1e7e8, 0x1e7eb}, {0x1e7ed, 0x1e7ee}, {0x1e7f0, 0x1e7fe}, + {0x1e800, 0x1e8c4}, {0x1e900, 0x1e943}, {0x1e94b, 0x1e94b}, {0x1ee00, 0x1ee03}, + {0x1ee05, 0x1ee1f}, {0x1ee21, 0x1ee22}, {0x1ee24, 0x1ee24}, {0x1ee27, 0x1ee27}, + {0x1ee29, 0x1ee32}, {0x1ee34, 0x1ee37}, {0x1ee39, 0x1ee39}, {0x1ee3b, 0x1ee3b}, + {0x1ee42, 0x1ee42}, {0x1ee47, 0x1ee47}, {0x1ee49, 0x1ee49}, {0x1ee4b, 0x1ee4b}, + {0x1ee4d, 0x1ee4f}, {0x1ee51, 0x1ee52}, {0x1ee54, 0x1ee54}, {0x1ee57, 0x1ee57}, + {0x1ee59, 0x1ee59}, {0x1ee5b, 0x1ee5b}, {0x1ee5d, 0x1ee5d}, {0x1ee5f, 0x1ee5f}, + {0x1ee61, 0x1ee62}, {0x1ee64, 0x1ee64}, {0x1ee67, 0x1ee6a}, {0x1ee6c, 0x1ee72}, + {0x1ee74, 0x1ee77}, {0x1ee79, 0x1ee7c}, {0x1ee7e, 0x1ee7e}, {0x1ee80, 0x1ee89}, + {0x1ee8b, 0x1ee9b}, {0x1eea1, 0x1eea3}, {0x1eea5, 0x1eea9}, {0x1eeab, 0x1eebb}, + {0x20000, 0x2a6df}, {0x2a700, 0x2b81d}, {0x2b820, 0x2cead}, {0x2ceb0, 0x2ebe0}, + {0x2ebf0, 0x2ee5d}, {0x2f800, 0x2fa1d}, {0x30000, 0x3134a}, {0x31350, 0x33479}, +}; +static const uint32_t id_continue_ranges[][2] = { + {0x30, 0x39}, {0x41, 0x5a}, {0x5f, 0x5f}, {0x61, 0x7a}, + {0xaa, 0xaa}, {0xb5, 0xb5}, {0xb7, 0xb7}, {0xba, 0xba}, + {0xc0, 0xd6}, {0xd8, 0xf6}, {0xf8, 0x2c1}, {0x2c6, 0x2d1}, + {0x2e0, 0x2e4}, {0x2ec, 0x2ec}, {0x2ee, 0x2ee}, {0x300, 0x374}, + {0x376, 0x377}, {0x37a, 0x37d}, {0x37f, 0x37f}, {0x386, 0x38a}, + {0x38c, 0x38c}, {0x38e, 0x3a1}, {0x3a3, 0x3f5}, {0x3f7, 0x481}, + {0x483, 0x487}, {0x48a, 0x52f}, {0x531, 0x556}, {0x559, 0x559}, + {0x560, 0x588}, {0x591, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, + {0x5c4, 0x5c5}, {0x5c7, 0x5c7}, {0x5d0, 0x5ea}, {0x5ef, 0x5f2}, + {0x610, 0x61a}, {0x620, 0x669}, {0x66e, 0x6d3}, {0x6d5, 0x6dc}, + {0x6df, 0x6e8}, {0x6ea, 0x6fc}, {0x6ff, 0x6ff}, {0x710, 0x74a}, + {0x74d, 0x7b1}, {0x7c0, 0x7f5}, {0x7fa, 0x7fa}, {0x7fd, 0x7fd}, + {0x800, 0x82d}, {0x840, 0x85b}, {0x860, 0x86a}, {0x870, 0x887}, + {0x889, 0x88f}, {0x897, 0x8e1}, {0x8e3, 0x963}, {0x966, 0x96f}, + {0x971, 0x983}, {0x985, 0x98c}, {0x98f, 0x990}, {0x993, 0x9a8}, + {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, {0x9bc, 0x9c4}, + {0x9c7, 0x9c8}, {0x9cb, 0x9ce}, {0x9d7, 0x9d7}, {0x9dc, 0x9dd}, + {0x9df, 0x9e3}, {0x9e6, 0x9f1}, {0x9fc, 0x9fc}, {0x9fe, 0x9fe}, + {0xa01, 0xa03}, {0xa05, 0xa0a}, {0xa0f, 0xa10}, {0xa13, 0xa28}, + {0xa2a, 0xa30}, {0xa32, 0xa33}, {0xa35, 0xa36}, {0xa38, 0xa39}, + {0xa3c, 0xa3c}, {0xa3e, 0xa42}, {0xa47, 0xa48}, {0xa4b, 0xa4d}, + {0xa51, 0xa51}, {0xa59, 0xa5c}, {0xa5e, 0xa5e}, {0xa66, 0xa75}, + {0xa81, 0xa83}, {0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8}, + {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9}, {0xabc, 0xac5}, + {0xac7, 0xac9}, {0xacb, 0xacd}, {0xad0, 0xad0}, {0xae0, 0xae3}, + {0xae6, 0xaef}, {0xaf9, 0xaff}, {0xb01, 0xb03}, {0xb05, 0xb0c}, + {0xb0f, 0xb10}, {0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb32, 0xb33}, + {0xb35, 0xb39}, {0xb3c, 0xb44}, {0xb47, 0xb48}, {0xb4b, 0xb4d}, + {0xb55, 0xb57}, {0xb5c, 0xb5d}, {0xb5f, 0xb63}, {0xb66, 0xb6f}, + {0xb71, 0xb71}, {0xb82, 0xb83}, {0xb85, 0xb8a}, {0xb8e, 0xb90}, + {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c}, {0xb9e, 0xb9f}, + {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb9}, {0xbbe, 0xbc2}, + {0xbc6, 0xbc8}, {0xbca, 0xbcd}, {0xbd0, 0xbd0}, {0xbd7, 0xbd7}, + {0xbe6, 0xbef}, {0xc00, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28}, + {0xc2a, 0xc39}, {0xc3c, 0xc44}, {0xc46, 0xc48}, {0xc4a, 0xc4d}, + {0xc55, 0xc56}, {0xc58, 0xc5a}, {0xc5c, 0xc5d}, {0xc60, 0xc63}, + {0xc66, 0xc6f}, {0xc80, 0xc83}, {0xc85, 0xc8c}, {0xc8e, 0xc90}, + {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, {0xcbc, 0xcc4}, + {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6}, {0xcdc, 0xcde}, + {0xce0, 0xce3}, {0xce6, 0xcef}, {0xcf1, 0xcf3}, {0xd00, 0xd0c}, + {0xd0e, 0xd10}, {0xd12, 0xd44}, {0xd46, 0xd48}, {0xd4a, 0xd4e}, + {0xd54, 0xd57}, {0xd5f, 0xd63}, {0xd66, 0xd6f}, {0xd7a, 0xd7f}, + {0xd81, 0xd83}, {0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb}, + {0xdbd, 0xdbd}, {0xdc0, 0xdc6}, {0xdca, 0xdca}, {0xdcf, 0xdd4}, + {0xdd6, 0xdd6}, {0xdd8, 0xddf}, {0xde6, 0xdef}, {0xdf2, 0xdf3}, + {0xe01, 0xe3a}, {0xe40, 0xe4e}, {0xe50, 0xe59}, {0xe81, 0xe82}, + {0xe84, 0xe84}, {0xe86, 0xe8a}, {0xe8c, 0xea3}, {0xea5, 0xea5}, + {0xea7, 0xebd}, {0xec0, 0xec4}, {0xec6, 0xec6}, {0xec8, 0xece}, + {0xed0, 0xed9}, {0xedc, 0xedf}, {0xf00, 0xf00}, {0xf18, 0xf19}, + {0xf20, 0xf29}, {0xf35, 0xf35}, {0xf37, 0xf37}, {0xf39, 0xf39}, + {0xf3e, 0xf47}, {0xf49, 0xf6c}, {0xf71, 0xf84}, {0xf86, 0xf97}, + {0xf99, 0xfbc}, {0xfc6, 0xfc6}, {0x1000, 0x1049}, {0x1050, 0x109d}, + {0x10a0, 0x10c5}, {0x10c7, 0x10c7}, {0x10cd, 0x10cd}, {0x10d0, 0x10fa}, + {0x10fc, 0x1248}, {0x124a, 0x124d}, {0x1250, 0x1256}, {0x1258, 0x1258}, + {0x125a, 0x125d}, {0x1260, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12b0}, + {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c0, 0x12c0}, {0x12c2, 0x12c5}, + {0x12c8, 0x12d6}, {0x12d8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135a}, + {0x135d, 0x135f}, {0x1369, 0x1371}, {0x1380, 0x138f}, {0x13a0, 0x13f5}, + {0x13f8, 0x13fd}, {0x1401, 0x166c}, {0x166f, 0x167f}, {0x1681, 0x169a}, + {0x16a0, 0x16ea}, {0x16ee, 0x16f8}, {0x1700, 0x1715}, {0x171f, 0x1734}, + {0x1740, 0x1753}, {0x1760, 0x176c}, {0x176e, 0x1770}, {0x1772, 0x1773}, + {0x1780, 0x17d3}, {0x17d7, 0x17d7}, {0x17dc, 0x17dd}, {0x17e0, 0x17e9}, + {0x180b, 0x180d}, {0x180f, 0x1819}, {0x1820, 0x1878}, {0x1880, 0x18aa}, + {0x18b0, 0x18f5}, {0x1900, 0x191e}, {0x1920, 0x192b}, {0x1930, 0x193b}, + {0x1946, 0x196d}, {0x1970, 0x1974}, {0x1980, 0x19ab}, {0x19b0, 0x19c9}, + {0x19d0, 0x19da}, {0x1a00, 0x1a1b}, {0x1a20, 0x1a5e}, {0x1a60, 0x1a7c}, + {0x1a7f, 0x1a89}, {0x1a90, 0x1a99}, {0x1aa7, 0x1aa7}, {0x1ab0, 0x1abd}, + {0x1abf, 0x1add}, {0x1ae0, 0x1aeb}, {0x1b00, 0x1b4c}, {0x1b50, 0x1b59}, + {0x1b6b, 0x1b73}, {0x1b80, 0x1bf3}, {0x1c00, 0x1c37}, {0x1c40, 0x1c49}, + {0x1c4d, 0x1c7d}, {0x1c80, 0x1c8a}, {0x1c90, 0x1cba}, {0x1cbd, 0x1cbf}, + {0x1cd0, 0x1cd2}, {0x1cd4, 0x1cfa}, {0x1d00, 0x1f15}, {0x1f18, 0x1f1d}, + {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, {0x1f59, 0x1f59}, + {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, + {0x1fb6, 0x1fbc}, {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, + {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, + {0x1ff6, 0x1ffc}, {0x200c, 0x200d}, {0x203f, 0x2040}, {0x2054, 0x2054}, + {0x2071, 0x2071}, {0x207f, 0x207f}, {0x2090, 0x209c}, {0x20d0, 0x20dc}, + {0x20e1, 0x20e1}, {0x20e5, 0x20f0}, {0x2102, 0x2102}, {0x2107, 0x2107}, + {0x210a, 0x2113}, {0x2115, 0x2115}, {0x2118, 0x211d}, {0x2124, 0x2124}, + {0x2126, 0x2126}, {0x2128, 0x2128}, {0x212a, 0x2139}, {0x213c, 0x213f}, + {0x2145, 0x2149}, {0x214e, 0x214e}, {0x2160, 0x2188}, {0x2c00, 0x2ce4}, + {0x2ceb, 0x2cf3}, {0x2d00, 0x2d25}, {0x2d27, 0x2d27}, {0x2d2d, 0x2d2d}, + {0x2d30, 0x2d67}, {0x2d6f, 0x2d6f}, {0x2d7f, 0x2d96}, {0x2da0, 0x2da6}, + {0x2da8, 0x2dae}, {0x2db0, 0x2db6}, {0x2db8, 0x2dbe}, {0x2dc0, 0x2dc6}, + {0x2dc8, 0x2dce}, {0x2dd0, 0x2dd6}, {0x2dd8, 0x2dde}, {0x2de0, 0x2dff}, + {0x3005, 0x3007}, {0x3021, 0x302f}, {0x3031, 0x3035}, {0x3038, 0x303c}, + {0x3041, 0x3096}, {0x3099, 0x309f}, {0x30a1, 0x30ff}, {0x3105, 0x312f}, + {0x3131, 0x318e}, {0x31a0, 0x31bf}, {0x31f0, 0x31ff}, {0x3400, 0x4dbf}, + {0x4e00, 0xa48c}, {0xa4d0, 0xa4fd}, {0xa500, 0xa60c}, {0xa610, 0xa62b}, + {0xa640, 0xa66f}, {0xa674, 0xa67d}, {0xa67f, 0xa6f1}, {0xa717, 0xa71f}, + {0xa722, 0xa788}, {0xa78b, 0xa7dc}, {0xa7f1, 0xa827}, {0xa82c, 0xa82c}, + {0xa840, 0xa873}, {0xa880, 0xa8c5}, {0xa8d0, 0xa8d9}, {0xa8e0, 0xa8f7}, + {0xa8fb, 0xa8fb}, {0xa8fd, 0xa92d}, {0xa930, 0xa953}, {0xa960, 0xa97c}, + {0xa980, 0xa9c0}, {0xa9cf, 0xa9d9}, {0xa9e0, 0xa9fe}, {0xaa00, 0xaa36}, + {0xaa40, 0xaa4d}, {0xaa50, 0xaa59}, {0xaa60, 0xaa76}, {0xaa7a, 0xaac2}, + {0xaadb, 0xaadd}, {0xaae0, 0xaaef}, {0xaaf2, 0xaaf6}, {0xab01, 0xab06}, + {0xab09, 0xab0e}, {0xab11, 0xab16}, {0xab20, 0xab26}, {0xab28, 0xab2e}, + {0xab30, 0xab5a}, {0xab5c, 0xab69}, {0xab70, 0xabea}, {0xabec, 0xabed}, + {0xabf0, 0xabf9}, {0xac00, 0xd7a3}, {0xd7b0, 0xd7c6}, {0xd7cb, 0xd7fb}, + {0xf900, 0xfa6d}, {0xfa70, 0xfad9}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, + {0xfb1d, 0xfb28}, {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb3e, 0xfb3e}, + {0xfb40, 0xfb41}, {0xfb43, 0xfb44}, {0xfb46, 0xfbb1}, {0xfbd3, 0xfd3d}, + {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb}, {0xfe00, 0xfe0f}, + {0xfe20, 0xfe2f}, {0xfe33, 0xfe34}, {0xfe4d, 0xfe4f}, {0xfe70, 0xfe74}, + {0xfe76, 0xfefc}, {0xff10, 0xff19}, {0xff21, 0xff3a}, {0xff3f, 0xff3f}, + {0xff41, 0xff5a}, {0xff65, 0xffbe}, {0xffc2, 0xffc7}, {0xffca, 0xffcf}, + {0xffd2, 0xffd7}, {0xffda, 0xffdc}, {0x10000, 0x1000b}, {0x1000d, 0x10026}, + {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d}, {0x10050, 0x1005d}, + {0x10080, 0x100fa}, {0x10140, 0x10174}, {0x101fd, 0x101fd}, {0x10280, 0x1029c}, + {0x102a0, 0x102d0}, {0x102e0, 0x102e0}, {0x10300, 0x1031f}, {0x1032d, 0x1034a}, + {0x10350, 0x1037a}, {0x10380, 0x1039d}, {0x103a0, 0x103c3}, {0x103c8, 0x103cf}, + {0x103d1, 0x103d5}, {0x10400, 0x1049d}, {0x104a0, 0x104a9}, {0x104b0, 0x104d3}, + {0x104d8, 0x104fb}, {0x10500, 0x10527}, {0x10530, 0x10563}, {0x10570, 0x1057a}, + {0x1057c, 0x1058a}, {0x1058c, 0x10592}, {0x10594, 0x10595}, {0x10597, 0x105a1}, + {0x105a3, 0x105b1}, {0x105b3, 0x105b9}, {0x105bb, 0x105bc}, {0x105c0, 0x105f3}, + {0x10600, 0x10736}, {0x10740, 0x10755}, {0x10760, 0x10767}, {0x10780, 0x10785}, + {0x10787, 0x107b0}, {0x107b2, 0x107ba}, {0x10800, 0x10805}, {0x10808, 0x10808}, + {0x1080a, 0x10835}, {0x10837, 0x10838}, {0x1083c, 0x1083c}, {0x1083f, 0x10855}, + {0x10860, 0x10876}, {0x10880, 0x1089e}, {0x108e0, 0x108f2}, {0x108f4, 0x108f5}, + {0x10900, 0x10915}, {0x10920, 0x10939}, {0x10940, 0x10959}, {0x10980, 0x109b7}, + {0x109be, 0x109bf}, {0x10a00, 0x10a03}, {0x10a05, 0x10a06}, {0x10a0c, 0x10a13}, + {0x10a15, 0x10a17}, {0x10a19, 0x10a35}, {0x10a38, 0x10a3a}, {0x10a3f, 0x10a3f}, + {0x10a60, 0x10a7c}, {0x10a80, 0x10a9c}, {0x10ac0, 0x10ac7}, {0x10ac9, 0x10ae6}, + {0x10b00, 0x10b35}, {0x10b40, 0x10b55}, {0x10b60, 0x10b72}, {0x10b80, 0x10b91}, + {0x10c00, 0x10c48}, {0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2}, {0x10d00, 0x10d27}, + {0x10d30, 0x10d39}, {0x10d40, 0x10d65}, {0x10d69, 0x10d6d}, {0x10d6f, 0x10d85}, + {0x10e80, 0x10ea9}, {0x10eab, 0x10eac}, {0x10eb0, 0x10eb1}, {0x10ec2, 0x10ec7}, + {0x10efa, 0x10f1c}, {0x10f27, 0x10f27}, {0x10f30, 0x10f50}, {0x10f70, 0x10f85}, + {0x10fb0, 0x10fc4}, {0x10fe0, 0x10ff6}, {0x11000, 0x11046}, {0x11066, 0x11075}, + {0x1107f, 0x110ba}, {0x110c2, 0x110c2}, {0x110d0, 0x110e8}, {0x110f0, 0x110f9}, + {0x11100, 0x11134}, {0x11136, 0x1113f}, {0x11144, 0x11147}, {0x11150, 0x11173}, + {0x11176, 0x11176}, {0x11180, 0x111c4}, {0x111c9, 0x111cc}, {0x111ce, 0x111da}, + {0x111dc, 0x111dc}, {0x11200, 0x11211}, {0x11213, 0x11237}, {0x1123e, 0x11241}, + {0x11280, 0x11286}, {0x11288, 0x11288}, {0x1128a, 0x1128d}, {0x1128f, 0x1129d}, + {0x1129f, 0x112a8}, {0x112b0, 0x112ea}, {0x112f0, 0x112f9}, {0x11300, 0x11303}, + {0x11305, 0x1130c}, {0x1130f, 0x11310}, {0x11313, 0x11328}, {0x1132a, 0x11330}, + {0x11332, 0x11333}, {0x11335, 0x11339}, {0x1133b, 0x11344}, {0x11347, 0x11348}, + {0x1134b, 0x1134d}, {0x11350, 0x11350}, {0x11357, 0x11357}, {0x1135d, 0x11363}, + {0x11366, 0x1136c}, {0x11370, 0x11374}, {0x11380, 0x11389}, {0x1138b, 0x1138b}, + {0x1138e, 0x1138e}, {0x11390, 0x113b5}, {0x113b7, 0x113c0}, {0x113c2, 0x113c2}, + {0x113c5, 0x113c5}, {0x113c7, 0x113ca}, {0x113cc, 0x113d3}, {0x113e1, 0x113e2}, + {0x11400, 0x1144a}, {0x11450, 0x11459}, {0x1145e, 0x11461}, {0x11480, 0x114c5}, + {0x114c7, 0x114c7}, {0x114d0, 0x114d9}, {0x11580, 0x115b5}, {0x115b8, 0x115c0}, + {0x115d8, 0x115dd}, {0x11600, 0x11640}, {0x11644, 0x11644}, {0x11650, 0x11659}, + {0x11680, 0x116b8}, {0x116c0, 0x116c9}, {0x116d0, 0x116e3}, {0x11700, 0x1171a}, + {0x1171d, 0x1172b}, {0x11730, 0x11739}, {0x11740, 0x11746}, {0x11800, 0x1183a}, + {0x118a0, 0x118e9}, {0x118ff, 0x11906}, {0x11909, 0x11909}, {0x1190c, 0x11913}, + {0x11915, 0x11916}, {0x11918, 0x11935}, {0x11937, 0x11938}, {0x1193b, 0x11943}, + {0x11950, 0x11959}, {0x119a0, 0x119a7}, {0x119aa, 0x119d7}, {0x119da, 0x119e1}, + {0x119e3, 0x119e4}, {0x11a00, 0x11a3e}, {0x11a47, 0x11a47}, {0x11a50, 0x11a99}, + {0x11a9d, 0x11a9d}, {0x11ab0, 0x11af8}, {0x11b60, 0x11b67}, {0x11bc0, 0x11be0}, + {0x11bf0, 0x11bf9}, {0x11c00, 0x11c08}, {0x11c0a, 0x11c36}, {0x11c38, 0x11c40}, + {0x11c50, 0x11c59}, {0x11c72, 0x11c8f}, {0x11c92, 0x11ca7}, {0x11ca9, 0x11cb6}, + {0x11d00, 0x11d06}, {0x11d08, 0x11d09}, {0x11d0b, 0x11d36}, {0x11d3a, 0x11d3a}, + {0x11d3c, 0x11d3d}, {0x11d3f, 0x11d47}, {0x11d50, 0x11d59}, {0x11d60, 0x11d65}, + {0x11d67, 0x11d68}, {0x11d6a, 0x11d8e}, {0x11d90, 0x11d91}, {0x11d93, 0x11d98}, + {0x11da0, 0x11da9}, {0x11db0, 0x11ddb}, {0x11de0, 0x11de9}, {0x11ee0, 0x11ef6}, + {0x11f00, 0x11f10}, {0x11f12, 0x11f3a}, {0x11f3e, 0x11f42}, {0x11f50, 0x11f5a}, + {0x11fb0, 0x11fb0}, {0x12000, 0x12399}, {0x12400, 0x1246e}, {0x12480, 0x12543}, + {0x12f90, 0x12ff0}, {0x13000, 0x1342f}, {0x13440, 0x13455}, {0x13460, 0x143fa}, + {0x14400, 0x14646}, {0x16100, 0x16139}, {0x16800, 0x16a38}, {0x16a40, 0x16a5e}, + {0x16a60, 0x16a69}, {0x16a70, 0x16abe}, {0x16ac0, 0x16ac9}, {0x16ad0, 0x16aed}, + {0x16af0, 0x16af4}, {0x16b00, 0x16b36}, {0x16b40, 0x16b43}, {0x16b50, 0x16b59}, + {0x16b63, 0x16b77}, {0x16b7d, 0x16b8f}, {0x16d40, 0x16d6c}, {0x16d70, 0x16d79}, + {0x16e40, 0x16e7f}, {0x16ea0, 0x16eb8}, {0x16ebb, 0x16ed3}, {0x16f00, 0x16f4a}, + {0x16f4f, 0x16f87}, {0x16f8f, 0x16f9f}, {0x16fe0, 0x16fe1}, {0x16fe3, 0x16fe4}, + {0x16ff0, 0x16ff6}, {0x17000, 0x18cd5}, {0x18cff, 0x18d1e}, {0x18d80, 0x18df2}, + {0x1aff0, 0x1aff3}, {0x1aff5, 0x1affb}, {0x1affd, 0x1affe}, {0x1b000, 0x1b122}, + {0x1b132, 0x1b132}, {0x1b150, 0x1b152}, {0x1b155, 0x1b155}, {0x1b164, 0x1b167}, + {0x1b170, 0x1b2fb}, {0x1bc00, 0x1bc6a}, {0x1bc70, 0x1bc7c}, {0x1bc80, 0x1bc88}, + {0x1bc90, 0x1bc99}, {0x1bc9d, 0x1bc9e}, {0x1ccf0, 0x1ccf9}, {0x1cf00, 0x1cf2d}, + {0x1cf30, 0x1cf46}, {0x1d165, 0x1d169}, {0x1d16d, 0x1d172}, {0x1d17b, 0x1d182}, + {0x1d185, 0x1d18b}, {0x1d1aa, 0x1d1ad}, {0x1d242, 0x1d244}, {0x1d400, 0x1d454}, + {0x1d456, 0x1d49c}, {0x1d49e, 0x1d49f}, {0x1d4a2, 0x1d4a2}, {0x1d4a5, 0x1d4a6}, + {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b9}, {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3}, + {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, {0x1d516, 0x1d51c}, + {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e}, {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, + {0x1d54a, 0x1d550}, {0x1d552, 0x1d6a5}, {0x1d6a8, 0x1d6c0}, {0x1d6c2, 0x1d6da}, + {0x1d6dc, 0x1d6fa}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d734}, {0x1d736, 0x1d74e}, + {0x1d750, 0x1d76e}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d7a8}, {0x1d7aa, 0x1d7c2}, + {0x1d7c4, 0x1d7cb}, {0x1d7ce, 0x1d7ff}, {0x1da00, 0x1da36}, {0x1da3b, 0x1da6c}, + {0x1da75, 0x1da75}, {0x1da84, 0x1da84}, {0x1da9b, 0x1da9f}, {0x1daa1, 0x1daaf}, + {0x1df00, 0x1df1e}, {0x1df25, 0x1df2a}, {0x1e000, 0x1e006}, {0x1e008, 0x1e018}, + {0x1e01b, 0x1e021}, {0x1e023, 0x1e024}, {0x1e026, 0x1e02a}, {0x1e030, 0x1e06d}, + {0x1e08f, 0x1e08f}, {0x1e100, 0x1e12c}, {0x1e130, 0x1e13d}, {0x1e140, 0x1e149}, + {0x1e14e, 0x1e14e}, {0x1e290, 0x1e2ae}, {0x1e2c0, 0x1e2f9}, {0x1e4d0, 0x1e4f9}, + {0x1e5d0, 0x1e5fa}, {0x1e6c0, 0x1e6de}, {0x1e6e0, 0x1e6f5}, {0x1e6fe, 0x1e6ff}, + {0x1e7e0, 0x1e7e6}, {0x1e7e8, 0x1e7eb}, {0x1e7ed, 0x1e7ee}, {0x1e7f0, 0x1e7fe}, + {0x1e800, 0x1e8c4}, {0x1e8d0, 0x1e8d6}, {0x1e900, 0x1e94b}, {0x1e950, 0x1e959}, + {0x1ee00, 0x1ee03}, {0x1ee05, 0x1ee1f}, {0x1ee21, 0x1ee22}, {0x1ee24, 0x1ee24}, + {0x1ee27, 0x1ee27}, {0x1ee29, 0x1ee32}, {0x1ee34, 0x1ee37}, {0x1ee39, 0x1ee39}, + {0x1ee3b, 0x1ee3b}, {0x1ee42, 0x1ee42}, {0x1ee47, 0x1ee47}, {0x1ee49, 0x1ee49}, + {0x1ee4b, 0x1ee4b}, {0x1ee4d, 0x1ee4f}, {0x1ee51, 0x1ee52}, {0x1ee54, 0x1ee54}, + {0x1ee57, 0x1ee57}, {0x1ee59, 0x1ee59}, {0x1ee5b, 0x1ee5b}, {0x1ee5d, 0x1ee5d}, + {0x1ee5f, 0x1ee5f}, {0x1ee61, 0x1ee62}, {0x1ee64, 0x1ee64}, {0x1ee67, 0x1ee6a}, + {0x1ee6c, 0x1ee72}, {0x1ee74, 0x1ee77}, {0x1ee79, 0x1ee7c}, {0x1ee7e, 0x1ee7e}, + {0x1ee80, 0x1ee89}, {0x1ee8b, 0x1ee9b}, {0x1eea1, 0x1eea3}, {0x1eea5, 0x1eea9}, + {0x1eeab, 0x1eebb}, {0x1fbf0, 0x1fbf9}, {0x20000, 0x2a6df}, {0x2a700, 0x2b81d}, + {0x2b820, 0x2cead}, {0x2ceb0, 0x2ebe0}, {0x2ebf0, 0x2ee5d}, {0x2f800, 0x2fa1d}, + {0x30000, 0x3134a}, {0x31350, 0x33479}, {0xe0100, 0xe01ef}, +}; diff --git a/apps/mobile/modules/t3-highlights/cpp/t3_highlights.c b/apps/mobile/modules/t3-highlights/cpp/t3_highlights.c new file mode 100644 index 0000000000000..f1605c6cc59b0 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/cpp/t3_highlights.c @@ -0,0 +1,139 @@ +#include "t3_highlights.h" + +#include +#include + +#include "highlights.h" +#include "wasm-rt-impl.h" + +// The control block and buffer layout mirror the JavaScript glue in +// @pierre/highlights (`HighlightsHighlighter` in dist/highlighter.js). +#define INPUT_OFFSET WASM_DEFAULT_PAGE_SIZE +#define INPUT_PADDING 96u +#define MODE_UTF16_LINE_RECORDS 3u +// Like the JavaScript glue, a small input after a large one gets a fresh +// instance so the grown memory is released. +#define RESET_AFTER_PAGES 128u + +struct w2c_env { + w2c_highlights* instance; +}; + +static w2c_highlights instance; +static struct w2c_env env = {&instance}; +static bool instantiated = false; + +#include "generated/id_ranges.inc" + +static bool in_ranges(const uint32_t ranges[][2], size_t count, uint32_t code_point) { + size_t low = 0; + size_t high = count; + while (low < high) { + size_t mid = low + (high - low) / 2; + if (code_point < ranges[mid][0]) { + high = mid; + } else if (code_point > ranges[mid][1]) { + low = mid + 1; + } else { + return true; + } + } + return false; +} + +// Decodes like the JavaScript glue, including its leniency for malformed +// sequences, so both builds classify the same bytes the same way. +static u32 id_class(struct w2c_env* host, u32 ptr, u32 len, bool start) { + wasm_rt_memory_t* memory = w2c_highlights_memory(host->instance); + if ((uint64_t)ptr + 4 > memory->size) return 0; + const uint8_t* b = memory->data + ptr; + uint32_t code_point; + if (len == 2) { + code_point = (uint32_t)(b[0] & 31) << 6 | (b[1] & 63); + } else if (len == 3) { + code_point = (uint32_t)(b[0] & 15) << 12 | (uint32_t)(b[1] & 63) << 6 | (b[2] & 63); + } else { + code_point = (uint32_t)(b[0] & 7) << 18 | (uint32_t)(b[1] & 63) << 12 | + (uint32_t)(b[2] & 63) << 6 | (b[3] & 63); + } + if (code_point > 0x10ffff) return 0; + return start ? in_ranges(id_start_ranges, sizeof(id_start_ranges) / sizeof(id_start_ranges[0]), + code_point) + : in_ranges(id_continue_ranges, + sizeof(id_continue_ranges) / sizeof(id_continue_ranges[0]), code_point); +} + +u32 w2c_env_is_id_start(struct w2c_env* host, u32 ptr, u32 len) { + return id_class(host, ptr, len, true); +} + +u32 w2c_env_is_id_continue(struct w2c_env* host, u32 ptr, u32 len) { + return id_class(host, ptr, len, false); +} + +static void reset_instance(void) { + if (!instantiated) return; + wasm2c_highlights_free(&instance); + instantiated = false; +} + +static void ensure_instance(void) { + if (instantiated) return; + wasm_rt_init(); + wasm2c_highlights_instantiate(&instance, &env); + instantiated = true; +} + +static void write_u32(uint8_t* at, uint32_t value) { + at[0] = value & 0xff; + at[1] = (value >> 8) & 0xff; + at[2] = (value >> 16) & 0xff; + at[3] = value >> 24; +} + +static uint32_t read_u32(const uint8_t* at) { + return (uint32_t)at[0] | (uint32_t)at[1] << 8 | (uint32_t)at[2] << 16 | (uint32_t)at[3] << 24; +} + +int64_t t3_highlights_tokenize(const uint8_t* source, size_t length, uint8_t language, + const uint32_t** records) { + *records = NULL; + if (length > UINT32_MAX - WASM_DEFAULT_PAGE_SIZE * 2) return -1; + + if (instantiated && w2c_highlights_memory(&instance)->pages > RESET_AFTER_PAGES && + length <= WASM_DEFAULT_PAGE_SIZE) { + reset_instance(); + } + ensure_instance(); + + wasm_rt_memory_t* memory = w2c_highlights_memory(&instance); + uint64_t needed_pages = 1 + (length + INPUT_PADDING + WASM_DEFAULT_PAGE_SIZE - 1) / WASM_DEFAULT_PAGE_SIZE; + if (needed_pages > memory->pages && + wasm_rt_grow_memory(memory, needed_pages - memory->pages) == (uint64_t)-1) { + return -1; + } + + uint8_t* data = memory->data; + if (length > 0) memcpy(data + INPUT_OFFSET, source, length); + data[INPUT_OFFSET + length] = 0; + data[0] = language; + data[1] = MODE_UTF16_LINE_RECORDS; + write_u32(data + 2, (uint32_t)length); + + // `wasm_rt_impl_try` without the exception-handling runtime this module does + // not use. A trap longjmps back here. + WASM_RT_SAVE_STACK_DEPTH(); + if (WASM_RT_SETJMP(g_wasm_rt_jmp_buf) != WASM_RT_TRAP_NONE) { + reset_instance(); + return -1; + } + w2c_highlights_highlight(&instance); + + // The lexer can grow memory, which moves it. + data = memory->data; + uint32_t start = read_u32(data + 6); + uint32_t byte_length = read_u32(data + 10); + if ((uint64_t)start + byte_length > memory->size || start % 4 != 0) return -1; + *records = (const uint32_t*)(data + start); + return byte_length / 4; +} diff --git a/apps/mobile/modules/t3-highlights/cpp/t3_highlights.h b/apps/mobile/modules/t3-highlights/cpp/t3_highlights.h new file mode 100644 index 0000000000000..67e8e64f64759 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/cpp/t3_highlights.h @@ -0,0 +1,27 @@ +#ifndef T3_HIGHLIGHTS_H +#define T3_HIGHLIGHTS_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Lexes UTF-8 `source` with @pierre/highlights language `language` and points + * `records` at `(endUtf16, tokenId)` pairs. A token ID of UINT32_MAX ends a + * line, and its end value is where the next line starts. The records stay + * valid until the next call. Returns the number of uint32 values, or -1 when + * the lexer could not run. + * + * Not thread-safe: callers serialize access. + */ +int64_t t3_highlights_tokenize(const uint8_t* source, size_t length, uint8_t language, + const uint32_t** records); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/apps/mobile/modules/t3-highlights/expo-module.config.json b/apps/mobile/modules/t3-highlights/expo-module.config.json new file mode 100644 index 0000000000000..247e2a76a89a0 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/expo-module.config.json @@ -0,0 +1,10 @@ +{ + "platforms": ["apple", "android"], + "apple": { + "modules": ["T3HighlightsModule"], + "podspecPath": "T3HighlightsNative.podspec" + }, + "android": { + "modules": ["expo.modules.t3highlights.T3HighlightsModule"] + } +} diff --git a/apps/mobile/modules/t3-highlights/ios/T3HighlightsModule.swift b/apps/mobile/modules/t3-highlights/ios/T3HighlightsModule.swift new file mode 100644 index 0000000000000..32ee8b6f062ab --- /dev/null +++ b/apps/mobile/modules/t3-highlights/ios/T3HighlightsModule.swift @@ -0,0 +1,29 @@ +import ExpoModulesCore + +public final class T3HighlightsModule: Module { + private let lock = NSLock() + + public func definition() -> ModuleDefinition { + Name("T3Highlights") + + Function("tokenize") { (source: String, language: Int) -> ArrayBuffer? in + var source = source + return source.withUTF8 { utf8 in + self.lock.withLock { Self.tokenize(utf8, language: language) } + } + } + } + + private static func tokenize(_ utf8: UnsafeBufferPointer, language: Int) -> ArrayBuffer? { + guard let languageId = UInt8(exactly: language) else { return nil } + var records: UnsafePointer? + let count = t3_highlights_tokenize(utf8.baseAddress, utf8.count, languageId, &records) + guard count >= 0 else { return nil } + let byteCount = Int(count) * MemoryLayout.size + let buffer = ArrayBuffer(size: byteCount, initializeToZero: false) + if let records, byteCount > 0 { + buffer.withUnsafeMutableBytes { $0.copyMemory(from: UnsafeRawBufferPointer(start: records, count: byteCount)) } + } + return buffer + } +} diff --git a/apps/mobile/modules/t3-highlights/package.json b/apps/mobile/modules/t3-highlights/package.json new file mode 100644 index 0000000000000..81ebd561155d7 --- /dev/null +++ b/apps/mobile/modules/t3-highlights/package.json @@ -0,0 +1,17 @@ +{ + "name": "@t3tools/mobile-highlights-native", + "version": "0.0.0", + "private": true, + "expo-module": { + "ios": { + "modules": [ + "T3HighlightsModule" + ] + }, + "android": { + "modules": [ + "expo.modules.t3highlights.T3HighlightsModule" + ] + } + } +} diff --git a/apps/mobile/modules/t3-native-controls/android/src/main/java/expo/modules/t3nativecontrols/T3WorkspaceNavigationModule.kt b/apps/mobile/modules/t3-native-controls/android/src/main/java/expo/modules/t3nativecontrols/T3WorkspaceNavigationModule.kt index 3a924af4889ee..736f7cd3019f0 100644 --- a/apps/mobile/modules/t3-native-controls/android/src/main/java/expo/modules/t3nativecontrols/T3WorkspaceNavigationModule.kt +++ b/apps/mobile/modules/t3-native-controls/android/src/main/java/expo/modules/t3nativecontrols/T3WorkspaceNavigationModule.kt @@ -14,6 +14,7 @@ import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.selection.selectable @@ -63,15 +64,19 @@ import expo.modules.kotlin.modules.ModuleDefinition import expo.modules.kotlin.viewevent.EventDispatcher import expo.modules.kotlin.views.ExpoView -private val TABS = listOf("threads", "pullRequests", "settings") - class T3WorkspaceNavigationModule : Module() { override fun definition() = ModuleDefinition { Name("T3WorkspaceNavigation") View(T3WorkspaceNavigationView::class) { + Prop("tabs") { view: T3WorkspaceNavigationView, value: List -> view.tabs = value } Prop("selectedTab") { view: T3WorkspaceNavigationView, value: String -> view.selectedTab = value } + Prop("floating") { view: T3WorkspaceNavigationView, value: Boolean -> + view.floating = value + view.clipToPadding = !value + view.clipChildren = !value + } Prop("rail") { view: T3WorkspaceNavigationView, value: Boolean -> view.rail = value } Prop("dark") { view: T3WorkspaceNavigationView, value: Boolean -> view.dark = value } Prop("textScale") { view: T3WorkspaceNavigationView, value: Float -> view.textScale = value } @@ -121,8 +126,10 @@ class T3WorkspaceNavigationView( private val onTabSelected by EventDispatcher() private val onNewThread by EventDispatcher() private val onOverlayChange by EventDispatcher() + var tabs by mutableStateOf(listOf("threads", "pullRequests", "usage", "settings")) var selectedTab by mutableStateOf("threads") var rail by mutableStateOf(false) + var floating by mutableStateOf(false) var dark by mutableStateOf(false) var textScale by mutableStateOf(1f) var newEnabled by mutableStateOf(false) @@ -161,6 +168,7 @@ class T3WorkspaceNavigationView( init { addView( ComposeView(context).apply { + clipChildren = false setViewCompositionStrategy( ViewCompositionStrategy.DisposeOnDetachedFromWindowOrReleasedFromPool ) @@ -168,6 +176,8 @@ class T3WorkspaceNavigationView( MaterialTheme(colorScheme = if (dark) darkColorScheme() else lightColorScheme()) { if (rail) { rail() + } else if (floating) { + floatingTabs() } else { NavigationBar( modifier = Modifier.fillMaxSize(), @@ -175,7 +185,7 @@ class T3WorkspaceNavigationView( tonalElevation = androidx.compose.ui.unit.Dp(0f), windowInsets = WindowInsets(0), ) { - TABS.forEach { tab -> + tabs.forEach { tab -> NavigationBarItem( selected = selectedTab == tab, onClick = { onTabSelected(mapOf("tab" to tab)) }, @@ -199,6 +209,48 @@ class T3WorkspaceNavigationView( ) } + @Composable + private fun floatingTabs() { + Surface( + modifier = Modifier.fillMaxSize().padding(8.dp), + shape = CircleShape, + color = Color(containerColor), + shadowElevation = 6.dp, + ) { + Row( + modifier = Modifier.fillMaxSize().selectableGroup(), + verticalAlignment = Alignment.CenterVertically, + ) { + tabs.forEach { tab -> + val selected = selectedTab == tab + val tint = Color(if (selected) selectedColor else unselectedColor) + Box( + modifier = Modifier + .weight(1f) + .fillMaxHeight() + .clip(CircleShape) + .selectable( + selected = selected, + role = Role.Tab, + onClick = { onTabSelected(mapOf("tab" to tab)) }, + ) + .semantics { contentDescription = expandedTabTitle(tab) } + .padding(4.dp) + .background(if (selected) Color(indicatorColor) else Color.Transparent, CircleShape), + contentAlignment = Alignment.Center, + ) { + Icon( + tabIconPainter(tab), + contentDescription = null, + modifier = Modifier.size((24 * textScale).dp), + tint = tint, + ) + } + } + } + } + } + @Composable private fun rail() { // One rail surface widens in place over the list. Material's ModalWideNavigationRail @@ -232,6 +284,7 @@ class T3WorkspaceNavigationView( }, ) { val fraction = progress.coerceIn(0f, 1f) + val railShape = RoundedCornerShape(topEnd = 16.dp * fraction, bottomEnd = 16.dp * fraction) if (fraction > 0f) { Scrim( contentDescription = "Close navigation rail", @@ -243,8 +296,8 @@ class T3WorkspaceNavigationView( Modifier .fillMaxHeight() .width(lerp(RAIL_WIDTH, EXPANDED_RAIL_WIDTH, progress.coerceAtLeast(0f))) - .shadow(RAIL_SHADOW * fraction, RAIL_EXPANDED_SHAPE, clip = false) - .background(Color(containerColor), RAIL_EXPANDED_SHAPE) + .shadow(RAIL_SHADOW * fraction, railShape, clip = false) + .background(Color(containerColor), railShape) .padding(top = safeAreaTop.dp, bottom = safeAreaBottom.dp + 12.dp) .selectableGroup(), ) { @@ -267,12 +320,17 @@ class T3WorkspaceNavigationView( ) } } - newThreadButton(fraction) { - expanded = false - onNewThread(emptyMap()) + // Other tabs keep the button's slot so the destinations below never move between tabs. + if (selectedTab == "threads") { + newThreadButton(fraction) { + expanded = false + onNewThread(emptyMap()) + } + } else { + Spacer(Modifier.padding(top = 12.dp).height(FAB_SIZE)) } Spacer(Modifier.weight(1f)) - TABS.forEach { tab -> + tabs.forEach { tab -> railItem(tab, fraction) { expanded = false onTabSelected(mapOf("tab" to tab)) @@ -356,7 +414,8 @@ class T3WorkspaceNavigationView( private fun tabTitle(tab: String) = when (tab) { "threads" -> "Chats" - "pullRequests" -> "PRs" + "pullRequests" -> "Pulls" + "usage" -> "Usage" else -> "Settings" } @@ -368,6 +427,7 @@ class T3WorkspaceNavigationView( when (tab) { "threads" -> R.drawable.t3_chats "pullRequests" -> R.drawable.t3_pull_requests + "usage" -> R.drawable.t3_usage else -> R.drawable.t3_settings } ) @@ -381,7 +441,6 @@ class T3WorkspaceNavigationView( val FAB_SIZE = 48.dp val ICON_SIZE = 24.dp val RAIL_SHADOW = 6.dp - val RAIL_EXPANDED_SHAPE = RoundedCornerShape(topEnd = 16.dp, bottomEnd = 16.dp) const val DISABLED_ALPHA = 0.4f // Labels fade in over the second half of the widening, once there is room for them, and diff --git a/apps/mobile/modules/t3-native-controls/android/src/main/res/drawable/t3_usage.xml b/apps/mobile/modules/t3-native-controls/android/src/main/res/drawable/t3_usage.xml new file mode 100644 index 0000000000000..da09809d177ff --- /dev/null +++ b/apps/mobile/modules/t3-native-controls/android/src/main/res/drawable/t3_usage.xml @@ -0,0 +1,3 @@ + + + diff --git a/apps/mobile/modules/t3-native-controls/expo-module.config.json b/apps/mobile/modules/t3-native-controls/expo-module.config.json index 22fcb74a36cfb..5ff3009ef4d20 100644 --- a/apps/mobile/modules/t3-native-controls/expo-module.config.json +++ b/apps/mobile/modules/t3-native-controls/expo-module.config.json @@ -4,7 +4,8 @@ "modules": ["T3NativeControlsModule", "T3KeyboardCommandsModule"], "appDelegateSubscribers": [ "T3WorkspaceOrientationSubscriber", - "T3MenuDismissTouchGateSubscriber" + "T3MenuDismissTouchGateSubscriber", + "T3BackgroundGraceSubscriber" ] }, "android": { diff --git a/apps/mobile/modules/t3-native-controls/ios/T3BackgroundGraceSubscriber.swift b/apps/mobile/modules/t3-native-controls/ios/T3BackgroundGraceSubscriber.swift new file mode 100644 index 0000000000000..62eb5d86ad12e --- /dev/null +++ b/apps/mobile/modules/t3-native-controls/ios/T3BackgroundGraceSubscriber.swift @@ -0,0 +1,23 @@ +import ExpoModulesCore +import UIKit + +public final class T3BackgroundGraceSubscriber: ExpoAppDelegateSubscriber { + private var task = UIBackgroundTaskIdentifier.invalid + + public func applicationWillResignActive(_ application: UIApplication) { + guard task == .invalid else { return } + task = application.beginBackgroundTask(withName: "T3 connection grace") { [weak self] in + self?.endTask(application) + } + } + + public func applicationDidBecomeActive(_ application: UIApplication) { + endTask(application) + } + + private func endTask(_ application: UIApplication) { + guard task != .invalid else { return } + application.endBackgroundTask(task) + task = .invalid + } +} diff --git a/apps/mobile/modules/t3-native-controls/ios/T3KeyboardCommandsModule.swift b/apps/mobile/modules/t3-native-controls/ios/T3KeyboardCommandsModule.swift index 2d92537bf4312..549331a56bef8 100644 --- a/apps/mobile/modules/t3-native-controls/ios/T3KeyboardCommandsModule.swift +++ b/apps/mobile/modules/t3-native-controls/ios/T3KeyboardCommandsModule.swift @@ -53,7 +53,7 @@ public final class T3KeyboardCommandsView: ExpoView { input: "c", modifiers: [.command, .shift], action: #selector(copyThreadReference), - title: "Copy PR Link or Thread ID" + title: "Copy PR Link or Thread" ), enabledCommand("toggleSidebar", input: "\\", modifiers: .command, action: #selector(handleToggleSidebar), title: "Toggle Sidebar"), enabledCommand("cycleHost", input: "h", modifiers: [.command, .shift], action: #selector(cycleHost), title: "Next Machine"), diff --git a/apps/mobile/modules/t3-native-controls/ios/T3MenuDismissTouchGate.swift b/apps/mobile/modules/t3-native-controls/ios/T3MenuDismissTouchGate.swift index b8828fd28702c..5ce852de92386 100644 --- a/apps/mobile/modules/t3-native-controls/ios/T3MenuDismissTouchGate.swift +++ b/apps/mobile/modules/t3-native-controls/ios/T3MenuDismissTouchGate.swift @@ -1,13 +1,9 @@ import ExpoModulesCore -// Brings in `state` and `ignore(_:for:)` for the gate and React Native's touch handler. import UIKit.UIGestureRecognizerSubclass -/// Keeps the tap that dismisses a native menu from also pressing the React Native view under it. -/// -/// UIKit passes that tap through the menu's window-level container and only holds it back from -/// UIResponder touches, so React Native's surface touch handler still delivers a full press -/// (react-native#58983). Adapted from expo-modules-core's SystemMenuTouchGate (MIT), which Expo -/// installs only on windows hosting SwiftUI views; this covers MenuView buttons and header menus. +/// UIKit menu-dismiss taps still reach RN's surface handler (react-native#58983). +/// Adapted from expo-modules-core's SystemMenuTouchGate (MIT), which only covers SwiftUI windows; +/// this also covers MenuView buttons and header menus. final class T3MenuDismissTouchGate: UIGestureRecognizer, UIGestureRecognizerDelegate { static func install(in window: UIWindow) { guard !(window.gestureRecognizers ?? []).contains(where: { $0 is T3MenuDismissTouchGate }) else { @@ -18,7 +14,6 @@ final class T3MenuDismissTouchGate: UIGestureRecognizer, UIGestureRecognizerDele private init() { super.init(target: nil, action: nil) - // Never hold a touch back, and never give React Native's handler a reason to cancel. delaysTouchesEnded = false cancelsTouchesInView = false delegate = self @@ -63,7 +58,6 @@ final class T3MenuDismissTouchGate: UIGestureRecognizer, UIGestureRecognizerDele } } -/// Installs the menu dismiss gate on every window the app shows. public final class T3MenuDismissTouchGateSubscriber: ExpoAppDelegateSubscriber { public func subscriberDidRegister() { NotificationCenter.default.addObserver( diff --git a/apps/mobile/modules/t3-native-controls/ios/T3NativeControlsModule.swift b/apps/mobile/modules/t3-native-controls/ios/T3NativeControlsModule.swift index 81a892c8becf8..a5b8f7a44e3a6 100644 --- a/apps/mobile/modules/t3-native-controls/ios/T3NativeControlsModule.swift +++ b/apps/mobile/modules/t3-native-controls/ios/T3NativeControlsModule.swift @@ -3,8 +3,6 @@ import ExpoModulesCore import Security import UIKit -// Expo Modules 2.0: plain members marked @JS are bound by the macro, while the -// views and main-queue presenters stay in definition(). Both are merged. @ExpoModule("T3NativeControls") public final class T3NativeControlsModule: Module { private let presentationSources = T3PresentationSources() @@ -12,6 +10,7 @@ public final class T3NativeControlsModule: Module { private var filePresentation: T3NativeFilePresentation? public func definition() -> ModuleDefinition { + Events("videoPlaybackChange") Constants { if #available(iOS 26.0, *) { return [ @@ -34,9 +33,12 @@ public final class T3NativeControlsModule: Module { View(T3SidebarTabBarView.self) { ViewName("SidebarTabBar") - Events("onSelectionChange") - Prop("selectedIndex") { (view: T3SidebarTabBarView, value: Int) in view.selectedIndex = value } + Events("onSelectionChange", "onCompose") + Prop("tabs") { (view: T3SidebarTabBarView, value: [String]) in view.tabs = value } + Prop("selectedTab") { (view: T3SidebarTabBarView, value: String) in view.selectedTab = value } Prop("selectedColor") { (view: T3SidebarTabBarView, value: UIColor) in view.selectedColor = value } + Prop("showsCompose") { (view: T3SidebarTabBarView, value: Bool) in view.showsCompose = value } + Prop("compact") { (view: T3SidebarTabBarView, value: Bool) in view.compact = value } Prop("appearance") { (view: T3SidebarTabBarView, value: String) in view.appearance = value } } @@ -45,6 +47,10 @@ public final class T3NativeControlsModule: Module { Events("onMetricsChange") } + View(T3ScrollEdgeBleedView.self) { + ViewName("ScrollEdgeBleed") + } + AsyncFunction("presentVideo") { (url: URL, title: String, sourceIdentifier: String, identifier: String, promise: Promise) in try self.presentVideo( url: url, @@ -155,12 +161,8 @@ public final class T3NativeControlsModule: Module { } } - // The geometry request above can fail transiently (for example before the - // scene is foreground-active), so callers poll this until it settles. - // Screen bounds — not the scene's interface orientation — decide the - // answer because they match the captured framebuffer: with iPadOS - // windowing active, a floating landscape window still reports a portrait - // screen, and screenshots would come out portrait. + // Geometry requests can fail before foreground activation; callers retry until bounds match. + // Use screen bounds because iPadOS floating-window orientation can differ from the captured framebuffer. @JS @MainActor func getInterfaceOrientation() async -> String { @@ -246,10 +248,16 @@ public final class T3NativeControlsModule: Module { userInfo: [NSLocalizedDescriptionKey: "The video preview is no longer available."] ) } - let presentation = T3NativeVideoPresentation(identifier: identifier, url: url, title: title) { [weak self] error in - self?.videoPresentation = nil - if let error { promise.reject(error) } else { promise.resolve(nil) } - } + let presentation = T3NativeVideoPresentation( + identifier: identifier, url: url, title: title, + onPlaybackChange: { [weak self] isPlaying in + self?.sendEvent("videoPlaybackChange", ["identifier": identifier, "isPlaying": isPlaying]) + }, + completion: { [weak self] error in + self?.videoPresentation = nil + if let error { promise.reject(error) } else { promise.resolve(nil) } + } + ) videoPresentation = presentation presentation.present(from: presenter, sources: presentationSources, sourceIdentifier: sourceIdentifier) } diff --git a/apps/mobile/modules/t3-native-controls/ios/T3NativeFilePresentation.swift b/apps/mobile/modules/t3-native-controls/ios/T3NativeFilePresentation.swift index 641a1f4b34602..0ebc2420e77b5 100644 --- a/apps/mobile/modules/t3-native-controls/ios/T3NativeFilePresentation.swift +++ b/apps/mobile/modules/t3-native-controls/ios/T3NativeFilePresentation.swift @@ -17,7 +17,6 @@ private final class FilePreviewController: QLPreviewController { } } -/// Quick Look owns image and document controls, zooming, and source-view transitions. final class T3NativeFilePresentation: NSObject, QLPreviewControllerDataSource, QLPreviewControllerDelegate, UIAdaptivePresentationControllerDelegate { let identifier: String @@ -167,9 +166,7 @@ final class T3NativeFilePresentation: NSObject, QLPreviewControllerDataSource, try FileManager.default.moveItem(at: temporaryFile, to: download) } try Task.checkCancellation() - // Pictures and PDFs are identified by content so a misnamed file still opens correctly. - // Anything else keeps its own extension: Quick Look decides from that whether it can - // render the document (Office, iWork, RTF and more) and refuses before we present. + // Detect images and PDFs by content; preserve other extensions so Quick Look can decide support. let filename = URL(fileURLWithPath: title).lastPathComponent as NSString let originalExtension = filename.pathExtension var type: UTType? diff --git a/apps/mobile/modules/t3-native-controls/ios/T3NativePresentation.swift b/apps/mobile/modules/t3-native-controls/ios/T3NativePresentation.swift index f7e54635679b5..932ed1d0a3e5e 100644 --- a/apps/mobile/modules/t3-native-controls/ios/T3NativePresentation.swift +++ b/apps/mobile/modules/t3-native-controls/ios/T3NativePresentation.swift @@ -39,7 +39,6 @@ final class T3PresentationSourceView: ExpoView { } } -/// Sizes the containing React Native modal without replacing UIKit's sheet interaction. final class T3ContextSheetSizeView: ExpoView { var contentHeight: CGFloat = 0 { didSet { updateSheet() } diff --git a/apps/mobile/modules/t3-native-controls/ios/T3NativeVideoPresentation.swift b/apps/mobile/modules/t3-native-controls/ios/T3NativeVideoPresentation.swift index 388e12cb668c6..fa0fdcafa7c7c 100644 --- a/apps/mobile/modules/t3-native-controls/ios/T3NativeVideoPresentation.swift +++ b/apps/mobile/modules/t3-native-controls/ios/T3NativeVideoPresentation.swift @@ -7,6 +7,7 @@ final class T3NativeVideoPresentation: NSObject, AVPlayerViewControllerDelegate, private let controller = AVPlayerViewController() private let completion: (Error?) -> Void private var itemObservation: NSKeyValueObservation? + private var playbackObservation: NSKeyValueObservation? private var backgroundObserver: NSObjectProtocol? private var playbackError: Error? private var presented = false @@ -27,7 +28,8 @@ final class T3NativeVideoPresentation: NSObject, AVPlayerViewControllerDelegate, private weak var fullScreenController: UIViewController? private var embedded = false - init(identifier: String, url: URL, title: String, completion: @escaping (Error?) -> Void) { + init(identifier: String, url: URL, title: String, + onPlaybackChange: @escaping (Bool) -> Void, completion: @escaping (Error?) -> Void) { self.identifier = identifier self.completion = completion super.init() @@ -38,6 +40,12 @@ final class T3NativeVideoPresentation: NSObject, AVPlayerViewControllerDelegate, metadata.value = title as NSString item.externalMetadata = [metadata] controller.player = AVPlayer(playerItem: item) + playbackObservation = controller.player?.observe(\.timeControlStatus, options: [.new]) { player, _ in + // Waiting keeps the playback request alive through buffering and seeks. + if player.timeControlStatus != .waitingToPlayAtSpecifiedRate { + onPlaybackChange(player.timeControlStatus == .playing) + } + } controller.delegate = self controller.overrideUserInterfaceStyle = .dark controller.allowsPictureInPicturePlayback = false @@ -148,6 +156,7 @@ final class T3NativeVideoPresentation: NSObject, AVPlayerViewControllerDelegate, controller.removeFromParent() } itemObservation = nil + playbackObservation = nil controller.player = nil if let backgroundObserver { NotificationCenter.default.removeObserver(backgroundObserver) } backgroundObserver = nil diff --git a/apps/mobile/modules/t3-native-controls/ios/T3ScrollEdgeBleedView.swift b/apps/mobile/modules/t3-native-controls/ios/T3ScrollEdgeBleedView.swift new file mode 100644 index 0000000000000..cb3c9041efcc5 --- /dev/null +++ b/apps/mobile/modules/t3-native-controls/ios/T3ScrollEdgeBleedView.swift @@ -0,0 +1,167 @@ +import ExpoModulesCore +import UIKit + +/// Wraps a screen's header scroll view. Where a column pads its content away from the iPhone Duo's +/// vertical bar, this widens the scroll view under the bar, like the system apps' lists. UIKit +/// draws the header's scroll-edge effect inside the scroll view, so the blur reaches the bar while +/// the content stays in the safe area. Everything happens in UIKit layout, so folds move the blur +/// and the content together. +final class T3ScrollEdgeBleedView: ExpoView { + // Fabric recycles scroll views, so everything changed here is put back before this view leaves + // the window, which unmounting does before any recycling. + private var scrollView: UIScrollView? + private var container: UIView? + /// React Native's content view, which every row lives in. + private var content: UIView? + private var bleed = UIEdgeInsets.zero + /// Whether the scroll view currently carries this view's changes. + private var applied = false + /// React Native's clipping, saved while bleeding. React Native only rewrites it when the + /// `overflow` style changes, so it stays off while bleeding. + private var containerClipped: Bool? + + required init(appContext: AppContext? = nil) { + super.init(appContext: appContext) + #if canImport(UIKit, _version: 9127.0.85) + if #available(iOS 27.1, *) { + registerForTraitChanges(UITraitCollection.systemTraitsAffectingVerticalBarEdge) { (view: T3ScrollEdgeBleedView, _: UITraitCollection) in + view.setNeedsLayout() + } + } + #endif + } + + deinit { + MainActor.assumeIsolated { detach() } + } + + override func didMoveToWindow() { + super.didMoveToWindow() + if window == nil { detach() } else { setNeedsLayout() } + } + + override func didAddSubview(_ subview: UIView) { + super.didAddSubview(subview) + setNeedsLayout() + } + + override func willRemoveSubview(_ subview: UIView) { + if let scrollView, scrollView.isDescendant(of: subview) { detach() } + super.willRemoveSubview(subview) + } + + override func layoutSubviews() { + super.layoutSubviews() + guard window != nil, let found = findScrollView(), let parent = found.superview else { return } + if found !== scrollView { + detach() + scrollView = found + container = parent + // React Native adds one plain UIView to its scroll view and mounts every child into it. + content = found.subviews.first { type(of: $0) == UIView.self } + } + bleed = verticalBarBleed() + // Without the content view to shift back, bleeding left would move the rows under the bar. + if content == nil { bleed.left = 0 } + apply() + } + + /// How far the vertical bar's safe area reaches past this view's edge, when this view sits flush + /// against the padding its column added for it. Nothing else is bled into: not a sidebar column + /// overlapping this one, and not a notch. + private func verticalBarBleed() -> UIEdgeInsets { + guard let side = verticalBarSide() else { return .zero } + var ancestor = superview + while let view = ancestor { + let inset = side == .left ? view.safeAreaInsets.left : view.safeAreaInsets.right + if inset > 0 { + let frame = convert(bounds, to: view) + let flush = side == .left + ? abs(frame.minX - (view.bounds.minX + inset)) < 0.5 + : abs(view.bounds.maxX - inset - frame.maxX) < 0.5 + guard flush else { return .zero } + return side == .left + ? UIEdgeInsets(top: 0, left: inset, bottom: 0, right: 0) + : UIEdgeInsets(top: 0, left: 0, bottom: 0, right: inset) + } + ancestor = view.superview + } + return .zero + } + + private enum Side { case left, right } + + private func verticalBarSide() -> Side? { + // The vertical-bar API ships in the iOS 27.1 SDK (UIKit 9127.0.85); see T3LayoutMetricsView. + #if canImport(UIKit, _version: 9127.0.85) + if #available(iOS 27.1, *) { + let rtl = effectiveUserInterfaceLayoutDirection == .rightToLeft + switch traitCollection.verticalBarEdge { + case .leading: return rtl ? .right : .left + case .trailing: return rtl ? .left : .right + default: return nil + } + } + #endif + return nil + } + + /// Widening to the left would move the rows with it. Instead of a horizontal content offset, + /// which React Native rewrites on its own layout passes, the content view's bounds origin shifts + /// them back: React Native only ever sets that view's frame, which leaves its bounds origin. + /// Nothing at all is written unless this view is bleeding or undoing its bleed. + private func apply() { + guard let scrollView, let container else { return } + let bleeding = bleed != .zero + guard bleeding || applied else { return } + // React Native sizes the scroll view's component view; the UIScrollView inside follows it by + // autoresizing, so the widened frame survives React Native's own layout updates. + let frame = container.bounds.inset( + by: UIEdgeInsets(top: 0, left: -bleed.left, bottom: 0, right: -bleed.right)) + if scrollView.frame != frame { scrollView.frame = frame } + if let content, content.bounds.origin.x != -bleed.left { + content.bounds.origin.x = -bleed.left + } + if !bleeding { + if let clipped = containerClipped { + containerClipped = nil + container.layer.masksToBounds = clipped + } + } else if container.layer.masksToBounds { + // The component view clips to its own bounds, which would cut the widened scroll view back. + // The scroll view itself still clips its content. + containerClipped = containerClipped ?? true + container.layer.masksToBounds = false + } + var indicators = scrollView.verticalScrollIndicatorInsets + if indicators.right != bleed.right { + indicators.right = bleed.right + scrollView.verticalScrollIndicatorInsets = indicators + } + applied = bleeding + } + + private func detach() { + guard scrollView != nil else { return } + bleed = .zero + apply() + scrollView = nil + container = nil + content = nil + } + + /// The scroll view sits a fixed few levels down (marker, React Native's scroll view component); + /// never walk into a scroll view's content. + private func findScrollView() -> UIScrollView? { + var level: [UIView] = subviews + for _ in 0..<4 { + var next: [UIView] = [] + for view in level { + if let scrollView = view as? UIScrollView { return scrollView } + next.append(contentsOf: view.subviews) + } + level = next + } + return nil + } +} diff --git a/apps/mobile/modules/t3-native-controls/ios/T3SidebarTabBarView.swift b/apps/mobile/modules/t3-native-controls/ios/T3SidebarTabBarView.swift index 3bfd730facd17..f96c00962682c 100644 --- a/apps/mobile/modules/t3-native-controls/ios/T3SidebarTabBarView.swift +++ b/apps/mobile/modules/t3-native-controls/ios/T3SidebarTabBarView.swift @@ -1,37 +1,139 @@ import ExpoModulesCore import UIKit +private final class WorkspaceTabBar: UITabBar { + var onContentLayout: ((CGRect) -> Void)? + + override func layoutSubviews() { + super.layoutSubviews() + // iOS 26.6 doesn't copy item identifiers onto its tab buttons; the bar holds no other controls. + let identified = tabButtons(in: self) { $0.accessibilityIdentifier?.hasPrefix("workspace-tab-") == true } + let buttons = identified.isEmpty ? tabButtons(in: self) { _ in true } : identified + let row = buttons.reduce(CGRect.null) { $0.union(convert($1.bounds, from: $1)) } + if !row.isNull { onContentLayout?(row) } + } + + override func safeAreaInsetsDidChange() { + super.safeAreaInsetsDidChange() + invalidateIntrinsicContentSize() + } + + private func tabButtons(in view: UIView, matching match: (UIView) -> Bool) -> [UIView] { + view.subviews.filter { !$0.isHidden }.flatMap { subview in + if subview is UIControl, match(subview) { return [subview] } + return tabButtons(in: subview, matching: match) + } + } +} + final class T3SidebarTabBarView: ExpoView, UITabBarDelegate { let onSelectionChange = EventDispatcher() - private let tabBar = UITabBar() - var selectedIndex = 0 { didSet { updateSelection() } } + let onCompose = EventDispatcher() + private let tabBar = WorkspaceTabBar() + private let composeButton = UIButton(type: .system) + private lazy var tabBarTrailing = tabBar.trailingAnchor.constraint(equalTo: trailingAnchor) + private var itemsByTab: [String: UITabBarItem] = [:] + var tabs = ["threads", "pullRequests", "usage", "settings"] { + didSet { if tabs != oldValue { updateItems() } } + } + var selectedTab = "threads" { didSet { updateSelection() } } var selectedColor: UIColor = .systemBlue { didSet { tabBar.tintColor = selectedColor } } + var compact = false { + didSet { + tabBarTrailing.constant = showsCompose ? (compact ? -64 : -76) : 0 + tabBar.setNeedsLayout() + } + } + var showsCompose = false { + didSet { + composeButton.isHidden = !showsCompose + tabBarTrailing.constant = showsCompose ? (compact ? -64 : -76) : 0 + setNeedsLayout() + } + } var appearance = "light" { didSet { overrideUserInterfaceStyle = appearance == "dark" ? .dark : .light } } required init(appContext: AppContext? = nil) { super.init(appContext: appContext) - let iconBundle = Bundle(for: Self.self).url(forResource: "T3NativeControlIcons", withExtension: "bundle").flatMap(Bundle.init(url:)) - let pullRequestIcon = UIImage(named: "pull-request", in: iconBundle, compatibleWith: nil)?.withRenderingMode(.alwaysTemplate) - tabBar.items = [ - UITabBarItem(title: "Threads", image: tabIcon(UIImage(systemName: "text.bubble")), tag: 0), - UITabBarItem(title: "Pulls", image: tabIcon(pullRequestIcon), tag: 1), - ] - tabBar.items?.last?.accessibilityLabel = "Pull requests" - tabBar.items?.first?.selectedImage = tabIcon(UIImage(systemName: "text.bubble.fill")) tabBar.itemPositioning = .fill + // iPad's regular bar uses a compressed inline row even with fill positioning. + // This floating sidebar control needs the same full-size items as a phone bar. + if #available(iOS 17.0, *) { + tabBar.traitOverrides.horizontalSizeClass = .compact + } tabBar.delegate = self + tabBar.translatesAutoresizingMaskIntoConstraints = false addSubview(tabBar) - updateSelection() + NSLayoutConstraint.activate([ + tabBar.leadingAnchor.constraint(equalTo: leadingAnchor), + tabBarTrailing, + tabBar.bottomAnchor.constraint(equalTo: bottomAnchor), + ]) + // UIKit's floating row changes with window geometry. Follow its laid-out items + // instead of estimating their position from a second set of safe-area updates. + tabBar.onContentLayout = { [weak self] frame in self?.layoutCompose(alongside: frame) } + composeButton.accessibilityLabel = "New chat" + composeButton.addAction(UIAction { [weak self] _ in self?.onCompose() }, for: .touchUpInside) + composeButton.isHidden = true + addSubview(composeButton) + configureCompose() + prepareItems() + updateItems() } - override func layoutSubviews() { - super.layoutSubviews() - tabBar.frame = bounds + private func configureCompose() { + var configuration: UIButton.Configuration + if #available(iOS 26.0, *) { + configuration = .glass() + } else { + configuration = .gray() + } + configuration.cornerStyle = .capsule + configuration.baseForegroundColor = .label + configuration.image = tabIcon(UIImage(systemName: "square.and.pencil")) + composeButton.configuration = configuration + } + + private func prepareItems() { + let iconBundle = Bundle(for: Self.self).url(forResource: "T3NativeControlIcons", withExtension: "bundle").flatMap(Bundle.init(url:)) + let pullRequestIcon = UIImage(named: "pull-request", in: iconBundle, compatibleWith: nil)?.withRenderingMode(.alwaysTemplate) + let labels = ["threads": "Chats", "pullRequests": "PRs", "usage": "Usage", "settings": "Settings"] + let symbols = ["threads": "text.bubble", "usage": "chart.bar.xaxis", "settings": "gearshape"] + for (tab, label) in labels { + let icon = tab == "pullRequests" ? pullRequestIcon : UIImage(systemName: symbols[tab] ?? "circle") + let item = UITabBarItem(title: nil, image: tabIcon(icon), tag: 0) + item.accessibilityLabel = label + item.accessibilityIdentifier = "workspace-tab-\(tab)" + if tab == "threads" { item.selectedImage = tabIcon(UIImage(systemName: "text.bubble.fill")) } + itemsByTab[tab] = item + } + } + + private func updateItems() { + tabBar.items = tabs.enumerated().compactMap { index, tab in + guard let item = itemsByTab[tab] else { return nil } + item.tag = index + return item + } updateSelection() } + private func layoutCompose(alongside frame: CGRect) { + guard showsCompose, frame.height > 0 else { return } + let row = convert(frame, from: tabBar) + let size = row.height + 8 + composeButton.frame = CGRect(x: row.maxX + 16, y: row.midY - size / 2, width: size, height: size) + } + + override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { + if showsCompose, let target = composeButton.hitTest(convert(point, to: composeButton), with: event) { + return target + } + return tabBar.hitTest(convert(point, to: tabBar), with: event) + } + override func didMoveToWindow() { super.didMoveToWindow() updateSelection() @@ -49,12 +151,13 @@ final class T3SidebarTabBarView: ExpoView, UITabBarDelegate { } private func updateSelection() { - guard let items = tabBar.items, items.indices.contains(selectedIndex) else { return } - guard tabBar.selectedItem !== items[selectedIndex] else { return } - tabBar.selectedItem = items[selectedIndex] + guard let item = itemsByTab[selectedTab], tabBar.items?.contains(item) == true else { return } + guard tabBar.selectedItem !== item else { return } + tabBar.selectedItem = item } func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { - onSelectionChange(["index": item.tag]) + guard tabs.indices.contains(item.tag) else { return } + onSelectionChange(["tab": tabs[item.tag]]) } } diff --git a/apps/mobile/modules/t3-native-controls/ios/T3WorkspaceOrientationSubscriber.swift b/apps/mobile/modules/t3-native-controls/ios/T3WorkspaceOrientationSubscriber.swift index 8fa0a232d1008..d6f14e015e96e 100644 --- a/apps/mobile/modules/t3-native-controls/ios/T3WorkspaceOrientationSubscriber.swift +++ b/apps/mobile/modules/t3-native-controls/ios/T3WorkspaceOrientationSubscriber.swift @@ -1,7 +1,6 @@ import ExpoModulesCore import UIKit -/// Keep ordinary phones portrait-only while allowing a hinge-backed scene to rotate. public final class T3WorkspaceOrientationSubscriber: ExpoAppDelegateSubscriber { private static let hingeWindows = NSHashTable.weakObjects() @@ -13,7 +12,6 @@ public final class T3WorkspaceOrientationSubscriber: ExpoAppDelegateSubscriber { public func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { if UIDevice.current.userInterfaceIdiom == .pad { - // Keep iPad orientation policy, including portrait-only showcase captures. let orientations = Bundle.main.object(forInfoDictionaryKey: "UISupportedInterfaceOrientations~ipad") as? [String] ?? [] return orientations == ["UIInterfaceOrientationPortrait"] ? .portrait : .all } diff --git a/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/ReviewDiffCanvasDrawing.kt b/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/ReviewDiffCanvasDrawing.kt index 67579a1cad889..7a1225cd392bf 100644 --- a/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/ReviewDiffCanvasDrawing.kt +++ b/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/ReviewDiffCanvasDrawing.kt @@ -185,7 +185,8 @@ internal class ReviewDiffCanvasDrawing(context: Context) { fun prepareRows( tokens: Map>, style: DiffStyle, - width: Int + width: Int, + isCancelled: () -> Boolean = { false } ): (List) -> CodeLayoutCache { configureCodePaint(theme.text, 0, style) val paint = TextPaint(textPaint) @@ -196,7 +197,7 @@ internal class ReviewDiffCanvasDrawing(context: Context) { style.codePaddingPx * 2f ).toInt() return { rows -> - cache.apply { layout(rows, tokens, paint, style, colors, availableWidth) } + cache.apply { layout(rows, tokens, paint, style, colors, availableWidth, isCancelled) } } } @@ -218,6 +219,39 @@ internal class ReviewDiffCanvasDrawing(context: Context) { private var widthTokens: Map>? = null private var widthStyle: DiffStyle? = null private var measuredContentWidth = 0 + private var asciiCharacterWidth = 0f + private var asciiFixedPitch = false + + fun tokensChangeWidth( + previous: Map>, + next: Map>, + style: DiffStyle + ): Boolean { + if (widthStyle != style) return true + fun changed(id: String): Boolean { + val before = previous[id] + val after = next[id] + if (before == after) return false + return if (widthEntries.containsKey(id) || + before.orEmpty().any { it.fontStyle and 3 != 0 } || + after.orEmpty().any { it.fontStyle and 3 != 0 } + ) { + // Native run boundaries and fallback fonts can change advances, including ASCII italics. + before?.size != after?.size || before.orEmpty().indices.any { index -> + val old = before.orEmpty()[index] + val new = after.orEmpty()[index] + old.content != new.content || old.fontStyle and 3 != new.fontStyle and 3 + } + } else { + before != null && after != null && + before.sumOf { it.content.length } != after.sumOf { it.content.length } + } + } + val changed = next.keys.any(::changed) || previous.keys.any { it !in next && changed(it) } + // Paint-only patches must not make the next comment/viewport update remeasure rows. + if (!changed) widthTokens = next + return changed + } fun contentWidth( rows: List, @@ -233,20 +267,30 @@ internal class ReviewDiffCanvasDrawing(context: Context) { } // Comment heights and viewport resizing do not change unwrapped text widths. if (widthRows !== rows || widthTokens !== tokens || widthStyle != style) { - if (widthStyle != style) widthEntries = emptyMap() + if (widthStyle != style) { + widthEntries = emptyMap() + configureCodePaint(theme.text, 0, style) + asciiCharacterWidth = textPaint.measureText("M") + // Some system font weights resolve to proportional fallbacks even for "monospace". + val glyphs = CharArray(95) { (' '.code + it).toChar() }.concatToString() + val advances = FloatArray(glyphs.length) + textPaint.getTextWidths(glyphs, advances) + asciiFixedPitch = advances.all { it == asciiCharacterWidth } + } val next = HashMap() var widest = 0f for (row in rows) { if (row.kind != "line" && row.kind != "hunk") continue val rowTokens = if (row.kind == "line") tokens[row.id] else null - val cached = widthEntries[row.id] - val entry = if (cached?.row == row && cached.tokens == rowTokens) { - cached + val asciiWidth = asciiRowWidth(row, rowTokens) + val measured = if (asciiWidth >= 0f) { + asciiWidth } else { - WidthEntry(row, rowTokens, measureRowWidth(row, rowTokens, style)) + val entry = widthEntry(row, rowTokens, style) + next[row.id] = entry + entry.width } - next[row.id] = entry - widest = max(widest, entry.width) + widest = max(widest, measured) } widthEntries = next widthRows = rows @@ -259,6 +303,30 @@ internal class ReviewDiffCanvasDrawing(context: Context) { return measuredContentWidth } + private fun widthEntry(row: DiffRow, tokens: List?, style: DiffStyle): WidthEntry { + val cached = widthEntries[row.id] + return if (cached?.row == row && cached.tokens == tokens) { + cached + } else { + WidthEntry(row, tokens, measureRowWidth(row, tokens, style)) + } + } + + private fun asciiRowWidth(row: DiffRow, tokens: List?): Float { + val fixedPitch = asciiFixedPitch && row.kind == "line" && row.isPlainAscii + if (!fixedPitch || tokens.orEmpty().any { it.fontStyle and 3 != 0 }) { + return -1f + } + val length = if (tokens.isNullOrEmpty()) { + row.content.length + } else { + tokens.sumOf { + it.content.length + } + } + return length * asciiCharacterWidth + } + private fun measureRowWidth(row: DiffRow, tokens: List?, style: DiffStyle): Float { if (row.kind == "hunk") { configureMonospacePaint(theme.hunkText, style.hunkFontSizePx, style.hunkFontWeight) @@ -314,7 +382,6 @@ internal class ReviewDiffCanvasDrawing(context: Context) { val highlightHeight = max(4f * density, min(bottom - top - 4f * density, fontHeight)) val highlightTop = (top + bottom - highlightHeight) / 2f row.wordDiffRanges.forEach { range -> - // A wrapped row splits the highlight at each visual line boundary. lines.starts.forEachIndexed { line, lineStart -> val start = max(range.start, lineStart) val end = min(range.end, lines.end(line, Int.MAX_VALUE)) @@ -332,7 +399,6 @@ internal class ReviewDiffCanvasDrawing(context: Context) { } } - /** Draws a code row's text, or its syntax [tokens] when present, one visual line per start. */ @Suppress("LongParameterList") fun drawCode( canvas: Canvas, diff --git a/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/ReviewDiffCodeLayout.kt b/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/ReviewDiffCodeLayout.kt index dc77a84670332..770bc656de569 100644 --- a/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/ReviewDiffCodeLayout.kt +++ b/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/ReviewDiffCodeLayout.kt @@ -15,7 +15,6 @@ import android.text.style.UnderlineSpan import kotlin.math.ceil import kotlin.math.max -/** Text layout is independent of comment heights and vertical row offsets. */ internal class CodeLines( val starts: IntArray, val height: Int, @@ -35,15 +34,31 @@ internal class CodeLines( internal class CodeWrapLayout( val enabled: Boolean, - private val linesByRowId: Map + private val linesByRowId: Map, + private val asciiColumns: Int = Int.MAX_VALUE, + private val asciiLineHeight: Int = 0 ) { - fun lines(rowId: String): CodeLines = linesByRowId[rowId] ?: SINGLE_LINE - fun extraHeight(rowId: String): Int = lines(rowId).extraHeight - fun rowHeight(rowId: String, base: Int): Int = lines(rowId).let { - it.firstHeight(base) + - it.extraHeight + fun needsTokenLayout( + previous: Map>, + next: Map> + ): Boolean = linesByRowId.keys.any { previous[it] != next[it] } + + // Only visible ASCII rows need line starts; offscreen heights use the same arithmetic. + fun lines(row: DiffRow): CodeLines = linesByRowId[row.id] ?: if (enabled) { + CodeLines(IntArray(asciiLineCount(row)) { it * asciiColumns }, asciiLineHeight) + } else { + SINGLE_LINE } + private fun asciiLineCount(row: DiffRow): Int = max( + 1, + (row.content.length - 1) / asciiColumns + 1 + ) + + fun rowHeight(row: DiffRow, base: Int): Int = linesByRowId[row.id]?.let { + it.firstHeight(base) + it.extraHeight + } ?: (base + if (enabled) (asciiLineCount(row) - 1) * asciiLineHeight else 0) + companion object { private val SINGLE_LINE = CodeLines(intArrayOf(0), 0) val NONE = CodeWrapLayout(false, emptyMap()) @@ -87,14 +102,15 @@ internal class CodeLayoutCache { it.previousWidth = previousWidth } - @Suppress("LongParameterList") + @Suppress("LongParameterList", "ReturnCount") fun layout( rows: List, tokens: Map>, paint: Paint, style: DiffStyle, theme: DiffTheme, - width: Int + width: Int, + isCancelled: () -> Boolean = { false } ): CodeWrapLayout { if (!style.wordWrap || width < paint.measureText("M")) { entries = emptyMap() @@ -106,10 +122,14 @@ internal class CodeLayoutCache { previousTheme = theme previousWidth = width } + val characterWidth = paint.measureText("M") + val columns = max(1, (width / characterWidth).toInt()) + val lineHeight = ceil(paint.fontMetrics.run { descent - ascent }).toInt() val next = HashMap() val layouts = HashMap() for (row in rows) { - if (row.kind != "line") continue + if (isCancelled()) return CodeWrapLayout.NONE + if (row.kind != "line" || row.isPlainAscii) continue val rowTokens = tokens[row.id] val cached = entries[row.id] val entry = if (cached?.row == row && cached.tokens == rowTokens) { @@ -122,12 +142,10 @@ internal class CodeLayoutCache { layouts[row.id] = entry.lines } entries = next - return CodeWrapLayout(true, layouts) + return CodeWrapLayout(true, layouts, columns, lineHeight) } private fun styledCode(row: DiffRow, tokens: List?, theme: DiffTheme): CharSequence { - // The ASCII path uses the existing token drawing and rounded highlight rectangles. - if (row.content.all { it in ' '..'~' }) return row.content val text = SpannableString(row.content) var offset = 0 for (token in tokens.orEmpty()) { diff --git a/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/T3ReviewDiffModule.kt b/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/T3ReviewDiffModule.kt index ee6740cf34c3d..1291826f1c1bf 100644 --- a/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/T3ReviewDiffModule.kt +++ b/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/T3ReviewDiffModule.kt @@ -1,5 +1,6 @@ package expo.modules.t3reviewdiff +import expo.modules.kotlin.Promise import expo.modules.kotlin.modules.Module import expo.modules.kotlin.modules.ModuleDefinition @@ -49,6 +50,9 @@ class T3ReviewDiffModule : Module() { Prop("initialRowIndex") { view: T3ReviewDiffView, initialRowIndex: Double -> view.setInitialRowIndex(initialRowIndex) } + Prop("initialFileId") { view: T3ReviewDiffView, fileId: String -> + view.setInitialFileId(fileId) + } Events( "onDebug", @@ -71,8 +75,12 @@ class T3ReviewDiffModule : Module() { AsyncFunction("setTokensJson") { view: T3ReviewDiffView, tokensJson: String -> view.setTokensJson(tokensJson) } - AsyncFunction("setTokensPatchJson") { view: T3ReviewDiffView, tokensPatchJson: String -> - view.setTokensPatchJson(tokensPatchJson) + AsyncFunction("setTokensPatchJson") { + view: T3ReviewDiffView, + tokensPatchJson: String, + promise: Promise + -> + view.setTokensPatchJson(tokensPatchJson) { accepted -> promise.resolve(accepted) } } OnViewDestroys { view: T3ReviewDiffView -> diff --git a/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/T3ReviewDiffView.kt b/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/T3ReviewDiffView.kt index e39fdeb963409..801f1c1ee64e6 100644 --- a/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/T3ReviewDiffView.kt +++ b/apps/mobile/modules/t3-review-diff/android/src/main/java/expo/modules/t3reviewdiff/T3ReviewDiffView.kt @@ -33,16 +33,20 @@ class T3ReviewDiffView(context: Context, appContext: AppContext) : ExpoView(cont private val onToggleComment by EventDispatcher() private var rows: List = emptyList() private var visibleRows: List = emptyList() + private var visibleRowIndices = IntArray(0) private var collapsedFileIds: Set = emptySet() private var viewedFileIds: Set = emptySet() private var selectedRowIds: Set = emptySet() private var collapsedCommentIds: Set = emptySet() private var initialRowIndex = 0 private var pendingInitialScroll = false + private var initialFileId: String? = null + private var pendingScrollFileId: String? = null private var lastVisibleFileId: String? = null private var tokensResetKey = "" private var contentResetKey = "" - private var rowsDecodeGeneration = 0 + + @Volatile private var rowsDecodeGeneration = 0 private var tokensDecodeGeneration = 0 private val payloadDecodeExecutor = Executors.newSingleThreadExecutor() private val touchSlop = ViewConfiguration.get(context).scaledTouchSlop @@ -65,13 +69,16 @@ class T3ReviewDiffView(context: Context, appContext: AppContext) : ExpoView(cont ) ) } + canvasView.onVerticalAnchorRestored = { verticalScroller.forceFinished(true) } canvasView.onRowTap = { row, gesture, target -> handleRowTap(row, gesture, target) } + canvasView.onViewportSizeChanged = { applyPendingInitialScroll() } canvasView.onVisibleRowsChanged = { first, last -> onDebug( mapOf( "message" to "visible-range", - "firstRowIndex" to first, - "lastRowIndex" to last, + "firstRowIndex" to visibleRowIndices[first], + "lastRowIndex" to visibleRowIndices[last], + "totalRows" to rows.size, ), ) emitVisibleFile(first) @@ -92,10 +99,19 @@ class T3ReviewDiffView(context: Context, appContext: AppContext) : ExpoView(cont fun setContentResetKey(value: String) { if (contentResetKey == value) return contentResetKey = value + rowsDecodeGeneration += 1 tokensDecodeGeneration += 1 + canvasView.setViewportEventsPaused(true) + verticalScroller.forceFinished(true) + horizontalScroller.forceFinished(true) + rows = emptyList() + visibleRows = emptyList() + visibleRowIndices = IntArray(0) + canvasView.rows = emptyList() canvasView.tokensByRowId = emptyMap() lastVisibleFileId = null pendingInitialScroll = true + pendingScrollFileId = initialFileId canvasView.setVerticalOffset(0) canvasView.resetHorizontalOffsets() applyPendingInitialScroll() @@ -146,18 +162,33 @@ class T3ReviewDiffView(context: Context, appContext: AppContext) : ExpoView(cont } fun setInitialRowIndex(value: Double) { - initialRowIndex = value.toInt().coerceAtLeast(0) - pendingInitialScroll = true + initialRowIndex = value.toInt() + pendingInitialScroll = value.isFinite() && value >= 0 + canvasView.setViewportEventsPaused(true) + applyPendingInitialScroll() + } + + fun setInitialFileId(value: String) { + val nextFileId = value.takeIf { it.isNotEmpty() } + if (nextFileId == initialFileId) return + initialFileId = nextFileId + pendingScrollFileId = nextFileId + canvasView.setViewportEventsPaused(true) applyPendingInitialScroll() } fun setRowsJson(value: String) { rowsDecodeGeneration += 1 + canvasView.setViewportEventsPaused(true) val generation = rowsDecodeGeneration - val prepareLayout = canvasView.prepareRows() + val isCancelled = { generation != rowsDecodeGeneration || Thread.currentThread().isInterrupted } + val prepareLayout = canvasView.prepareRows(isCancelled) payloadDecodeExecutor.execute { - val decodedRows = parseRows(value) + if (isCancelled()) return@execute + val decodedRows = parseRows(value, isCancelled) + if (isCancelled()) return@execute val codeLayouts = prepareLayout(decodedRows) + if (isCancelled()) return@execute post { if (generation != rowsDecodeGeneration) return@post canvasView.useCodeLayouts(codeLayouts) @@ -180,7 +211,8 @@ class T3ReviewDiffView(context: Context, appContext: AppContext) : ExpoView(cont } } - fun setTokensPatchJson(value: String) { + fun setTokensPatchJson(value: String, completion: (Boolean) -> Unit) { + val contentKey = contentResetKey payloadDecodeExecutor.execute { try { val payload = JSONObject(value) @@ -189,12 +221,19 @@ class T3ReviewDiffView(context: Context, appContext: AppContext) : ExpoView(cont payload.optJSONObject("tokensByRowId") ?: JSONObject(), ) post { - if (resetKey.isNotEmpty() && resetKey != tokensResetKey) return@post + if (contentKey != contentResetKey || + (resetKey.isNotEmpty() && resetKey != tokensResetKey) + ) { + completion(false) + return@post + } if (decodedTokens.isNotEmpty()) { canvasView.tokensByRowId = canvasView.tokensByRowId + decodedTokens } + completion(true) } } catch (_: Exception) { + post { completion(false) } } } } @@ -354,17 +393,22 @@ class T3ReviewDiffView(context: Context, appContext: AppContext) : ExpoView(cont } private fun rebuildVisibleRows() { + canvasView.setViewportEventsPaused(true) val filtered = ArrayList(rows.size) + val indices = IntArray(rows.size) var currentFileCollapsed = false - rows.forEach { row -> + rows.forEachIndexed { index, row -> if (row.kind == "file") { currentFileCollapsed = collapsedFileIds.contains(row.resolvedFileId) - filtered.add(row) - } else if (!currentFileCollapsed) { + } + if (row.kind == "file" || !currentFileCollapsed) { + indices[filtered.size] = index filtered.add(row) } } visibleRows = filtered + // JS selects highlights from the full payload, including collapsed rows. + visibleRowIndices = indices.copyOf(filtered.size) canvasView.rows = filtered canvasView.viewedFileIds = viewedFileIds canvasView.selectedRowIds = selectedRowIds @@ -411,10 +455,20 @@ class T3ReviewDiffView(context: Context, appContext: AppContext) : ExpoView(cont } private fun applyPendingInitialScroll() { - if (!pendingInitialScroll || visibleRows.isEmpty()) return - pendingInitialScroll = false - val index = initialRowIndex.coerceIn(0, visibleRows.lastIndex) - post { canvasView.setVerticalOffset(canvasView.rowTop(index)) } + if (visibleRows.isEmpty() || canvasView.width <= 0 || canvasView.height <= 0) return + val fileId = pendingScrollFileId + if (fileId != null) { + val index = visibleRows.indexOfFirst { it.kind == "file" && it.resolvedFileId == fileId } + if (index < 0) return + pendingScrollFileId = null + pendingInitialScroll = false + canvasView.setVerticalOffset(canvasView.rowTop(index)) + } else if (pendingInitialScroll) { + pendingInitialScroll = false + val index = initialRowIndex.coerceIn(0, visibleRows.lastIndex) + canvasView.setVerticalOffset(canvasView.rowTop(index)) + } + canvasView.setViewportEventsPaused(false) } private fun scrollToY(y: Int, animated: Boolean) { @@ -429,6 +483,7 @@ class T3ReviewDiffView(context: Context, appContext: AppContext) : ExpoView(cont ) postInvalidateOnAnimation() } else { + verticalScroller.forceFinished(true) canvasView.setVerticalOffset(target) } } @@ -476,6 +531,7 @@ internal data class DiffRow( val commentSectionTitle: String ) { val resolvedFileId: String get() = fileId.ifEmpty { id } + val isPlainAscii: Boolean = content.all { it in ' '..'~' } } internal data class DiffWordDiffRange( @@ -710,6 +766,7 @@ private class DiffCanvasView(context: Context) : View(context) { }, ) private var rowOffsets = intArrayOf(0) + private var fileHeaderIndices = intArrayOf() private var codeWrap = CodeWrapLayout.NONE private var verticalOffset = 0 @@ -718,20 +775,26 @@ private class DiffCanvasView(context: Context) : View(context) { private var contentWidthPx = 0 private val headerPathOffsetsByFileId = mutableMapOf() private var lastVisibleRange: Pair? = null + private var viewportEventsPaused = true var rows: List = emptyList() set(value) { field = value + fileHeaderIndices = indexFileHeaders(value) headerPathOffsetsByFileId.keys.retainAll( - value.asSequence().filter { it.kind == "file" }.map { it.resolvedFileId }.toSet(), + fileHeaderIndices.map { value[it].resolvedFileId }.toSet(), ) - rebuildOffsets() + rebuildOffsets(preserveAnchor = false) } var tokensByRowId: Map> = emptyMap() set(value) { + val previous = field field = value if (style.wordWrap) { - rebuildOffsets() - } else { + // ASCII uses fixed-pitch geometry. Native layouts also carry their painted spans. + if (codeWrap.needsTokenLayout(previous, value)) { + rebuildOffsets() + } + } else if (drawing.tokensChangeWidth(previous, value, style)) { contentWidthPx = drawing.contentWidth(rows, value, style) setHorizontalOffset(horizontalOffset) } @@ -772,8 +835,11 @@ private class DiffCanvasView(context: Context) : View(context) { var onRowTap: ((DiffRow, String, RowTapTarget) -> Unit)? = null var onVisibleRowsChanged: ((Int, Int) -> Unit)? = null var onContentHeightChanged: ((Int) -> Unit)? = null + var onVerticalAnchorRestored: (() -> Unit)? = null + var onViewportSizeChanged: (() -> Unit)? = null - fun prepareRows() = drawing.prepareRows(tokensByRowId, style, width) + fun prepareRows(isCancelled: () -> Boolean = { false }) = + drawing.prepareRows(tokensByRowId, style, width, isCancelled) fun useCodeLayouts(layouts: CodeLayoutCache) { drawing.codeLayouts = layouts } @@ -787,8 +853,8 @@ private class DiffCanvasView(context: Context) : View(context) { override fun onSizeChanged(width: Int, height: Int, oldWidth: Int, oldHeight: Int) { super.onSizeChanged(width, height, oldWidth, oldHeight) - // Wrapped rows take their height from the width, so a new width is a new layout. if (style.wordWrap && width != oldWidth) layoutRows() + onViewportSizeChanged?.invoke() setVerticalOffset(verticalOffset) setHorizontalOffset(horizontalOffset) clampHeaderPathOffsets() @@ -883,20 +949,27 @@ private class DiffCanvasView(context: Context) : View(context) { } } - private fun rebuildOffsets() { - layoutRows() + private fun rebuildOffsets(preserveAnchor: Boolean = true) { + layoutRows(preserveAnchor) requestLayout() invalidate() } - private fun layoutRows() { + private fun layoutRows(preserveAnchor: Boolean = true) { + // Rows are unchanged here; their old offsets still identify the viewport's code row. + val anchorIndex = if (preserveAnchor && rows.isNotEmpty()) rowIndexAt(verticalOffset) else null + val intraRowOffset = anchorIndex?.let { verticalOffset - rowOffsets[it] } ?: 0 contentWidthPx = drawing.contentWidth(rows, tokensByRowId, style) codeWrap = drawing.codeWrapLayout(rows, tokensByRowId, style, width) rowOffsets = IntArray(rows.size + 1) rows.forEachIndexed { index, row -> rowOffsets[index + 1] = rowOffsets[index] + rowHeight(row) } - setVerticalOffset(verticalOffset) + val targetOffset = anchorIndex?.let { + rowOffsets[it] + intraRowOffset.coerceIn(0, max(0, rowOffsets[it + 1] - rowOffsets[it] - 1)) + } ?: verticalOffset + if (targetOffset != verticalOffset) onVerticalAnchorRestored?.invoke() + setVerticalOffset(targetOffset) setHorizontalOffset(horizontalOffset) clampHeaderPathOffsets() onContentHeightChanged?.invoke(rowOffsets.last()) @@ -910,25 +983,11 @@ private class DiffCanvasView(context: Context) : View(context) { } else { (124 * density).toInt() } - "line" -> codeWrap.rowHeight(row.id, style.rowHeightPx.toInt()) + "line" -> codeWrap.rowHeight(row, style.rowHeightPx.toInt()) else -> style.rowHeightPx.toInt() }.coerceAtLeast(1) - @Suppress("ReturnCount") - private fun rowIndexAt(y: Int): Int { - if (rows.isEmpty()) return 0 - var low = 0 - var high = rows.lastIndex - while (low <= high) { - val middle = (low + high) ushr 1 - when { - y < rowOffsets[middle] -> high = middle - 1 - y >= rowOffsets[middle + 1] -> low = middle + 1 - else -> return middle - } - } - return low.coerceIn(0, rows.lastIndex) - } + private fun rowIndexAt(y: Int): Int = rowIndexAtOffset(y, rowOffsets, rows.size) private fun rowHitAt(y: Float): RowHit? { stickyFileHeader(firstVisibleRow())?.let { sticky -> @@ -949,14 +1008,21 @@ private class DiffCanvasView(context: Context) : View(context) { private fun firstVisibleRow(): Int = rowIndexAt(verticalOffset) + fun setViewportEventsPaused(paused: Boolean) { + viewportEventsPaused = paused + if (paused) lastVisibleRange = null else emitVisibleRange() + } + private fun emitVisibleRange() { - if (rows.isEmpty()) return + if (viewportEventsPaused || rows.isEmpty()) return + if (width <= 0 || height <= 0) return val first = rowIndexAt(verticalOffset) val last = rowIndexAt(verticalOffset + max(1, height)) val range = first to last - if (range == lastVisibleRange) return - lastVisibleRange = range - onVisibleRowsChanged?.invoke(first, last) + if (range != lastVisibleRange) { + lastVisibleRange = range + onVisibleRowsChanged?.invoke(first, last) + } } private fun drawRow(canvas: Canvas, row: DiffRow, top: Int, bottom: Int) { @@ -1223,7 +1289,6 @@ private class DiffCanvasView(context: Context) : View(context) { } val selected = selectedRowIds.contains(row.id) if (selected) { - // Keep the diff and syntax colors intact; selection lives in the gutter. fill( canvas, withAlpha(theme.hunkText, 242), @@ -1235,7 +1300,7 @@ private class DiffCanvasView(context: Context) : View(context) { } // Wrapped rows keep the line number and first code line in the first row-height band. - val lines = codeWrap.lines(row.id) + val lines = codeWrap.lines(row) val firstLineBottom = top + lines.firstHeight(style.rowHeightPx.toInt()) drawScrollableCode(canvas, top, bottom) { codeX -> drawing.configureCodePaint(theme.text, 0, style) @@ -1287,11 +1352,13 @@ private class DiffCanvasView(context: Context) : View(context) { @Suppress("ReturnCount") private fun stickyFileHeader(firstVisibleIndex: Int): StickyFileHeader? { if (rows.isEmpty()) return null - val fileIndex = (firstVisibleIndex.coerceIn(0, rows.lastIndex) downTo 0) - .firstOrNull { rows[it].kind == "file" } - ?: return null + val rowIndex = firstVisibleIndex.coerceIn(0, rows.lastIndex) + val found = fileHeaderIndices.binarySearch(rowIndex) + val slot = if (found >= 0) found else -found - 2 + if (slot < 0) return null + val fileIndex = fileHeaderIndices[slot] val headerHeight = rowHeight(rows[fileIndex]) - val nextFileIndex = ((fileIndex + 1)..rows.lastIndex).firstOrNull { rows[it].kind == "file" } + val nextFileIndex = fileHeaderIndices.getOrNull(slot + 1) val top = nextFileIndex ?.let { min(0, rowOffsets[it] - verticalOffset - headerHeight) } ?: 0 @@ -1334,20 +1401,6 @@ private class DiffCanvasView(context: Context) : View(context) { canvas.drawLine(0f, bottom - density / 2f, width.toFloat(), bottom - density / 2f, borderPaint) } - private fun centeredBaseline(top: Int, bottom: Int, paint: Paint): Float { - val metrics = paint.fontMetrics - return (top + bottom) / 2f - (metrics.ascent + metrics.descent) / 2f - } - - private fun ellipsize(value: String, paint: Paint, width: Float): String { - if (paint.measureText(value) <= width) return value - val suffix = "..." - val available = max(0f, width - paint.measureText(suffix)) - var end = value.length - while (end > 0 && paint.measureText(value, 0, end) > available) end -= 1 - return value.substring(0, end) + suffix - } - private data class StickyFileHeader( val index: Int, val top: Int, @@ -1366,35 +1419,73 @@ private class DiffCanvasView(context: Context) : View(context) { ) } +private fun centeredBaseline(top: Int, bottom: Int, paint: Paint): Float { + val metrics = paint.fontMetrics + return (top + bottom) / 2f - (metrics.ascent + metrics.descent) / 2f +} + +// A single-line preview never shows this many characters, so longer text is cut before measuring. +private const val ELLIPSIZE_MAX_CHARS = 500 + +private fun ellipsize(value: String, paint: Paint, width: Float): String { + val truncated = value.length > ELLIPSIZE_MAX_CHARS + val capEnd = surrogateSafeEnd(value, ELLIPSIZE_MAX_CHARS) + val text = if (truncated) value.substring(0, capEnd) else value + if (!truncated && paint.measureText(text) <= width) return value + val suffix = "..." + val available = max(0f, width - paint.measureText(suffix)) + val end = surrogateSafeEnd(text, paint.breakText(text, true, available, null)) + return text.substring(0, end) + suffix +} + +private fun surrogateSafeEnd(value: String, end: Int): Int { + val splitsPair = end in 1 until value.length && + Character.isSurrogatePair(value[end - 1], value[end]) + return if (splitsPair) end - 1 else end +} + +private fun indexFileHeaders(rows: List): IntArray { + val headers = ArrayList() + rows.forEachIndexed { index, row -> + if (row.kind == "file") headers.add(index) + } + return headers.toIntArray() +} + private fun withAlpha(color: Int, alpha: Int): Int = Color.argb(alpha, Color.red(color), Color.green(color), Color.blue(color)) -private fun parseRows(value: String): List = try { - val array = JSONArray(value) - List(array.length()) { index -> - val row = array.getJSONObject(index) - DiffRow( - kind = row.optString("kind"), - id = row.optString("id"), - fileId = row.optString("fileId"), - filePath = row.optString("filePath"), - previousPath = row.optNullableString("previousPath"), - changeType = row.optString("changeType"), - additions = row.optInt("additions"), - deletions = row.optInt("deletions"), - text = row.optString("text"), - content = row.optString("content"), - change = row.optString("change", "context"), - oldLineNumber = row.optNullableInt("oldLineNumber"), - newLineNumber = row.optNullableInt("newLineNumber"), - wordDiffRanges = row.optJSONArray("wordDiffRanges")?.let(::parseWordDiffRanges).orEmpty(), - commentText = row.optString("commentText"), - commentRangeLabel = row.optString("commentRangeLabel"), - commentSectionTitle = row.optString("commentSectionTitle"), - ) +private fun parseRows(value: String): List = parseRows(value) { false } + +private fun parseRows(value: String, isCancelled: () -> Boolean): List { + return try { + val array = JSONArray(value) + List(array.length()) { index -> + if (isCancelled()) return emptyList() + val row = array.getJSONObject(index) + DiffRow( + kind = row.optString("kind"), + id = row.optString("id"), + fileId = row.optString("fileId"), + filePath = row.optString("filePath"), + previousPath = row.optNullableString("previousPath"), + changeType = row.optString("changeType"), + additions = row.optInt("additions"), + deletions = row.optInt("deletions"), + text = row.optString("text"), + content = row.optString("content"), + change = row.optString("change", "context"), + oldLineNumber = row.optNullableInt("oldLineNumber"), + newLineNumber = row.optNullableInt("newLineNumber"), + wordDiffRanges = row.optJSONArray("wordDiffRanges")?.let(::parseWordDiffRanges).orEmpty(), + commentText = row.optString("commentText"), + commentRangeLabel = row.optString("commentRangeLabel"), + commentSectionTitle = row.optString("commentSectionTitle"), + ) + } + } catch (_: Exception) { + emptyList() } -} catch (_: Exception) { - emptyList() } private fun parseWordDiffRanges(value: JSONArray): List = buildList { @@ -1464,3 +1555,19 @@ private fun JSONObject.floatDp(key: String, fallbackPx: Float, density: Float): private fun JSONObject.floatSp(key: String, fallbackPx: Float, density: Float): Float = if (has(key)) optDouble(key).toFloat() * density else fallbackPx + +@Suppress("ReturnCount") +private fun rowIndexAtOffset(y: Int, rowOffsets: IntArray, rowCount: Int): Int { + if (rowCount == 0) return 0 + var low = 0 + var high = rowCount - 1 + while (low <= high) { + val middle = (low + high) ushr 1 + when { + y < rowOffsets[middle] -> high = middle - 1 + y >= rowOffsets[middle + 1] -> low = middle + 1 + else -> return middle + } + } + return low.coerceIn(0, rowCount - 1) +} diff --git a/apps/mobile/modules/t3-review-diff/android/src/test/java/expo/modules/t3reviewdiff/ReviewDiffCodeLayoutTest.kt b/apps/mobile/modules/t3-review-diff/android/src/test/java/expo/modules/t3reviewdiff/ReviewDiffCodeLayoutTest.kt index 7c4f531fbecbb..0446997423141 100644 --- a/apps/mobile/modules/t3-review-diff/android/src/test/java/expo/modules/t3reviewdiff/ReviewDiffCodeLayoutTest.kt +++ b/apps/mobile/modules/t3-review-diff/android/src/test/java/expo/modules/t3reviewdiff/ReviewDiffCodeLayoutTest.kt @@ -91,7 +91,7 @@ class ReviewDiffCodeLayoutTest { style, theme, 280 - ).lines(row.id) + ).lines(row) val second = cache.layout( listOf(row, comment.copy(commentText = "After")), emptyMap(), @@ -99,9 +99,9 @@ class ReviewDiffCodeLayoutTest { style, theme, 280, - ).lines(row.id) + ).lines(row) assertSame(first, second) - val narrow = cache.layout(listOf(row), emptyMap(), paint, style, theme, 180).lines(row.id) + val narrow = cache.layout(listOf(row), emptyMap(), paint, style, theme, 180).lines(row) assertNotSame(first, narrow) assertTrue(narrow.extraHeight > first.extraHeight) val edited = cache.layout( @@ -111,7 +111,7 @@ class ReviewDiffCodeLayoutTest { style, theme, 180 - ).lines(row.id) + ).lines(row) assertTrue(edited.extraHeight < narrow.extraHeight) assertEquals( 0, @@ -122,7 +122,7 @@ class ReviewDiffCodeLayoutTest { style.copy(wordWrap = false), theme, 180 - ).extraHeight(row.id) + ).rowHeight(row, 0) ) } @@ -132,9 +132,9 @@ class ReviewDiffCodeLayoutTest { val row = row("漢字".repeat(30)).copy(wordDiffRanges = listOf(DiffWordDiffRange(3, 21))) val style = DiffStyle.defaults(1f).copy(wordWrap = true) val theme = DiffTheme.fallback("light") - val initial = cache.layout(listOf(row), emptyMap(), paint, style, theme, 180).lines(row.id) + val initial = cache.layout(listOf(row), emptyMap(), paint, style, theme, 180).lines(row) val tokens = mapOf(row.id to listOf(DiffToken(row.content, 0xff008800.toInt(), 2))) - val highlighted = cache.layout(listOf(row), tokens, paint, style, theme, 180).lines(row.id) + val highlighted = cache.layout(listOf(row), tokens, paint, style, theme, 180).lines(row) assertNotSame(initial, highlighted) val text = requireNotNull(highlighted.nativeLayout).text as Spanned val span = text.getSpans(0, text.length, BackgroundColorSpan::class.java).single() @@ -193,6 +193,32 @@ class ReviewDiffCodeLayoutTest { assertFresh(rows) } + @Test + fun obsoletePreparationStopsBeforeWalkingTheRemainingRows() { + val cache = CodeLayoutCache() + val row = row("漢字".repeat(100)) + val style = DiffStyle.defaults(1f).copy(wordWrap = true) + val theme = DiffTheme.fallback("light") + val displayed = cache.layout(listOf(row), emptyMap(), paint, style, theme, 280).lines(row) + val preparation = cache.copyForPreparation() + var checked = 0 + val cancelled = preparation.layout( + List(10000) { row.copy(id = "row:$it") }, + emptyMap(), + paint, + style, + theme, + 280, + isCancelled = { ++checked == 2 }, + ) + assertEquals(2, checked) + assertEquals(false, cancelled.enabled) + assertSame( + displayed, + cache.layout(listOf(row), emptyMap(), paint, style, theme, 280).lines(row) + ) + } + private fun row(content: String) = DiffRow( kind = "line", id = "line", fileId = "file", filePath = "test.ts", previousPath = null, changeType = "modified", additions = 1, deletions = 0, text = "", content = content, diff --git a/apps/mobile/modules/t3-review-diff/ios/ReviewDiffCodeLayout.swift b/apps/mobile/modules/t3-review-diff/ios/ReviewDiffCodeLayout.swift index 20aa20c2c730d..7f96dc17a25e6 100644 --- a/apps/mobile/modules/t3-review-diff/ios/ReviewDiffCodeLayout.swift +++ b/apps/mobile/modules/t3-review-diff/ios/ReviewDiffCodeLayout.swift @@ -1,5 +1,19 @@ import UIKit +/// Fixed-pitch line boundaries need no storage proportional to the text length. +struct ReviewDiffCodeLineStarts: RandomAccessCollection { + let startIndex = 0 + let endIndex: Int + let columns: Int + + init(length: Int, columns: Int?) { + self.columns = Swift.max(1, columns ?? length) + endIndex = (Swift.max(1, length) - 1) / self.columns + 1 + } + + subscript(index: Int) -> Int { index * columns } +} + /// ASCII uses fixed-pitch columns. TextKit handles shaping, tabs, and Unicode highlights. /// Pass `unboundedWidth` to lay a row out on one line for horizontal scrolling. final class ReviewDiffCodeLayout: NSObject { @@ -19,11 +33,10 @@ final class ReviewDiffCodeLayout: NSObject { return cache }() let text: String - let starts: [Int] + let starts: ReviewDiffCodeLineStarts let lineHeight: CGFloat let firstLineHeight: CGFloat let extraHeight: CGFloat - /// Widest visual line, which sizes horizontal scrolling when the row is not wrapped. let usedWidth: CGFloat private let font: UIFont private let width: CGFloat @@ -36,10 +49,10 @@ final class ReviewDiffCodeLayout: NSObject { self.width = width self.characterWidth = characterWidth lineHeight = ceil(font.lineHeight) - if text.utf8.allSatisfy({ $0 >= 32 && $0 <= 126 }) { + if Self.isPrintableASCII(text) { let length = max(1, text.utf8.count) let columns = max(1, Int(min(width / characterWidth, CGFloat(length)))) - starts = Array(stride(from: 0, to: length, by: columns)) + starts = ReviewDiffCodeLineStarts(length: length, columns: columns) firstLineHeight = font.lineHeight extraHeight = CGFloat(starts.count - 1) * lineHeight usedWidth = CGFloat(min(text.utf8.count, columns)) * characterWidth @@ -50,7 +63,7 @@ final class ReviewDiffCodeLayout: NSObject { let manager = layout.manager let container = layout.container usesNativeLayout = true - starts = [0] + starts = ReviewDiffCodeLineStarts(length: 0, columns: nil) firstLineHeight = manager.numberOfGlyphs > 0 ? manager.lineFragmentRect(forGlyphAt: 0, effectiveRange: nil).height : font.lineHeight let used = manager.usedRect(for: container) @@ -59,6 +72,10 @@ final class ReviewDiffCodeLayout: NSObject { } } + static func isPrintableASCII(_ text: String) -> Bool { + text.utf8.allSatisfy { $0 >= 32 && $0 <= 126 } + } + private func nativeLayout() -> ReviewDiffTextLayout { if let cached = Self.drawnLayouts.object(forKey: self) { return cached } let layout = ReviewDiffTextLayout() @@ -67,7 +84,6 @@ final class ReviewDiffCodeLayout: NSObject { return layout } - /// Only colors change when syntax tokens arrive; the measured text and font stay intact. func decorate(text: NSAttributedString, highlights: [NSRange], color: UIColor, version: Int) { guard usesNativeLayout else { return } let layout = nativeLayout() diff --git a/apps/mobile/modules/t3-review-diff/ios/T3ReviewDiffModule.swift b/apps/mobile/modules/t3-review-diff/ios/T3ReviewDiffModule.swift index 0b8bd70633b5a..caab10799c09f 100644 --- a/apps/mobile/modules/t3-review-diff/ios/T3ReviewDiffModule.swift +++ b/apps/mobile/modules/t3-review-diff/ios/T3ReviewDiffModule.swift @@ -61,6 +61,10 @@ public class T3ReviewDiffModule: Module { view.setInitialRowIndex(initialRowIndex) } + Prop("initialFileId") { (view: T3ReviewDiffView, fileId: String) in + view.setInitialFileId(fileId) + } + Prop("scrollEnabled") { (view: T3ReviewDiffView, enabled: Bool) in view.setScrollEnabled(enabled) } @@ -106,8 +110,10 @@ public class T3ReviewDiffModule: Module { view.setTokensJson(tokensJson) } - AsyncFunction("setTokensPatchJson") { (view: T3ReviewDiffView, tokensPatchJson: String) in - view.setTokensPatchJson(tokensPatchJson) + AsyncFunction("setTokensPatchJson") { (view: T3ReviewDiffView, tokensPatchJson: String, promise: Promise) in + view.setTokensPatchJson(tokensPatchJson) { accepted in + promise.resolve(accepted) + } } } } diff --git a/apps/mobile/modules/t3-review-diff/ios/T3ReviewDiffView.swift b/apps/mobile/modules/t3-review-diff/ios/T3ReviewDiffView.swift index 4e41fa643832f..8d8a84c406df3 100644 --- a/apps/mobile/modules/t3-review-diff/ios/T3ReviewDiffView.swift +++ b/apps/mobile/modules/t3-review-diff/ios/T3ReviewDiffView.swift @@ -170,7 +170,7 @@ private struct ReviewDiffNativeStylePayload: Decodable { let emptyStateFontWeight: String? } -private struct ReviewDiffNativeStyle { +private struct ReviewDiffNativeStyle: Equatable { let wordWrap: Bool let rowHeight: CGFloat let contentWidth: CGFloat @@ -333,6 +333,7 @@ public final class T3ReviewDiffView: ExpoView, UIScrollViewDelegate { private var tokensResetKey = "" private var contentResetKey = "" private var initialRowIndex: Int? + private var initialFileId: String? private var hasAppliedInitialRowIndex = false private var lastVisibleFileId: String? private var pendingScrollFileId: String? @@ -388,8 +389,9 @@ public final class T3ReviewDiffView: ExpoView, UIScrollViewDelegate { public override func layoutSubviews() { super.layoutSubviews() + let anchor = contentView.viewportWidth != bounds.width ? contentView.viewportRowAnchor() : nil scrollView.frame = bounds - updateContentMetrics() + updateContentMetrics(rowAnchor: anchor) } public func scrollViewDidScroll(_ scrollView: UIScrollView) { @@ -423,6 +425,7 @@ public final class T3ReviewDiffView: ExpoView, UIScrollViewDelegate { } func setRowsJson(_ rowsJson: String) { + contentView.cancelRowPreparation() rowsDecodeGeneration += 1 let generation = rowsDecodeGeneration @@ -504,11 +507,12 @@ public final class T3ReviewDiffView: ExpoView, UIScrollViewDelegate { } } - func setTokensPatchJson(_ tokensPatchJson: String) { + func setTokensPatchJson(_ tokensPatchJson: String, completion: @escaping (Bool) -> Void) { let contentResetKey = self.contentResetKey payloadDecodeQueue.async { [weak self] in guard let data = tokensPatchJson.data(using: .utf8) else { + DispatchQueue.main.async { completion(false) } return } @@ -516,27 +520,34 @@ public final class T3ReviewDiffView: ExpoView, UIScrollViewDelegate { let patch = try JSONDecoder().decode(ReviewDiffNativeTokenPatch.self, from: data) DispatchQueue.main.async { [weak self] in guard let self else { + completion(false) return } guard contentResetKey == self.contentResetKey else { + completion(false) return } // A highlighter request from the previous file can finish after the view has // already reset. Never let that stale patch roll the native token state back. if let resetKey = patch.resetKey, resetKey != self.tokensResetKey { + completion(false) return } let tokensByRowId = patch.tokensByRowId ?? [:] if tokensByRowId.isEmpty { + completion(true) return } self.contentView.mergeTokensByRowId(tokensByRowId) - if let chunkIndex = patch.chunkIndex, chunkIndex < 5 || chunkIndex.isMultiple(of: 10) { + completion(true) + if let chunkIndex = patch.chunkIndex { self.emitDebug("tokens-patch-decoded", [ + "resetKey": patch.resetKey ?? "", "chunkIndex": chunkIndex, "rows": tokensByRowId.count, + "tokens": tokensByRowId.values.reduce(0) { $0 + $1.count }, "totalRows": self.contentView.tokensByRowId.count, ]) } @@ -545,6 +556,7 @@ public final class T3ReviewDiffView: ExpoView, UIScrollViewDelegate { let message = error.localizedDescription DispatchQueue.main.async { [weak self] in self?.emitDebug("tokens-patch-decode-failed", ["error": message]) + completion(false) } } } @@ -587,13 +599,15 @@ public final class T3ReviewDiffView: ExpoView, UIScrollViewDelegate { } self.contentResetKey = contentResetKey + lastVisibleRangeDebugKey = "" + contentView.cancelRowPreparation() rowsDecodeGeneration += 1 tokensDecodeGeneration += 1 contentView.tokensByRowId = [:] rows = [] contentView.rows = [] hasAppliedInitialRowIndex = false - pendingScrollFileId = nil + pendingScrollFileId = initialFileId isProgrammaticScrollActive = false scrollView.setContentOffset(CGPoint(x: 0, y: -scrollView.contentInset.top), animated: false) updateContentMetrics() @@ -681,12 +695,23 @@ public final class T3ReviewDiffView: ExpoView, UIScrollViewDelegate { applyTheme() } - private func updateContentMetrics() { + private func updateContentMetrics(rowAnchor: ReviewDiffViewportRowAnchor? = nil) { + let anchor = rowAnchor ?? (contentView.viewportWidth != bounds.width + ? contentView.viewportRowAnchor() : nil) let style = contentView.style contentView.viewportWidth = bounds.width let height = max(bounds.height, contentView.contentHeight) let width = bounds.width scrollView.contentSize = CGSize(width: bounds.width, height: height) + if let anchor, let offset = contentView.offset(for: anchor) { + let minOffset = -scrollView.contentInset.top + let maxOffset = max(height - scrollView.bounds.height + scrollView.contentInset.bottom, minOffset) + let target = min(max(offset - scrollView.contentInset.top, minOffset), maxOffset) + if abs(target - scrollView.contentOffset.y) > 0.01 { + scrollView.setContentOffset(CGPoint(x: 0, y: target), animated: false) + if isProgrammaticScrollActive { finishVerticalScroll() } + } + } contentView.frame = CGRect( x: 0, y: scrollView.contentOffset.y, @@ -699,6 +724,7 @@ public final class T3ReviewDiffView: ExpoView, UIScrollViewDelegate { applyInitialRowIndexIfNeeded() applyPendingScrollIfNeeded() emitVisibleFileIfNeeded() + emitVisibleRange(reason: "layout") let debugKey = "\(rows.count):\(Int(bounds.width)):\(Int(bounds.height)):\(Int(contentView.contentHeight))" if debugKey != lastMetricsDebugKey { @@ -759,7 +785,8 @@ public final class T3ReviewDiffView: ExpoView, UIScrollViewDelegate { } private func emitVisibleRange(reason: String) { - guard let range = contentView.currentVisibleRowRange() else { + guard bounds.width > 0, bounds.height > 0, + let range = contentView.currentVisibleRowRange() else { return } @@ -833,6 +860,16 @@ public final class T3ReviewDiffView: ExpoView, UIScrollViewDelegate { applyPendingScrollIfNeeded() } + func setInitialFileId(_ fileId: String) { + let nextFileId = fileId.isEmpty ? nil : fileId + guard nextFileId != initialFileId else { return } + initialFileId = nextFileId + pendingScrollFileId = nextFileId + pendingScrollAnimated = false + // Apply after the prop batch and content metrics, before the first range event. + setNeedsLayout() + } + func scrollToTop(animated: Bool) { pendingScrollFileId = nil pendingScrollAnimated = false @@ -857,7 +894,6 @@ public final class T3ReviewDiffView: ExpoView, UIScrollViewDelegate { onPullToRefresh([:]) } - /// Driven from JS: set to false once the reload completes to dismiss the spinner. func setRefreshing(_ refreshing: Bool) { if refreshing { if !pullRefreshControl.isRefreshing { @@ -869,10 +905,11 @@ public final class T3ReviewDiffView: ExpoView, UIScrollViewDelegate { } private func applyStyle() { + let anchor = contentView.viewportRowAnchor() contentView.style = ReviewDiffNativeStyle .resolve(stylePayload) .applyingOverrides(rowHeight: rowHeightOverride, contentWidth: contentWidthOverride) - updateContentMetrics() + updateContentMetrics(rowAnchor: anchor) } private func updateViewportFrame() { @@ -918,7 +955,7 @@ public final class T3ReviewDiffView: ExpoView, UIScrollViewDelegate { contentView.isVerticalScrollActive = shouldAnimate scrollView.setContentOffset(CGPoint(x: 0, y: clampedOffset), animated: shouldAnimate) if !shouldAnimate { - updateViewportFrame() + finishVerticalScroll() } } @@ -964,11 +1001,77 @@ private struct ReviewDiffStickyFileHeaderTarget { let rect: CGRect } +private struct ReviewDiffViewportRowAnchor { + let rowIndex: Int + let intraRowOffset: CGFloat +} + private struct ReviewDiffScrollAnchor { let fileId: String let screenY: CGFloat } +private final class ReviewDiffRowPreparation { + private let lock = NSLock() + private var cancelled = false + + func cancel() { + lock.lock() + cancelled = true + lock.unlock() + } + + var isCancelled: Bool { + lock.lock() + defer { lock.unlock() } + return cancelled + } +} + +private struct ReviewDiffGeometryConfiguration: Equatable { + let style: ReviewDiffNativeStyle + let viewportWidth: CGFloat + let collapsedFileIds: Set + let collapsedCommentIds: Set + + func height(for row: ReviewDiffNativeRow) -> CGFloat { + if row.kind == "file" { return style.fileHeaderHeight } + if collapsedFileIds.contains(row.resolvedFileId) { return 0 } + if row.kind == "notice" { return max(style.rowHeight * 2, 44) } + if row.kind == "comment" { return collapsedCommentIds.contains(row.id) ? 44 : 124 } + return style.rowHeight + } +} + +private struct ReviewDiffRowGeometryInput { + let configuration: ReviewDiffGeometryConfiguration + let font: UIFont + let hunkFont: UIFont + let characterWidth: CGFloat + let layoutWidth: CGFloat? + let cached: [String: ReviewDiffCodeLayout] +} + +private struct ReviewDiffRowGeometry { + let offsets: [CGFloat] + let fileHeaderIndices: [Int] + let contentWidths: [String: CGFloat] + let nativeLayouts: [String: ReviewDiffCodeLayout] + let height: CGFloat + let characterWidth: CGFloat + let wrapColumns: Int? +} + +private extension ReviewDiffNativeRow { + var resolvedFileId: String { + if let fileId { return fileId } + if let range = id.range(of: ":header") ?? id.range(of: ":hunk:") ?? id.range(of: ":line:") { + return String(id[.. = [] { @@ -1035,7 +1140,6 @@ private final class ReviewDiffContentView: UIView, UIGestureRecognizerDelegate { } var viewportWidth: CGFloat = 0 { didSet { - // Wrapped rows take their height from the width, so a new width is a new layout. if style.wordWrap, viewportWidth != oldValue { rebuildRowLayout() } @@ -1061,13 +1165,20 @@ private final class ReviewDiffContentView: UIView, UIGestureRecognizerDelegate { private var tokenColorsByHex: [String: UIColor] = [:] private var tokenAttributedStringsByRowId: [String: NSAttributedString] = [:] private var codeCharacterWidth: CGFloat = 8 - /// Columns per visual line while word wrap is on; nil while code rows pan horizontally. private var codeWrapColumns: Int? - /// Text geometry survives comment height changes; width, font, and content invalidate it. private var codeLayoutsByRowId: [String: ReviewDiffCodeLayout] = [:] - private var codeLayoutWidth: CGFloat = 0 + private var codeLayoutWidth: CGFloat? private var codeLayoutFont: UIFont? private var codeDecorationVersion = 0 + private var rowPreparation: ReviewDiffRowPreparation? + private var preparedRowGeometry: ReviewDiffRowGeometry? + + private var geometryConfiguration: ReviewDiffGeometryConfiguration { + ReviewDiffGeometryConfiguration( + style: style, viewportWidth: viewportWidth, + collapsedFileIds: collapsedFileIds, collapsedCommentIds: collapsedCommentIds + ) + } private var panStartHorizontalOffset: CGFloat = 0 private var activePanFileId: String? private var activePanKind: ReviewDiffHorizontalPanKind? @@ -1095,19 +1206,7 @@ private final class ReviewDiffContentView: UIView, UIGestureRecognizerDelegate { /// Height before word wrap. Laid-out rows use height(at:), which includes wrapped lines. private func height(for row: ReviewDiffNativeRow) -> CGFloat { - if row.kind == "file" { - return style.fileHeaderHeight - } - if collapsedFileIds.contains(resolvedFileId(for: row)) { - return 0 - } - if row.kind == "notice" { - return max(style.rowHeight * 2, 44) - } - if row.kind == "comment" { - return collapsedCommentIds.contains(row.id) ? 44 : 124 - } - return style.rowHeight + geometryConfiguration.height(for: row) } /// Laid-out height, including wrapped lines. Requires a layout built from the current rows. @@ -1120,7 +1219,6 @@ private final class ReviewDiffContentView: UIView, UIGestureRecognizerDelegate { ceil(codeFont.lineHeight) } - /// Wrapped rows fill the code viewport; unwrapped rows keep one line and scroll horizontally. private func codeLayoutWidthLimit(font: UIFont) -> CGFloat? { guard style.wordWrap else { return ReviewDiffCodeLayout.unboundedWidth } let width = viewportWidth - codeStartX - style.codePadding @@ -1141,111 +1239,174 @@ private final class ReviewDiffContentView: UIView, UIGestureRecognizerDelegate { ) } - /// Shape new content on the existing decode worker before publishing rows to the UI. + // Pixel offsets cannot identify the same code row after wrapping or font changes. + func viewportRowAnchor() -> ReviewDiffViewportRowAnchor? { + let top = max(0, verticalOffset + topContentInset) + guard let index = rowIndex(at: top) else { return nil } + return ReviewDiffViewportRowAnchor(rowIndex: index, intraRowOffset: top - rowOffsets[index]) + } + + func offset(for anchor: ReviewDiffViewportRowAnchor) -> CGFloat? { + guard let frame = frameForRow(at: anchor.rowIndex), frame.height > 0 else { return nil } + let intraRowOffset = anchor.intraRowOffset < frame.height + ? anchor.intraRowOffset : max(0, frame.height - 1) + return frame.minY + intraRowOffset + } + + func cancelRowPreparation() { + rowPreparation?.cancel() + rowPreparation = nil + preparedRowGeometry = nil + } + + /// Prepare immutable geometry on the decode worker; publication only swaps its buffers. func prepareRows( _ rows: [ReviewDiffNativeRow], on queue: DispatchQueue, isCurrent: @escaping () -> Bool, completion: @escaping () -> Void ) { + cancelRowPreparation() + let preparation = ReviewDiffRowPreparation() + rowPreparation = preparation + let configuration = geometryConfiguration let font = codeFont let characterWidth = monospaceCharacterWidth(font: font) - guard let width = codeLayoutWidthLimit(font: font) else { - completion() - return - } + let width = codeLayoutWidthLimit(font: font) + let hunkFont = self.hunkFont let cached = codeLayoutWidth == width && codeLayoutFont == font ? codeLayoutsByRowId : [:] + let input = ReviewDiffRowGeometryInput( + configuration: configuration, font: font, hunkFont: hunkFont, + characterWidth: characterWidth, layoutWidth: width, cached: cached + ) queue.async { [weak self] in - var layouts: [String: ReviewDiffCodeLayout] = [:] - for row in rows where row.kind == "line" { - guard let text = row.content else { continue } - if let previous = cached[row.id], previous.text == text { - layouts[row.id] = previous - } else { - layouts[row.id] = ReviewDiffCodeLayout(text: text, font: font, width: width, characterWidth: characterWidth) - } - } + guard let geometry = Self.buildRowGeometry( + rows, input: input, isCancelled: { preparation.isCancelled } + ) else { return } DispatchQueue.main.async { [weak self] in - guard let self, isCurrent() else { return } - if self.codeFont != font || self.codeLayoutWidthLimit(font: font) != width { + guard let self, !preparation.isCancelled, isCurrent() else { return } + if self.geometryConfiguration != configuration { self.prepareRows(rows, on: queue, isCurrent: isCurrent, completion: completion) return } + self.rowPreparation = nil self.codeLayoutWidth = width self.codeLayoutFont = font - self.codeLayoutsByRowId = layouts + self.preparedRowGeometry = geometry completion() } } } private func rebuildRowLayout() { + let font = codeFont + let characterWidth = monospaceCharacterWidth(font: font) + let layoutWidth = codeLayoutWidthLimit(font: font) + let cached = codeLayoutWidth == layoutWidth && codeLayoutFont == font ? codeLayoutsByRowId : [:] + let input = ReviewDiffRowGeometryInput( + configuration: geometryConfiguration, font: font, hunkFont: hunkFont, + characterWidth: characterWidth, layoutWidth: layoutWidth, cached: cached + ) + guard let geometry = Self.buildRowGeometry(rows, input: input) else { return } + codeLayoutWidth = layoutWidth + codeLayoutFont = font + applyRowGeometry(geometry) + } + + private static func buildRowGeometry( + _ rows: [ReviewDiffNativeRow], + input: ReviewDiffRowGeometryInput, + isCancelled: () -> Bool = { false } + ) -> ReviewDiffRowGeometry? { var nextOffsets: [CGFloat] = [] var nextFileHeaderRowIndices: [Int] = [] nextOffsets.reserveCapacity(rows.count) var maxWidthsByFileId: [String: CGFloat] = [:] var nextCodeLayouts: [String: ReviewDiffCodeLayout] = [:] var offset: CGFloat = 0 - let font = codeFont - let characterWidth = monospaceCharacterWidth(font: font) - let layoutWidth = codeLayoutWidthLimit(font: font) - let wrapColumns = style.wordWrap ? layoutWidth.map { Int($0 / characterWidth) } : nil - if let layoutWidth, codeLayoutWidth != layoutWidth || codeLayoutFont != font { - codeLayoutsByRowId.removeAll() - codeLayoutWidth = layoutWidth - codeLayoutFont = font - } + let style = input.configuration.style + let characterWidth = input.characterWidth + let wrapColumns = style.wordWrap ? input.layoutWidth.map { Int($0 / characterWidth) } : nil for (index, row) in rows.enumerated() { + // Bound obsolete work without locking once per row; never read UIView state here. + if index.isMultiple(of: 256), isCancelled() { return nil } nextOffsets.append(offset) if row.kind == "file" { nextFileHeaderRowIndices.append(index) } - var rowHeight = height(for: row) - - let fileId = resolvedFileId(for: row) + var rowHeight = input.configuration.height(for: row) + let fileId = row.resolvedFileId switch row.kind { case "line": - // UTF-16 columns match the word diff ranges and the segments drawCodeLines draws. - var width = CGFloat(row.content?.utf16.count ?? 0) * characterWidth - if let layoutWidth, let content = row.content { - let cached = codeLayoutsByRowId[row.id] - let layout: ReviewDiffCodeLayout - if let cached, cached.text == content { - layout = cached - } else { - layout = ReviewDiffCodeLayout( - text: content, font: font, width: layoutWidth, characterWidth: characterWidth - ) - } - nextCodeLayouts[row.id] = layout - // Tabs and fallback glyphs are wider than one column. - width = layout.usedWidth - if rowHeight > 0 { - rowHeight = max(rowHeight, layout.firstLineHeight) + layout.extraHeight - } - } + let width = lineWidth( + for: row, input: input, wrapColumns: wrapColumns, + height: &rowHeight, layouts: &nextCodeLayouts + ) maxWidthsByFileId[fileId] = max(maxWidthsByFileId[fileId] ?? 0, width) case "hunk": - // Hunk context can hold tabs and draws in its own font, so measure what drawHunkRow draws. - maxWidthsByFileId[fileId] = max( - maxWidthsByFileId[fileId] ?? 0, - textWidth(row.text ?? "", font: hunkFont) - ) + // Hunk context can hold tabs and draws in its own font. + let width = ceil(((row.text ?? "") as NSString).size(withAttributes: [.font: input.hunkFont, .ligature: 0]).width) + maxWidthsByFileId[fileId] = max(maxWidthsByFileId[fileId] ?? 0, width) default: break } offset += rowHeight } + guard !isCancelled() else { return nil } + return ReviewDiffRowGeometry( + offsets: nextOffsets, fileHeaderIndices: nextFileHeaderRowIndices, + contentWidths: maxWidthsByFileId.mapValues { ceil($0) + style.codePadding * 2 }, + nativeLayouts: nextCodeLayouts, height: offset, + characterWidth: characterWidth, wrapColumns: wrapColumns + ) + } - codeCharacterWidth = characterWidth - codeWrapColumns = wrapColumns - codeLayoutsByRowId = nextCodeLayouts - // Measured widths are not capped, so the end of every line stays reachable by scrolling. - contentWidthsByFileId = maxWidthsByFileId.mapValues { ceil($0) + style.codePadding * 2 } - rowOffsets = nextOffsets - fileHeaderRowIndices = nextFileHeaderRowIndices - contentHeight = offset + private static func lineWidth( + for row: ReviewDiffNativeRow, + input: ReviewDiffRowGeometryInput, + wrapColumns: Int?, + height: inout CGFloat, + layouts: inout [String: ReviewDiffCodeLayout] + ) -> CGFloat { + let characterWidth = input.characterWidth + let font = input.font + var width = CGFloat(row.content?.utf16.count ?? 0) * characterWidth + if let layoutWidth = input.layoutWidth, let content = row.content { + if ReviewDiffCodeLayout.isPrintableASCII(content) { + let length = content.utf8.count + let starts = ReviewDiffCodeLineStarts(length: length, columns: wrapColumns) + width = CGFloat(min(length, starts.columns)) * characterWidth + if height > 0 { + height = max(height, font.lineHeight) + CGFloat(starts.count - 1) * ceil(font.lineHeight) + } + } else { + let layout: ReviewDiffCodeLayout + if let previous = input.cached[row.id], previous.text == content { + layout = previous + } else { + layout = ReviewDiffCodeLayout( + text: content, font: font, width: layoutWidth, characterWidth: characterWidth + ) + } + layouts[row.id] = layout + width = layout.usedWidth + if height > 0 { + height = max(height, layout.firstLineHeight) + layout.extraHeight + } + } + } + return width + } + + private func applyRowGeometry(_ geometry: ReviewDiffRowGeometry) { + codeCharacterWidth = geometry.characterWidth + codeWrapColumns = geometry.wrapColumns + codeLayoutsByRowId = geometry.nativeLayouts + contentWidthsByFileId = geometry.contentWidths + rowOffsets = geometry.offsets + fileHeaderRowIndices = geometry.fileHeaderIndices + contentHeight = geometry.height } private var codeFont: UIFont { @@ -1704,13 +1865,7 @@ private final class ReviewDiffContentView: UIView, UIGestureRecognizerDelegate { } private func resolvedFileId(for row: ReviewDiffNativeRow) -> String { - if let fileId = row.fileId { - return fileId - } - if let range = row.id.range(of: ":header") ?? row.id.range(of: ":hunk:") ?? row.id.range(of: ":line:") { - return String(row.id[.. Void ) { @@ -2448,14 +2605,13 @@ private final class ReviewDiffContentView: UIView, UIGestureRecognizerDelegate { return } - // Keep the diff and syntax colors intact; selection lives in the gutter. theme.hunkText.withAlphaComponent(0.95).setFill() context.fill(CGRect(x: 0, y: rect.minY, width: style.changeBarWidth, height: rect.height)) } private func drawWordDiffRanges( _ row: ReviewDiffNativeRow, - lineStarts: [Int], + lineStarts: ReviewDiffCodeLineStarts, firstLineRect: CGRect, context: CGContext, horizontalOffset: CGFloat @@ -2484,7 +2640,6 @@ private final class ReviewDiffContentView: UIView, UIGestureRecognizerDelegate { continue } - // A wrapped row splits the highlight at each visual line boundary. for (line, lineStart) in lineStarts.enumerated() { let lineEnd = line + 1 < lineStarts.count ? lineStarts[line + 1] : Int.max let start = max(range.start, lineStart) diff --git a/apps/mobile/modules/t3-review-diff/tests/android/.gitignore b/apps/mobile/modules/t3-review-diff/tests/android/.gitignore new file mode 100644 index 0000000000000..67bcc2f72725f --- /dev/null +++ b/apps/mobile/modules/t3-review-diff/tests/android/.gitignore @@ -0,0 +1,2 @@ +.gradle/ +build/ diff --git a/apps/mobile/modules/t3-review-diff/tests/android/README.md b/apps/mobile/modules/t3-review-diff/tests/android/README.md new file mode 100644 index 0000000000000..4211691134d69 --- /dev/null +++ b/apps/mobile/modules/t3-review-diff/tests/android/README.md @@ -0,0 +1,33 @@ +# Android native regressions + +From the repository root: + +```sh +apps/mobile/modules/t3-review-diff/tests/run-android.sh +``` + +Requires JDK 17+ (`JAVA_HOME`) and Gradle on `PATH`. Tested with JDK 17 and +Gradle 9.4.1. To use another installed Gradle or a wrapper, set +`GRADLE=/absolute/path/to/gradle` before the command. The runner resolves its own +location, so it also works from other directories. Gradle test options are +forwarded, for example `--tests '*ReviewDiffViewportTest' --rerun-tasks`. + +This standalone JVM build registers the viewport and geometry regressions and the +module's existing `android/src/test` layout suite with Gradle's `test` task. It +compiles the module's actual Android view, drawing, and layout sources. Pinned Maven dependencies supply Kotlin, Robolectric, Android API 35, +and AndroidX test classes. The first run requires access to Maven Central and +Google Maven, including Robolectric's runtime SDK download. No local Android +SDK, Expo prebuild, device, temporary checkout, or pre-extracted jars are needed. +Generated files stay in ignored `build/` and `.gradle/` directories; the HTML +report is `build/reports/tests/test/index.html`. + +The three files under `stubs/expo/modules/kotlin/` replace only Expo's context, view base class, and event +dispatcher. Events go to a per-test context instead of a React Native bridge. +This checks reset/decode ordering, stale-row removal, and viewport publication +in the real view, but does not validate Expo registration, JS event delivery, +native libraries, or device rendering. These stubs are exclusive to this +standalone build and must not be added to the production Android source set. +Geometry regressions bound sticky-header row reads, check lazy ASCII layout +retention and syntax invalidation, and compare ASCII widths against Android +paint metrics. Native shaping tests cover tabs, Unicode clusters, and styled +word-diff spans. diff --git a/apps/mobile/modules/t3-review-diff/tests/android/build.gradle b/apps/mobile/modules/t3-review-diff/tests/android/build.gradle new file mode 100644 index 0000000000000..fa067950ed044 --- /dev/null +++ b/apps/mobile/modules/t3-review-diff/tests/android/build.gradle @@ -0,0 +1,77 @@ +plugins { id 'java' } + +repositories { + mavenCentral() + google() +} + +configurations { + compiler + androidTestAars +} + +dependencies { + compiler 'org.jetbrains.kotlin:kotlin-compiler-embeddable:2.2.21' + testImplementation 'org.jetbrains.kotlin:kotlin-stdlib:2.2.21' + testImplementation 'junit:junit:4.13.2' + testImplementation('org.robolectric:robolectric:4.16.1') { + exclude group: 'androidx.test', module: 'monitor' + exclude group: 'androidx.test.espresso', module: 'espresso-idling-resource' + } + // Compile against the same API used by @Config(sdk = [35]), without a local Android SDK. + testImplementation 'org.robolectric:android-all:15-robolectric-12650502' + androidTestAars 'androidx.test:monitor:1.8.0@aar' + androidTestAars 'androidx.test.espresso:espresso-idling-resource:3.7.0@aar' + testImplementation files(layout.buildDirectory.dir('android-test-jars').map { + fileTree(it) { include '**/*.jar' } + }) +} + +// The JVM plugin cannot load classes.jar inside AndroidX AAR dependencies. +tasks.register('extractAndroidTestJars') { + inputs.files configurations.androidTestAars + outputs.dir layout.buildDirectory.dir('android-test-jars') + doLast { + configurations.androidTestAars.each { aar -> + copy { + from zipTree(aar) + include 'classes.jar' + filePermissions { unix('644') } + into layout.buildDirectory.dir("android-test-jars/${aar.name}") + } + } + } +} + +def moduleRoot = file('../..') +def sources = files( + fileTree('stubs') { include '**/*.kt' }, + fileTree('src/test/kotlin') { include '**/*.kt' }, + fileTree("${moduleRoot}/android/src/test/java") { include '**/*.kt' }, + fileTree("${moduleRoot}/android/src/main/java/expo/modules/t3reviewdiff") { + include '**/*.kt' + exclude '**/T3ReviewDiffModule.kt' + }, +) + +tasks.register('compileRegression', JavaExec) { + dependsOn 'extractAndroidTestJars' + classpath = configurations.compiler + mainClass = 'org.jetbrains.kotlin.cli.jvm.K2JVMCompiler' + inputs.files sources, configurations.testCompileClasspath + outputs.dir layout.buildDirectory.dir('regression') + doFirst { + args = [ + '-no-stdlib', '-no-reflect', '-jvm-target', '17', + '-classpath', configurations.testCompileClasspath.asPath, + '-d', layout.buildDirectory.dir('regression').get().asFile.absolutePath, + ] + sources.files.collect { it.absolutePath } + } +} + +test { + dependsOn 'compileRegression' + testClassesDirs = files(layout.buildDirectory.dir('regression')) + classpath = files(testClassesDirs, configurations.testRuntimeClasspath) + testLogging { events 'passed', 'failed'; exceptionFormat 'full' } +} diff --git a/apps/mobile/modules/t3-review-diff/tests/android/settings.gradle b/apps/mobile/modules/t3-review-diff/tests/android/settings.gradle new file mode 100644 index 0000000000000..8fc37a9c434b9 --- /dev/null +++ b/apps/mobile/modules/t3-review-diff/tests/android/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 't3-review-diff-viewport-tests' diff --git a/apps/mobile/modules/t3-review-diff/tests/android/src/test/kotlin/expo/modules/t3reviewdiff/ReviewDiffGeometryTest.kt b/apps/mobile/modules/t3-review-diff/tests/android/src/test/kotlin/expo/modules/t3reviewdiff/ReviewDiffGeometryTest.kt new file mode 100644 index 0000000000000..d6b4c7456392e --- /dev/null +++ b/apps/mobile/modules/t3-review-diff/tests/android/src/test/kotlin/expo/modules/t3reviewdiff/ReviewDiffGeometryTest.kt @@ -0,0 +1,244 @@ +package expo.modules.t3reviewdiff + +import android.graphics.Color +import android.view.View +import kotlin.math.ceil +import expo.modules.kotlin.AppContext +import org.junit.Assert.assertEquals +import org.junit.Assert.assertSame +import org.junit.Assert.assertTrue +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode + +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [35], manifest = Config.NONE) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +class ReviewDiffGeometryTest { + @Test + fun geometryChangesKeepTheVisibleRowAndClampWithinShortenedRows() { + val parent = T3ReviewDiffView(RuntimeEnvironment.getApplication(), AppContext()) + val canvas = parent.getChildAt(0) + val spec = View.MeasureSpec.makeMeasureSpec(390, View.MeasureSpec.EXACTLY) + canvas.measure(spec, spec) + canvas.layout(0, 0, 390, 600) + try { + val rows = listOf("highlights.c", "simd128.h").flatMap { file -> + listOf(row("$file:header", "").copy(kind = "file", fileId = file)) + + List(100) { line -> + row("$file:line:$line", "long native code ".repeat(line % 9 + 1)).copy(fileId = file) + } + } + call(canvas, "setRows", rows) + val index = 130 + fun position(intra: Int) { + call(canvas, "setVerticalOffset", (call(canvas, "rowTop", index) as Int) + intra) + } + fun assertPosition(intra: Int, reason: String) { + val top = call(canvas, "verticalOffset") as Int + assertEquals("$reason: visible row/file changed", index, call(canvas, "rowIndexAt", top)) + assertEquals( + "$reason: intra-row position changed", + intra, + top - (call(canvas, "rowTop", index) as Int) + ) + } + position(7) + call(parent, "scrollToY", 0, true) + val scroller = field(parent, "verticalScroller") as android.widget.OverScroller + assertTrue(!scroller.isFinished) + parent.setStyleJson("{\"wordWrap\":true}") + assertPosition(7, "wrap on") + assertTrue( + "Geometry correction must stop the old absolute scroll trajectory", + scroller.isFinished + ) + parent.computeScroll() + assertPosition(7, "after interrupted animation") + parent.setStyleJson("{\"wordWrap\":true,\"codeFontSize\":22}") + assertPosition(7, "font change") + canvas.layout(0, 0, 280, 600) + assertPosition(7, "wrapped width change") + val height = + (call(canvas, "rowTop", index + 1) as Int) - (call(canvas, "rowTop", index) as Int) + position(height - 2) + parent.setStyleJson("{\"wordWrap\":false,\"rowHeight\":24}") + val shorterHeight = + (call(canvas, "rowTop", index + 1) as Int) - (call(canvas, "rowTop", index) as Int) + assertPosition(shorterHeight - 1, "unwrap clamps inside shortened row") + parent.setContentResetKey("new-content") + parent.setStyleJson("{\"wordWrap\":true}") + assertEquals(0, call(canvas, "verticalOffset")) + } finally { + parent.cleanup() + } + } + + @Test + fun stickyHeadersUseTheHeaderIndexAndKeepPushOffAndHitTesting() { + val parent = T3ReviewDiffView(RuntimeEnvironment.getApplication(), AppContext()) + val canvas = parent.getChildAt(0) + val spec = View.MeasureSpec.makeMeasureSpec(320, View.MeasureSpec.EXACTLY) + canvas.measure(spec, spec) + canvas.layout(0, 0, 320, 320) + try { + val rows = CountingRows( + List(10000) { index -> + row("row:$index", "const value = $index").copy( + kind = if (index == 100 || index == 9000) "file" else "line", + fileId = if (index < 9000) "first" else "second", + ) + } + ) + call(canvas, "setRows", rows) + assertEquals(null, call(canvas, "stickyFileHeader", 0)) + val nextTop = call(canvas, "rowTop", 9000) as Int + call(canvas, "setVerticalOffset", nextTop - 10) + rows.reads = 0 + val sticky = requireNotNull(call(canvas, "stickyFileHeader", 8999)) + assertEquals(100, field(sticky, "index")) + assertEquals(10, field(sticky, "bottom")) + assertTrue("sticky lookup must not scan code rows: ${rows.reads}", rows.reads < 10) + val hit = requireNotNull(call(canvas, "rowHitAt", 5f)) + assertEquals("row:100", (field(hit, "row") as DiffRow).id) + val second = requireNotNull(call(canvas, "stickyFileHeader", 9000)) + assertEquals(9000, field(second, "index")) + call(canvas, "setRows", listOf(row("only", "value"))) + assertEquals(null, call(canvas, "stickyFileHeader", 0)) + } finally { + parent.cleanup() + } + } + + @Test + fun asciiSyntaxArrivalDoesNotRebuildWrappedOffsetsOrRetainPerRowLayouts() { + val parent = T3ReviewDiffView(RuntimeEnvironment.getApplication(), AppContext()) + val canvas = parent.getChildAt(0) + val spec = View.MeasureSpec.makeMeasureSpec(320, View.MeasureSpec.EXACTLY) + canvas.measure(spec, spec) + canvas.layout(0, 0, 320, 320) + try { + call(canvas, "setStyle", DiffStyle.defaults(1f).copy(wordWrap = true)) + val rows = List(10000) { row("row:$it", "const value = 123; ".repeat(10)) } + call(canvas, "setRows", rows) + val offsets = field(canvas, "rowOffsets") + call( + canvas, + "setTokensByRowId", + mapOf(rows[0].id to listOf(DiffToken(rows[0].content, 0xff008800.toInt(), 2))) + ) + assertSame("ASCII syntax must only repaint", offsets, field(canvas, "rowOffsets")) + val drawing = requireNotNull(field(canvas, "drawing")) + val cache = requireNotNull(field(drawing, "codeLayouts")) + assertEquals( + "offscreen ASCII must not retain layout objects", + 0, + (field(cache, "entries") as Map<*, *>).size + ) + } finally { + parent.cleanup() + } + } + + @Test + fun asciiWidthCacheDoesNotRetainPerRowMeasurementObjects() { + val drawing = ReviewDiffCanvasDrawing(RuntimeEnvironment.getApplication()) + val rows = List(10000) { row("row:$it", "const value = $it") } + drawing.contentWidth(rows, emptyMap(), DiffStyle.defaults(1f)) + assertEquals(0, (field(drawing, "widthEntries") as Map<*, *>).size) + } + + @Test + fun asciiWidthMatchesPaintForEverySyntaxFontAndWeight() { + val drawing = ReviewDiffCanvasDrawing(RuntimeEnvironment.getApplication()) + val content = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ" + + "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" + val row = row("ascii", content) + for (weight in listOf("regular", "medium", "bold")) { + val style = DiffStyle.defaults(1f).copy(codeFontWeight = weight, codeFontSizePx = 17f) + for (fontStyle in 0..7) { + drawing.configureCodePaint(Color.RED, fontStyle, style) + val expected = ceil( + style.changeBarWidthPx + style.gutterWidthPx + style.codePaddingPx * 2f + + drawing.textPaint.measureText(content), + ).toInt() + val tokens = mapOf(row.id to listOf(DiffToken(content, Color.RED, fontStyle))) + assertEquals( + "weight=$weight style=$fontStyle", + expected, + drawing.contentWidth(listOf(row), tokens, style) + ) + val recolored = mapOf(row.id to listOf(DiffToken(content, Color.BLUE, fontStyle xor 4))) + assertEquals(false, drawing.tokensChangeWidth(tokens, recolored, style)) + } + } + } + + @Test + fun lazyAsciiHeightAndLineStartsMatchTheExistingLayoutAtEveryBoundary() { + val drawing = ReviewDiffCanvasDrawing(RuntimeEnvironment.getApplication()) + val style = DiffStyle.defaults(1f).copy(wordWrap = true, codeFontSizePx = 17f) + drawing.configureCodePaint(Color.BLACK, 0, style) + val paint = android.text.TextPaint(drawing.textPaint) + val cache = CodeLayoutCache() + for (width in listOf(120, 180, 280, 420)) { + for (length in listOf(0, 1, 13, 14, 15, 1000)) { + val row = row("ascii", "a".repeat(length)) + val expected = createCodeLines(row.content, paint, width) + val wrapped = cache.layout( + listOf(row), + emptyMap(), + paint, + style, + DiffTheme.fallback("light"), + width + ) + assertTrue(expected.starts.contentEquals(wrapped.lines(row).starts)) + assertEquals(expected.firstHeight(24) + expected.extraHeight, wrapped.rowHeight(row, 24)) + } + } + } + + @Test + fun unwrappedColorAndUnderlinePatchesDoNotReadOffscreenRows() { + val parent = T3ReviewDiffView(RuntimeEnvironment.getApplication(), AppContext()) + val canvas = parent.getChildAt(0) + try { + val rows = CountingRows(List(10000) { row("row:$it", "const value = $it") }) + call(canvas, "setRows", rows) + val content = rows[0].content + rows.reads = 0 + call(canvas, "setTokensByRowId", mapOf("row:0" to listOf(DiffToken(content, Color.RED, 0)))) + call(canvas, "setTokensByRowId", mapOf("row:0" to listOf(DiffToken(content, Color.BLUE, 4)))) + assertEquals(0, rows.reads) + } finally { + parent.cleanup() + } + } + + private fun call(target: Any, name: String, vararg args: Any): Any? = target.javaClass + .declaredMethods.single { it.name == name && it.parameterCount == args.size } + .apply { isAccessible = true }.invoke(target, *args) + + private fun field(target: Any, name: String): Any? = target.javaClass.getDeclaredField(name) + .apply { isAccessible = true }.get(target) + + private fun row(id: String, content: String) = DiffRow( + kind = "line", id = id, fileId = "file", filePath = "test.ts", previousPath = null, + changeType = "modified", additions = 1, deletions = 0, text = "", content = content, + change = "add", oldLineNumber = null, newLineNumber = 1, wordDiffRanges = emptyList(), + commentText = "", commentRangeLabel = "", commentSectionTitle = "", + ) + + private class CountingRows(private val rows: List) : AbstractList() { + var reads = 0 + override val size: Int get() = rows.size + override fun get(index: Int): DiffRow { + reads += 1 + return rows[index] + } + } +} diff --git a/apps/mobile/modules/t3-review-diff/tests/android/src/test/kotlin/expo/modules/t3reviewdiff/ReviewDiffViewportTest.kt b/apps/mobile/modules/t3-review-diff/tests/android/src/test/kotlin/expo/modules/t3reviewdiff/ReviewDiffViewportTest.kt new file mode 100644 index 0000000000000..4a39467cbdc26 --- /dev/null +++ b/apps/mobile/modules/t3-review-diff/tests/android/src/test/kotlin/expo/modules/t3reviewdiff/ReviewDiffViewportTest.kt @@ -0,0 +1,233 @@ +package expo.modules.t3reviewdiff + +import android.app.Activity +import android.graphics.Bitmap +import android.graphics.Canvas +import android.os.Looper +import android.view.View +import expo.modules.kotlin.AppContext +import java.util.concurrent.AbstractExecutorService +import java.util.concurrent.TimeUnit +import org.json.JSONArray +import org.json.JSONObject +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.Robolectric +import org.robolectric.RobolectricTestRunner +import org.robolectric.Shadows.shadowOf +import org.robolectric.annotation.Config + +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [35], manifest = Config.NONE) +class ReviewDiffViewportTest { + @Test + fun immediateNavigationStopsAnActiveFling() { + val activity = Robolectric.buildActivity(Activity::class.java).setup().get() + val view = T3ReviewDiffView(activity, AppContext()) + val scroller = view.javaClass.getDeclaredField("verticalScroller").apply { + isAccessible = true + }.get(view) as android.widget.OverScroller + try { + scroller.fling(0, 100, 0, 2000, 0, 0, 0, 10000) + assertTrue(!scroller.isFinished) + view.scrollToTop(false) + view.computeScroll() + val canvas = view.getChildAt(0) + val offset = canvas.javaClass.getDeclaredMethod("verticalOffset").apply { + isAccessible = true + }.invoke(canvas) + assertEquals(0, offset) + assertTrue(scroller.isFinished) + } finally { + view.cleanup() + activity.finish() + } + } + + @Test + fun resetDiscardsOldRowsAndPendingDecodeBeforePublishingTheNewDestination() { + val activity = Robolectric.buildActivity(Activity::class.java).setup().get() + val appContext = AppContext() + val view = T3ReviewDiffView(activity, appContext) + val decoder = ManualDecoder() + view.javaClass.getDeclaredField("payloadDecodeExecutor").apply { isAccessible = true } + .set(view, decoder) + activity.setContentView(view) + val canvas = view.getChildAt(0) + val measure = View.MeasureSpec.makeMeasureSpec(320, View.MeasureSpec.EXACTLY) + canvas.measure(measure, measure) + canvas.layout(0, 0, 320, 320) + val bitmap = Bitmap.createBitmap(320, 320, Bitmap.Config.ARGB_8888) + try { + view.setInitialFileId("old-selected") + view.setRowsJson(rows("old-selected")) + decoder.completeNext() + canvas.draw(Canvas(bitmap)) + assertEquals(900, ranges(appContext).first()["firstRowIndex"]) + appContext.events.clear() + + // This decode belongs to the old content, but completes after the reset. + view.setRowsJson(rows("old-selected")) + view.setContentResetKey("new-content") + view.setInitialFileId("new-selected") + canvas.draw(Canvas(bitmap)) + assertTrue( + "reset must not publish the previous payload's top range", + ranges(appContext).isEmpty() + ) + assertEquals(0, rowTop(canvas, 1)) + decoder.completeNext() + canvas.draw(Canvas(bitmap)) + assertTrue( + "a stale decode must not restore old rows or publish a range", + ranges(appContext).isEmpty() + ) + assertEquals(0, rowTop(canvas, 1)) + + view.setRowsJson(rows("new-selected")) + decoder.completeNext() + canvas.draw(Canvas(bitmap)) + assertEquals(1, ranges(appContext).size) + assertEquals(900, ranges(appContext).single()["firstRowIndex"]) + assertEquals(1000, ranges(appContext).single()["totalRows"]) + } finally { + view.cleanup() + bitmap.recycle() + activity.finish() + appContext.events.clear() + } + } + + @Test + fun decodedRowsWaitForTheReplacementFilePropBeforePublishingAViewport() { + val activity = Robolectric.buildActivity(Activity::class.java).setup().get() + val appContext = AppContext() + val view = T3ReviewDiffView(activity, appContext) + val decoder = ManualDecoder() + view.javaClass.getDeclaredField("payloadDecodeExecutor").apply { isAccessible = true } + .set(view, decoder) + activity.setContentView(view) + val canvas = view.getChildAt(0) + val measure = View.MeasureSpec.makeMeasureSpec(320, View.MeasureSpec.EXACTLY) + canvas.measure(measure, measure) + canvas.layout(0, 0, 320, 320) + try { + view.setInitialFileId("old-selected") + view.setRowsJson(rows("old-selected")) + decoder.completeNext() + appContext.events.clear() + + view.setContentResetKey("new-content") + view.setRowsJson(rows("new-selected")) + decoder.completeNext() + // Other props can rebuild layout while the destination still names the old payload. + view.setCollapsedFileIdsJson("[]") + view.setStyleJson("{}") + view.setInitialRowIndex(-1.0) + assertTrue( + "decoded rows must wait for a resolvable destination", + ranges(appContext).isEmpty() + ) + + view.setInitialFileId("new-selected") + assertEquals(900, ranges(appContext).single()["firstRowIndex"]) + assertEquals(1000, ranges(appContext).single()["totalRows"]) + } finally { + view.cleanup() + activity.finish() + appContext.events.clear() + } + } + + @Test + fun collapsedFilesKeepViewportIndicesInTheFullPayload() { + val activity = Robolectric.buildActivity(Activity::class.java).setup().get() + val appContext = AppContext() + val view = T3ReviewDiffView(activity, appContext) + val decoder = ManualDecoder() + view.javaClass.getDeclaredField("payloadDecodeExecutor").apply { isAccessible = true } + .set(view, decoder) + activity.setContentView(view) + val canvas = view.getChildAt(0) + val measure = View.MeasureSpec.makeMeasureSpec(320, View.MeasureSpec.EXACTLY) + canvas.measure(measure, measure) + canvas.layout(0, 0, 320, 320) + try { + view.setRowsJson(rows("expanded-file", 100001, 100226)) + decoder.completeNext() + assertEquals(0, ranges(appContext).last()["firstRowIndex"]) + assertTrue((ranges(appContext).last()["lastRowIndex"] as Int) < 100001) + appContext.events.clear() + + view.setCollapsedFileIdsJson("[\"first-file\"]") + val collapsedRange = ranges(appContext).single() + assertEquals("the collapsed file header stays visible", 0, collapsedRange["firstRowIndex"]) + assertTrue( + "the following expanded file must be addressed in the full payload", + (collapsedRange["lastRowIndex"] as Int) > 100001 + ) + assertEquals(100226, collapsedRange["totalRows"]) + appContext.events.clear() + + view.setInitialFileId("expanded-file") + assertEquals(100001, ranges(appContext).last()["firstRowIndex"]) + assertEquals( + "expanded-file", + appContext.events.last { it.first == "onVisibleFileChange" }.second["fileId"] + ) + appContext.events.clear() + + view.setCollapsedFileIdsJson("[]") + view.setInitialFileId("first-file") + assertEquals(0, ranges(appContext).last()["firstRowIndex"]) + assertTrue((ranges(appContext).last()["lastRowIndex"] as Int) < 100001) + } finally { + view.cleanup() + activity.finish() + appContext.events.clear() + } + } + + private fun rowTop(canvas: View, index: Int): Int = canvas.javaClass + .getDeclaredMethod("rowTop", Int::class.javaPrimitiveType).apply { isAccessible = true } + .invoke(canvas, index) as Int + + private fun ranges(appContext: AppContext) = appContext.events + .filter { (name, payload) -> name == "onDebug" && payload["message"] == "visible-range" } + .map { it.second } + + private fun rows( + selectedFileId: String, + selectedStart: Int = 900, + count: Int = 1000 + ): String = JSONArray().apply { + for (index in 0 until count) { + put( + JSONObject().apply { + put("id", "$selectedFileId:$index") + put("kind", if (index == 0 || index == selectedStart) "file" else "line") + put("fileId", if (index < selectedStart) "first-file" else selectedFileId) + put("content", "const value = $index") + } + ) + } + }.toString() + + private class ManualDecoder : AbstractExecutorService() { + private val work = ArrayDeque() + override fun execute(command: Runnable) { + work.addLast(command) + } + fun completeNext() { + work.removeFirst().run() + shadowOf(Looper.getMainLooper()).idle() + } + override fun shutdown() = Unit + override fun shutdownNow(): MutableList = mutableListOf() + override fun isShutdown() = false + override fun isTerminated() = false + override fun awaitTermination(timeout: Long, unit: TimeUnit) = true + } +} diff --git a/apps/mobile/modules/t3-review-diff/tests/android/stubs/expo/modules/kotlin/AppContext.kt b/apps/mobile/modules/t3-review-diff/tests/android/stubs/expo/modules/kotlin/AppContext.kt new file mode 100644 index 0000000000000..88a47d2d2ed3d --- /dev/null +++ b/apps/mobile/modules/t3-review-diff/tests/android/stubs/expo/modules/kotlin/AppContext.kt @@ -0,0 +1,6 @@ +package expo.modules.kotlin + +// Per-view event sink for the isolated JVM harness; no React Native bridge is loaded. +class AppContext { + val events = mutableListOf>>() +} diff --git a/apps/mobile/modules/t3-review-diff/tests/android/stubs/expo/modules/kotlin/viewevent/EventDispatcher.kt b/apps/mobile/modules/t3-review-diff/tests/android/stubs/expo/modules/kotlin/viewevent/EventDispatcher.kt new file mode 100644 index 0000000000000..fff408e4c5e6e --- /dev/null +++ b/apps/mobile/modules/t3-review-diff/tests/android/stubs/expo/modules/kotlin/viewevent/EventDispatcher.kt @@ -0,0 +1,15 @@ +package expo.modules.kotlin.viewevent + +import expo.modules.kotlin.views.ExpoView +import kotlin.properties.ReadOnlyProperty +import kotlin.reflect.KProperty + +@Suppress("FunctionName") +fun ExpoView.EventDispatcher() = object : ReadOnlyProperty) -> Unit> { + override fun getValue( + thisRef: ExpoView, + property: KProperty<*> + ): (Map) -> Unit = { payload -> + thisRef.appContext.events.add(property.name to payload) + } +} diff --git a/apps/mobile/modules/t3-review-diff/tests/android/stubs/expo/modules/kotlin/views/ExpoView.kt b/apps/mobile/modules/t3-review-diff/tests/android/stubs/expo/modules/kotlin/views/ExpoView.kt new file mode 100644 index 0000000000000..d65b9f412abcb --- /dev/null +++ b/apps/mobile/modules/t3-review-diff/tests/android/stubs/expo/modules/kotlin/views/ExpoView.kt @@ -0,0 +1,7 @@ +package expo.modules.kotlin.views + +import android.content.Context +import android.widget.FrameLayout +import expo.modules.kotlin.AppContext + +open class ExpoView(context: Context, val appContext: AppContext) : FrameLayout(context) diff --git a/apps/mobile/modules/t3-review-diff/tests/ios/anchor.swift b/apps/mobile/modules/t3-review-diff/tests/ios/anchor.swift new file mode 100644 index 0000000000000..40bde07fc5b03 --- /dev/null +++ b/apps/mobile/modules/t3-review-diff/tests/ios/anchor.swift @@ -0,0 +1,53 @@ +// Exercise the real UIScrollView/geometry update path with a preceding large file. +private extension T3ReviewDiffView { + func checkRowAnchoring() throws { + frame = CGRect(x: 0, y: 0, width: 390, height: 600) + layoutSubviews() + setContentInsetTop(80) + let fixture = ["highlights.c", "simd128.h"].flatMap { file in + [["kind": "file", "id": "\(file):header", "fileId": file]] + (0..<100).map { line in + ["kind": "line", "id": "\(file):line:\(line)", "fileId": file, + "content": String(repeating: "long native code ", count: line % 9 + 1)] + } + } + rows = try JSONDecoder().decode([ReviewDiffNativeRow].self, from: JSONSerialization.data(withJSONObject: fixture)) + contentView.rows = rows + updateContentMetrics() + let index = 130 + func position(_ intra: CGFloat) { + setVerticalContentOffset(contentView.frameForRow(at: index)!.minY + intra, animated: false) + } + func assertPosition(_ intra: CGFloat, _ reason: String) { + let frame = contentView.frameForRow(at: index)! + let top = scrollView.contentOffset.y + scrollView.contentInset.top + check(top >= frame.minY && top < frame.maxY, "\(reason): visible row/file changed across geometry update") + check(abs(top - frame.minY - intra) < 0.01, "\(reason): intra-row position changed") + check(contentView.verticalOffset == scrollView.contentOffset.y, "Viewport and UIScrollView must agree") + } + position(7) + isProgrammaticScrollActive = true + contentView.isVerticalScrollActive = true + setStyleJson("{\"wordWrap\":true}") + assertPosition(7, "wrap on") + check(!isProgrammaticScrollActive && !contentView.isVerticalScrollActive, + "Anchor restoration must finish an interrupted programmatic scroll") + setStyleJson("{\"wordWrap\":true,\"codeFontSize\":22}") + assertPosition(7, "font change") + frame.size.width = 280 + layoutSubviews() + assertPosition(7, "wrapped width change") + position(contentView.frameForRow(at: index)!.height - 2) + setStyleJson("{\"wordWrap\":false,\"rowHeight\":24}") + let height = contentView.frameForRow(at: index)!.height + assertPosition(height - 1, "unwrap clamps inside shortened row") + setInitialFileId("simd128.h") + layoutSubviews() + check(abs(scrollView.contentOffset.y + scrollView.contentInset.top - contentView.fileHeaderOffset(forFileId: "simd128.h")!) < 0.01, + "Explicit initial-file navigation must win over geometry anchoring") + setContentResetKey("new-content") + setStyleJson("{\"wordWrap\":true}") + check(rows.isEmpty && scrollView.contentOffset.y == -80, "Reset must discard the old anchor") + print("Passed viewport row anchors for wrap, font, width, intra-row clamp, initial file, and reset") + } +} +try T3ReviewDiffView().checkRowAnchoring() diff --git a/apps/mobile/modules/t3-review-diff/tests/ios/geometry.swift b/apps/mobile/modules/t3-review-diff/tests/ios/geometry.swift new file mode 100644 index 0000000000000..bd213f694f0c7 --- /dev/null +++ b/apps/mobile/modules/t3-review-diff/tests/ios/geometry.swift @@ -0,0 +1,137 @@ +// Geometry tests exercise the production content view without an Expo app or device. +private extension ReviewDiffContentView { + func checkSparseGeometry(expectedNativeRows: Int) { + check(codeLayoutsByRowId.count == expectedNativeRows, + "Offscreen ASCII must not retain per-row layout objects or wrap-start arrays (retained \(codeLayoutsByRowId.count))") + } + + func checkReferenceGeometry() { + let font = codeFont + let characterWidth = monospaceCharacterWidth(font: font) + let width = codeLayoutWidthLimit(font: font) + var offset: CGFloat = 0 + var widths: [String: CGFloat] = [:] + for (index, row) in rows.enumerated() { + check(rowOffsets[index] == offset, "Wrapped offsets changed for \(row.id)") + var rowHeight = height(for: row) + if row.kind == "line", let width, let content = row.content { + let reference = ReviewDiffCodeLayout(text: content, font: font, width: width, characterWidth: characterWidth) + if rowHeight > 0 { + rowHeight = max(rowHeight, reference.firstLineHeight) + reference.extraHeight + } + widths[row.resolvedFileId] = max(widths[row.resolvedFileId] ?? 0, reference.usedWidth) + } else if row.kind == "hunk" { + widths[row.resolvedFileId] = max(widths[row.resolvedFileId] ?? 0, textWidth(row.text ?? "", font: hunkFont)) + } + check(height(at: index) == rowHeight, "Row height changed for \(row.id)") + if rowHeight > 0 { + check(rowIndex(at: offset + rowHeight / 2) == index, "Hit testing must use the published wrapped offsets") + } + offset += rowHeight + } + check(contentHeight == offset, "Content height must include every row") + check(contentWidthsByFileId == widths.mapValues { ceil($0) + style.codePadding * 2 }, + "The end of every unwrapped line must remain reachable") + } + + func preparedOffsetAddress() -> UInt { + guard let geometry = preparedRowGeometry else { fatalError("Geometry was not prepared") } + return geometry.offsets.withUnsafeBufferPointer { UInt(bitPattern: $0.baseAddress) } + } + + func checkPublishedOffsetAddress(_ address: UInt) { + check(rowOffsets.withUnsafeBufferPointer { UInt(bitPattern: $0.baseAddress) } == address, + "Publication must reuse the prepared offsets without rebuilding on the UI thread") + } + + func checkCancellationInsideLoop() { + var checks = 0 + let input = ReviewDiffRowGeometryInput( + configuration: geometryConfiguration, font: codeFont, hunkFont: hunkFont, + characterWidth: codeCharacterWidth, layoutWidth: codeLayoutWidthLimit(font: codeFont), cached: [:] + ) + let geometry = Self.buildRowGeometry( + rows, input: input, isCancelled: { + checks += 1 + return checks == 2 + } + ) + check(geometry == nil && checks == 2, "Obsolete work must abort at the next batch, before visiting every row") + } +} + +private let geometryRows = try JSONDecoder().decode([ReviewDiffNativeRow].self, from: JSONSerialization.data(withJSONObject: + [["kind": "file", "id": "a:header", "fileId": "a"], + ["kind": "hunk", "id": "a:hunk:0", "fileId": "a", "text": "@@ context\twith tabs @@"]] + (0..<4096).map { index in + ["kind": "line", "id": "a:line:\(index)", "fileId": "a", + "content": String(repeating: "printable ASCII ", count: index % 30), "newLineNumber": index + 1] + } + [["kind": "line", "id": "a:unicode", "fileId": "a", "content": "漢字\t👨‍👩‍👧‍👦"], + ["kind": "comment", "id": "a:comment", "fileId": "a"], + ["kind": "file", "id": "b:header", "fileId": "b"], + ["kind": "line", "id": "b:line:0", "fileId": "b", "content": "e\u{301}\tمرحبا"]] +)) +private let geometryView = ReviewDiffContentView(frame: CGRect(x: 0, y: 0, width: 390, height: 844)) +private func geometryStyle(wrap: Bool, fontSize: Int = 12, weight: String = "regular", rowHeight: Int = 24) throws -> ReviewDiffNativeStyle { + let payload = try JSONDecoder().decode(ReviewDiffNativeStylePayload.self, from: Data( + "{\"wordWrap\":\(wrap),\"codeFontSize\":\(fontSize),\"codeFontWeight\":\"\(weight)\",\"rowHeight\":\(rowHeight)}".utf8 + )) + return ReviewDiffNativeStyle.resolve(payload) +} +geometryView.style = try geometryStyle(wrap: true) +geometryView.viewportWidth = 390 +geometryView.rows = geometryRows +geometryView.checkSparseGeometry(expectedNativeRows: 2) +geometryView.checkReferenceGeometry() +geometryView.checkCancellationInsideLoop() +for width: CGFloat in [400, 280] { + geometryView.viewportWidth = width + geometryView.checkReferenceGeometry() +} +geometryView.collapsedFileIds = ["b"] +geometryView.collapsedCommentIds = ["a:comment"] +geometryView.checkReferenceGeometry() +geometryView.style = try geometryStyle(wrap: true, fontSize: 28, weight: "bold", rowHeight: 8) +geometryView.checkReferenceGeometry() +geometryView.style = try geometryStyle(wrap: false) +geometryView.checkReferenceGeometry() +geometryView.collapsedFileIds = [] +geometryView.collapsedCommentIds = [] +geometryView.style = try geometryStyle(wrap: true) +geometryView.checkReferenceGeometry() +let originalHeight = geometryView.contentHeight +geometryView.mergeTokensByRowId(["a:line:29": [ReviewDiffNativeToken(content: geometryRows[31].content ?? "", color: "#ff0000", fontStyle: 3)]]) +geometryView.selectedRowIds = ["a:line:29"] +check(geometryView.contentHeight == originalHeight, "Tokens and selection must preserve geometry") + +// Configuration changes before publication must restart preparation from a fresh snapshot. +private let geometryQueue = DispatchQueue(label: "review-diff.geometry-tests") +geometryQueue.suspend() +geometryView.prepareRows(geometryRows, on: geometryQueue, isCurrent: { true }, completion: { + let address = geometryView.preparedOffsetAddress() + geometryView.rows = geometryRows + geometryView.checkPublishedOffsetAddress(address) + geometryView.checkSparseGeometry(expectedNativeRows: 2) + geometryView.checkReferenceGeometry() + check(geometryView.style.codeFontSize == 28 && geometryView.viewportWidth == 400) + + // A reset/new payload can cancel work before its worker is scheduled, without publishing it. + geometryQueue.suspend() + geometryView.prepareRows(geometryRows, on: geometryQueue, isCurrent: { true }, completion: { + check(false, "Cancelled geometry must never publish") + }) + geometryView.rows = [] + geometryQueue.resume() + geometryQueue.async { + DispatchQueue.main.async { + check(geometryView.rows.isEmpty && geometryView.contentHeight == 0, "Reset must remain empty after obsolete work drains") + print("Passed sparse geometry, reference heights/widths, font/wrap/collapse, hit testing, direct publication, and cancellation") + exit(0) + } + } +}) +geometryView.style = try geometryStyle(wrap: true, fontSize: 28, weight: "bold", rowHeight: 8) +geometryView.viewportWidth = 400 +geometryView.collapsedFileIds = ["b"] +geometryView.collapsedCommentIds = ["a:comment"] +geometryQueue.resume() +dispatchMain() diff --git a/apps/mobile/modules/t3-review-diff/tests/ios/main.swift b/apps/mobile/modules/t3-review-diff/tests/ios/main.swift index d8ce5420e0921..8ae00632e65bc 100644 --- a/apps/mobile/modules/t3-review-diff/tests/ios/main.swift +++ b/apps/mobile/modules/t3-review-diff/tests/ios/main.swift @@ -7,7 +7,6 @@ func check(_ passed: Bool, _ message: String = "Failed layout check") { } } -// Runs the production layout against UIKit through Mac Catalyst, without launching an app. let font = UIFont.monospacedSystemFont(ofSize: 14, weight: .regular) let characterWidth = ("M" as NSString).size(withAttributes: [.font: font]).width let fixtures = ["漢字表示", "e\u{301}", "👨‍👩‍👧‍👦", "مرحبا بالعالم ", "\tvalue "] @@ -40,13 +39,11 @@ for fixture in fixtures { check(bytes[y * bitmap.bytesPerRow + x * 4 + 3] == 0, "Ink outside viewport: \(fixture) x=\(x) y=\(y) bpp=\(bitmap.bitsPerPixel) alpha=\(bitmap.alphaInfo.rawValue)") } } - // Updating highlights and syntax colors must preserve measured geometry. layout.decorate(text: attributed, highlights: [fullRange], color: .green, version: 1) check(layout.firstLineHeight + layout.extraHeight == height) cases += 1 } } -// Unwrapped rows stay on one line, and their measured width covers every drawn glyph. for text in ["\t\t\"extends\": \"@riptech/tsconfig/tsconfig.test.json\",", "漢字\tvalue", "مرحبا\tvalue"] { let layout = ReviewDiffCodeLayout( text: text, font: font, width: ReviewDiffCodeLayout.unboundedWidth, characterWidth: characterWidth @@ -77,7 +74,7 @@ for text in ["\t\t\"extends\": \"@riptech/tsconfig/tsconfig.test.json\",", "漢 let unwrappedAscii = ReviewDiffCodeLayout( text: "const value = 123;", font: font, width: ReviewDiffCodeLayout.unboundedWidth, characterWidth: characterWidth ) -check(unwrappedAscii.starts == [0] && unwrappedAscii.usedWidth == 18 * characterWidth) +check(Array(unwrappedAscii.starts) == [0] && unwrappedAscii.usedWidth == 18 * characterWidth) let ascii = String(repeating: "const value = 123; ", count: 100) let layout = ReviewDiffCodeLayout(text: ascii, font: font, width: 280, characterWidth: characterWidth) diff --git a/apps/mobile/modules/t3-review-diff/tests/run-android.sh b/apps/mobile/modules/t3-review-diff/tests/run-android.sh new file mode 100755 index 0000000000000..f62b0a02d012e --- /dev/null +++ b/apps/mobile/modules/t3-review-diff/tests/run-android.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -euo pipefail +tests_dir=$(cd "$(dirname "$0")" && pwd) +"${GRADLE:-gradle}" --project-dir "$tests_dir/android" test "$@" diff --git a/apps/mobile/modules/t3-review-diff/tests/run-ios.sh b/apps/mobile/modules/t3-review-diff/tests/run-ios.sh index 464ef0cf45774..a8ecdd88947d5 100644 --- a/apps/mobile/modules/t3-review-diff/tests/run-ios.sh +++ b/apps/mobile/modules/t3-review-diff/tests/run-ios.sh @@ -5,8 +5,32 @@ sdk=$(xcrun --sdk macosx --show-sdk-path) compiler=$(xcrun --find swiftc) output=$(mktemp -d) trap 'rm -rf "$output"' EXIT +# Keep the real content view and helpers; the Expo bridge is not needed by this harness. +python3 - "$module_dir" "$output/main.swift" <<'PYTHON' +import sys +from pathlib import Path +module = Path(sys.argv[1]) +source = (module / "ios/T3ReviewDiffView.swift").read_text() +source = source.replace("import ExpoModulesCore\n", "") +stubs = """ +public final class AppContext {} +open class ExpoView: UIView { + public required init(appContext: AppContext? = nil) { super.init(frame: .zero) } + @available(*, unavailable) + public required init?(coder: NSCoder) { fatalError("init(coder:) is unused") } +} +final class EventDispatcher { + func callAsFunction(_ payload: [String: Any]) {} +} +""" +# Expo alone is stubbed; keep the real scroll container as well as the content view. +Path(sys.argv[2]).write_text(source + "\n" + stubs + "\n" + + (module / "tests/ios/main.swift").read_text() + "\n" + + (module / "tests/ios/anchor.swift").read_text() + "\n" + + (module / "tests/ios/geometry.swift").read_text()) +PYTHON "$compiler" -O -target "$(uname -m)-apple-ios16.1-macabi" -sdk "$sdk" \ -F "$sdk/System/iOSSupport/System/Library/Frameworks" \ - "$module_dir/ios/ReviewDiffCodeLayout.swift" "$module_dir/tests/ios/main.swift" \ + "$module_dir/ios/ReviewDiffCodeLayout.swift" "$output/main.swift" \ -o "$output/layout-tests" "$output/layout-tests" diff --git a/apps/mobile/modules/t3-source-text/ios/T3SourceTextRun.h b/apps/mobile/modules/t3-source-text/ios/T3SourceTextRun.h index a01cce872959c..42f615d35779f 100644 --- a/apps/mobile/modules/t3-source-text/ios/T3SourceTextRun.h +++ b/apps/mobile/modules/t3-source-text/ios/T3SourceTextRun.h @@ -1,4 +1,3 @@ -// This guard prevent this file to be compiled in the old architecture. #ifdef RCT_NEW_ARCH_ENABLED #import #import diff --git a/apps/mobile/modules/t3-source-text/src/SourceText.tsx b/apps/mobile/modules/t3-source-text/src/SourceText.tsx index aebac31d42c35..70bbb4fd48a64 100644 --- a/apps/mobile/modules/t3-source-text/src/SourceText.tsx +++ b/apps/mobile/modules/t3-source-text/src/SourceText.tsx @@ -28,18 +28,23 @@ export function SourceText({ style, children, nativeTextRef, ...props }: SourceT ); } - const runs = React.Children.toArray(children).map((child, index) => { - if (React.isValidElement(child)) return child; - if (typeof child !== "string" && typeof child !== "number") return null; - return ( - - ); - }); + const runs = React.Children.toArray(children).map( + ( + child, + index, + ) => /* oxlint-disable react/no-array-index-key -- Native text runs are stateless positions within the supplied text. */ { + if (React.isValidElement(child)) return child; + if (typeof child !== "string" && typeof child !== "number") return null; + return ( + + ); + } /* oxlint-enable react/no-array-index-key */, + ); if (isAncestor) { return {runs}; } diff --git a/apps/mobile/modules/t3-source-text/src/util.test.ts b/apps/mobile/modules/t3-source-text/src/util.test.ts new file mode 100644 index 0000000000000..c3af9a1f8ff85 --- /dev/null +++ b/apps/mobile/modules/t3-source-text/src/util.test.ts @@ -0,0 +1,15 @@ +import { expect, it, vi } from "vite-plus/test"; + +import { flattenStyles } from "./util"; + +vi.mock("react-native", () => ({ + I18nManager: { isRTL: false }, + StyleSheet: { + flatten: (styles: ReadonlyArray) => Object.assign({}, ...styles), + }, +})); + +it("encodes numeric bold weights as bold source-text runs", () => { + expect(flattenStyles({ fontWeight: 700 }, undefined).fontWeight).toBe("bold"); + expect(flattenStyles({ fontWeight: "400" }, { fontWeight: "700" }).fontWeight).toBe("bold"); +}); diff --git a/apps/mobile/modules/t3-source-text/src/util.ts b/apps/mobile/modules/t3-source-text/src/util.ts index ad623fb991311..47f219bd3aad6 100644 --- a/apps/mobile/modules/t3-source-text/src/util.ts +++ b/apps/mobile/modules/t3-source-text/src/util.ts @@ -32,8 +32,7 @@ export function flattenStyles(rootStyle: TextStyle, style: StyleProp) }; } -// Codegen doesn't like using integer values for enums (c++ L) so we'll conver them to the proper native prop -// value before returning flattened styles. +// Codegen cannot use integer enums; convert font weights to native props. function fontWeightToNativeProp(fontWeight: TextStyle["fontWeight"]): NativeFontWeight { switch (fontWeight) { case "normal": @@ -65,7 +64,7 @@ function fontWeightToNativeProp(fontWeight: TextStyle["fontWeight"]): NativeFont return "semibold"; case 700: case "700": - return "semibold"; + return "bold"; case 800: case "800": return "bold"; diff --git a/apps/mobile/modules/t3-terminal/T3TerminalNative.podspec b/apps/mobile/modules/t3-terminal/T3TerminalNative.podspec index 2d40f97769732..a4123a555036a 100644 --- a/apps/mobile/modules/t3-terminal/T3TerminalNative.podspec +++ b/apps/mobile/modules/t3-terminal/T3TerminalNative.podspec @@ -14,6 +14,10 @@ Pod::Spec.new do |s| s.source = { :path => '.' } s.source_files = 'ios/**/*.{h,m,mm,swift}' s.vendored_frameworks = 'Vendor/libghostty/GhosttyKit.xcframework' + # libghostty has no x86_64 simulator slice, so a simulator build for every + # architecture (EAS's generic destination) fails to resolve GhosttyKit. + s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'x86_64' } + s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'x86_64' } s.frameworks = 'IOSurface', 'Metal', 'MetalKit', 'QuartzCore', 'UIKit' s.libraries = 'c++', 'z' s.swift_version = '5.9' diff --git a/apps/mobile/modules/t3-terminal/android/build.gradle b/apps/mobile/modules/t3-terminal/android/build.gradle index ba79f390bd655..b7d24702b0a38 100644 --- a/apps/mobile/modules/t3-terminal/android/build.gradle +++ b/apps/mobile/modules/t3-terminal/android/build.gradle @@ -9,6 +9,10 @@ android { ndkVersion rootProject.ext.ndkVersion compileSdk rootProject.ext.compileSdkVersion + testOptions { + unitTests.includeAndroidResources = true + } + defaultConfig { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion @@ -37,4 +41,12 @@ android { dependencies { implementation project(':expo-modules-core') + testImplementation 'junit:junit:4.13.2' + testImplementation 'org.robolectric:robolectric:4.16.1' +} + +tasks.withType(Test).configureEach { + javaLauncher = javaToolchains.launcherFor { + languageVersion = JavaLanguageVersion.of(21) + } } diff --git a/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/T3TerminalModule.kt b/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/T3TerminalModule.kt index cf99f02c028dc..703bcdf361b49 100644 --- a/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/T3TerminalModule.kt +++ b/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/T3TerminalModule.kt @@ -11,9 +11,14 @@ class T3TerminalModule : Module() { // logs so a stale native binary is distinguishable from a broken key pipeline. Constants( "hardwareKeyRevision" to 2, + "outputRevision" to 1, ) View(T3TerminalView::class) { + AsyncFunction("writeOutput") { view: T3TerminalView, data: String, reset: Boolean -> + view.writeOutput(data, reset) + } + Prop("terminalKey") { view: T3TerminalView, terminalKey: String -> view.terminalKey = terminalKey } @@ -61,8 +66,16 @@ class T3TerminalModule : Module() { Prop("captureRequest") { view: T3TerminalView, request: Double -> view.captureRequest = request } + + Prop("sharedGrid") { view: T3TerminalView, sharedGrid: List -> + view.sharedGrid = sharedGrid + } Events("onInput", "onResize", "onCapture") + OnViewDidUpdateProps { view: T3TerminalView -> + view.applyPendingBuffer() + } + OnViewDestroys { view: T3TerminalView -> view.cleanup() } diff --git a/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/T3TerminalView.kt b/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/T3TerminalView.kt index f98d4b11138e7..5646ab8c5884b 100644 --- a/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/T3TerminalView.kt +++ b/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/T3TerminalView.kt @@ -55,8 +55,11 @@ class T3TerminalView(context: Context, appContext: AppContext) : ExpoView(contex } private var terminalHandle = 0L private var fedBuffer = "" + private var streamedOutput: TerminalOutputBuffer? = null private var cols = 0 private var rows = 0 + private var measuredCols = 0 + private var measuredRows = 0 private var clearingInput = false private var isCleanedUp = false private var backgroundColorValue = Color.parseColor("#24292E") @@ -73,12 +76,16 @@ class T3TerminalView(context: Context, appContext: AppContext) : ExpoView(contex recreateTerminal() } + // Expo sets a batch's props in no fixed order, so the buffer waits for the whole batch: + // output fed before the same batch's sharedGrid lands would be drawn, and clipped, at the + // previous grid. var initialBuffer: String = "" set(value) { if (field == value) return field = value - feedPendingBuffer() + hasPendingBuffer = true } + private var hasPendingBuffer = false var fontSize: Float = 10f set(value) { @@ -90,6 +97,17 @@ class T3TerminalView(context: Context, appContext: AppContext) : ExpoView(contex var appearanceScheme: String = "dark" + // The PTY grid shared by every attached client, or empty before the server reports one. + // The terminal draws this grid, clamped to the view's own fit (the server's grid lags a + // local resize, and read-only observers never constrain it), so its wrapping and cursor + // match the PTY; the view's own fit still goes out through onResize. + var sharedGrid: List = emptyList() + set(value) { + if (field == value) return + field = value + applyGrid() + } + var themeConfig: String = "" set(value) { field = value @@ -253,21 +271,12 @@ class T3TerminalView(context: Context, appContext: AppContext) : ExpoView(contex InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD or InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS inputView.setPadding(0, 0, 0, 0) - inputView.setOnEditorActionListener { _, actionId, event -> - if (readOnly) return@setOnEditorActionListener true - val isKeyUp = event?.action == KeyEvent.ACTION_UP - val isImeSend = actionId == EditorInfo.IME_ACTION_SEND && !isKeyUp - val isHardwareEnter = event?.keyCode == KeyEvent.KEYCODE_ENTER && - event.action == KeyEvent.ACTION_DOWN - val isEnter = isImeSend || isHardwareEnter - if (isEnter) { + inputView.setOnEditorActionListener( + TerminalEnterListener({ readOnly }) { // Enter must send CR: raw-mode TUIs treat LF as Ctrl+J (insert newline). onInput(mapOf("data" to "\r")) - true - } else { - false - } - } + }, + ) inputView.setOnKeyListener { _, keyCode, event -> if (readOnly) return@setOnKeyListener true if (event.action != KeyEvent.ACTION_DOWN) return@setOnKeyListener false @@ -276,7 +285,6 @@ class T3TerminalView(context: Context, appContext: AppContext) : ExpoView(contex onInput(mapOf("data" to "\u007F")) true } - // Hardware keyboard Ctrl+A..Z -> control bytes 0x01..0x1A (Ctrl+C, Ctrl+Z, ...). event.isCtrlPressed && keyCode in KeyEvent.KEYCODE_A..KeyEvent.KEYCODE_Z -> { onInput( mapOf("data" to (keyCode - KeyEvent.KEYCODE_A + 1).toChar().toString()), @@ -327,6 +335,19 @@ class T3TerminalView(context: Context, appContext: AppContext) : ExpoView(contex val nextRows = (terminalCanvas.usableHeight() / terminalCanvas.cellHeightPx) .toInt() .coerceIn(2, 200) + if (nextCols != measuredCols || nextRows != measuredRows) { + measuredCols = nextCols + measuredRows = nextRows + onResize(mapOf("cols" to measuredCols, "rows" to measuredRows)) + } + applyGrid() + } + + private fun applyGrid() { + if (measuredCols <= 0 || measuredRows <= 0 || isCleanedUp) return + val shared = sharedGrid.takeIf { it.size == 2 && it[0] > 0 && it[1] > 0 } + val nextCols = shared?.get(0)?.coerceAtMost(measuredCols) ?: measuredCols + val nextRows = shared?.get(1)?.coerceAtMost(measuredRows) ?: measuredRows if (nextCols == cols && nextRows == rows && terminalHandle != 0L) return cols = nextCols rows = nextRows @@ -343,8 +364,7 @@ class T3TerminalView(context: Context, appContext: AppContext) : ExpoView(contex ) } emitResponse(response) - onResize(mapOf("cols" to cols, "rows" to rows)) - feedPendingBuffer() + if (!hasPendingBuffer) feedPendingBuffer() renderSnapshot() } @@ -362,13 +382,14 @@ class T3TerminalView(context: Context, appContext: AppContext) : ExpoView(contex paletteColors, ) fedBuffer = "" + streamedOutput?.let { output -> feedOutput(output.data) } } private fun recreateTerminal() { if (terminalHandle == 0L) return destroyTerminal() createTerminal() - feedPendingBuffer() + if (!hasPendingBuffer) feedPendingBuffer() renderSnapshot() } @@ -380,8 +401,14 @@ class T3TerminalView(context: Context, appContext: AppContext) : ExpoView(contex terminalCanvas.resetSelectionState() } + fun applyPendingBuffer() { + if (!hasPendingBuffer) return + hasPendingBuffer = false + feedPendingBuffer() + } + private fun feedPendingBuffer() { - if (terminalHandle == 0L || initialBuffer == fedBuffer) return + if (streamedOutput != null || terminalHandle == 0L || initialBuffer == fedBuffer) return if (!initialBuffer.startsWith(fedBuffer)) { recreateTerminal() if (terminalHandle == 0L) return @@ -400,6 +427,29 @@ class T3TerminalView(context: Context, appContext: AppContext) : ExpoView(contex renderSnapshot() } + fun writeOutput(data: String, reset: Boolean) { + if (isCleanedUp) return + val output = streamedOutput ?: TerminalOutputBuffer() + val bytes = data.toByteArray(Charsets.UTF_8) + output.write(bytes, reset) + streamedOutput = output + if (reset) { + recreateTerminal() + } else if (terminalHandle != 0L) { + feedOutput(bytes) + renderSnapshot() + } + } + + private fun feedOutput(data: ByteArray) { + if (terminalHandle == 0L || data.isEmpty()) return + emitResponse(GhosttyBridge.nativeFeed(terminalHandle, data)) + if (terminalCanvas.hasActiveSelection()) { + GhosttyBridge.nativeClearSelection(terminalHandle) + terminalCanvas.resetSelectionState() + } + } + private fun renderSnapshot() { if (terminalHandle == 0L) return TerminalFrame.decode( diff --git a/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/TerminalCanvasView.kt b/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/TerminalCanvasView.kt index f713bdb4ff00a..50cd48b3380e7 100644 --- a/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/TerminalCanvasView.kt +++ b/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/TerminalCanvasView.kt @@ -21,10 +21,6 @@ import kotlin.math.ceil import kotlin.math.max import kotlin.math.min -/** - * Bundled terminal font with Nerd Font glyphs (powerline, file icons). - * MesloLGS NF is the powerlevel10k-tuned Meslo Nerd Font patch. - */ internal object TerminalTypefaces { private var loaded = false var regular: Typeface = Typeface.MONOSPACE @@ -429,10 +425,6 @@ internal class TerminalCanvasView(context: Context) : View(context) { private fun handleRadius(): Float = max(cellHeightPx * 0.45f, 12f) - /** - * Begin dragging when the touch lands on a selection handle. The opposite - * endpoint becomes the drag anchor so the grabbed end follows the finger. - */ private fun grabHandleAt(px: Float, py: Float): Boolean { if (!selectionActive || !selectionEndpointsValid) return false val slop = max(handleRadius() * 2f, 24 * density) @@ -467,7 +459,6 @@ internal class TerminalCanvasView(context: Context) : View(context) { return handleGrabbed } - /** Scan the decoded frame for the first/last selected cells. */ private fun updateSelectionEndpoints() { selectionEndpointsValid = false val currentFrame = frame diff --git a/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/TerminalEnterListener.kt b/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/TerminalEnterListener.kt new file mode 100644 index 0000000000000..6eec4ba97ece2 --- /dev/null +++ b/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/TerminalEnterListener.kt @@ -0,0 +1,22 @@ +package expo.modules.t3terminal + +import android.view.KeyEvent +import android.view.inputmethod.EditorInfo +import android.widget.TextView + +internal class TerminalEnterListener( + private val isReadOnly: () -> Boolean, + private val sendEnter: () -> Unit +) : TextView.OnEditorActionListener { + override fun onEditorAction(view: TextView?, actionId: Int, event: KeyEvent?): Boolean { + if (isReadOnly()) return true + val isKeyUp = event?.action == KeyEvent.ACTION_UP + val isImeSend = actionId == EditorInfo.IME_ACTION_SEND && !isKeyUp + val isHardwareEnter = event?.keyCode == KeyEvent.KEYCODE_ENTER || + event?.keyCode == KeyEvent.KEYCODE_NUMPAD_ENTER + if (isImeSend || (isHardwareEnter && !isKeyUp)) sendEnter() + // An unconsumed Enter key-up makes a single-line TextView move focus to + // the next view, so the terminal stops receiving keys. + return isImeSend || isHardwareEnter + } +} diff --git a/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/TerminalOutputBuffer.kt b/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/TerminalOutputBuffer.kt new file mode 100644 index 0000000000000..fde3393b911e4 --- /dev/null +++ b/apps/mobile/modules/t3-terminal/android/src/main/java/expo/modules/t3terminal/TerminalOutputBuffer.kt @@ -0,0 +1,71 @@ +package expo.modules.t3terminal + +import java.util.ArrayDeque + +private const val REPLAY_LIMIT = 512 * 1024 +private const val REPLAY_CHUNK_SIZE = 16 * 1024 + +// Keep only replay history for intentional terminal recreation. +internal class TerminalOutputBuffer { + private val chunks = ArrayDeque() + private var firstOffset = 0 + private var tailSize = 0 + private var size = 0 + + // Only terminal recreation needs contiguous history; appends reuse the retained chunks. + val data: ByteArray + get() { + val result = ByteArray(size) + var destination = 0 + var start = firstOffset + for (chunk in chunks) { + val end = if (chunk === chunks.last) tailSize else chunk.size + chunk.copyInto(result, destination, start, end) + destination += end - start + start = 0 + } + return result + } + + fun write(incoming: ByteArray, reset: Boolean) { + if (reset || incoming.size >= REPLAY_LIMIT) clear() + var start = maxOf(0, incoming.size - REPLAY_LIMIT) + while (start < incoming.size && incoming[start].toInt() and 0xC0 == 0x80) start += 1 + while (start < incoming.size) { + if (chunks.isEmpty() || tailSize == REPLAY_CHUNK_SIZE) { + chunks.addLast(ByteArray(REPLAY_CHUNK_SIZE)) + tailSize = 0 + } + val count = minOf(incoming.size - start, REPLAY_CHUNK_SIZE - tailSize) + incoming.copyInto(chunks.last, tailSize, start, start + count) + start += count + tailSize += count + size += count + } + discardPrefix(maxOf(0, size - REPLAY_LIMIT)) + while (size > 0 && chunks.first[firstOffset].toInt() and 0xC0 == 0x80) discardPrefix(1) + } + + private fun discardPrefix(count: Int) { + var remaining = count + while (remaining > 0) { + val end = if (chunks.size == 1) tailSize else chunks.first.size + val discarded = minOf(remaining, end - firstOffset) + firstOffset += discarded + remaining -= discarded + size -= discarded + if (firstOffset == end) { + chunks.removeFirst() + firstOffset = 0 + if (chunks.isEmpty()) tailSize = 0 + } + } + } + + private fun clear() { + chunks.clear() + firstOffset = 0 + tailSize = 0 + size = 0 + } +} diff --git a/apps/mobile/modules/t3-terminal/android/src/test/java/expo/modules/t3terminal/TerminalEnterListenerTest.kt b/apps/mobile/modules/t3-terminal/android/src/test/java/expo/modules/t3terminal/TerminalEnterListenerTest.kt new file mode 100644 index 0000000000000..de04c7adfe4c0 --- /dev/null +++ b/apps/mobile/modules/t3-terminal/android/src/test/java/expo/modules/t3terminal/TerminalEnterListenerTest.kt @@ -0,0 +1,51 @@ +package expo.modules.t3terminal + +import android.app.Activity +import android.view.KeyEvent +import android.view.View +import android.widget.Button +import android.widget.EditText +import android.widget.LinearLayout +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.Robolectric +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config + +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [36], manifest = Config.NONE) +class TerminalEnterListenerTest { + @Test + fun hardwareEnterKeepsFocusOnTheTerminalInput() { + val activity = Robolectric.buildActivity(Activity::class.java).setup().get() + var sent = 0 + val input = EditText(activity).apply { + setSingleLine(true) + isFocusableInTouchMode = true + setOnEditorActionListener(TerminalEnterListener({ false }) { sent += 1 }) + } + val nextControl = Button(activity).apply { isFocusableInTouchMode = true } + val root = LinearLayout(activity).apply { + orientation = LinearLayout.VERTICAL + addView(input) + addView(nextControl) + } + activity.setContentView(root) + // Focus search below the input only finds controls that have bounds. + root.measure( + View.MeasureSpec.makeMeasureSpec(1080, View.MeasureSpec.EXACTLY), + View.MeasureSpec.makeMeasureSpec(1920, View.MeasureSpec.EXACTLY), + ) + root.layout(0, 0, 1080, 1920) + assertTrue(input.requestFocus()) + + for (keyCode in listOf(KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_NUMPAD_ENTER)) { + input.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, keyCode)) + input.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_UP, keyCode)) + assertTrue("focus left the input after key $keyCode", input.isFocused) + } + assertEquals(2, sent) + } +} diff --git a/apps/mobile/modules/t3-terminal/ios/T3TerminalModule.swift b/apps/mobile/modules/t3-terminal/ios/T3TerminalModule.swift index a3ac8f622c509..d68e46a5416b1 100644 --- a/apps/mobile/modules/t3-terminal/ios/T3TerminalModule.swift +++ b/apps/mobile/modules/t3-terminal/ios/T3TerminalModule.swift @@ -8,9 +8,14 @@ public class T3TerminalModule: Module { // logs so a stale native binary is distinguishable from a broken key pipeline. Constants([ "hardwareKeyRevision": 3, + "outputRevision": 1, ]) View(T3TerminalView.self) { + AsyncFunction("writeOutput") { (view: T3TerminalView, data: String, reset: Bool) in + view.writeOutput(data, reset: reset) + } + Prop("terminalKey") { (view: T3TerminalView, terminalKey: String) in view.terminalKey = terminalKey } @@ -58,7 +63,15 @@ public class T3TerminalModule: Module { Prop("captureRequest") { (view: T3TerminalView, request: Double) in view.captureRequest = request } + + Prop("sharedGrid") { (view: T3TerminalView, sharedGrid: [Int]) in + view.sharedGrid = sharedGrid + } Events("onInput", "onResize", "onCapture") + + OnViewDidUpdateProps { (view: T3TerminalView) in + view.applyPendingBuffer() + } } } } diff --git a/apps/mobile/modules/t3-terminal/ios/T3TerminalView.swift b/apps/mobile/modules/t3-terminal/ios/T3TerminalView.swift index 4a69ff77f9fad..0ae146bb1241a 100644 --- a/apps/mobile/modules/t3-terminal/ios/T3TerminalView.swift +++ b/apps/mobile/modules/t3-terminal/ios/T3TerminalView.swift @@ -22,17 +22,9 @@ private enum GhosttyRuntime { } } -/// Encodes hardware-keyboard combos that UITextField never surfaces through its -/// text-editing delegate (control combos, Escape, Tab, arrow keys) into the byte -/// sequences a terminal expects. -/// -/// Capture uses UIKeyCommand with `wantsPriorityOverSystemBehavior` rather than -/// `pressesBegan`: while a text field is first responder, iPadOS routes hardware key -/// events through the text-input system, which can consume presses before they reach -/// responder press callbacks. Registered key commands are matched deterministically -/// before that happens. +/// While a text field is first responder, iPadOS may consume presses before pressesBegan. +/// Priority UIKeyCommands capture terminal shortcuts before the text-input system handles them. private enum TerminalHardwareKeyEncoder { - /// Characters that produce a control byte when combined with Ctrl. private static let controlInputs = "abcdefghijklmnopqrstuvwxyz@[\\]^_-? " static func makeKeyCommands(action: Selector) -> [UIKeyCommand] { @@ -97,7 +89,6 @@ private enum TerminalHardwareKeyEncoder { private static func controlSequence(for scalar: Unicode.Scalar) -> String? { switch scalar { case "a"..."z": - // Ctrl+A..Z -> 0x01..0x1A (Ctrl+C = ETX, Ctrl+Z = SUB, ...). return UnicodeScalar(scalar.value - 96).map(String.init) case " ", "@": return "\u{00}" @@ -205,6 +196,7 @@ public final class T3TerminalView: ExpoView, UITextFieldDelegate { private var lastContentScale: CGFloat = 0 private var lastReportedGrid: (cols: Int, rows: Int)? private var lastAppliedBuffer = "" + private var streamedOutput: TerminalOutputBuffer? private var pendingVerticalScrollPoints: CGFloat = 0 private var app: ghostty_app_t? private var surface: ghostty_surface_t? @@ -251,9 +243,23 @@ public final class T3TerminalView: ExpoView, UITextFieldDelegate { } } + // Expo sets a batch's props in no fixed order, so the buffer waits for the whole batch: + // output fed before the same batch's sharedGrid lands would be drawn, and clipped, at the + // previous grid. var initialBuffer: String = "" { didSet { - applyRemoteBuffer(initialBuffer) + hasPendingBuffer = true + } + } + private var hasPendingBuffer = false + + // The PTY grid shared by every attached client, or empty before the server reports one. + // The surface draws this grid so its wrapping and cursor match the PTY; the view's own + // fit still goes out through onResize. + var sharedGrid: [Int] = [] { + didSet { + guard oldValue != sharedGrid else { return } + resizeSurface() } } @@ -535,7 +541,11 @@ public final class T3TerminalView: ExpoView, UITextFieldDelegate { ghostty_surface_set_color_scheme(createdSurface, appearance.ghosttyColorScheme) setupWriteCallback() resizeSurface() - feedBuffer(initialBuffer) + if let streamedOutput { + feedData(streamedOutput.data) + } else if !hasPendingBuffer { + feedBuffer(initialBuffer) + } } private func resetSurface() { @@ -563,9 +573,23 @@ public final class T3TerminalView: ExpoView, UITextFieldDelegate { } surface = nil app = nil + // Ghostty adds its IOSurface layer to the viewport on iOS but never removes it on + // free, leaving the last frame on screen under the next surface's layer. The + // viewport has no subviews, so every sublayer belongs to a freed surface. + CATransaction.begin() + CATransaction.setDisableActions(true) + terminalViewport.layer.sublayers?.forEach { $0.removeFromSuperlayer() } + CATransaction.commit() + } + + func applyPendingBuffer() { + guard hasPendingBuffer else { return } + hasPendingBuffer = false + applyRemoteBuffer(initialBuffer) } private func applyRemoteBuffer(_ buffer: String) { + guard streamedOutput == nil else { return } guard surface != nil else { createSurfaceIfPossible() return @@ -588,6 +612,20 @@ public final class T3TerminalView: ExpoView, UITextFieldDelegate { createSurfaceIfPossible() } + func writeOutput(_ data: String, reset: Bool) { + let output = streamedOutput ?? TerminalOutputBuffer() + let bytes = Data(data.utf8) + output.write(bytes, reset: reset) + streamedOutput = output + if reset { + refreshSurface() + } else if surface == nil { + createSurfaceIfPossible() + } else { + feedData(bytes) + } + } + private func feedBuffer(_ buffer: String) { guard !buffer.isEmpty else { return } feedData(Data(buffer.utf8)) @@ -636,10 +674,25 @@ public final class T3TerminalView: ExpoView, UITextFieldDelegate { terminalViewport.contentScaleFactor = scale ghostty_surface_set_content_scale(surface, Double(scale), Double(scale)) ghostty_surface_set_size(surface, width, height) + let fitted = ghostty_surface_size(surface) + let fittedCols = max(1, Int(fitted.columns)) + let fittedRows = max(1, Int(fitted.rows)) + // Trimming whole cells keeps ghostty's padding, and the surface can only shrink + // within the view, so a stale larger grid falls back to the fitted one. + var surfaceWidth = width + var surfaceHeight = height + if sharedGrid.count == 2, sharedGrid[0] > 0, sharedGrid[1] > 0 { + surfaceWidth -= UInt32(max(fittedCols - sharedGrid[0], 0)) * fitted.cell_width_px + surfaceHeight -= UInt32(max(fittedRows - sharedGrid[1], 0)) * fitted.cell_height_px + if surfaceWidth != width || surfaceHeight != height { + ghostty_surface_set_size(surface, surfaceWidth, surfaceHeight) + } + } ghostty_surface_set_occlusion(surface, window != nil) - configureIOSurfaceLayers() + configureIOSurfaceLayers( + size: CGSize(width: CGFloat(surfaceWidth) / scale, height: CGFloat(surfaceHeight) / scale)) redrawSurface() - emitGhosttyResize() + emitResize(cols: fittedCols, rows: fittedRows) } private func redrawSurface() { @@ -647,19 +700,6 @@ public final class T3TerminalView: ExpoView, UITextFieldDelegate { ghostty_surface_refresh(surface) ghostty_surface_draw(surface) markIOSurfaceLayersForDisplay() - emitGhosttyResize() - } - - private func emitGhosttyResize() { - guard let surface else { - emitEstimatedResize() - return - } - - let size = ghostty_surface_size(surface) - let cols = max(1, Int(size.columns)) - let rows = max(1, Int(size.rows)) - emitResize(cols: cols, rows: rows) } private func emitEstimatedResize() { @@ -710,8 +750,8 @@ public final class T3TerminalView: ExpoView, UITextFieldDelegate { ghostty_app_keyboard_changed(app) } - private func configureIOSurfaceLayers() { - let targetBounds = CGRect(origin: .zero, size: terminalViewport.bounds.size) + private func configureIOSurfaceLayers(size: CGSize) { + let targetBounds = CGRect(origin: .zero, size: size) CATransaction.begin() CATransaction.setDisableActions(true) terminalViewport.layer.sublayers?.forEach { sublayer in diff --git a/apps/mobile/modules/t3-terminal/ios/TerminalOutputBuffer.swift b/apps/mobile/modules/t3-terminal/ios/TerminalOutputBuffer.swift new file mode 100644 index 0000000000000..b25c18cd0b659 --- /dev/null +++ b/apps/mobile/modules/t3-terminal/ios/TerminalOutputBuffer.swift @@ -0,0 +1,28 @@ +import Foundation + +// Keep only replay history for intentional surface recreation (font/theme changes). +final class TerminalOutputBuffer { + private var storage = Data() + private var retainedStart = 0 + private let limit = 512 * 1024 + + var data: Data { storage.subdata(in: retainedStart..= limit { + storage = incoming.subdata(in: max(0, incoming.count - limit)..= limit { + storage = storage.subdata(in: retainedStart...Provider` receiver re-runs the JS layout with the stored - * snapshot on ACTION_APPWIDGET_UPDATE, so a deadline only needs to deliver that broadcast. + * The generated expo-widgets provider re-runs the stored JS layout on ACTION_APPWIDGET_UPDATE, + * so an expiry broadcast works even while the app is closed. */ class WidgetExpiryReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { @@ -48,7 +47,6 @@ class WidgetExpiryReceiver : BroadcastReceiver() { private const val EXTRA_DEADLINES = "expo.modules.t3widgetexpiry.DEADLINES" private const val PREFERENCES = "expo.modules.t3widgetexpiry.DEADLINES" - /** Arms one inexact, non-wakeup alarm for the next future deadline and carries the rest. */ fun schedule(context: Context, name: String, deadlines: LongArray) { val alarms = context.getSystemService(AlarmManager::class.java) val now = System.currentTimeMillis() diff --git a/apps/mobile/package.json b/apps/mobile/package.json index 9f1a944485088..709a9ccf5f027 100644 --- a/apps/mobile/package.json +++ b/apps/mobile/package.json @@ -41,15 +41,18 @@ "config:prod": "APP_VARIANT=production expo config", "profile:android:hermes": "mkdir -p profiles/review && react-native profile-hermes profiles/review", "sync:chip-icons": "node scripts/sync-context-chip-icons.mjs", + "sync:link-icons": "node scripts/sync-link-icons.ts", "sync:pierre-icons": "node scripts/sync-pierre-file-icons.mjs", "measure-renders": "node scripts/measure-renders.mts", "generate": "node --disable-warning=MODULE_TYPELESS_PACKAGE_JSON scripts/generate-uniwind-themes.mts", + "generate:highlights": "node scripts/generate-highlights.mts", + "eas-build-on-success": "node scripts/upload-sourcemaps.mts build", "test": "vp test run --project unit --project react", "typecheck": "tsc --noEmit" }, "dependencies": { "@clerk/expo": "catalog:", - "@clerk/expo-native-components": "0.2.0", + "@clerk/expo-native-components": "0.4.0", "@effect/atom-react": "catalog:", "@expo-google-fonts/dm-sans": "^0.4.2", "@expo/metro-runtime": "~58.0.14", @@ -58,28 +61,20 @@ "@material/material-color-utilities": "0.3.0", "@noble/curves": "catalog:", "@pierre/diffs": "catalog:", + "@pierre/highlights": "catalog:", "@react-native-ai/apple": "0.12.0", "@react-native-async-storage/async-storage": "3.1.1", "@react-native-menu/menu": "^2.0.0", "@react-navigation/elements": "2.9.45", "@react-navigation/native": "7.5.1", "@react-navigation/native-stack": "7.21.0", - "@shikijs/core": "4.2.0", - "@shikijs/engine-javascript": "4.2.0", - "@shikijs/langs": "4.2.0", - "@shikijs/themes": "4.2.0", "@t3tools/client-runtime": "workspace:*", "@t3tools/contracts": "workspace:*", + "@t3tools/mobile-highlights-native": "file:./modules/t3-highlights", "@t3tools/mobile-review-diff-native": "file:./modules/t3-review-diff", "@t3tools/mobile-source-text": "file:./modules/t3-source-text", "@t3tools/mobile-terminal-native": "file:./modules/t3-terminal", - "@t3tools/provider-acp-registry": "workspace:*", "@t3tools/provider-core": "workspace:*", - "@t3tools/provider-cursor": "workspace:*", - "@t3tools/provider-grok": "workspace:*", - "@t3tools/provider-muse": "workspace:*", - "@t3tools/provider-opencode": "workspace:*", - "@t3tools/provider-pi": "workspace:*", "@t3tools/shared": "workspace:*", "@tabler/icons-react-native": "^3.44.0", "clsx": "^2.1.1", @@ -110,6 +105,7 @@ "expo-linking": "~58.0.13", "expo-network": "~58.0.3", "expo-notifications": "~58.1.5", + "expo-observe": "~58.0.15", "expo-paste-input": "^0.1.15", "expo-quick-actions": "^6.0.2", "expo-secure-store": "~58.0.2", @@ -119,29 +115,27 @@ "expo-sqlite": "~58.0.13", "expo-symbols": "~58.0.4", "expo-updates": "~58.0.17", - "expo-video": "~58.0.11", + "expo-video": "58.0.11", "expo-web-browser": "~58.0.6", "expo-widgets": "58.0.20", "react": "catalog:", "react-dom": "catalog:", "react-native": "0.88.0", "react-native-blob-util": "0.25.1", - "react-native-enriched-markdown": "file:deps/react-native-enriched-markdown-1.2.0-t3.15-fee84114.tgz", + "react-native-enriched-markdown": "file:deps/react-native-enriched-markdown-1.2.0-t3.16-29ddd424.tgz", "react-native-gesture-handler": "~3.3.0", "react-native-image-viewing": "^0.2.2", - "react-native-keyboard-controller": "1.22.7", + "react-native-keyboard-controller": "1.22.8", "react-native-nitro-modules": "0.37.1", "react-native-pdf-jsi": "5.0.0", "react-native-reanimated": "4.7.1", "react-native-safe-area-context": "~5.10.1", - "react-native-screens": "file:deps/react-native-screens-5.0.0-t3.36.tgz", - "react-native-shiki-engine": "^0.3.12", + "react-native-screens": "file:deps/react-native-screens-5.0.0-t3.48.tgz", "react-native-svg": "15.16.0", "react-native-webview": "14.0.1", "react-native-worklets": "0.13.0", "remark-gfm": "catalog:", "remark-parse": "catalog:", - "shiki": "4.2.0", "tailwind-merge": "^3.5.0", "unified": "catalog:", "uniwind": "1.13.0" @@ -154,6 +148,7 @@ "@types/mdast": "^4.0.4", "@types/react": "catalog:", "@types/react-dom": "catalog:", + "aws4fetch": "1.0.20", "babel-preset-expo": "~58.0.17", "jsdom": "^30.0.1", "tailwindcss": "^4.0.0", @@ -181,7 +176,9 @@ "react-native-reanimated", "@react-native-menu/menu", "expo-audio", - "expo-network" + "expo-video", + "expo-network", + "expo-sharing" ] } }, diff --git a/apps/mobile/plugins/lib/addWidgetAssetCatalog.cjs b/apps/mobile/plugins/lib/addWidgetAssetCatalog.cjs index 7132eed7e362b..7d3deaf89e09b 100644 --- a/apps/mobile/plugins/lib/addWidgetAssetCatalog.cjs +++ b/apps/mobile/plugins/lib/addWidgetAssetCatalog.cjs @@ -1,10 +1,6 @@ "use strict"; -// expo-widgets generates the widget target without a Resources build phase, and -// hand-adding a PBXResourcesBuildPhase does NOT get picked up — xcodebuild's -// planner never schedules `actool` for it (verified: even a full re-plan skips -// it). So instead we add a shell-script phase that runs `actool` directly and -// drops the compiled Assets.car into the extension bundle. +// xcodebuild ignores Resources phases on expo-widgets targets; compile assets in a shell phase. const PHASE_NAME = "Compile Widget Assets"; @@ -36,10 +32,8 @@ function findByName(map, name) { return null; } -/** - * @param {import('xcode').XcodeProject} proj - * @param {{ targetName: string }} opts - */ +/** @param {import('xcode').XcodeProject} proj + * @param {{ targetName: string }} opts */ function addWidgetAssetCatalog(proj, opts) { const objects = proj.hash.project.objects; const target = findByName(objects.PBXNativeTarget, opts.targetName); diff --git a/apps/mobile/plugins/withAndroidCleartextTraffic.cjs b/apps/mobile/plugins/withAndroidCleartextTraffic.cjs deleted file mode 100644 index f612f751e9151..0000000000000 --- a/apps/mobile/plugins/withAndroidCleartextTraffic.cjs +++ /dev/null @@ -1,18 +0,0 @@ -const { withAndroidManifest } = require("expo/config-plugins"); - -module.exports = function withAndroidCleartextTraffic(config) { - return withAndroidManifest(config, (nextConfig) => { - const application = nextConfig.modResults.manifest.application?.[0]; - - if (application == null) { - throw new Error( - "AndroidManifest.xml is missing the application element required for cleartext traffic configuration.", - ); - } - - application.$ ??= {}; - application.$["android:usesCleartextTraffic"] = "true"; - - return nextConfig; - }); -}; diff --git a/apps/mobile/plugins/withAndroidFbjniVersion.cjs b/apps/mobile/plugins/withAndroidFbjniVersion.cjs deleted file mode 100644 index 1736f7797f756..0000000000000 --- a/apps/mobile/plugins/withAndroidFbjniVersion.cjs +++ /dev/null @@ -1,46 +0,0 @@ -const { withProjectBuildGradle } = require("expo/config-plugins"); - -// react-native-shiki-engine 0.3.12 asks for `com.facebook.fbjni:fbjni:+`, which Gradle -// resolves to the newest release on Maven Central. That is now 0.8.x, built -// with NDK 28, while React Native links the NDK 27.1 C++ runtime and requires -// 0.7.0. The two disagree on libc++, so the app dies in -// ReactNativeFeatureFlagsCxxInterop's static initializer before any JavaScript -// runs ("cannot locate symbol __cxa_init_primary_exception"). -// -// Keep this equal to `fbjni` in react-native/gradle/libs.versions.toml, and move -// it with React Native. withAndroidFbjniVersion.test.mjs fails when they differ. -const FBJNI_VERSION = "0.7.0"; -const MARKER = "withAndroidFbjniVersion"; - -const BLOCKS = { - groovy: ` -// Added by ${MARKER}: keep fbjni on the version React Native ships against. -allprojects { - configurations.all { - resolutionStrategy.force 'com.facebook.fbjni:fbjni:${FBJNI_VERSION}' - } -} -`, - kt: ` -// Added by ${MARKER}: keep fbjni on the version React Native ships against. -allprojects { - configurations.all { - resolutionStrategy.force("com.facebook.fbjni:fbjni:${FBJNI_VERSION}") - } -} -`, -}; - -module.exports = function withAndroidFbjniVersion(config) { - return withProjectBuildGradle(config, (nextConfig) => { - const { contents, language } = nextConfig.modResults; - const block = BLOCKS[language]; - if (block === undefined) { - throw new Error(`${MARKER}: unsupported root build.gradle language "${language}".`); - } - if (!contents.includes(MARKER)) { - nextConfig.modResults.contents = `${contents.trimEnd()}\n${block}`; - } - return nextConfig; - }); -}; diff --git a/apps/mobile/plugins/withAndroidFbjniVersion.test.mjs b/apps/mobile/plugins/withAndroidFbjniVersion.test.mjs deleted file mode 100644 index c221c14ca4470..0000000000000 --- a/apps/mobile/plugins/withAndroidFbjniVersion.test.mjs +++ /dev/null @@ -1,109 +0,0 @@ -import * as NodeFS from "node:fs"; -import * as NodeModule from "node:module"; -import * as NodeOS from "node:os"; -import * as NodePath from "node:path"; -import { afterEach, describe, expect, it } from "vite-plus/test"; - -const require = NodeModule.createRequire(import.meta.url); -const { compileModsAsync } = require("expo/config-plugins"); -const { getConfig } = require("expo/config"); -const withAndroidFbjniVersion = require("./withAndroidFbjniVersion.cjs"); - -const catalog = NodeFS.readFileSync( - NodePath.join(require.resolve("react-native/package.json"), "..", "gradle", "libs.versions.toml"), - "utf8", -); -const shippedFbjniVersion = /^fbjni\s*=\s*"([^"]+)"/m.exec(catalog)?.[1]; - -// The root build.gradle generated by Expo SDK 58. -const ROOT_BUILD_GRADLE = `// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - repositories { - google() - mavenCentral() - } - dependencies { - classpath('com.android.tools.build:gradle') - classpath('com.facebook.react:react-native-gradle-plugin') - def kotlinVersion = findProperty('android.kotlinVersion') - classpath(kotlinVersion ? "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" : 'org.jetbrains.kotlin:kotlin-gradle-plugin') - } -} - -allprojects { - repositories { - google() - mavenCentral() - maven { url 'https://www.jitpack.io' } - } -} - -apply plugin: "expo-root-project" -apply plugin: "com.facebook.react.rootproject" -`; - -const projectRoots = []; - -afterEach(() => { - for (const root of projectRoots.splice(0)) NodeFS.rmSync(root, { recursive: true, force: true }); -}); - -/** Runs the plugin through Expo's own prebuild mod pipeline against a real file. */ -async function prebuildRootGradle(fileName, contents, plugin = withAndroidFbjniVersion) { - const projectRoot = NodeFS.mkdtempSync(NodePath.join(NodeOS.tmpdir(), "fbjni-plugin-")); - projectRoots.push(projectRoot); - NodeFS.mkdirSync(NodePath.join(projectRoot, "android")); - NodeFS.writeFileSync(NodePath.join(projectRoot, "android", fileName), contents); - await compileModsAsync(plugin({ name: "t3", slug: "t3" }), { - projectRoot, - platforms: ["android"], - }); - return NodeFS.readFileSync(NodePath.join(projectRoot, "android", fileName), "utf8"); -} - -function expectProjectWideForce(result, language = "groovy") { - expect(shippedFbjniVersion).toBeDefined(); - const coordinate = `com.facebook.fbjni:fbjni:${shippedFbjniVersion}`; - const force = language === "groovy" ? ` '${coordinate}'` : `("${coordinate}")`; - // Anchor the complete top-level block, including scope, at the end of the file. - const expected = `\nallprojects {\n configurations.all {\n resolutionStrategy.force${force}\n }\n}\n`; - expect(result.slice(-expected.length)).toBe(expected); -} - -describe("withAndroidFbjniVersion", () => { - it("forces the React Native fbjni version for every Gradle project", async () => { - const result = await prebuildRootGradle("build.gradle", ROOT_BUILD_GRADLE); - - expect(result.startsWith(ROOT_BUILD_GRADLE.trimEnd())).toBe(true); - expectProjectWideForce(result); - }); - - it("adds the force once when prebuild runs again", async () => { - const once = await prebuildRootGradle("build.gradle", ROOT_BUILD_GRADLE); - const twice = await prebuildRootGradle("build.gradle", once); - - expect(twice).toBe(once); - }); - - // regression: #20118 fresh Android builds no longer crash on launch - it("writes Kotlin syntax into a Kotlin build script", async () => { - const result = await prebuildRootGradle("build.gradle.kts", "plugins {}\n"); - - expectProjectWideForce(result, "kt"); - }); - - it("applies the force through the registered app config", async () => { - const { exp } = getConfig(NodePath.resolve(import.meta.dirname, ".."), { - isModdedConfig: true, - }); - const projectBuildGradle = exp.mods?.android?.projectBuildGradle; - // Run the app's registered root-Gradle mods without its unrelated native-file mods. - const result = await prebuildRootGradle("build.gradle", ROOT_BUILD_GRADLE, (config) => ({ - ...config, - mods: { android: projectBuildGradle ? { projectBuildGradle } : {} }, - })); - - expectProjectWideForce(result); - }); -}); diff --git a/apps/mobile/plugins/withAndroidGradleHeap.cjs b/apps/mobile/plugins/withAndroidGradleHeap.cjs index 0ec26507d5ad1..e8cea6ecefee9 100644 --- a/apps/mobile/plugins/withAndroidGradleHeap.cjs +++ b/apps/mobile/plugins/withAndroidGradleHeap.cjs @@ -1,7 +1,6 @@ const { withGradleProperties } = require("expo/config-plugins"); -// The Expo template's 2GB heap is too small for D8 dex merging in this app, -// causing OutOfMemoryError in :app:mergeExtDexDebug. +// Expo's 2GB heap exhausts memory during :app:mergeExtDexDebug. const JVM_ARGS = "-Xmx4096m -XX:MaxMetaspaceSize=1024m"; module.exports = function withAndroidGradleHeap(config) { diff --git a/apps/mobile/plugins/withAndroidModernAlertDialog.cjs b/apps/mobile/plugins/withAndroidModernAlertDialog.cjs index df39f0811593d..05fba9edd1466 100644 --- a/apps/mobile/plugins/withAndroidModernAlertDialog.cjs +++ b/apps/mobile/plugins/withAndroidModernAlertDialog.cjs @@ -9,8 +9,7 @@ const { withDangerousMod, } = require("expo/config-plugins"); -// AppCompat's default dialog window background is an inset rounded rect, so -// the replacement keeps the same 16dp inset to preserve the dialog's margins. +// Preserve AppCompat's default 16dp dialog inset. const DIALOG_BACKGROUND_DRAWABLE = ` style.$?.name === "AppTheme"); if (appTheme) { - // React Native's dialog module builds an androidx.appcompat AlertDialog, - // which resolves its theme from the AppCompat attr; the framework attr is - // set too for any native code that inflates a platform AlertDialog. + // React Native uses the AppCompat attr; platform dialogs need the framework attr too. assignStyleItem(appTheme, "alertDialogTheme", "@style/AppAlertDialog"); assignStyleItem(appTheme, "android:alertDialogTheme", "@style/AppAlertDialog"); } @@ -73,13 +70,9 @@ function withAlertDialogStyles(config) { { _: "@drawable/alert_dialog_background", $: { name: "android:windowBackground" } }, { _: "@color/alert_dialog_secondary_text", $: { name: "android:textColorPrimary" } }, { _: "@color/alert_dialog_secondary_text", $: { name: "android:textColorSecondary" } }, - // Theme-level fontFamily is the lowest-priority fallback in attribute - // resolution, so it reaches every text view in the dialog that does - // not carry its own fontFamily (the message body in particular). + // Theme fontFamily covers text views without their own font, including the message body. { _: "@font/xml_dm_sans_regular", $: { name: "android:fontFamily" } }, - // AppCompat's alert title view styles itself from the framework - // attr (?android:attr/windowTitleStyle); there is no unprefixed - // AppCompat equivalent. + // AppCompat titles use android:windowTitleStyle; there is no unprefixed equivalent. { _: "@style/AppAlertDialog.Title", $: { name: "android:windowTitleStyle" } }, { _: "@style/AppAlertDialog.Button", $: { name: "buttonBarPositiveButtonStyle" } }, { _: "@style/AppAlertDialog.Button", $: { name: "buttonBarNegativeButtonStyle" } }, @@ -100,9 +93,7 @@ function withAlertDialogStyles(config) { parent: "Widget.AppCompat.Button.ButtonBar.AlertDialog", }, item: [ - // The AppCompat button appearance hardcodes sans-serif-medium, so - // the font must be set here rather than relying on the theme - // fallback. + // Override AppCompat's hardcoded sans-serif-medium button font. { _: "@font/dm_sans_500medium", $: { name: "android:fontFamily" } }, { _: "@color/alert_dialog_button_text", $: { name: "android:textColor" } }, { _: "false", $: { name: "android:textAllCaps" } }, diff --git a/apps/mobile/plugins/withAndroidModernPopupMenu.cjs b/apps/mobile/plugins/withAndroidModernPopupMenu.cjs index 5caa76e03e088..762a327580bb5 100644 --- a/apps/mobile/plugins/withAndroidModernPopupMenu.cjs +++ b/apps/mobile/plugins/withAndroidModernPopupMenu.cjs @@ -87,16 +87,14 @@ function withPopupMenuStyles(config) { "textAppearanceSmallPopupMenu", "@style/AppPopupMenu.TextAppearance", ); - // Submenu popups show their parent item as a header row that reads a - // separate theme attribute, so it needs the same themed text color. + // Submenu headers read a separate text appearance. assignStyleItem( appTheme, "textAppearancePopupMenuHeader", "@style/AppPopupMenu.HeaderTextAppearance", ); assignStyleItem(appTheme, "android:listMenuViewStyle", "@style/AppPopupMenuListMenuView"); - // Both framework and AppCompat attrs are set since the popup may inflate either CheckBox - // flavor. + // Popups may inflate framework or AppCompat CheckBoxes. assignStyleItem(appTheme, "android:checkboxStyle", "@style/AppPopupMenuCheckBox"); assignStyleItem(appTheme, "checkboxStyle", "@style/AppPopupMenuCheckBoxCompat"); } @@ -140,8 +138,7 @@ function withPopupMenuStyles(config) { { _: "@font/xml_dm_sans_regular", $: { name: "android:fontFamily" } }, ], }, - // The framework default (Widget.Material.ListMenuView) only carries - // subMenuArrow, so replacing the style wholesale is safe. + // The framework default only carries subMenuArrow. { $: { name: "AppPopupMenuListMenuView" }, item: [{ _: "@drawable/popup_menu_submenu_arrow", $: { name: "android:subMenuArrow" } }], diff --git a/apps/mobile/plugins/withAndroidNetworkSecurityConfig.cjs b/apps/mobile/plugins/withAndroidNetworkSecurityConfig.cjs new file mode 100644 index 0000000000000..90fea189e8d01 --- /dev/null +++ b/apps/mobile/plugins/withAndroidNetworkSecurityConfig.cjs @@ -0,0 +1,56 @@ +const fs = require("node:fs"); +const path = require("node:path"); +const { withAndroidManifest, withDangerousMod } = require("expo/config-plugins"); + +// Environments behind a private CA installed in the user store must work like they do in Chrome. +// Android ignores usesCleartextTraffic once a network security config exists, so permit it here. +const NETWORK_SECURITY_CONFIG = ` + + + + + + + + +`; + +function withNetworkSecurityConfigManifest(config) { + return withAndroidManifest(config, (nextConfig) => { + const application = nextConfig.modResults.manifest.application?.[0]; + + if (application == null) { + throw new Error( + "AndroidManifest.xml is missing the application element required for network security configuration.", + ); + } + + application.$ ??= {}; + application.$["android:networkSecurityConfig"] = "@xml/network_security_config"; + + return nextConfig; + }); +} + +function withNetworkSecurityConfigResource(config) { + return withDangerousMod(config, [ + "android", + async (config) => { + const xmlDir = path.join( + config.modRequest.platformProjectRoot, + "app", + "src", + "main", + "res", + "xml", + ); + fs.mkdirSync(xmlDir, { recursive: true }); + fs.writeFileSync(path.join(xmlDir, "network_security_config.xml"), NETWORK_SECURITY_CONFIG); + return config; + }, + ]); +} + +module.exports = function withAndroidNetworkSecurityConfig(config) { + return withNetworkSecurityConfigResource(withNetworkSecurityConfigManifest(config)); +}; diff --git a/apps/mobile/plugins/withAndroidPredictiveBackCompat.cjs b/apps/mobile/plugins/withAndroidPredictiveBackCompat.cjs index 99ac8a424c660..66d598829aa4e 100644 --- a/apps/mobile/plugins/withAndroidPredictiveBackCompat.cjs +++ b/apps/mobile/plugins/withAndroidPredictiveBackCompat.cjs @@ -1,10 +1,6 @@ const { withMainActivity } = require("expo/config-plugins"); -// react-native 0.85 registers its own always-enabled callback, but only on Android 16 with -// targetSdk 36 (ReactActivity's enforced-predictive-back workaround) — on Android 13-15 -// nothing is registered, the system consumes every back gesture itself, and JS back handling -// (React Navigation pops, BackHandler listeners) silently dies: each gesture just backgrounds -// the app. +// RN 0.85 registers back dispatch only on Android 16 with targetSdk 36; Android 13-15 otherwise bypass JS. const CALLBACK_PROPERTY = ` // Routes predictive-back gestures to JS on Android 13-15, where react-native @@ -24,10 +20,7 @@ const CALLBACK_REGISTRATION = ` onBackPressedDispatcher.addCallback(this, predictiveBackCompatCallback) }`; -// Wraps the template's invokeDefaultOnBackPressed: the default action ends in -// ComponentActivity.onBackPressed(), which re-enters the dispatcher — with the -// compat callback still enabled that would bounce back into JS forever instead -// of backgrounding the app. +// Disable the compat callback during default back handling to prevent dispatcher recursion. const INVOKE_DEFAULT_WRAPPER = `override fun invokeDefaultOnBackPressed() { predictiveBackCompatCallback.isEnabled = false try { diff --git a/apps/mobile/plugins/withAndroidTabletOrientation.cjs b/apps/mobile/plugins/withAndroidTabletOrientation.cjs index 6a59587b13ba5..9f3582e7f2b90 100644 --- a/apps/mobile/plugins/withAndroidTabletOrientation.cjs +++ b/apps/mobile/plugins/withAndroidTabletOrientation.cjs @@ -1,11 +1,6 @@ const { withMainActivity } = require("expo/config-plugins"); -// FULL_USER allows all four orientations while still respecting the user's -// auto-rotate lock, matching iPad behavior. Foldables change smallestScreenWidthDp on -// fold/unfold without recreating the activity (smallestScreenSize is in the -// manifest's configChanges), so the policy is re-evaluated in onConfigurationChanged: -// unfolding past the tablet breakpoint unlocks rotation, and folding back restores -// the portrait lock. +// FULL_USER respects rotation lock. Foldables change smallestScreenWidthDp without recreating the activity. const ORIENTATION_METHODS = ` // Applied in onCreate and re-applied on fold/unfold; added by diff --git a/apps/mobile/plugins/withShareExtensionDisplayName.cjs b/apps/mobile/plugins/withShareExtensionDisplayName.cjs index 6469c24d888b5..6a0ad99066e1b 100644 --- a/apps/mobile/plugins/withShareExtensionDisplayName.cjs +++ b/apps/mobile/plugins/withShareExtensionDisplayName.cjs @@ -1,8 +1,6 @@ "use strict"; -// Brand the extension while leaving its initially-empty signing team intact: Expo uses that state -// to select ios.appleTeamId and enable first-time profile provisioning. Expo runs same-type mods -// in reverse registration order, so this executes after the extension exists. +// Expo replaces the empty signing team with appleTeamId. Reverse-ordered mods run after extension creation. const fs = require("fs"); const path = require("path"); diff --git a/apps/mobile/plugins/withWidgetLogoAsset.cjs b/apps/mobile/plugins/withWidgetLogoAsset.cjs index 33cc2d0222905..d20d199119b05 100644 --- a/apps/mobile/plugins/withWidgetLogoAsset.cjs +++ b/apps/mobile/plugins/withWidgetLogoAsset.cjs @@ -1,9 +1,6 @@ "use strict"; -// ORDERING: must be listed BEFORE "expo-widgets" in the plugins array. That -// matters twice: expo-widgets' dangerous mod rmSync's ios/ExpoWidgetsTarget/ -// (deleting any catalog written before it), and its xcodeproj mod is what -// creates the widget target. +// Precede expo-widgets so its reverse-ordered mods create and wipe the target before assets are added. const path = require("path"); const fs = require("fs"); diff --git a/apps/mobile/scripts/fixtures/NetworkModuleRegression.swift b/apps/mobile/scripts/fixtures/NetworkModuleRegression.swift deleted file mode 100644 index db279d0c62e75..0000000000000 --- a/apps/mobile/scripts/fixtures/NetworkModuleRegression.swift +++ /dev/null @@ -1,80 +0,0 @@ -import Foundation - -enum NWInterface { - enum InterfaceType { - case other, wifi, cellular, loopback, wiredEthernet - } -} - -struct NWPath { - enum Status { - case satisfied, unsatisfied - } - - // A reference inside the value models the native path's retained storage. - final class Storage { - let type: NWInterface.InterfaceType - init(_ type: NWInterface.InterfaceType) { self.type = type } - } - - let status: Status - let storage: Storage - - init(_ type: NWInterface.InterfaceType, status: Status = .satisfied) { - self.status = status - storage = Storage(type) - } - - func usesInterfaceType(_ type: NWInterface.InterfaceType) -> Bool { - storage.type == type - } -} - -final class NWPathMonitor { - static var scenario = "first" - static let deliveries = DispatchGroup() - var pathUpdateHandler: ((NWPath) -> Void)? - - func start(queue: DispatchQueue) { - guard let handler = pathUpdateHandler else { fatalError("Missing path handler") } - if Self.scenario == "offline" { - handler(NWPath(.wifi, status: .unsatisfied)) - } else if Self.scenario == "first" { - handler(NWPath(.wifi)) - handler(NWPath(.cellular)) - } else { - queue.async(group: Self.deliveries) { - handler(NWPath(.wifi)) - DispatchQueue.concurrentPerform(iterations: 128) { index in - handler(NWPath(index.isMultiple(of: 2) ? .cellular : .wiredEthernet)) - } - } - } - } - - // Already queued callbacks can run after cancellation. - func cancel() {} -} - -@main -enum NetworkModuleRegression { - static func main() { - NWPathMonitor.scenario = CommandLine.arguments[1] - let module = NetworkModule() - if NWPathMonitor.scenario == "concurrent" { - DispatchQueue.concurrentPerform(iterations: 64) { _ in - let state = module.getNetworkStateAsync() - precondition(state["type"] as? String == "WIFI", "The first path must survive late callbacks") - precondition(state["isConnected"] as? Bool == true) - } - NWPathMonitor.deliveries.wait() - } else { - let state = module.getNetworkStateAsync() - let connected = NWPathMonitor.scenario != "offline" - precondition(state["type"] as? String == (connected ? "WIFI" : "NONE")) - precondition(state["isConnected"] as? Bool == connected) - precondition(state["isInternetReachable"] as? Bool == connected) - } - print("passed") - } -} diff --git a/apps/mobile/scripts/fixtures/NotificationCenterManagerRegression.swift b/apps/mobile/scripts/fixtures/NotificationCenterManagerRegression.swift deleted file mode 100644 index 6d13972d5742e..0000000000000 --- a/apps/mobile/scripts/fixtures/NotificationCenterManagerRegression.swift +++ /dev/null @@ -1,189 +0,0 @@ -import Foundation - -// The registry runs on macOS without starting a simulator. Only the OS-facing -// types are replaced; the tests compile the dependency's actual Swift source. -public enum UIBackgroundFetchResult { - case noData -} - -public struct UNNotificationPresentationOptions: OptionSet { - public let rawValue: Int - public init(rawValue: Int) { self.rawValue = rawValue } -} - -public final class UNNotification: NSObject {} - -public final class UNNotificationResponse: NSObject { - let identifier: String - init(_ identifier: String) { self.identifier = identifier } -} - -public protocol UNUserNotificationCenterDelegate: AnyObject {} - -public final class UNUserNotificationCenter: NSObject { - private static let instance = UNUserNotificationCenter() - public weak var delegate: UNUserNotificationCenterDelegate? - public static func current() -> UNUserNotificationCenter { instance } -} - -private final class TestDelegate: NotificationDelegate { - private let lock = NSLock() - private var recordedEvents: [String] = [] - var onEvent: ((String) -> Void)? - var onResponse: ((UNNotificationResponse) -> Bool)? - - var events: [String] { lock.withLock { recordedEvents } } - - private func record(_ event: String) { - lock.withLock { recordedEvents.append(event) } - onEvent?(event) - } - - func didRegister(_ deviceToken: String) { record("registered") } - func didFailRegistration(_ error: Error) { record("failed") } - func openSettings(_ notification: UNNotification?) { record("settings") } - - func willPresent(_ notification: UNNotification, completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) -> Bool { - record("present") - return false - } - - func didReceive(_ userInfo: [AnyHashable: Any], completionHandler: @escaping (UIBackgroundFetchResult) -> Void) -> Bool { - record("background") - return false - } - - func didReceive(_ response: UNNotificationResponse, completionHandler: @escaping () -> Void) -> Bool { - record(response.identifier) - return onResponse?(response) ?? false - } -} - -private func require(_ condition: @autoclosure () -> Bool, _ message: String) throws { - if !condition() { - throw NSError(domain: "NotificationCenterManagerRegression", code: 1, userInfo: [NSLocalizedDescriptionKey: message]) - } -} - -private func deliver(_ identifier: String) { - NotificationCenterManager.shared.userNotificationCenter( - UNUserNotificationCenter.current(), - didReceive: UNNotificationResponse(identifier), - withCompletionHandler: {} - ) -} - -private func reentrantCallbacks() throws { - let manager = NotificationCenterManager.shared - let center = UNUserNotificationCenter.current() - let callbacks: [(String, () -> Void)] = [ - ("registered", { manager.didRegister("token") }), - ("failed", { manager.didFailRegistration(NSError(domain: "test", code: 1)) }), - ("settings", { manager.userNotificationCenter(center, openSettingsFor: nil) }), - ("present", { manager.userNotificationCenter(center, willPresent: UNNotification(), withCompletionHandler: { _ in }) }), - ("background", { manager.didReceive([:], completionHandler: { _ in }) }) - ] - - for (event, callback) in callbacks { - let original = TestDelegate() - let replacement = TestDelegate() - original.onEvent = { [weak original] _ in - guard let original else { return } - manager.removeDelegate(original) - manager.addDelegate(replacement) - } - manager.addDelegate(original) - callback() - try require(original.events == [event], "The original delegate must receive the callback once") - try require(replacement.events.isEmpty, "New delegates must not join an in-flight callback snapshot") - callback() - try require(replacement.events == [event], "Reentrant registration must take effect for the next callback") - manager.removeDelegate(replacement) - } -} - -private func registrationDuringDelivery() throws { - let manager = NotificationCenterManager.shared - let original = TestDelegate() - let receiver = TestDelegate() - receiver.onResponse = { _ in true } - original.onResponse = { _ in - manager.addDelegate(receiver) - return false - } - manager.addDelegate(original) - deliver("handoff") - try require(receiver.events == ["handoff"], "A delegate registering during delivery must not miss the pending response") - manager.removeDelegate(original) - manager.removeDelegate(receiver) -} - -private func responseDuringReplay() throws { - let manager = NotificationCenterManager.shared - deliver("first") - let original = TestDelegate() - original.onResponse = { response in - if response.identifier == "first" { - deliver("second") - return true - } - return false - } - manager.addDelegate(original) - let receiver = TestDelegate() - receiver.onResponse = { _ in true } - manager.addDelegate(receiver) - try require(receiver.events == ["second"], "Finishing a replay must retain responses received during callbacks") - manager.removeDelegate(original) - manager.removeDelegate(receiver) -} - -private func concurrentRegistrations() throws { - let manager = NotificationCenterManager.shared - let delegates = (0..<512).map { _ in - let delegate = TestDelegate() - delegate.onResponse = { _ in true } - return delegate - } - DispatchQueue.concurrentPerform(iterations: delegates.count) { index in - manager.addDelegate(delegates[index]) - if index.isMultiple(of: 16) { - manager.didRegister("during-add") - deliver("during-add") - } - } - let before = delegates.map { $0.events.count } - manager.didRegister("after-add") - for (index, delegate) in delegates.enumerated() { - try require(delegate.events.count == before[index] + 1, "Concurrent registration must retain every delegate exactly once") - } - DispatchQueue.concurrentPerform(iterations: delegates.count) { index in - manager.removeDelegate(delegates[index]) - if index.isMultiple(of: 16) { - manager.didRegister("during-remove") - deliver("during-remove") - } - } - let removed = delegates.map { $0.events.count } - manager.didRegister("after-remove") - try require(delegates.map { $0.events.count } == removed, "Removed delegates must not receive new callbacks") -} - -@main -private enum RegressionTests { - static func main() { - do { - switch CommandLine.arguments.last { - case "reentrant": try reentrantCallbacks() - case "handoff": try registrationDuringDelivery() - case "pending": try responseDuringReplay() - case "concurrent": try concurrentRegistrations() - default: throw NSError(domain: "NotificationCenterManagerRegression", code: 2) - } - print("passed") - } catch { - FileHandle.standardError.write(Data("\(error.localizedDescription)\n".utf8)) - exit(1) - } - } -} diff --git a/apps/mobile/scripts/fixtures/PermissionsServiceRegression.m b/apps/mobile/scripts/fixtures/PermissionsServiceRegression.m deleted file mode 100644 index 7124178383d49..0000000000000 --- a/apps/mobile/scripts/fixtures/PermissionsServiceRegression.m +++ /dev/null @@ -1,55 +0,0 @@ -@interface TestPermissionRequester : NSObject -@end - -@implementation TestPermissionRequester -+ (NSString *)permissionType { return NSStringFromClass(self); } -- (NSDictionary *)getPermissions { return @{ @"status": @(EXPermissionStatusGranted) }; } -- (void)requestPermissionsWithResolver:(EXPromiseResolveBlock)resolve rejecter:(EXPromiseRejectBlock)reject { - resolve([self getPermissions]); -} -@end - -typedef struct { - __unsafe_unretained EXPermissionsService *service; - __unsafe_unretained NSArray *requesters; - size_t offset; -} Worker; - -static void *exerciseRegistry(void *context) { - Worker *worker = context; - for (size_t index = 0; index < 250; index++) { - @autoreleasepool { - id requester = worker->requesters[(index + worker->offset) % worker->requesters.count]; - [worker->service registerRequesters:@[requester]]; - id resolved = [worker->service getPermissionRequesterForType:[[requester class] permissionType]]; - assert(resolved == requester); - NSDictionary *permissions = [worker->service getPermissionUsingRequesterClass:[requester class]]; - assert([permissions[@"status"] isEqualToString:@"granted"]); - } - } - return NULL; -} - -int main(void) { - @autoreleasepool { - EXPermissionsService *service = [EXPermissionsService new]; - NSMutableArray *requesters = [NSMutableArray new]; - for (int i = 0; i < 32; i++) { - NSString *name = [NSString stringWithFormat:@"TestPermission%d", i]; - Class cls = objc_allocateClassPair([TestPermissionRequester class], name.UTF8String, 0); - objc_registerClassPair(cls); - [requesters addObject:[cls new]]; - } - Worker workers[8]; - pthread_t threads[8]; - for (size_t index = 0; index < 8; index++) { - workers[index] = (Worker){ service, requesters, index }; - assert(pthread_create(&threads[index], NULL, exerciseRegistry, &workers[index]) == 0); - } - for (size_t index = 0; index < 8; index++) { - assert(pthread_join(threads[index], NULL) == 0); - } - puts("passed"); - } - return 0; -} diff --git a/apps/mobile/scripts/generate-highlights.mts b/apps/mobile/scripts/generate-highlights.mts new file mode 100644 index 0000000000000..be7ed93d50be3 --- /dev/null +++ b/apps/mobile/scripts/generate-highlights.mts @@ -0,0 +1,189 @@ +#!/usr/bin/env node + +// Hermes has no WebAssembly, so wasm2c supplies C for T3Highlights. +// Token and language IDs are an ABI; generate native code and JS tables from the same version. +// After bumping @pierre/highlights: +// WASM2C=/path/to/wabt-1.0.42/bin/wasm2c vp run --filter @t3tools/mobile generate:highlights + +import * as NodeChildProcess from "node:child_process"; +import * as NodeCrypto from "node:crypto"; +import * as NodeFS from "node:fs"; +import * as NodeModule from "node:module"; +import * as NodeOS from "node:os"; +import * as NodePath from "node:path"; +import * as NodeURL from "node:url"; + +const WASM2C_VERSION = "1.0.42"; +const THEMES = { light: "pierre-light", dark: "pierre-dark" } as const; + +const mobileRoot = NodePath.resolve(import.meta.dirname, ".."); +const moduleRoot = NodePath.join(mobileRoot, "modules/t3-highlights"); +const generatedDataPath = NodePath.join(mobileRoot, "src/lib/highlights.generated.ts"); + +interface ThemeStyle { + readonly color?: string; + readonly italic?: boolean; + readonly weight?: number; +} + +interface PreparedTheme { + readonly fg: string; + readonly styles: ReadonlyArray; +} + +function resolveHighlightsPackage() { + const require = NodeModule.createRequire(NodePath.join(mobileRoot, "package.json")); + const root = NodePath.dirname(require.resolve("@pierre/highlights/package.json")); + const { version } = JSON.parse(NodeFS.readFileSync(NodePath.join(root, "package.json"), "utf8")); + const wasm = NodeFS.readFileSync(NodePath.join(root, "dist/highlights.wasm")); + return { + root, + version: version as string, + wasmSha256: NodeCrypto.createHash("sha256").update(wasm).digest("hex"), + }; +} + +function importDist(root: string, file: string): Promise { + // The package exports neither its language table nor its theme resolver. + return import(NodeURL.pathToFileURL(NodePath.join(root, "dist", file)).href); +} + +function generatedBanner(source: ReturnType): string { + return `Generated by apps/mobile/scripts/generate-highlights.mts from @pierre/highlights ${source.version} (highlights.wasm sha256 ${source.wasmSha256}). Do not edit.`; +} + +export async function computeHighlightsData() { + const source = resolveHighlightsPackage(); + const { default: languageIds } = await importDist<{ default: Record }>( + source.root, + "languages.js", + ); + const { prepareTheme } = await importDist<{ prepareTheme: (theme: unknown) => PreparedTheme }>( + source.root, + "theme.js", + ); + + const themeStyles: Record> = {}; + for (const [scheme, name] of Object.entries(THEMES)) { + const { default: theme } = await importDist<{ default: unknown }>( + source.root, + `themes/${name}.js`, + ); + const { fg, styles } = prepareTheme(theme); + // Mirrors `lineRecordsToTokens`: unstyled tokens take the theme foreground. + themeStyles[scheme] = styles.map((style, tokenId) => { + const color = style?.color ?? fg; + if (!/^#[0-9a-f]{6}([0-9a-f]{2})?$/iu.test(color)) { + throw new Error(`${name} token ${tokenId} has a color React Native cannot draw: ${color}`); + } + const fontStyle = (style?.italic === true ? 1 : 0) | ((style?.weight ?? 0) >= 600 ? 2 : 0); + return [color, fontStyle] as const; + }); + } + + return { source, languageIds, themeStyles }; +} + +function renderHighlightsData(data: Awaited>): string { + return [ + `// ${generatedBanner(data.source)}`, + "", + `export const HIGHLIGHTS_LANGUAGE_IDS: Readonly> = ${JSON.stringify(data.languageIds)};`, + "", + "/** `[color, fontStyle]` by token ID. fontStyle bits: italic 1, bold 2. */", + `export const HIGHLIGHTS_THEME_STYLES: Readonly>> = ${JSON.stringify(data.themeStyles)};`, + "", + ].join("\n"); +} + +// The lexers ask the host whether a non-ASCII code point can start or continue +// an identifier. These are the classes the JavaScript glue tests with regexes. +function renderIdRanges(): string { + const classes = [ + ["id_start", /^\p{ID_Start}$/u], + ["id_continue", /^[‌‍\p{ID_Continue}]$/u], + ] as const; + let out = `/* Unicode ${process.versions.unicode} identifier classes. */\n`; + for (const [name, pattern] of classes) { + const ranges: Array<[number, number]> = []; + let start = -1; + for (let codePoint = 0; codePoint <= 0x110000; codePoint += 1) { + const member = + codePoint < 0x110000 && + (codePoint < 0xd800 || codePoint > 0xdfff) && + pattern.test(String.fromCodePoint(codePoint)); + if (member && start < 0) start = codePoint; + if (!member && start >= 0) { + ranges.push([start, codePoint - 1]); + start = -1; + } + } + out += `static const uint32_t ${name}_ranges[][2] = {\n`; + for (let index = 0; index < ranges.length; index += 4) { + const row = ranges.slice(index, index + 4); + out += ` ${row.map(([from, to]) => `{0x${from.toString(16)}, 0x${to.toString(16)}}`).join(", ")},\n`; + } + out += "};\n"; + } + return out; +} + +function resolveWasm2c(): { readonly binary: string; readonly prefix: string } { + const binary = process.env.WASM2C ?? "wasm2c"; + const version = NodeChildProcess.execFileSync(binary, ["--version"], { encoding: "utf8" }).trim(); + if (version !== WASM2C_VERSION) { + throw new Error(`Expected wasm2c ${WASM2C_VERSION}, found ${version}. Set WASM2C.`); + } + const resolved = NodeFS.realpathSync( + NodePath.isAbsolute(binary) + ? binary + : NodeChildProcess.execFileSync("which", [binary], { encoding: "utf8" }).trim(), + ); + return { binary, prefix: NodePath.resolve(NodePath.dirname(resolved), "..") }; +} + +async function generate() { + const source = resolveHighlightsPackage(); + const wasm2c = resolveWasm2c(); + const scratch = NodeFS.mkdtempSync(NodePath.join(NodeOS.tmpdir(), "t3-highlights-")); + try { + NodeChildProcess.execFileSync(wasm2c.binary, [ + NodePath.join(source.root, "dist/highlights.wasm"), + "-n", + "highlights", + "-o", + NodePath.join(scratch, "highlights.c"), + ]); + const banner = `/* ${generatedBanner(source)} */\n`; + for (const file of ["highlights.c", "highlights.h"]) { + const contents = NodeFS.readFileSync(NodePath.join(scratch, file), "utf8"); + NodeFS.writeFileSync(NodePath.join(moduleRoot, "Vendor/highlights", file), banner + contents); + } + } finally { + NodeFS.rmSync(scratch, { recursive: true, force: true }); + } + + // The runtime must come from the same wabt release as the generated code. + const runtime = [ + ["include/wasm-rt.h", "wasm-rt.h"], + ["share/wabt/wasm2c/wasm-rt-impl.h", "wasm-rt-impl.h"], + ["share/wabt/wasm2c/wasm-rt-impl.c", "wasm-rt-impl.c"], + ["share/wabt/wasm2c/wasm-rt-impl-tableops.inc", "wasm-rt-impl-tableops.inc"], + ["share/wabt/wasm2c/wasm-rt-mem-impl.c", "wasm-rt-mem-impl.c"], + ["share/wabt/wasm2c/wasm-rt-mem-impl-helper.inc", "wasm-rt-mem-impl-helper.inc"], + ] as const; + for (const [from, to] of runtime) { + NodeFS.copyFileSync( + NodePath.join(wasm2c.prefix, from), + NodePath.join(moduleRoot, "Vendor/wasm2c", to), + ); + } + + NodeFS.writeFileSync(NodePath.join(moduleRoot, "cpp/generated/id_ranges.inc"), renderIdRanges()); + NodeFS.writeFileSync(generatedDataPath, renderHighlightsData(await computeHighlightsData())); + NodeChildProcess.execFileSync("vp", ["fmt", generatedDataPath], { stdio: "inherit" }); +} + +if (import.meta.main) { + await generate(); +} diff --git a/apps/mobile/scripts/generate-highlights.test.ts b/apps/mobile/scripts/generate-highlights.test.ts new file mode 100644 index 0000000000000..1dfd6ec285a94 --- /dev/null +++ b/apps/mobile/scripts/generate-highlights.test.ts @@ -0,0 +1,28 @@ +import * as NodeFS from "node:fs"; +import * as NodePath from "node:path"; +import { describe, expect, it } from "vite-plus/test"; + +import { HIGHLIGHTS_LANGUAGE_IDS, HIGHLIGHTS_THEME_STYLES } from "../src/lib/highlights.generated"; +import { computeHighlightsData } from "./generate-highlights.mts"; + +describe("generate highlights", () => { + // Token and language IDs are the native build's ABI. Bumping + // @pierre/highlights without regenerating would mislabel every token. + it("matches the installed @pierre/highlights", async () => { + const data = await computeHighlightsData(); + const nativeSource = NodeFS.readFileSync( + NodePath.resolve( + import.meta.dirname, + "../modules/t3-highlights/Vendor/highlights/highlights.c", + ), + "utf8", + ); + + const stale = "Stale. Run WASM2C=/bin/wasm2c vp run generate:highlights."; + expect(HIGHLIGHTS_LANGUAGE_IDS, stale).toEqual(data.languageIds); + expect(HIGHLIGHTS_THEME_STYLES, stale).toEqual(data.themeStyles); + expect(nativeSource.slice(0, nativeSource.indexOf("\n")), stale).toContain( + data.source.wasmSha256, + ); + }); +}); diff --git a/apps/mobile/scripts/generate-uniwind-themes.mts b/apps/mobile/scripts/generate-uniwind-themes.mts index d930766e5fd04..7f087395ad3c6 100644 --- a/apps/mobile/scripts/generate-uniwind-themes.mts +++ b/apps/mobile/scripts/generate-uniwind-themes.mts @@ -51,9 +51,7 @@ const color = (family: TailwindColorFamily, shade?: TailwindColorShade, opacity return `color-mix(in srgb, ${value} ${percentage}%, transparent)`; }; -// A registered palette theme is neither literally `light` nor `dark`, so -// appearance-sensitive values must also be represented as semantic variables for -// custom themes. +// Named palette themes need semantic appearance variables because their names are neither light nor dark. const ADAPTIVE_COLORS: Readonly> = { "--color-adaptive-amber-50-950-a40": [color("amber", 50), color("amber", 950, 0.4)], "--color-adaptive-amber-200-900-a60": [color("amber", 200), color("amber", 900, 0.6)], @@ -86,6 +84,11 @@ const ADAPTIVE_COLORS: Readonly { const variables = createMobileThemeVariables( getMobileThemeColors(DEFAULT_MOBILE_THEME_ID, appearance), @@ -292,8 +294,7 @@ if (import.meta.main) { } continue; } - // Metro watches the generated CSS. Replacing a complete temporary file keeps - // Tailwind from compiling a partially rewritten theme file. + // Atomic replacement prevents Metro from compiling partial CSS. writeFileAtomically(filename, contents); } } diff --git a/apps/mobile/scripts/measure-renders.mts b/apps/mobile/scripts/measure-renders.mts index 7ca1a8b82d737..2e517f1f7bbd0 100644 --- a/apps/mobile/scripts/measure-renders.mts +++ b/apps/mobile/scripts/measure-renders.mts @@ -1,5 +1,4 @@ -// Measures React renders in a running T3 Code Dev client. See -// docs/internals/mobile-development.md#measuring-renders. +// See docs/internals/mobile-development.md#measuring-renders. import * as NodeHttpClient from "@effect/platform-node/NodeHttpClient"; import * as NodeRuntime from "@effect/platform-node/NodeRuntime"; import * as NodeServices from "@effect/platform-node/NodeServices"; @@ -80,7 +79,6 @@ const median = (values: ReadonlyArray) => { return sorted.length % 2 ? sorted[middle]! : (sorted[middle - 1]! + sorted[middle]!) / 2; }; -/** One Hermes inspector session, reached through Metro's inspector proxy. */ const connectInspector = Effect.fn("measure.connectInspector")(function* (metro: string) { const http = yield* HttpClient.HttpClient; const targets = yield* http @@ -89,8 +87,7 @@ const connectInspector = Effect.fn("measure.connectInspector")(function* (metro: const target = targets.find((entry) => entry.appId.startsWith("com.t3tools.t3code")); if (!target) return yield* new MeasureError({ message: `No T3 Code app is attached to Metro at ${metro}.` }); - // Expo terminates inspector sockets whose Origin differs from the URL Metro - // advertises (the LAN address with `--lan`), so pass that URL as `--metro`. + // Expo closes inspector sockets unless Origin matches Metro's advertised URL; pass that URL as --metro. const socket = yield* Socket.makeWebSocket(target.webSocketDebuggerUrl, { headers: { origin: new URL(metro).origin }, openTimeout: "10 seconds", @@ -176,14 +173,12 @@ const connectServer = Effect.fn("measure.connectServer")(function* (options: Opt return { client, environmentId: EnvironmentId.make(descriptor.environmentId), projectId }; }); -// Streaming lands in turn items. Some providers stream reasoning but deliver the -// reply text in one piece, so any streaming text item counts as mid-stream. +// Some providers stream only reasoning, so any streaming text item counts. const streamingItem = (projection: OrchestrationV2ThreadProjection) => projection.turnItems.find( (item) => (item.type === "assistant_message" || item.type === "reasoning") && item.streaming, ); -/** A thread streams a long reply: the open one, or with `route` a thread the app never shows. */ const measureStreamReply = Effect.fn("measure.streamReply")(function* ( options: Options, run: number, @@ -243,8 +238,7 @@ const measureStreamReply = Effect.fn("measure.streamReply")(function* ( yield* evaluate("__t3RenderCounterStart()"); yield* Effect.sleep(`${options.windowSeconds} seconds`); const report = yield* decodeReport(yield* evaluate("JSON.stringify(__t3RenderCounterStop())")); - // React commits on every streamed delta, so an empty window means the app is not on the thread. - // A thread streaming out of view may rightly commit nothing. + // An in-view streaming thread must commit; out-of-view streaming may commit nothing. if (report.commits === 0 && Option.isNone(route)) return yield* new MeasureError({ message: `Run ${run}: no React commits in the window. Check the device for a red box.`, @@ -256,7 +250,6 @@ const measureStreamReply = Effect.fn("measure.streamReply")(function* ( const appLink = (options: Options, route: string) => `__t3RenderCounterOpen(${encodeJson(`${options.scheme}://${route.replace(/^\//, "")}`)})`; -/** Reloads onto Home, then opens `route` and lets it settle; `/` stays on Home. */ const reloadAndOpen = Effect.fn("measure.reloadAndOpen")(function* ( options: Options, route: string, @@ -277,7 +270,6 @@ const reloadAndOpen = Effect.fn("measure.reloadAndOpen")(function* ( yield* Effect.sleep("5 seconds"); }); -/** Opens a screen from a freshly loaded Home and records its mount and data settling. */ const measureRouteOpen = Effect.fn("measure.routeOpen")(function* ( options: Options, route: string, diff --git a/apps/mobile/scripts/sourcemap-upload.mts b/apps/mobile/scripts/sourcemap-upload.mts new file mode 100644 index 0000000000000..a962f98a37805 --- /dev/null +++ b/apps/mobile/scripts/sourcemap-upload.mts @@ -0,0 +1,165 @@ +import * as NodeFS from "node:fs"; +import * as NodePath from "node:path"; +import { mobileSourceMapKey, type MobilePlatform } from "@t3tools/shared/mobileSourceMaps"; +import { AwsClient } from "aws4fetch"; + +export interface SourceMapUpload { + readonly key: string; + readonly path: string; +} + +/** The `MOBILE_SOURCEMAPS_R2` secret: the relay stack's `mobileSourceMapsUploadCredentials`. */ +interface UploadCredentials { + readonly endpoint: string; + readonly bucketName: string; + readonly accessKeyId: string; + readonly secretAccessKey: string; +} + +const isPlatform = (value: unknown): value is MobilePlatform => + value === "ios" || value === "android"; + +const readJson = (path: string): unknown => JSON.parse(NodeFS.readFileSync(path, "utf8")); + +const isRecord = (value: unknown): value is Record => + typeof value === "object" && value !== null && !Array.isArray(value); + +export function parseCredentials(value: string | undefined): UploadCredentials | undefined { + if (!value?.trim()) return undefined; + let parsed: unknown; + try { + parsed = JSON.parse(value); + } catch { + // JSON.parse's message quotes the input, which here is the secret. + throw new Error("MOBILE_SOURCEMAPS_R2 is not valid JSON."); + } + if (!isRecord(parsed)) throw new Error("MOBILE_SOURCEMAPS_R2 is not a JSON object."); + const { endpoint, bucketName, accessKeyId, secretAccessKey } = parsed; + if ( + typeof endpoint !== "string" || + typeof bucketName !== "string" || + typeof accessKeyId !== "string" || + typeof secretAccessKey !== "string" + ) { + throw new Error( + "MOBILE_SOURCEMAPS_R2 needs endpoint, bucketName, accessKeyId and secretAccessKey.", + ); + } + return { endpoint, bucketName, accessKeyId, secretAccessKey }; +} + +/** One map per update `eas update --emit-metadata` published, next to the bundle `metadata.json` names. */ +export function otaSourceMapUploads(distDir: string): ReadonlyArray { + const metadata = readJson(NodePath.join(distDir, "metadata.json")); + const easMetadata = readJson(NodePath.join(distDir, "eas-update-metadata.json")); + const fileMetadata = isRecord(metadata) ? metadata.fileMetadata : undefined; + const updates = isRecord(easMetadata) ? easMetadata.updates : undefined; + if (!isRecord(fileMetadata) || !Array.isArray(updates)) { + throw new Error(`${distDir} is missing Expo export or EAS update metadata.`); + } + return updates.flatMap((update): Array => { + if (!isRecord(update) || !isPlatform(update.platform) || typeof update.id !== "string") { + return []; + } + const platformFiles = fileMetadata[update.platform]; + const bundle = isRecord(platformFiles) ? platformFiles.bundle : undefined; + if (typeof bundle !== "string") return []; + return [ + { + key: mobileSourceMapKey(update.platform, "ota", update.id), + path: NodePath.join(distDir, `${bundle}.map`), + }, + ]; + }); +} + +/** Android's Gradle plugin writes the map under the release variant; iOS to `SOURCEMAP_FILE` (eas.json). */ +export function buildSourceMapUpload( + env: Readonly>, + projectDir: string, +): SourceMapUpload { + const platform = env.EAS_BUILD_PLATFORM; + const buildId = env.EAS_BUILD_ID; + if (!isPlatform(platform) || !buildId) { + throw new Error("EAS_BUILD_PLATFORM and EAS_BUILD_ID are only set on EAS Build."); + } + if (platform === "ios") { + if (!env.SOURCEMAP_FILE) throw new Error("SOURCEMAP_FILE is not set for this iOS build."); + return { key: mobileSourceMapKey("ios", "build", buildId), path: env.SOURCEMAP_FILE }; + } + const variantsDir = NodePath.join(projectDir, "android/app/build/generated/sourcemaps/react"); + const variant = NodeFS.existsSync(variantsDir) + ? NodeFS.readdirSync(variantsDir).find((name) => /release$/iu.test(name)) + : undefined; + if (!variant) throw new Error(`No release source map under ${variantsDir}.`); + return { + key: mobileSourceMapKey("android", "build", buildId), + path: NodePath.join(variantsDir, variant, "index.android.bundle.map"), + }; +} + +/** + * EAS writes the app's debug symbols next to the `.ipa`, so native frames in iOS crash + * reports can be read with `atos`. Undefined when the build left none. + */ +export function buildDsymUpload( + env: Readonly>, + projectDir: string, +): SourceMapUpload | undefined { + if (env.EAS_BUILD_PLATFORM !== "ios" || !env.EAS_BUILD_ID) return undefined; + const buildDir = NodePath.join(projectDir, "ios/build"); + const dsym = NodeFS.existsSync(buildDir) + ? NodeFS.readdirSync(buildDir).find((name) => name.endsWith(".app.dSYM.zip")) + : undefined; + if (!dsym) return undefined; + return { key: `ios/dsym/${env.EAS_BUILD_ID}.zip`, path: NodePath.join(buildDir, dsym) }; +} + +/** Only what the relay reads: source text stays out of the bucket, and the rest is dead weight. */ +function stripToMappings(text: string): string { + const map: unknown = JSON.parse(text); + if (!isRecord(map)) throw new Error("Source map is not a JSON object."); + const { version, sources, sourceRoot, mappings } = map; + return JSON.stringify({ version, sources, sourceRoot, mappings }); +} + +export function uploadSourceMap( + credentials: UploadCredentials, + upload: SourceMapUpload, +): Promise { + return putObject( + credentials, + upload.key, + stripToMappings(NodeFS.readFileSync(upload.path, "utf8")), + "application/json", + ); +} + +export function uploadDsym(credentials: UploadCredentials, upload: SourceMapUpload) { + const body = new Uint8Array(NodeFS.readFileSync(upload.path)); + return putObject(credentials, upload.key, body, "application/zip"); +} + +async function putObject( + credentials: UploadCredentials, + key: string, + body: string | Uint8Array, + contentType: string, +): Promise { + const client = new AwsClient({ + accessKeyId: credentials.accessKeyId, + secretAccessKey: credentials.secretAccessKey, + service: "s3", + region: "auto", + }); + const url = `${credentials.endpoint.replace(/\/$/u, "")}/${credentials.bucketName}/${key}`; + const response = await client.fetch(url, { + method: "PUT", + body, + headers: { "content-type": contentType }, + }); + if (!response.ok) { + throw new Error(`R2 answered ${response.status}: ${(await response.text()).slice(0, 500)}`); + } + return body.length; +} diff --git a/apps/mobile/scripts/sourcemap-upload.test.ts b/apps/mobile/scripts/sourcemap-upload.test.ts new file mode 100644 index 0000000000000..ee8ae57d690ae --- /dev/null +++ b/apps/mobile/scripts/sourcemap-upload.test.ts @@ -0,0 +1,136 @@ +import * as NodeFS from "node:fs"; +import * as NodeHttp from "node:http"; +import type * as NodeNet from "node:net"; +import * as NodeOS from "node:os"; +import * as NodePath from "node:path"; +import { afterEach, describe, expect, it } from "vite-plus/test"; + +import { + buildDsymUpload, + buildSourceMapUpload, + otaSourceMapUploads, + uploadSourceMap, +} from "./sourcemap-upload.mts"; + +const directories: Array = []; +const tempDir = () => { + const dir = NodeFS.mkdtempSync(NodePath.join(NodeOS.tmpdir(), "sourcemap-upload-")); + directories.push(dir); + return dir; +}; +const writeFile = (path: string, contents: string) => { + NodeFS.mkdirSync(NodePath.dirname(path), { recursive: true }); + NodeFS.writeFileSync(path, contents); +}; + +afterEach(() => { + for (const dir of directories.splice(0)) NodeFS.rmSync(dir, { recursive: true, force: true }); +}); + +describe("uploadSourceMap", () => { + it("PUTs each published update's map, only what the relay reads, under its update id", async () => { + const dist = tempDir(); + writeFile( + NodePath.join(dist, "metadata.json"), + JSON.stringify({ + fileMetadata: { + android: { bundle: "_expo/static/js/android/index-abc.hbc" }, + ios: { bundle: "_expo/static/js/ios/index-def.hbc" }, + }, + }), + ); + writeFile( + NodePath.join(dist, "eas-update-metadata.json"), + JSON.stringify({ + updates: [ + { id: "update-android", platform: "android" }, + { id: "update-ios", platform: "ios" }, + { id: "update-web", platform: "web" }, + ], + }), + ); + for (const platform of ["android", "ios"]) { + writeFile( + NodePath.join( + dist, + `_expo/static/js/${platform}/index-${platform === "ios" ? "def" : "abc"}.hbc.map`, + ), + JSON.stringify({ + version: 3, + sources: [`${platform}.ts`], + sourcesContent: ["secret"], + names: ["render"], + x_facebook_sources: [[null]], + mappings: "", + }), + ); + } + + const requests: Array<{ method?: string; url?: string; auth?: string; body: string }> = []; + const server = NodeHttp.createServer((request, response) => { + let body = ""; + request.on("data", (chunk) => (body += chunk)); + request.on("end", () => { + requests.push({ + method: request.method, + url: request.url, + auth: request.headers.authorization, + body, + }); + response.end(); + }); + }); + await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve)); + try { + const address = server.address() as NodeNet.AddressInfo; + const credentials = { + endpoint: `http://127.0.0.1:${address.port}`, + bucketName: "maps", + accessKeyId: "key-id", + secretAccessKey: "secret-key", + }; + for (const upload of otaSourceMapUploads(dist)) { + await uploadSourceMap(credentials, upload); + } + expect(requests).toEqual( + ["android", "ios"].map((platform) => ({ + method: "PUT", + url: `/maps/${platform}/ota/update-${platform}.map`, + auth: expect.stringMatching(/^AWS4-HMAC-SHA256 Credential=key-id\/\d{8}\/auto\/s3\//), + body: JSON.stringify({ version: 3, sources: [`${platform}.ts`], mappings: "" }), + })), + ); + } finally { + server.close(); + } + }); +}); + +describe("buildSourceMapUpload", () => { + it("names the EAS build's embedded bundle map under its build id", () => { + const project = tempDir(); + const androidMap = NodePath.join( + project, + "android/app/build/generated/sourcemaps/react/release/index.android.bundle.map", + ); + writeFile(androidMap, "{}"); + expect( + buildSourceMapUpload({ EAS_BUILD_PLATFORM: "android", EAS_BUILD_ID: "build-1" }, project), + ).toEqual({ key: "android/build/build-1.map", path: androidMap }); + expect( + buildSourceMapUpload( + { EAS_BUILD_PLATFORM: "ios", EAS_BUILD_ID: "build-2", SOURCEMAP_FILE: "/tmp/main.map" }, + project, + ), + ).toEqual({ key: "ios/build/build-2.map", path: "/tmp/main.map" }); + }); + + it("names an iOS build's dSYMs under its build id", () => { + const project = tempDir(); + const dsym = NodePath.join(project, "ios/build/T3Code.app.dSYM.zip"); + writeFile(dsym, "zip"); + expect( + buildDsymUpload({ EAS_BUILD_PLATFORM: "ios", EAS_BUILD_ID: "build-3" }, project), + ).toEqual({ key: "ios/dsym/build-3.zip", path: dsym }); + }); +}); diff --git a/apps/mobile/scripts/sync-context-chip-icons.mjs b/apps/mobile/scripts/sync-context-chip-icons.mjs index aac4983d75e2c..d99d4d3c98478 100644 --- a/apps/mobile/scripts/sync-context-chip-icons.mjs +++ b/apps/mobile/scripts/sync-context-chip-icons.mjs @@ -43,6 +43,7 @@ const lucideIcons = [ "message-circle", "messages-square", "mouse-pointer-click", + "server", "terminal", ]; diff --git a/apps/mobile/scripts/sync-link-icons.ts b/apps/mobile/scripts/sync-link-icons.ts new file mode 100644 index 0000000000000..981c2485a04e1 --- /dev/null +++ b/apps/mobile/scripts/sync-link-icons.ts @@ -0,0 +1,79 @@ +// The native markdown renderer draws a link's icon from a raster image, so each source control +// host's mark is rendered from its definition's artwork into a bundled PNG. +import * as NodeFS from "node:fs"; +import * as NodeModule from "node:module"; +import * as NodePath from "node:path"; +import * as NodeURL from "node:url"; + +import { + sourceControlClients, + type SourceControlIcon, +} from "@t3tools/client-runtime/source-control-clients"; + +const appDirectory = NodePath.resolve( + NodePath.dirname(NodeURL.fileURLToPath(import.meta.url)), + "..", +); +const outputDirectory = NodePath.join(appDirectory, "assets/link-icons"); +const generatedModulePath = NodePath.join(appDirectory, "src/lib/markdownLinkIcons.generated.ts"); +const sharp = NodeModule.createRequire( + NodePath.resolve(appDirectory, "../../scripts/package.json"), +)("sharp"); + +const SIZE = 64; + +function attribute(name: string, value: string | number | undefined): string { + return value === undefined ? "" : ` ${name}="${value}"`; +} + +// A monochrome mark is tinted by the renderer, which only reads its alpha. +function svgMarkup(icon: SourceControlIcon): string { + const paint = (value: SourceControlIcon["paths"][number]["fill"]) => + value === undefined + ? "none" + : typeof value === "string" + ? value.replace("currentColor", "#ffffff") + : `url(#${value.gradient})`; + const gradients = (icon.gradients ?? []) + .map( + (gradient) => + `${gradient.stops + .map( + (stop) => + ``, + ) + .join("")}`, + ) + .join(""); + const paths = icon.paths + .map( + (path) => + ``, + ) + .join(""); + return `${gradients}${paths}`; +} + +NodeFS.rmSync(outputDirectory, { recursive: true, force: true }); +NodeFS.mkdirSync(outputDirectory, { recursive: true }); + +const kinds: string[] = []; +for (const definition of sourceControlClients.definitions) { + if (definition.icon === null) continue; + await sharp(Buffer.from(svgMarkup(definition.icon)), { density: 72 * 4 }) + .resize(SIZE, SIZE, { fit: "contain", background: { r: 0, g: 0, b: 0, alpha: 0 } }) + .png() + .toFile(NodePath.join(outputDirectory, `${definition.kind}.png`)); + kinds.push(definition.kind); +} + +NodeFS.writeFileSync( + generatedModulePath, + `import type { ImageSourcePropType } from "react-native";\n\nexport const SOURCE_CONTROL_LINK_ICON_SOURCES: Readonly> = {\n${kinds + .toSorted() + .map( + (kind) => + ` ${/^\w+$/u.test(kind) ? kind : `"${kind}"`}: require("../../assets/link-icons/${kind}.png"),`, + ) + .join("\n")}\n};\n`, +); diff --git a/apps/mobile/scripts/upload-sourcemaps.mts b/apps/mobile/scripts/upload-sourcemaps.mts new file mode 100644 index 0000000000000..1656035906e44 --- /dev/null +++ b/apps/mobile/scripts/upload-sourcemaps.mts @@ -0,0 +1,61 @@ +#!/usr/bin/env node +// Usage: `ota ` after `eas update --emit-metadata`, or `build` from eas-build-on-success. +// Problems are warnings, never failures: an unreadable stack is not worth failing a release over. +import { + buildDsymUpload, + buildSourceMapUpload, + otaSourceMapUploads, + parseCredentials, + uploadDsym, + uploadSourceMap, + type SourceMapUpload, +} from "./sourcemap-upload.mts"; + +const warn = (message: string) => { + // GitHub Actions shows this as an annotation; elsewhere it is a log line. + console.warn(process.env.GITHUB_ACTIONS ? `::warning::${message}` : `warning: ${message}`); +}; + +const errorMessage = (error: unknown) => (error instanceof Error ? error.message : String(error)); + +async function main() { + const [mode, distDir] = process.argv.slice(2); + const credentials = parseCredentials(process.env.MOBILE_SOURCEMAPS_R2); + if (!credentials) { + warn("MOBILE_SOURCEMAPS_R2 is not set; crash stacks from this bundle stay minified."); + return; + } + let uploads: ReadonlyArray; + if (mode === "ota" && distDir) { + uploads = otaSourceMapUploads(distDir); + } else if (mode === "build") { + uploads = [buildSourceMapUpload(process.env, process.cwd())]; + } else { + throw new Error("Usage: upload-sourcemaps.mts ota | build"); + } + if (uploads.length === 0) warn("Found no source maps to upload."); + for (const upload of uploads) { + try { + const bytes = await uploadSourceMap(credentials, upload); + console.log(`Uploaded ${upload.key} (${(bytes / 1e6).toFixed(1)} MB)`); + } catch (error) { + warn(`Could not upload ${upload.key}: ${errorMessage(error)}`); + } + } + if (mode !== "build" || process.env.EAS_BUILD_PLATFORM !== "ios") return; + const dsym = buildDsymUpload(process.env, process.cwd()); + if (!dsym) { + warn("Found no dSYM under ios/build; native iOS frames from this build stay unreadable."); + return; + } + try { + const bytes = await uploadDsym(credentials, dsym); + console.log(`Uploaded ${dsym.key} (${(bytes / 1e6).toFixed(1)} MB)`); + } catch (error) { + warn(`Could not upload ${dsym.key}: ${errorMessage(error)}`); + } +} + +await main().catch((error: unknown) => { + warn(`Source map upload skipped: ${errorMessage(error)}`); +}); diff --git a/apps/mobile/src/App.tsx b/apps/mobile/src/App.tsx index 819f780ed7d3a..225496bb7a407 100644 --- a/apps/mobile/src/App.tsx +++ b/apps/mobile/src/App.tsx @@ -1,4 +1,6 @@ -import { PermissionUpdateNotice } from "./features/connection/PermissionUpdateNotice"; +import { installPermissionUpdateNotice } from "./features/connection/permissionUpdateNotice"; +import { installComposerAttachmentUploads } from "./state/composer-attachment-uploads"; +import { installThreadOutboxDelivery } from "./state/threadOutboxDelivery"; import * as Linking from "expo-linking"; import * as SplashScreen from "expo-splash-screen"; import { useEffect } from "react"; @@ -6,31 +8,91 @@ import { StatusBar } from "react-native"; import { GestureHandlerRootView } from "react-native-gesture-handler"; import { KeyboardProvider } from "react-native-keyboard-controller"; import { SafeAreaProvider } from "react-native-safe-area-context"; -import { createStaticNavigation, getStateFromPath } from "@react-navigation/native"; +import { + CommonActions, + createPathConfigForStaticNavigation, + createStaticNavigation, + getActionFromState, + getStateFromPath, + type NavigationAction, + type NavigationState, +} from "@react-navigation/native"; +import { pipe } from "effect/Function"; import { RegistryContext } from "@effect/atom-react"; +import { ProjectChipIconRasterizer } from "./native/ProjectChipIconImages"; import { ThreadArrangementHost } from "./features/threads/ThreadArrangementSheet"; import * as Dialog from "./components/ui/Dialog"; import { CloudAuthProvider } from "./features/cloud/CloudAuthProvider"; import { prepareNativeShowcaseCapture } from "./features/showcase/nativeShowcaseScene"; -import { IncomingShareProvider } from "./features/sharing/IncomingShareProvider"; +import { installShowcaseCapture } from "./features/showcase/ShowcaseCaptureCoordinator"; +import { + presentPendingIncomingShare, + pruneIncomingShareImports, + startIncomingShareInbox, +} from "./features/sharing/IncomingShareProvider"; +import { + installAgentNotificationNavigation, + setAgentNotificationPathname, +} from "./features/agent-awareness/notificationNavigation"; +import { + installAppShortcuts, + recordAppShortcutNavigationState, +} from "./features/shortcuts/appShortcutsRuntime"; import { AppearancePreferencesProvider, + installAppearanceRuntime, useAppearancePreferences, } from "./features/settings/appearance/AppearancePreferencesProvider"; -import { RootStack } from "./Stack"; +import { RootStack, rootPathnameFromState, workspaceLocationFromState } from "./Stack"; import { appAtomRegistry } from "./state/atom-registry"; import { subscribeComposerDraftModelReconciliation } from "./state/use-composer-drafts"; import { environmentThreadShells } from "./state/threads"; import { environmentShell } from "./state/shell"; import { OverlayPortalHost } from "./components/ui/OverlayPortal"; import { shouldHandleAppLink, restoreDraftLinkState } from "./lib/appLinking"; +import { hasCloudPublicConfig } from "./features/cloud/publicConfig"; +import { takeScheduledTaskNewLink } from "./features/settings/scheduled-task-editor-state"; +import { + pairingFormLinkAction, + startDevAutoConnect, + withoutPairingTarget, +} from "./features/connection/devAutoConnect"; +import { + resolvePendingNewTaskPromptLink, + takeNewTaskPromptLink, +} from "./features/prompt-links/newTaskPromptLink"; +import { + resolvePendingThreadPromptLink, + takeThreadPromptLink, +} from "./features/prompt-links/threadPromptLink"; +import { + disposeOnFoundationReplace, + type FoundationHotModule, +} from "./lib/foundation-fast-refresh"; import { useMobileNavigationTheme } from "./lib/useMobileNavigationTheme"; -import { useUiRuntimeMemoryWarningGc } from "./lib/useUiRuntimeMemoryWarningGc"; +import { installUiRuntimeMemoryWarningGc } from "./lib/useUiRuntimeMemoryWarningGc"; import { SubscriptionUsageCoordinator } from "./widgets/SubscriptionUsageCoordinator"; -import { VoiceInputProvider } from "./features/voice-input/VoiceInputProvider"; +import { installSubscriptionUsageRefresh } from "./widgets/useSubscriptionUsage"; import { GlobalVoiceInputControl } from "./features/voice-input/GlobalVoiceInputControl"; +import { restoreSettingsLinkState } from "./features/settings/settings-navigation"; +import { + hydrateWorkspaceSelections, + launchWorkspaceURL, + recordWorkspaceSelections, + settingsLinkPage, +} from "./features/workspace/workspace-selection-store"; +import { workspaceDetailLinkAction } from "./features/workspace/workspace-detail-selection"; import { NativeLayoutMetricsProvider } from "./native/native-layout-metrics"; +import { + attachRootNavigation, + flushRootNavigationQueue, + linkToRootPath, + rootNavigationRef, +} from "./lib/rootNavigation"; +import { pruneNewTaskFlowStates } from "./features/threads/new-task-flow-state"; +import { pruneNewTaskBranchCheckouts } from "./features/threads/NewTaskDraftRouteScreen"; +import { installAppUpdateChecks } from "./features/updates/app-updates"; import "../global.css"; @@ -39,20 +101,104 @@ if (process.env.EXPO_PUBLIC_SHOWCASE === "1") { } void SplashScreen.preventAutoHideAsync().catch(() => {}); +void hydrateWorkspaceSelections(); + +const linkingConfig = { + initialRouteName: "Home", + screens: createPathConfigForStaticNavigation(RootStack, { initialRouteName: "Home" }) ?? {}, +} as const; + +function getAppStateFromPath(path: string, options: Parameters[1]) { + return pipe( + getStateFromPath(path, options), + (state) => restoreDraftLinkState(state, path), + (state) => restoreSettingsLinkState(state, settingsLinkPage()), + takeThreadPromptLink, + takeNewTaskPromptLink, + withoutPairingTarget, + startDevAutoConnect, + takeScheduledTaskNewLink, + ); +} const appLinking = { prefixes: [Linking.createURL("/"), "t3code://", "t3code-dev://", "t3code-preview://"], config: { initialRouteName: "Home" }, - filter: shouldHandleAppLink, - getStateFromPath: (path: string, options: Parameters[1]) => - restoreDraftLinkState(getStateFromPath(path, options), path), + filter: (url: string) => shouldHandleAppLink(url, hasCloudPublicConfig()), + getInitialURL: async () => (await Linking.getInitialURL()) ?? (await launchWorkspaceURL()), + getActionFromState: ( + state: Parameters[0], + options: Parameters[1], + ): ReturnType => + // Our router handles the selection; React Navigation's type only lists its own actions. + (workspaceDetailLinkAction(state) as ReturnType) ?? + pairingFormLinkAction( + state, + rootNavigationRef.isReady() ? rootNavigationRef.getRootState() : undefined, + ) ?? + getActionFromState(state, options), + getStateFromPath: getAppStateFromPath, }; +function appLinkAction(href: string): NavigationAction { + const state = getAppStateFromPath(href, linkingConfig); + if (!state) throw new Error(`Failed to parse the href to a navigation state (${href}).`); + return appLinking.getActionFromState(state, linkingConfig) ?? CommonActions.reset(state); +} + +function linkToAppPath(href: string): void { + linkToRootPath(href, appLinkAction); +} + const Navigation = createStaticNavigation(RootStack); +function handleNavigationStateChange(state: NavigationState | undefined): void { + recordWorkspaceSelections(state); + presentPendingIncomingShare(); + resolvePendingNewTaskPromptLink(state); + resolvePendingThreadPromptLink(state); + if (!state) return; + setAgentNotificationPathname(workspaceLocationFromState(state).pathname); + recordAppShortcutNavigationState(state); + pruneNewTaskFlowStates(state); + pruneNewTaskBranchCheckouts(state); + pruneIncomingShareImports(state); +} + +function handleNavigationReady(): void { + handleNavigationStateChange(rootNavigationRef.getRootState()); + flushRootNavigationQueue(); +} + +declare const module: { readonly hot?: FoundationHotModule } | undefined; + +const appServiceDisposers = [ + installUiRuntimeMemoryWarningGc(), + subscribeComposerDraftModelReconciliation({ + registry: appAtomRegistry, + threadShellAtom: environmentThreadShells.threadShellAtom, + threadRefsAtom: environmentThreadShells.threadRefsAtom, + shellStateAtom: environmentShell.stateAtom, + }), + installAppearanceRuntime(), + installSubscriptionUsageRefresh(), + installPermissionUpdateNotice(), + installThreadOutboxDelivery(), + installComposerAttachmentUploads(), + startIncomingShareInbox(), + installAgentNotificationNavigation(linkToAppPath), + installAppShortcuts(linkToAppPath), + installAppUpdateChecks(), + installShowcaseCapture(rootPathnameFromState), +]; +disposeOnFoundationReplace(typeof module === "undefined" ? undefined : module.hot, () => { + for (const dispose of appServiceDisposers) dispose(); +}); + function SplashScreenCoordinator() { const { isReady } = useAppearancePreferences(); + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- hides the native splash screen once appearance preferences have loaded useEffect(() => { if (isReady) void SplashScreen.hide(); }, [isReady]); @@ -61,18 +207,6 @@ function SplashScreenCoordinator() { } export default function App() { - useUiRuntimeMemoryWarningGc(); - useEffect( - () => - subscribeComposerDraftModelReconciliation({ - registry: appAtomRegistry, - threadShellAtom: environmentThreadShells.threadShellAtom, - threadRefsAtom: environmentThreadShells.threadRefsAtom, - shellStateAtom: environmentShell.stateAtom, - }), - [], - ); - return ( @@ -92,30 +226,26 @@ function AppContent() { <> - - - - {/* The navigation theme drives the NATIVE header appearance: native-stack - forwards `dark` as the nav bar's overrideUserInterfaceStyle. Without - this, React Navigation defaults to its light theme and every native - header (glass buttons, title, materials) is forced light even when - the system is in dark mode. */} - - - - - - - - - - {/* Anchored-menu overlays render here — in-window, so the - keyboard stays up while a dropdown is open. */} - - + + {/* native-stack needs the theme's dark flag to select dark native headers. */} + + + + + + + + + diff --git a/apps/mobile/src/Stack.tsx b/apps/mobile/src/Stack.tsx index d5a8a038fe435..872ca142c8aaa 100644 --- a/apps/mobile/src/Stack.tsx +++ b/apps/mobile/src/Stack.tsx @@ -3,7 +3,6 @@ import { ComponentCatalogScreen } from "./features/development/ComponentCatalogS import { PullRequestGuideStopScreen } from "./features/pull-requests/guide/PullRequestGuideScreen"; import { PullRequestInlineCommentScreen } from "./features/pull-requests/PullRequestInlineCommentScreen"; import { PullRequestDiscussionScreen } from "./features/pull-requests/PullRequestDiscussionScreen"; -import { createV5SheetStackNavigator } from "./native/createV5StackNavigator"; import { createWorkspaceStackNavigator } from "./features/layout/createWorkspaceStackNavigator"; import { createPathConfigForStaticNavigation, @@ -16,7 +15,7 @@ import { createNativeStackScreen, type NativeStackNavigationOptions, } from "@react-navigation/native-stack"; -import { useEffect, useRef, type ReactNode } from "react"; +import type { ReactNode } from "react"; import { Platform, Pressable, ScrollView, StyleSheet, useWindowDimensions } from "react-native"; import { useResolveClassNames } from "uniwind"; @@ -25,7 +24,11 @@ import { androidWorkspaceDestinationAnimation } from "./lib/android-workspace-na import { getCompactBrandHeaderOptions } from "./components/CompactBrandTitle"; import { WorkspaceConnectionStatusProvider } from "./features/home/WorkspaceConnectionTitle"; import { WorkspaceRootScreen } from "./features/workspace/WorkspaceRootScreen"; -import { AndroidWorkspaceSettings } from "./features/workspace/AndroidWorkspaceSettings"; +import { + recordHomeFocus, + recordHomeTransitionEnd, + recordHomeTransitionStart, +} from "./features/home/home-route-visibility"; import { AndroidWorkspaceTabsProvider } from "./features/workspace/AndroidWorkspaceTabsProvider"; import { PullRequestRouteScreen, @@ -34,15 +37,16 @@ import { import { PullRequestFilesSheet } from "./features/pull-requests/PullRequestFiles"; import { PullRequestReviewSheet } from "./features/pull-requests/PullRequestReviewSheet"; import { PullRequestReviewersScreen } from "./features/pull-requests/PullRequestReviewersScreen"; +import { PullRequestLabelsScreen } from "./features/pull-requests/PullRequestLabelsScreen"; +import { PullRequestEditScreen } from "./features/pull-requests/PullRequestEditScreen"; +import { PullRequestFilterSearchScreen } from "./features/pull-requests/PullRequestFilterSearchScreen"; import { RenderErrorBoundary, RenderFailureView, type RenderFailureProps, } from "./components/RenderErrorBoundary"; import { ArchivedThreadsRouteScreen } from "./features/archive/ArchivedThreadsRouteScreen"; -import { useAgentNotificationNavigation } from "./features/agent-awareness/notificationNavigation"; import { ConnectOnboardingRouteScreen } from "./features/cloud/ConnectOnboardingRouteScreen"; -import { useConnectOnboardingNavigation } from "./features/cloud/connectOnboardingNavigation"; import { AttachmentFileScreen } from "./features/files/AttachmentFileScreen"; import { ThreadFilesTreeScreen, ThreadFileScreen } from "./features/files/ThreadFilesRouteScreen"; import { AdaptiveWorkspaceLayout } from "./features/layout/AdaptiveWorkspaceLayout"; @@ -64,7 +68,10 @@ import { ThreadPullRequestsSheet } from "./features/threads/ThreadPullRequestsSh import { ThreadAgentsSheet } from "./features/threads/ThreadAgentsSheet"; import { ThreadBackgroundWorkSheet } from "./features/threads/ThreadBackgroundWorkSheet"; import { ThreadQueueSheet } from "./features/threads/ThreadQueueControl"; -import { ThreadRouteScreen } from "./features/threads/ThreadRouteScreen"; +import { + FullscreenThreadRouteScreen, + ThreadRouteScreen, +} from "./features/threads/ThreadRouteScreen"; import { McpAppFullscreenScreen } from "./features/threads/McpAppFullscreenScreen"; import { ConnectionsRouteScreen } from "./features/connection/ConnectionsRouteScreen"; import { ConnectionsNewRouteScreen } from "./features/connection/ConnectionsNewRouteScreen"; @@ -78,12 +85,13 @@ import { NewTaskEnvironmentPickerRouteScreen, } from "./features/threads/NewTaskContextPickerScreens"; import { - ExistingThreadSettingsRouteProvider, ExistingThreadSettingsRouteScreen, NewTaskThreadSettingsRouteScreen, } from "./features/threads/ThreadSettingsSheet"; import { NewTaskFlowProvider } from "./features/threads/new-task-flow-provider"; +import { newTaskFlowKey } from "./features/threads/new-task-flow-state"; import { NewTaskRouteScreen } from "./features/threads/NewTaskRouteScreen"; +import { SettingsNavigationRouteScreen } from "./features/settings/SettingsNavigationRouteScreen"; import { SettingsAppearanceRouteScreen } from "./features/settings/SettingsAppearanceRouteScreen"; import { SettingsClientStorageRouteScreen } from "./features/settings/SettingsClientStorageRouteScreen"; import { SettingsDiagnosticsRouteScreen } from "./features/diagnostics/SettingsDiagnosticsRouteScreen"; @@ -93,9 +101,9 @@ import { SettingsEnvironmentDetailRouteScreen } from "./features/settings/Settin import { SettingsEnvironmentsRouteScreen } from "./features/settings/SettingsEnvironmentsRouteScreen"; import { SettingsFollowUpRouteScreen } from "./features/settings/SettingsFollowUpRouteScreen"; import { - SettingsEnvironmentAgentBehaviorRouteScreen, SettingsEnvironmentMaintenanceRouteScreen, - SettingsEnvironmentNewThreadsRouteScreen, + SettingsThreadsRouteScreen, + SettingsWorktreesRouteScreen, SettingsEnvironmentSourceControlRouteScreen, } from "./features/settings/SettingsServerControlsRouteScreen"; import { @@ -107,7 +115,6 @@ import { ScheduledTaskModelPickerRouteScreen, ScheduledTaskBranchPickerRouteScreen, } from "./features/settings/ScheduledTaskPickerScreens"; -import { ScheduledTaskEditorProvider } from "./features/settings/scheduled-task-editor"; import { SettingsKeyboardRouteScreen } from "./features/settings/SettingsKeyboardRouteScreen"; import { SettingsLegalRouteScreen } from "./features/settings/SettingsLegalRouteScreen"; import { SettingsMicrophoneRouteScreen } from "./features/settings/SettingsMicrophoneRouteScreen"; @@ -122,31 +129,31 @@ import { UsageRouteScreen } from "./features/usage/UsageRouteScreen"; import { SettingsAboutRouteScreen } from "./features/settings/SettingsAboutRouteScreen"; import { SettingsNotificationsRouteScreen } from "./features/settings/SettingsNotificationsRouteScreen"; import { SettingsRouteScreen } from "./features/settings/SettingsRouteScreen"; -import { SettingsThreadsRouteScreen } from "./features/settings/SettingsThreadsRouteScreen"; +import { SettingsLabsRouteScreen } from "./features/settings/ThreadSettingsSections"; import { SettingsEnvironmentFilterProvider } from "./features/settings/settings-environment-filter"; -import { ShowcaseCaptureCoordinator } from "./features/showcase/ShowcaseCaptureCoordinator"; +import { openSettings, settingsOpenIn } from "./features/settings/settings-navigation"; +import { DEFAULT_SETTINGS_PAGE } from "./features/workspace/workspace-tab-navigation"; +import { + isWorkspaceOverlayRoute, + registerPresentedRoutes, +} from "./features/layout/workspace-overlay-routes"; +import { ShowcaseReadyMarker } from "./features/showcase/ShowcaseCaptureCoordinator"; import { SettingsLegalDocumentCloseHeaderButton, SettingsLegalDocumentExternalHeaderButton, } from "./features/settings/components/SettingsLegalDocumentRouteScreen"; -import { useAppShortcuts } from "./features/shortcuts/useAppShortcuts"; -import { useIncomingShare } from "./features/sharing/IncomingShareProvider"; -import { - EMPTY_INCOMING_SHARE_PRESENTATION_STATE, - transitionIncomingSharePresentation, -} from "./features/sharing/incoming-share-presentation"; import { NATIVE_LIQUID_GLASS_SUPPORTED } from "./native/native-glass"; import { deriveLayout } from "./lib/layout"; import { useNativeLayoutMetrics } from "./native/native-layout-metrics"; import { nativeHeaderScrollEdgeEffects } from "./native/StackHeader"; import { HORIZONTAL_FORM_SHEET_OPTIONS, formSheetDetents } from "./native/sheet-surface"; -import { useThreadOutboxDrain } from "./state/use-thread-outbox-drain"; -import { useComposerAttachmentUploadWorker } from "./state/composer-attachment-uploads"; +import { workspaceDetailRouter } from "./features/workspace/workspace-detail-selection"; const HEADER_SCROLL_EDGE_EFFECTS = nativeHeaderScrollEdgeEffects(Platform.OS, Platform.Version); type AppScreenOptions = NativeStackNavigationOptions & { readonly unstable_navigationItemStyle?: "editor"; + readonly unstable_headerMinimizationBehavior?: "onScrollUp" | "never"; }; const GLASS_HEADER_OPTIONS: AppScreenOptions = { @@ -169,6 +176,17 @@ const DETAIL_HEADER_OPTIONS: AppScreenOptions = { headerShown: Platform.OS !== "android", }; +// Like Messages on the Duo: reading back through history (scrolling up) minimizes the +// header, and reversing toward the latest message restores it. Other devices ignore it. +const THREAD_HEADER_OPTIONS: AppScreenOptions = { + ...DETAIL_HEADER_OPTIONS, + unstable_headerMinimizationBehavior: "onScrollUp", +}; + +// The Duo minimizes headers on scroll down by default. Home and the pull request lists +// stutter against it on hardware (not reproducible in the simulator), so they keep theirs. +const FIXED_DUO_HEADER: AppScreenOptions = { unstable_headerMinimizationBehavior: "never" }; + const SOLID_HEADER_OPTIONS: AppScreenOptions = { headerBackButtonDisplayMode: "minimal", headerBackTitle: "", @@ -198,8 +216,6 @@ const LEGAL_DOCUMENT_HEADER_OPTIONS: AppScreenOptions = { presentation: "fullScreenModal", }; -const NESTED_NAVIGATOR_OPTIONS = { nativeContentInsetHorizontally: false, headerShown: false }; - // Thread settings keep the Duo's vertical bar so cancel, search, filter and confirm sit in the // rail. The picker stack spans the sheet so its header reaches the rail, and insets its content. const THREAD_SETTINGS_SHEET_OPTIONS = { @@ -209,362 +225,318 @@ const THREAD_SETTINGS_SHEET_OPTIONS = { nativeContentInsetHorizontally: false, }; -const SettingsContentStack = createV5SheetStackNavigator({ - initialRouteName: "Settings", - screenOptions: { - ...GLASS_HEADER_OPTIONS, - unstable_navigationItemStyle: undefined, - }, - screens: { - Settings: createNativeStackScreen({ - screen: SettingsRouteScreen, - linking: "", - options: { - title: "Settings", - // Android draws its own app bar here. Hidden only from inside the screen, the native one - // showed for the first frame of the Settings tab and pushed the page down. - headerShown: Platform.OS !== "android", - }, - }), - SettingsEnvironments: createNativeStackScreen({ - screen: SettingsEnvironmentsRouteScreen, - linking: "environments", - options: { - title: "Environments", - }, - }), - SettingsEnvironmentDetail: createNativeStackScreen({ - screen: SettingsEnvironmentDetailRouteScreen, - linking: "environments/:environmentId", - options: { title: "Environment" }, - }), - SettingsEnvironmentNewThreads: createNativeStackScreen({ - screen: SettingsEnvironmentNewThreadsRouteScreen, - linking: "new-threads", - options: { title: "New threads" }, - }), - SettingsEnvironmentSourceControl: createNativeStackScreen({ - screen: SettingsEnvironmentSourceControlRouteScreen, - linking: "source-control", - options: { title: "Source control" }, - }), - SettingsEnvironmentAgentBehavior: createNativeStackScreen({ - screen: SettingsEnvironmentAgentBehaviorRouteScreen, - linking: "agent-behavior", - options: { title: "Agent behavior" }, - }), - SettingsProviderAccounts: createNativeStackScreen({ - screen: SettingsProviderAccountsRouteScreen, - linking: "provider-accounts", - options: { title: "Provider accounts" }, - }), - SettingsEnvironmentMaintenance: createNativeStackScreen({ - screen: SettingsEnvironmentMaintenanceRouteScreen, - linking: "maintenance", - options: { title: "Maintenance" }, - }), - SettingsNotifications: createNativeStackScreen({ - screen: SettingsNotificationsRouteScreen, - linking: "notifications", - options: { title: "Notifications" }, - }), - SettingsThreads: createNativeStackScreen({ - screen: SettingsThreadsRouteScreen, - linking: "thread-preferences", - options: { title: "Thread behavior" }, - }), - SettingsAbout: createNativeStackScreen({ - screen: SettingsAboutRouteScreen, - linking: "about", - options: { title: "About T3 Code" }, - }), - SettingsEnvironmentNew: createNativeStackScreen({ - screen: ConnectionsNewRouteScreen, - linking: "environment-new", - options: { - title: "Add Environment", - }, - }), - SettingsArchive: createNativeStackScreen({ - screen: ArchivedThreadsRouteScreen, - linking: "archive", - options: { - title: "Archived Threads", - }, - }), - SettingsAppearance: createNativeStackScreen({ - screen: SettingsAppearanceRouteScreen, - linking: "appearance", - options: { - title: "Appearance", - }, - }), - SettingsProjectGrouping: createNativeStackScreen({ - screen: SettingsProjectGroupingRouteScreen, - linking: "project-grouping", - options: { - title: "Organization", - }, - }), - SettingsOrganization: createNativeStackScreen({ - screen: SettingsProjectGroupingRouteScreen, - linking: "organization", - options: { - title: "Organization", - }, - }), - SettingsProjectOverview: createNativeStackScreen({ - screen: SettingsProjectOverviewRouteScreen, - linking: "project", - options: { title: "Project overview" }, - }), - SettingsKeyboard: createNativeStackScreen({ - screen: SettingsKeyboardRouteScreen, - linking: "keyboard", - options: { - title: "Keyboard", - }, - }), - SettingsMicrophone: createNativeStackScreen({ - screen: SettingsMicrophoneRouteScreen, - linking: "microphone", - options: { - title: "Microphone", - }, - }), - SettingsFollowUp: createNativeStackScreen({ - screen: SettingsFollowUpRouteScreen, - linking: "follow-ups", - options: { - title: "Follow-ups", - }, - }), - SettingsScheduledTasks: createNativeStackScreen({ - screen: SettingsScheduledTasksRouteScreen, - linking: "scheduled-tasks", - options: { - title: "Scheduled Tasks", - headerTitleStyle: { fontSize: 16, fontWeight: "800" }, - }, - }), - SettingsScheduledTaskNew: createNativeStackScreen({ - screen: SettingsScheduledTaskNewRouteScreen, - linking: "scheduled-tasks/new", - options: { title: "New scheduled task" }, - }), - SettingsScheduledTaskEdit: createNativeStackScreen({ - screen: SettingsScheduledTaskEditRouteScreen, - options: { title: "Edit scheduled task" }, - }), - SettingsScheduledTaskBranch: createNativeStackScreen({ - screen: ScheduledTaskBranchPickerRouteScreen, - options: { title: "Base branch" }, - }), - SettingsScheduledTaskModel: createNativeStackScreen({ - screen: ScheduledTaskModelPickerRouteScreen, - options: { - headerShown: false, - ...(Platform.OS === "android" - ? { presentation: "card" as const } - : { - ...THREAD_SETTINGS_SHEET_OPTIONS, - }), - }, - }), - SettingsClientStorage: createNativeStackScreen({ - screen: SettingsClientStorageRouteScreen, - linking: "client-storage", - options: { - title: "Client Storage", - }, - }), - SettingsDiagnostics: createNativeStackScreen({ - screen: SettingsDiagnosticsRouteScreen, - linking: "diagnostics", - options: { - title: "Diagnostics", - }, - }), - // Its params are a tap-time snapshot, not a stable resource address: `now` is the wall-clock - // of the tap, `environmentIds` is the usage screen's local filter selection, and the window - // id/kind identify freshly aggregated pools. React Navigation round-trips non-path params - // through the URL as query strings, so a path here would bake in a permanently stale - // timestamp and filter. - SettingsUsageAccount: createNativeStackScreen({ - screen: UsageLimitAccountScreen, - options: { title: "Account" }, - }), - SettingsOpenSourceLicenses: createNativeStackScreen({ - screen: SettingsOpenSourceLicensesRouteScreen, - linking: "open-source-licenses", - options: { - title: "Open source licenses", - }, - }), - SettingsOpenSourceLicense: createNativeStackScreen({ - screen: SettingsOpenSourceLicenseRouteScreen, - linking: "open-source-licenses/:entryKey", - options: { - title: "License notice", - }, - }), - SettingsUsage: createNativeStackScreen({ - screen: UsageRouteScreen, - linking: "usage", - options: { - title: "Usage", - }, - }), - }, -}); +// Settings pages are root routes so they share the workspace's columns and header. The +// `Settings` route marks the Settings tab as open (see settings-navigation.ts). +const SETTINGS_PAGE_OPTIONS = SHEET_GLASS_HEADER_OPTIONS; -// Keeping bar visibility invariant avoids iOS 26's headerless-to-headered jump. -const SettingsSheetStack = createV5SheetStackNavigator({ - initialRouteName: "SettingsContent", - screenOptions: { - headerShown: false, - }, - screens: { - SettingsContent: createNativeStackScreen({ - screen: SettingsContentStack, - options: NESTED_NAVIGATOR_OPTIONS, - linking: "", - layout: ({ children }) => ( - - {children} - - ), - }), - SettingsAuth: createNativeStackScreen({ - screen: SettingsAuthRouteScreen, - linking: "auth", - }), - SettingsWaitlist: createNativeStackScreen({ - screen: SettingsAuthRouteScreen, - linking: "waitlist", - }), - }, -}); +const SETTINGS_SCREENS = { + Settings: createNativeStackScreen({ + screen: SettingsRouteScreen, + linking: "settings", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "Settings", + ...(Platform.OS === "android" ? { animation: "none" as const } : {}), + // Android draws its own app bar here. Hidden only from inside the screen, the native one + // showed for the first frame of the Settings tab and pushed the page down. + headerShown: Platform.OS !== "android", + headerBackVisible: false, + }, + }), + SettingsEnvironments: createNativeStackScreen({ + screen: SettingsEnvironmentsRouteScreen, + linking: "settings/environments", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "Environments", + }, + }), + SettingsEnvironmentDetail: createNativeStackScreen({ + screen: SettingsEnvironmentDetailRouteScreen, + linking: "settings/environments/:environmentId", + options: { ...SETTINGS_PAGE_OPTIONS, title: "Environment" }, + }), + // Old links to New threads and Agent behavior open Threads, which absorbed them. + SettingsEnvironmentNewThreads: createNativeStackScreen({ + screen: SettingsThreadsRouteScreen, + linking: "settings/new-threads", + options: { ...SETTINGS_PAGE_OPTIONS, title: "Threads" }, + }), + SettingsEnvironmentSourceControl: createNativeStackScreen({ + screen: SettingsEnvironmentSourceControlRouteScreen, + linking: "settings/source-control", + options: { ...SETTINGS_PAGE_OPTIONS, title: "Source control" }, + }), + SettingsEnvironmentAgentBehavior: createNativeStackScreen({ + screen: SettingsThreadsRouteScreen, + linking: "settings/agent-behavior", + options: { ...SETTINGS_PAGE_OPTIONS, title: "Threads" }, + }), + SettingsWorktrees: createNativeStackScreen({ + screen: SettingsWorktreesRouteScreen, + linking: "settings/worktrees", + options: { ...SETTINGS_PAGE_OPTIONS, title: "Worktrees" }, + }), + SettingsLabs: createNativeStackScreen({ + screen: SettingsLabsRouteScreen, + linking: "settings/labs", + options: { ...SETTINGS_PAGE_OPTIONS, title: "Labs" }, + }), + SettingsProviderAccounts: createNativeStackScreen({ + screen: SettingsProviderAccountsRouteScreen, + linking: "settings/provider-accounts", + options: { ...SETTINGS_PAGE_OPTIONS, title: "Providers" }, + }), + SettingsEnvironmentMaintenance: createNativeStackScreen({ + screen: SettingsEnvironmentMaintenanceRouteScreen, + linking: "settings/maintenance", + options: { ...SETTINGS_PAGE_OPTIONS, title: "Maintenance" }, + }), + SettingsNotifications: createNativeStackScreen({ + screen: SettingsNotificationsRouteScreen, + linking: "settings/notifications", + options: { ...SETTINGS_PAGE_OPTIONS, title: "Notifications" }, + }), + SettingsThreads: createNativeStackScreen({ + screen: SettingsThreadsRouteScreen, + linking: "settings/thread-preferences", + options: { ...SETTINGS_PAGE_OPTIONS, title: "Threads" }, + }), + SettingsAbout: createNativeStackScreen({ + screen: SettingsAboutRouteScreen, + linking: "settings/about", + options: { ...SETTINGS_PAGE_OPTIONS, title: "About" }, + }), + SettingsEnvironmentNew: createNativeStackScreen({ + screen: ConnectionsNewRouteScreen, + linking: "settings/environment-new", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "Add Environment", + }, + }), + SettingsArchive: createNativeStackScreen({ + screen: ArchivedThreadsRouteScreen, + linking: "settings/archive", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "Archive", + }, + }), + SettingsNavigation: createNativeStackScreen({ + screen: SettingsNavigationRouteScreen, + linking: "settings/navigation-tabs", + options: { ...SETTINGS_PAGE_OPTIONS, title: "Navigation tabs" }, + }), + SettingsAppearance: createNativeStackScreen({ + screen: SettingsAppearanceRouteScreen, + linking: "settings/appearance", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "Appearance", + }, + }), + SettingsProjectGrouping: createNativeStackScreen({ + screen: SettingsProjectGroupingRouteScreen, + linking: "settings/project-grouping", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "General", + }, + }), + SettingsOrganization: createNativeStackScreen({ + screen: SettingsProjectGroupingRouteScreen, + linking: "settings/organization", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "General", + }, + }), + SettingsProjectOverview: createNativeStackScreen({ + screen: SettingsProjectOverviewRouteScreen, + linking: "settings/project", + options: { ...SETTINGS_PAGE_OPTIONS, title: "Projects" }, + }), + SettingsKeyboard: createNativeStackScreen({ + screen: SettingsKeyboardRouteScreen, + linking: "settings/keyboard", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "Keyboard", + }, + }), + SettingsMicrophone: createNativeStackScreen({ + screen: SettingsMicrophoneRouteScreen, + linking: "settings/microphone", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "Microphone", + }, + }), + SettingsFollowUp: createNativeStackScreen({ + screen: SettingsFollowUpRouteScreen, + linking: "settings/follow-ups", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "Chat", + }, + }), + SettingsScheduledTasks: createNativeStackScreen({ + screen: SettingsScheduledTasksRouteScreen, + linking: "settings/scheduled-tasks", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "Scheduled tasks", + headerTitleStyle: { fontSize: 16, fontWeight: "800" }, + }, + }), + SettingsScheduledTaskNew: createNativeStackScreen({ + screen: SettingsScheduledTaskNewRouteScreen, + linking: "settings/scheduled-tasks/new", + options: { ...SETTINGS_PAGE_OPTIONS, title: "New scheduled task" }, + }), + SettingsScheduledTaskEdit: createNativeStackScreen({ + screen: SettingsScheduledTaskEditRouteScreen, + options: { ...SETTINGS_PAGE_OPTIONS, title: "Edit scheduled task" }, + }), + SettingsScheduledTaskBranch: createNativeStackScreen({ + screen: ScheduledTaskBranchPickerRouteScreen, + options: { ...SETTINGS_PAGE_OPTIONS, title: "Base branch" }, + }), + SettingsScheduledTaskModel: createNativeStackScreen({ + screen: ScheduledTaskModelPickerRouteScreen, + options: { + ...SETTINGS_PAGE_OPTIONS, + headerShown: false, + ...(Platform.OS === "android" + ? { presentation: "card" as const } + : { + ...THREAD_SETTINGS_SHEET_OPTIONS, + }), + }, + }), + SettingsClientStorage: createNativeStackScreen({ + screen: SettingsClientStorageRouteScreen, + linking: "settings/client-storage", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "Client Storage", + }, + }), + SettingsDiagnostics: createNativeStackScreen({ + screen: SettingsDiagnosticsRouteScreen, + linking: "settings/diagnostics", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "Diagnostics", + }, + }), + // These params snapshot the tap time, local filters, and freshly aggregated pools. + // A linking path would round-trip them as URL query strings and preserve stale values. + SettingsUsageAccount: createNativeStackScreen({ + screen: UsageLimitAccountScreen, + options: { ...SETTINGS_PAGE_OPTIONS, title: "Account" }, + }), + SettingsOpenSourceLicenses: createNativeStackScreen({ + screen: SettingsOpenSourceLicensesRouteScreen, + linking: "settings/open-source-licenses", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "Open source licenses", + }, + }), + SettingsOpenSourceLicense: createNativeStackScreen({ + screen: SettingsOpenSourceLicenseRouteScreen, + linking: "settings/open-source-licenses/:entryKey", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "License notice", + }, + }), + SettingsUsage: createNativeStackScreen({ + screen: UsageRouteScreen, + linking: "settings/usage", + options: { + ...SETTINGS_PAGE_OPTIONS, + title: "Usage", + }, + }), + SettingsAuth: createNativeStackScreen({ + screen: SettingsAuthRouteScreen, + linking: "settings/auth", + options: { headerShown: false, presentation: "modal" }, + }), + SettingsWaitlist: createNativeStackScreen({ + screen: SettingsAuthRouteScreen, + linking: "settings/waitlist", + options: { headerShown: false, presentation: "modal" }, + }), +}; -// A nested stack means a second UINavigationController with its own UINavigationBar, which breaks -// iOS 26's shared-header morphing between Home and Thread (each pair inside one bar morphs; -// across two bars the whole screen slides). +// iOS 26 header morphing requires one UINavigationBar; nested stacks make the whole screen slide. const THREAD_LINKING_PREFIX = "threads/:environmentId/:threadId"; -const WORKSPACE_OVERLAY_ROUTES = new Set([ - "PullRequestReview", - "PullRequestInlineComment", - "ConnectOnboarding", - "Connections", - "ConnectionsNew", - "GitBranches", - "GitCommit", - "GitConfirm", - "GitOverview", - "NewTaskProject", - "NewTaskFiles", - "NewTaskFile", - "NewTaskAttachment", - "NewTaskThreadSettings", - "AddProject", - "AddProjectRepository", - "AddProjectDestination", - "AddProjectLocal", - "AddProjectNew", - "NewTaskEnvironment", - "NewTaskBranch", - "SettingsLegal", - "SettingsSheet", - "ThreadAgents", - "ThreadBackgroundWork", - "ThreadPullRequests", - "ThreadQueue", - "ThreadReviewComment", - "ThreadDevicePreview", - "ThreadBrowserPreview", - "ThreadSettingsSheet", -]); - -function workspaceLocationFromState(state: NavigationState) { - // Android opens Settings as a workspace page rather than an overlay, so the layout sees it. - const routes = state.routes.filter( - (route) => - !WORKSPACE_OVERLAY_ROUTES.has(route.name) || - (Platform.OS === "android" && route.name === "SettingsSheet"), - ); +export function workspaceLocationFromState(state: NavigationState) { + const routes = state.routes.filter((route) => !isWorkspaceOverlayRoute(route.name)); const effectiveState = routes.length > 0 && routes.length !== state.routes.length ? ({ ...state, routes, index: routes.length - 1 } as NavigationState) : state; const path = getPathFromState(effectiveState, navigationPathConfig); + const route = effectiveState.routes[effectiveState.index]; return { pathname: path.startsWith("/") ? path : `/${path}`, - routeKey: effectiveState.routes[effectiveState.index]?.key, + routeKey: route?.key, + routeName: route?.name, + routeKeys: effectiveState.routes.map((stackRoute) => stackRoute.key), }; } -// The drain hook subscribes to the outbox, all thread shells, projects, and -// connection statuses. Hosting it in a null-rendering leaf keeps those -// updates from re-rendering RootStackLayout (and with it every screen) on -// each enqueue, shell change, or reconnect. -function ThreadOutboxDrainWorker() { - useThreadOutboxDrain(); - useComposerAttachmentUploadWorker(); - return null; +export function rootPathnameFromState(state: NavigationState): string { + const path = getPathFromState(state, navigationPathConfig); + return path.startsWith("/") ? path : `/${path}`; } function RootStackLayout(props: { readonly children: React.ReactNode; readonly state: NavigationState; }) { - const navigation = useNavigation(); - const { pendingShare } = useIncomingShare(); - const sharePresentationRef = useRef(EMPTY_INCOMING_SHARE_PRESENTATION_STATE); - const path = getPathFromState(props.state, navigationPathConfig); - const pathname = path.startsWith("/") ? path : `/${path}`; + const pathname = rootPathnameFromState(props.state); const workspaceLocation = workspaceLocationFromState(props.state); - const draftRoute = props.state.routes.findLast((route) => route.name === "Thread"); + const settingsOpen = settingsOpenIn( + props.state.routes + .slice(0, props.state.index + 1) + .filter((route) => !isWorkspaceOverlayRoute(route.name)), + ); + // The flow follows the draft route even while a pushed Thread covers it, so + // its state lives exactly as long as the route. + const draftRoute = props.state.routes.findLast(isDraftThreadRoute); + const draftRouteOnTop = + draftRoute !== undefined && + props.state.routes.findLast((route) => route.name === "Thread") === draftRoute; const draftParams = ( - draftRoute?.params as - | { draft?: { draftId?: string | string[]; pendingTaskId?: string | string[] } } - | undefined + draftRoute?.params as { draft?: { draftId?: string | string[] } } | undefined )?.draft; const routeDraftId = Array.isArray(draftParams?.draftId) ? draftParams.draftId[0] : draftParams?.draftId; - const routePendingTaskId = Array.isArray(draftParams?.pendingTaskId) - ? draftParams.pendingTaskId[0] - : draftParams?.pendingTaskId; - useAgentNotificationNavigation(workspaceLocation.pathname); - useConnectOnboardingNavigation(); - useAppShortcuts(props.state); - useEffect(() => { - const transition = transitionIncomingSharePresentation(sharePresentationRef.current, { - isShareSheetPresented: isDraftThreadRoute(props.state.routes[props.state.index]), - pendingShareId: pendingShare?.id ?? null, - }); - sharePresentationRef.current = transition.state; - if (!transition.shareIdToPresent) { - return; - } - navigation.navigate("Thread", { draft: { incomingShareId: transition.shareIdToPresent } }); - }, [navigation, pendingShare, props.state]); return ( - - - + + {props.children} @@ -572,7 +544,7 @@ function RootStackLayout(props: { - + ); @@ -619,8 +591,8 @@ function NotFoundScreen() { const RootStackConfig = createWorkspaceStackNavigator({ initialRouteName: "Home", - // React Navigation calls layouts as plain functions inside its own render. Passing a - // compiled component directly would put its memo cache among the navigator's hooks. + UNSTABLE_router: workspaceDetailRouter, + // React Navigation calls layouts inline; compiled components would share the navigator's memo cache. layout: (props) => , screenOptions: { headerShown: false, @@ -638,8 +610,14 @@ const RootStackConfig = createWorkspaceStackNavigator({ Home: createNativeStackScreen({ screen: WorkspaceRootScreen, linking: "", + listeners: { + transitionStart: ({ data }) => recordHomeTransitionStart(data.closing), + transitionEnd: ({ data }) => recordHomeTransitionEnd(data.closing), + focus: recordHomeFocus, + }, options: { ...GLASS_HEADER_OPTIONS, + ...FIXED_DUO_HEADER, contentStyle: { backgroundColor: "transparent" }, headerBackVisible: false, ...getCompactBrandHeaderOptions(), @@ -651,7 +629,7 @@ const RootStackConfig = createWorkspaceStackNavigator({ path: "pull-requests/:environmentId/:projectId/:repository/:number", parse: { number: Number }, }, - options: DETAIL_HEADER_OPTIONS, + options: { ...DETAIL_HEADER_OPTIONS, ...FIXED_DUO_HEADER }, }), PullRequestGuideStop: createNativeStackScreen({ screen: PullRequestGuideStopScreen, @@ -675,12 +653,42 @@ const RootStackConfig = createWorkspaceStackNavigator({ screen: PullRequestReviewersScreen, options: { ...DETAIL_HEADER_OPTIONS, + ...FIXED_DUO_HEADER, ...HORIZONTAL_FORM_SHEET_OPTIONS, sheetAllowedDetents: formSheetDetents(0.75), sheetGrabberVisible: true, headerBackVisible: false, }, }), + PullRequestLabels: createNativeStackScreen({ + screen: PullRequestLabelsScreen, + // Presented like PullRequestFilterSearch, whose search sheet it shares. + options: + Platform.OS === "android" + ? { presentation: "card", headerShown: false } + : { + ...DETAIL_HEADER_OPTIONS, + ...HORIZONTAL_FORM_SHEET_OPTIONS, + sheetAllowedDetents: formSheetDetents(0.75), + sheetGrabberVisible: true, + headerBackVisible: false, + }, + }), + PullRequestFilterSearch: createNativeStackScreen({ + screen: PullRequestFilterSearchScreen, + // Android pushes it like the branch picker; a formSheet there leaves the list's header + // peeking above it once the keyboard opens. + options: + Platform.OS === "android" + ? { presentation: "card", headerShown: false } + : { + ...DETAIL_HEADER_OPTIONS, + ...HORIZONTAL_FORM_SHEET_OPTIONS, + sheetAllowedDetents: formSheetDetents(0.75), + sheetGrabberVisible: true, + headerBackVisible: false, + }, + }), PullRequestDiscussion: createNativeStackScreen({ screen: PullRequestDiscussionScreen, options: DETAIL_HEADER_OPTIONS, @@ -704,10 +712,19 @@ const RootStackConfig = createWorkspaceStackNavigator({ sheetGrabberVisible: true, }, }), + PullRequestEdit: createNativeStackScreen({ + screen: PullRequestEditScreen, + options: { + ...(Platform.OS === "ios" ? SHEET_GLASS_HEADER_OPTIONS : undefined), + ...HORIZONTAL_FORM_SHEET_OPTIONS, + sheetAllowedDetents: formSheetDetents(0.75), + sheetGrabberVisible: true, + }, + }), Thread: createNativeStackScreen({ screen: ThreadRouteScreen, linking: { path: "threads/:environmentId?/:threadId?", alias: ["new/draft"] }, - options: DETAIL_HEADER_OPTIONS, + options: THREAD_HEADER_OPTIONS, }), NewTaskProject: createNativeStackScreen({ screen: NewTaskRouteScreen, @@ -784,6 +801,13 @@ const RootStackConfig = createWorkspaceStackNavigator({ linking: `${THREAD_LINKING_PREFIX}/terminal`, options: SOLID_HEADER_OPTIONS, }), + ThreadInspectorFullscreen: createNativeStackScreen({ + screen: FullscreenThreadRouteScreen, + options: { + ...THREAD_HEADER_OPTIONS, + presentation: "fullScreenModal", + }, + }), ThreadDevicePreview: createNativeStackScreen({ screen: DevicePreviewRouteScreen, linking: `${THREAD_LINKING_PREFIX}/devices`, @@ -813,8 +837,7 @@ const RootStackConfig = createWorkspaceStackNavigator({ screen: ReviewCommentComposerSheet, linking: `${THREAD_LINKING_PREFIX}/review-comment`, options: { - // Android cannot host the keyboard-driven comment composer inside a - // formSheet; use a full-screen modal there instead. + // Android formSheets cannot host the keyboard-driven comment composer. ...(Platform.OS === "android" ? { presentation: "fullScreenModal" as const } : HORIZONTAL_FORM_SHEET_OPTIONS), @@ -937,18 +960,7 @@ const RootStackConfig = createWorkspaceStackNavigator({ sheetGrabberVisible: true, }, }), - SettingsSheet: createNativeStackScreen({ - screen: SettingsSheetStack, - layout: ({ children }) => {children}, - linking: "settings", - options: { - ...NESTED_NAVIGATOR_OPTIONS, - gestureEnabled: true, - headerShown: false, - // Android opens Settings as a top-level tab, so it swaps like the other tabs. - ...(Platform.OS === "android" ? { animation: "none" as const } : null), - }, - }), + ...SETTINGS_SCREENS, SettingsLegal: createNativeStackScreen({ screen: SettingsLegalRouteScreen, linking: "settings/legal", @@ -961,8 +973,7 @@ const RootStackConfig = createWorkspaceStackNavigator({ screen: ConnectOnboardingRouteScreen, linking: "connect-onboarding", options: { - // A root-level Android formSheet does not host the native stack bar; - // the route renders an embedded AndroidSheetHeader instead. + // Android root formSheets lack a native stack bar; the route provides AndroidSheetHeader. ...(Platform.OS === "android" ? { headerShown: false } : SHEET_SOLID_HEADER_OPTIONS), title: "Set up T3 Connect", gestureEnabled: true, @@ -989,13 +1000,13 @@ const RootStackConfig = createWorkspaceStackNavigator({ screen: ConnectionsNewRouteScreen, linking: "connections/new", options: { - // Keep the iOS header visible from the first render so the sheet's - // native header stack mounts without remounting the pairing form. + // Mount the iOS header immediately to avoid remounting the pairing form. ...(Platform.OS === "ios" ? SHEET_GLASS_HEADER_OPTIONS : undefined), title: "Add Environment", ...HORIZONTAL_FORM_SHEET_OPTIONS, sheetAllowedDetents: [0.55, 0.7], sheetGrabberVisible: true, + sheetCornerRadius: Platform.OS === "android" ? 28 : undefined, }, }), NotFound: createNativeStackScreen({ @@ -1026,54 +1037,45 @@ function ScreenRenderFallback(props: RenderFailureProps & { readonly routeName: const exit = navigation.canGoBack() ? { label: "Go back", onPress: () => navigation.goBack() } : props.routeName === "Home" - ? { label: "Open settings", onPress: () => navigation.navigate("SettingsSheet") } + ? // Home itself failed, and the Settings list renders inside it; open a Settings page. + { + label: "Open settings", + onPress: () => openSettings(navigation, DEFAULT_SETTINGS_PAGE), + } : { label: "Return home", onPress: () => navigation.dispatch(StackActions.replace("Home")) }; return ; } +registerPresentedRoutes( + Object.entries(RootStackConfig.config.screens ?? {}).flatMap(([name, screen]) => { + const options = (screen as { readonly options?: unknown }).options; + const presentation = + options && typeof options === "object" + ? (options as { readonly presentation?: string }).presentation + : undefined; + return presentation !== undefined && presentation !== "card" ? [name] : []; + }), +); + export const RootStack = RootStackConfig.with(function AdaptiveRootStack({ Navigator }) { const { width, height } = useWindowDimensions(); const nativeMetrics = useNativeLayoutMetrics(); const usesSplitView = deriveLayout({ width, height, nativeMetrics }).usesSplitView; - const usesWorkspaceFlowScreens = Platform.OS === "android" || usesSplitView; - const flowPresentations = useRef(new Map()); + /* oxlint-disable react/no-unstable-nested-components -- React Navigation invokes screenLayout as a render callback. */ return ( } - screenListeners={{ - state: ({ data }) => { - const keys = new Set(data.state.routes.map((route) => route.key)); - for (const key of flowPresentations.current.keys()) { - if (!keys.has(key)) flowPresentations.current.delete(key); - } - }, - }} - screenOptions={({ route }) => { - if (route.name !== "SettingsSheet") { - return Platform.OS === "android" - ? { animation: androidWorkspaceDestinationAnimation(route.name, usesSplitView) } - : {}; - } - - // Moving an open flow between a sheet and a split column remounts its nested - // navigator. Keep its presentation until dismissal so folding preserves the settings flow. - let usesCard = flowPresentations.current.get(route.key); - if (usesCard === undefined) { - usesCard = usesWorkspaceFlowScreens; - flowPresentations.current.set(route.key, usesCard); - } - return usesCard - ? { presentation: "card" } - : { - presentation: "formSheet", - sheetAllowedDetents: [1], - sheetGrabberVisible: true, - }; - }} + screenOptions={({ route }) => + Platform.OS === "android" + ? { animation: androidWorkspaceDestinationAnimation(route.name, usesSplitView) } + : {} + } /> ); + + /* oxlint-enable react/no-unstable-nested-components */ }); type RootStackType = typeof RootStack; diff --git a/apps/mobile/src/components/CompactBrandTitle.tsx b/apps/mobile/src/components/CompactBrandTitle.tsx index ec99a35e458f6..7a251a2e57c16 100644 --- a/apps/mobile/src/components/CompactBrandTitle.tsx +++ b/apps/mobile/src/components/CompactBrandTitle.tsx @@ -10,6 +10,8 @@ import { IPAD_HOME_TITLE_OFFSET } from "../lib/layoutMetrics"; import { resolveMobileStageLabel } from "../lib/mobileBranding"; import { useAndroidControlSizing } from "./ui/useAndroidControlSizing"; +const BRAND_MAX_FONT_SCALE = 1.4; + export function brandTitleOffset(): number { if (Platform.OS !== "ios") return 0; return Platform.isPad && !NATIVE_WORKSPACE_COLUMNS_SUPPORTED ? IPAD_HOME_TITLE_OFFSET : 0; @@ -19,10 +21,7 @@ export function CompactBrandTitle( props: { readonly allowFontScaling?: boolean; readonly accessibilityLabel?: string; - /** - * Fills the parent row and drops the stage badge when the full title does not fit. - * Narrow Android sidebar headers otherwise draw their actions over the badge. - */ + /** Fills the row and hides the stage badge when the full title does not fit. */ readonly fit?: boolean; } = {}, ) { @@ -52,8 +51,10 @@ export function CompactBrandTitle( ]} > + {/* A logo beside a fixed-size wordmark: it may grow with Dynamic Type, not crowd the bar. */} @@ -70,6 +71,7 @@ export function CompactBrandTitle( > @@ -92,7 +94,7 @@ export function CompactBrandTitle( ); } -export function renderCompactBrandTitle() { +function renderCompactBrandTitle() { return ; } diff --git a/apps/mobile/src/components/ComposerAttachmentStrip.tsx b/apps/mobile/src/components/ComposerAttachmentStrip.tsx index ebbfbe9881477..923afb87a3a1f 100644 --- a/apps/mobile/src/components/ComposerAttachmentStrip.tsx +++ b/apps/mobile/src/components/ComposerAttachmentStrip.tsx @@ -3,10 +3,13 @@ import { composerImageGallery } from "../lib/composerImageGallery"; import { SymbolView } from "./ui/AppSymbol"; import { imageMimeType } from "@t3tools/shared/image"; import { videoMimeType } from "@t3tools/shared/video"; -import { useEffect, useMemo, useState } from "react"; +import { useAtomValue } from "@effect/atom-react"; +import { AsyncResult, Atom } from "effect/reactivity"; +import { Paths } from "expo-file-system"; import { Image, Pressable, ScrollView, View } from "react-native"; import { AppText as Text } from "./ui/AppText"; +import { MaterializedPreviewKey, materializedPreviewAtom } from "../lib/composerImagePreview"; import { PierreEntryIcon } from "./PierreEntryIcon"; import { isFileBackedComposerAttachment, @@ -93,70 +96,31 @@ export function ComposerAttachmentThumbnail(props: ComposerAttachmentThumbnailPr ); } -const PREVIEW_CACHE_DIRECTORY = "t3-composer-previews"; - -/** - * Fabric re-parses an image source URL on every layout pass of the node, and a - * multi-megabyte data URL makes each Fabric commit slow enough that concurrent - * UI-thread commits (the question card's coverage animation) win the race every - * time until the renderer aborts. - */ +/** Fabric re-parses URLs each layout; large data URLs can stall and abort commits. */ const INLINE_PREVIEW_FALLBACK_MAX_CHARS = 256_000; -async function materializeDataUrlPreview(id: string, dataUrl: string): Promise { - const comma = dataUrl.indexOf(","); - if (comma < 0) return null; - const { Directory, File, Paths } = await import("expo-file-system"); - const mimeType = /^data:([^;,]+)/.exec(dataUrl)?.[1] ?? "image/jpeg"; - const extension = (mimeType.split("/")[1] ?? "jpg").replace("jpeg", "jpg"); - const directory = new Directory(Paths.cache, PREVIEW_CACHE_DIRECTORY); - directory.create({ idempotent: true, intermediates: true }); - const file = new File(directory, `${id}.${extension}`); - if (!file.exists) { - file.create(); - await file.write(dataUrl.slice(comma + 1), { encoding: "base64" }); - } - return file.uri; -} +const noMaterializedPreview = Atom.make(AsyncResult.initial()).pipe( + Atom.withLabel("composer-image-preview:none"), +); function useComposerImagePreviewUri(attachment: DraftComposerImageAttachment): string | null { - const { id, fileUri, previewUri } = attachment; - const [rebased, setRebased] = useState<{ fileUri: string; uri: string } | null>(null); - const [materialized, setMaterialized] = useState<{ id: string; uri: string | null } | null>(null); + const { fileUri, previewUri } = attachment; const inlinePreview = fileUri === undefined && previewUri.startsWith("data:"); - useEffect(() => { - if (fileUri === undefined) return; - let cancelled = false; - void (async () => { - const { Paths } = await import("expo-file-system"); - const owned = resolveOwnedComposerAttachmentFileUri(fileUri, Paths.document.uri); - if (!cancelled && owned !== null && owned !== previewUri) setRebased({ fileUri, uri: owned }); - })(); - return () => { - cancelled = true; - }; - }, [fileUri, previewUri]); - useEffect(() => { - if (!inlinePreview) return; - let cancelled = false; - void materializeDataUrlPreview(id, previewUri) - .then((uri) => { - if (!cancelled && uri !== null) setMaterialized({ id, uri }); - }) - .catch((error: unknown) => { - console.warn("[composer-attachments] could not cache an image preview", error); - if (!cancelled) setMaterialized({ id, uri: null }); - }); - return () => { - cancelled = true; - }; - }, [id, inlinePreview, previewUri]); - if (fileUri !== undefined && rebased?.fileUri === fileUri) return rebased.uri; - if (fileUri !== undefined) return previewUri.startsWith("data:") ? fileUri : previewUri; + const materialized = useAtomValue( + inlinePreview + ? materializedPreviewAtom(new MaterializedPreviewKey(attachment)) + : noMaterializedPreview, + ); + if (fileUri !== undefined) { + // Reinstalls move the app container, so a stored file URI may point at the old one. + const owned = resolveOwnedComposerAttachmentFileUri(fileUri, Paths.document.uri); + if (owned !== null) return owned; + return previewUri.startsWith("data:") ? fileUri : previewUri; + } if (inlinePreview) { - if (materialized?.id !== id) return null; + if (!AsyncResult.isSuccess(materialized)) return null; return ( - materialized.uri ?? + materialized.value ?? (previewUri.length <= INLINE_PREVIEW_FALLBACK_MAX_CHARS ? previewUri : null) ); } @@ -285,15 +249,12 @@ function ComposerVideoAttachment(props: { const { attachment } = props; const sourceIdentifier = `draft:${attachment.id}`; const style = { width: props.size, height: props.size, borderRadius: props.borderRadius }; - const actionsSource = useMemo( - () => ({ - name: attachment.name, - mimeType: videoMimeType(attachment) ?? attachment.mimeType, - sourceIdentifier, - attachment, - }), - [attachment, sourceIdentifier], - ); + const actionsSource: MediaActionsSource = { + name: attachment.name, + mimeType: videoMimeType(attachment) ?? attachment.mimeType, + sourceIdentifier, + attachment, + }; return ( composerImageGallery(props.attachments), [props.attachments]); + const gallery = composerImageGallery(props.attachments); const size = props.imageSize ?? 72; const radius = props.imageBorderRadius ?? 16; const removeButtonPlacement = props.removeButtonPlacement ?? "overlay"; diff --git a/apps/mobile/src/components/ComposerContextAttachment.tsx b/apps/mobile/src/components/ComposerContextAttachment.tsx index b198c5add654c..edb5522f3d0f8 100644 --- a/apps/mobile/src/components/ComposerContextAttachment.tsx +++ b/apps/mobile/src/components/ComposerContextAttachment.tsx @@ -5,10 +5,13 @@ import * as Dialog from "./ui/Dialog"; import type { ComposerContextRecord, EnvironmentId } from "@t3tools/contracts"; import { Pressable, View } from "react-native"; import { Image } from "expo-image"; -import { useEffect, useId, useState } from "react"; +import { useId, useState } from "react"; import type { DraftComposerAttachment } from "../lib/composerImages"; import { composerAttachmentInlineUri, isFileBackedComposerAttachment } from "../lib/composerImages"; -import { loadLocalAttachmentPreview } from "../lib/localAttachmentPreview"; +import { + loadLocalAttachmentPreview, + useLocalAttachmentPreview, +} from "../lib/localAttachmentPreview"; import { downloadAndShareAttachment } from "../lib/attachmentDownload"; import { assetImageSource } from "../lib/assetImageSource"; import { useAssetUrlState, useRefreshAssetUrl } from "../state/assets"; @@ -35,31 +38,13 @@ export function ComposerContextAttachment(props: { const remoteEnvironmentId = local || inlineUri ? null : (props.environmentId ?? null); const asset = useAssetUrlState(remoteEnvironmentId, resource); const refresh = useRefreshAssetUrl(remoteEnvironmentId, resource); - const [localUri, setLocalUri] = useState(null); - const [error, setError] = useState(null); + const localPreview = useLocalAttachmentPreview(local ?? null); + const error = localPreview.error ? "The local file is unavailable. Attach it again." : null; const [sharing, setSharing] = useState(false); const [previewOpen, setPreviewOpen] = useState(false); - useEffect(() => { - if (!local) return; - const controller = new AbortController(); - let dispose: (() => void) | undefined; - void loadLocalAttachmentPreview(local, controller.signal) - .then((preview) => { - if (!preview) return; - if (controller.signal.aborted) return preview.dispose(); - dispose = preview.dispose; - setLocalUri(preview.uri); - setError(null); - }) - .catch(() => { - if (!controller.signal.aborted) setError("The local file is unavailable. Attach it again."); - }); - return () => { - controller.abort(); - dispose?.(); - }; - }, [local]); - const uri = local ? localUri : (inlineUri ?? (asset._tag === "Success" ? asset.url : null)); + const uri = local + ? localPreview.uri + : (inlineUri ?? (asset._tag === "Success" ? asset.url : null)); const share = async () => { if (sharing) return; setSharing(true); diff --git a/apps/mobile/src/components/ComposerContextSheet.tsx b/apps/mobile/src/components/ComposerContextSheet.tsx index 1cafc5814c542..8121bfdece763 100644 --- a/apps/mobile/src/components/ComposerContextSheet.tsx +++ b/apps/mobile/src/components/ComposerContextSheet.tsx @@ -11,6 +11,7 @@ import type { ScopedThreadRef, } from "@t3tools/contracts"; import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; +import { sourceControlClients } from "@t3tools/client-runtime/source-control-clients"; import { videoMimeType } from "@t3tools/shared/video"; import { Platform, Pressable, ScrollView, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; @@ -110,7 +111,7 @@ export function ComposerContextSheet(props: { : undefined; if (record && !("payload" in record) && (record.kind === "image" || record.kind === "file")) { const mimeType = videoMimeType(record) ?? record.mimeType; - const previewKind = filePreviewKind(record); + const previewKind = filePreviewKind(record, { richDocuments: false }); const resource = { _tag: "attachment" as const, attachmentId: record.attachmentId, @@ -182,6 +183,10 @@ export function ComposerContextSheet(props: { record?.kind === "review-comment" && "pullRequest" in record ? record.pullRequest?.url : undefined; + const changeRequestTerm = ( + (pullRequestUrl ? sourceControlClients.findByChangeRequestUrl(pullRequestUrl) : undefined) ?? + sourceControlClients.get(undefined) + ).changeRequest.singular; const terminal = record?.kind === "terminal" && !("payload" in record) ? record : null; return ( @@ -263,18 +268,23 @@ export function ComposerContextSheet(props: { - {record.elements?.map((element, index) => ( - - - - - - - - ))} + {record.elements?.map( + (element, index) => ( + /* oxlint-disable react/no-array-index-key -- Captured DOM elements are a fixed snapshot without persistent element IDs. */ + + + + + + + ) /* oxlint-enable react/no-array-index-key */, + )} ) : null} {record.kind === "element" ? ( @@ -314,6 +324,9 @@ export function ComposerContextSheet(props: { ) : null} ) : null} + {record.kind === "environment" ? ( + + ) : null} {record.kind === "skill" ? ( @@ -354,12 +367,12 @@ export function ComposerContextSheet(props: { onPress={() => { props.onClose(); void openPullRequest(pullRequestUrl).catch(() => - Dialog.alert("Could not open pull request", "Try again when connected."), + Dialog.alert(`Could not open ${changeRequestTerm}`, "Try again when connected."), ); }} className="rounded-xl bg-subtle p-4" > - Open pull request + Open {changeRequestTerm} ) : null} {props.onOpenAttachment ? ( @@ -372,7 +385,7 @@ export function ComposerContextSheet(props: { ) : null} {props.onOpenPullRequest && !pullRequestUrl ? ( - ); + const Button = (props: { readonly children?: ReactNode; readonly onClick?: () => void }) => { + if (props.onClick) renderedClicks.push(props.onClick); + return ; + }; return { AlertDialog: Object.assign(Slot, { Title: Slot, @@ -51,6 +56,7 @@ function mountHost() { afterEach(() => { for (const root of roots.splice(0)) act(() => root.unmount()); + renderedClicks.length = 0; document.body.innerHTML = ""; }); @@ -65,3 +71,34 @@ it("keeps presenting dialogs after an older root's Host unmounts", () => { expect(current.container.textContent).toContain("Saved"); }); + +it("presents a dialog requested before any Host mounted", () => { + Dialog.alert("Could not import shared content", undefined, [{ text: "Dismiss" }]); + + const { container } = mountHost(); + + expect(container.textContent).toContain("Could not import shared content"); +}); + +it("keeps a dialog raised while the activity is replaced", () => { + const previous = mountHost(); + act(() => Dialog.alert("Shared content imported", undefined, [{ text: "OK" }])); + const current = mountHost(); + roots.splice(roots.indexOf(previous.root), 1); + act(() => previous.root.unmount()); + + expect(current.container.textContent).toContain("Shared content imported"); +}); + +it("ignores a late action from a dialog that a newer one replaced", () => { + const { container } = mountHost(); + const olderAction = vi.fn(); + act(() => Dialog.alert("Older", undefined, [{ text: "OK", onPress: olderAction }])); + const olderClick = renderedClicks.at(-1)!; + act(() => Dialog.alert("Newer", undefined, [{ text: "OK" }])); + + act(() => olderClick()); + + expect(olderAction).toHaveBeenCalledOnce(); + expect(container.textContent).toContain("Newer"); +}); diff --git a/apps/mobile/src/components/ui/Dialog.android.tsx b/apps/mobile/src/components/ui/Dialog.android.tsx index 626c6c305a5b9..af05275b7f270 100644 --- a/apps/mobile/src/components/ui/Dialog.android.tsx +++ b/apps/mobile/src/components/ui/Dialog.android.tsx @@ -14,7 +14,7 @@ import { import { useAppearancePreferences } from "../../features/settings/appearance/AppearancePreferencesProvider"; import { useScaledTextRole } from "../../features/settings/appearance/useScaledTextRole"; -import { useCallback, useEffect, useRef, useState } from "react"; +import { useSyncExternalStore } from "react"; import { themeColorWithContrast } from "../../lib/mobileTheme"; import type { Alert, AlertButton } from "react-native"; import type { ConfirmDialogRequest, TextInputDialogRequest } from "./Dialog.types"; @@ -33,64 +33,78 @@ type DialogRequest = | { readonly kind: "confirm"; readonly request: ConfirmDialogRequest } | { readonly kind: "text-input"; readonly request: TextInputDialogRequest }; -let presentRequest: ((request: DialogRequest) => void) | null = null; +type PresentedDialog = DialogRequest & { readonly id: number }; + +// App services raise dialogs before the root mounts, so the request lives in +// the module and the Host renders whatever is current. One dialog shows at a +// time: a new request replaces the presented one. +let presented: PresentedDialog | null = null; +let nextPresentationId = 0; +const listeners = new Set<() => void>(); + +function setPresented(next: PresentedDialog | null) { + presented = next; + for (const listener of listeners) listener(); +} + +function submitRequest(dialog: DialogRequest) { + setPresented({ ...dialog, id: ++nextPresentationId }); +} + +/** Closes the dialog only if it is still the one the action came from. */ +function dismiss(id: number) { + if (presented?.id === id) setPresented(null); +} + +function subscribe(listener: () => void) { + listeners.add(listener); + return () => { + listeners.delete(listener); + }; +} + +function getPresented() { + return presented; +} export function alert(...[title, message, buttons, options]: Parameters): void { const actions = buttons?.length ? buttons.slice(0, 3) : [{ text: "OK" }]; const normalized = actions.map((action, index) => index === actions.length - 1 ? { ...action, text: action.text || "OK" } : action, ); - presentRequest?.({ + submitRequest({ kind: "alert", request: { title, message, buttons: normalized, options }, }); } export function confirm(request: ConfirmDialogRequest): void { - presentRequest?.({ kind: "confirm", request }); + submitRequest({ kind: "confirm", request }); } export function prompt(request: TextInputDialogRequest): void { - presentRequest?.({ kind: "text-input", request }); + submitRequest({ kind: "text-input", request }); } -/** Android presenter for Dialog.alert, Dialog.confirm and Dialog.prompt; mounted once at the app root. */ export function Host() { - const [presented, setPresented] = useState<(DialogRequest & { readonly id: number }) | null>( - null, - ); - const [inputValue, setInputValue] = useState(""); - const nextPresentationId = useRef(0); - useEffect(() => { - const present = (request: DialogRequest) => { - setInputValue(request.kind === "text-input" ? request.request.initialValue : ""); - setPresented({ ...request, id: ++nextPresentationId.current }); - }; - presentRequest = present; - return () => { - // When Android replaces the activity, the new root's Host registers before the old root - // unmounts. Clearing unconditionally would leave the live Host without dialogs. - if (presentRequest === present) presentRequest = null; - }; - }, []); + const presented = useSyncExternalStore(subscribe, getPresented, getPresented); - const handleCancel = useCallback(() => { - setPresented(null); - if (presented?.kind === "alert") presented.request.options?.onDismiss?.(); - else presented?.request.onCancel?.(); - }, [presented]); + const handleCancel = () => { + if (!presented) return; + dismiss(presented.id); + if (presented.kind === "alert") presented.request.options?.onDismiss?.(); + else presented.request.onCancel?.(); + }; - const handleConfirm = useCallback( - (nativeInputValue?: string) => { - setPresented(null); - if (presented?.kind === "confirm") { - presented.request.onConfirm(); - } else if (presented?.kind === "text-input") { - presented.request.onConfirm(nativeInputValue ?? inputValue); - } - }, - [inputValue, presented], - ); + const handleConfirm = (nativeInputValue?: string) => { + if (!presented) return; + dismiss(presented.id); + if (presented.kind === "confirm") { + presented.request.onConfirm(); + } else if (presented.kind === "text-input") { + presented.request.onConfirm(nativeInputValue ?? presented.request.initialValue); + } + }; if (presented?.kind === "alert") { return ( @@ -104,7 +118,7 @@ export function Host() { alertActions={presented.request.buttons ?? [{ text: "OK" }]} dismissable={presented.request.options?.cancelable ?? false} onAlertAction={(action) => { - setPresented(null); + dismiss(presented.id); action.onPress?.(); }} onCancel={handleCancel} @@ -121,7 +135,6 @@ export function Host() { presented.kind === "text-input" ? presented.request.initialValue : undefined } inputPlaceholder={presented.kind === "text-input" ? presented.request.placeholder : undefined} - onInputChange={setInputValue} onCancel={handleCancel} onConfirm={handleConfirm} /> @@ -213,7 +226,6 @@ function DialogPresentation(props: DialogPresentationProps) { singleLine value={inputState} selection={inputSelection} - onValueChange={props.onInputChange} textStyle={inputTypography} keyboardOptions={{ imeAction: "done" }} keyboardActions={{ @@ -268,7 +280,6 @@ interface DialogPresentationProps { >; readonly inputInitialValue?: string; readonly inputPlaceholder?: string; - readonly onInputChange?: (value: string) => void; readonly onCancel: () => void; readonly onConfirm: (inputValue?: string) => void; } diff --git a/apps/mobile/src/components/ui/Dialog.tsx b/apps/mobile/src/components/ui/Dialog.tsx index dbbc1096e1e13..afef71264cc6d 100644 --- a/apps/mobile/src/components/ui/Dialog.tsx +++ b/apps/mobile/src/components/ui/Dialog.tsx @@ -3,7 +3,6 @@ import type { ConfirmDialogRequest, TextInputDialogRequest } from "./Dialog.type export type { ConfirmDialogRequest, TextInputDialogRequest } from "./Dialog.types"; -/** Informational and multi-action alerts share the same platform presenter. */ export function alert(...args: Parameters): void { Alert.alert(...args); } @@ -32,7 +31,6 @@ export function prompt(request: TextInputDialogRequest): void { ); } -/** iOS alerts are presented directly by React Native. */ export function Host() { return null; } diff --git a/apps/mobile/src/components/ui/GlassSurface.tsx b/apps/mobile/src/components/ui/GlassSurface.tsx index 05bf0532e460e..8af080fc19cc7 100644 --- a/apps/mobile/src/components/ui/GlassSurface.tsx +++ b/apps/mobile/src/components/ui/GlassSurface.tsx @@ -25,7 +25,8 @@ interface GlassSurfaceProps extends ViewProps { readonly ref?: Ref; readonly children: ReactNode; readonly glassEffectStyle?: "clear" | "regular" | "none"; - readonly tintColor?: ColorValue; + // null leaves UIKit's material untinted instead of applying the theme tint. + readonly tintColor?: ColorValue | null; readonly tintColorClassName?: string; readonly chrome?: "default" | "none"; readonly fallbackColor?: ColorValue; @@ -71,7 +72,7 @@ export function GlassSurface({ className, )} glassEffectStyle={glassEffectStyle} - tintColor={tintColor === undefined ? undefined : String(tintColor)} + tintColor={tintColor == null ? undefined : String(tintColor)} tintColorClassName={ tintColorClassName ?? (tintColor === undefined ? "accent-glass-tint" : undefined) } diff --git a/apps/mobile/src/components/ui/ListChoiceRow.tsx b/apps/mobile/src/components/ui/ListChoiceRow.tsx index 748752f5cd415..9e231b7c25b90 100644 --- a/apps/mobile/src/components/ui/ListChoiceRow.tsx +++ b/apps/mobile/src/components/ui/ListChoiceRow.tsx @@ -26,10 +26,8 @@ export function ListChoiceRow(props: { onPress={props.onPress} android_ripple={{ color: rippleStyle.backgroundColor }} unstable_pressDelay={Platform.OS === "android" ? 50 : undefined} - className={cn( - props.selected ? "bg-subtle" : "bg-grouped-card", - props.separated && "border-t border-border-subtle", - )} + // Like UIKit and Material lists, only the checkmark or radio marks the selected row. + className={cn("bg-grouped-card", props.separated && "border-t border-border-subtle")} > void }>; return ( diff --git a/apps/mobile/src/components/ui/Menu.tsx b/apps/mobile/src/components/ui/Menu.tsx index ca08276db684e..17757fe84b3d6 100644 --- a/apps/mobile/src/components/ui/Menu.tsx +++ b/apps/mobile/src/components/ui/Menu.tsx @@ -51,25 +51,23 @@ export function Menu(props: MenuProps) { let children = menuProps.children; if (props.shouldOpenOnLongPress && isValidElement(children)) { const child = children as ReactElement>; + /* oxlint-disable react/refs -- Cloning the trigger installs event callbacks; the refs are accessed when those callbacks run. */ children = cloneElement(child, { onTouchStart: (event) => { - // Reset for a new touch, not onPressIn, which also fires when a - // finger moves out of the row and back during the same gesture. + // onPressIn can repeat within one gesture when a finger leaves and re-enters the row. menuPress.current.isPreparing = false; menuPress.current.suppressPress = menuPress.current.isOpen; pendingPress.current = null; child.props.onTouchStart?.(event); }, onPress: (event) => { - // Accessibility clicks have no touch identifier and must not inherit - // cancellation from a previous physical gesture. + // Accessibility clicks lack touch identifiers and must ignore previous touch cancellation. const isTouch = typeof event.nativeEvent.identifier === "number"; if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { return; } if (isTouch && menuPress.current.isPreparing) { - // A release can arrive between native menu preparation and display. - // Let UIKit's display/cancel callback decide this press's outcome. + // A release can precede native display; let UIKit's display/cancel callback decide its outcome. event.persist(); pendingPress.current = () => child.props.onPress?.(event); return; @@ -77,6 +75,7 @@ export function Menu(props: MenuProps) { child.props.onPress?.(event); }, }); + /* oxlint-enable react/refs */ menuProps.onMenuInteractionStart = () => { menuPress.current.isPreparing = true; props.onMenuInteractionStart?.(); @@ -91,9 +90,7 @@ export function Menu(props: MenuProps) { menuProps.onCloseMenu = () => { menuPress.current.isPreparing = false; menuPress.current.isOpen = false; - // Keep this gesture cancelled even if dismissal precedes finger-up. - // A separate JS long-press timer would also swallow holds that never - // open the native menu. + // Keep cancellation through finger-up even if the menu dismisses first. const press = pendingPress.current; pendingPress.current = null; props.onCloseMenu?.(); diff --git a/apps/mobile/src/components/ui/MenuPopup.android.tsx b/apps/mobile/src/components/ui/MenuPopup.android.tsx index 66a398bc21a81..dd6ef2b046566 100644 --- a/apps/mobile/src/components/ui/MenuPopup.android.tsx +++ b/apps/mobile/src/components/ui/MenuPopup.android.tsx @@ -8,6 +8,7 @@ import { Text, } from "@expo/ui/jetpack-compose"; import { defaultMinSize, padding, size, width } from "@expo/ui/jetpack-compose/modifiers"; +import type { MenuAction } from "@react-native-menu/menu"; import { Pressable } from "react-native"; import { resolveScaledTextRole } from "../../lib/appearancePreferences"; @@ -16,11 +17,10 @@ import { useAppearancePreferences } from "../../features/settings/appearance/App import type { MenuPopupProps } from "./MenuPopup"; import { isAppSymbolName, SymbolView, type AppSymbolName } from "./AppSymbol"; -// The glyph is a React Native view hosted in the Compose row, and its native host consumes -// every touch over it, so the row's onClick never sees a tap on the icon. The glyph runs the -// row's action itself; the row stays the accessible element. +// The Compose glyph host consumes touches; run the action here and keep accessibility on the row. function MenuIcon(props: { readonly name: AppSymbolName; + readonly color?: MenuAction["imageColor"]; readonly onPress: () => void; readonly destructive?: boolean; readonly disabled?: boolean; @@ -40,21 +40,24 @@ function MenuIcon(props: { name={props.name} size={iconSize} type="monochrome" - tintColorClassName={ - props.disabled - ? "accent-icon-subtle" - : props.destructive - ? "accent-danger-foreground" - : "accent-foreground" - } + {...(typeof props.color === "string" && !props.disabled + ? { tintColor: props.color } + : { + tintColorClassName: props.disabled + ? "accent-icon-subtle" + : props.destructive + ? "accent-danger-foreground" + : "accent-foreground", + })} /> ); } -/** Native popup positioned at the original trigger, outside virtualized rows. */ -export function MenuPopup(props: MenuPopupProps) { +export function MenuPopupItems( + props: Pick, +) { const { appearance, themeVariables: colors } = useAppearancePreferences(); const { scale, menuItemHeight } = useAndroidControlSizing(); const body = resolveScaledTextRole("body", appearance.baseFontSize); @@ -63,7 +66,7 @@ export function MenuPopup(props: MenuPopupProps) { const muted = colors["--color-foreground-muted"]; // A fixed native item height clips wrapped labels; a minimum lets each row grow. const itemModifiers = [width(props.menuWidth), defaultMinSize({ minHeight: menuItemHeight })]; - const items = ( + return ( <> {props.parent ? ( @@ -96,6 +99,7 @@ export function MenuPopup(props: MenuPopupProps) { props.onPress(action)} destructive={action.attributes?.destructive} disabled={action.attributes?.disabled} @@ -144,6 +148,11 @@ export function MenuPopup(props: MenuPopupProps) { ))} ); +} + +export function MenuPopup(props: MenuPopupProps) { + const { themeVariables: colors } = useAppearancePreferences(); + const items = ; if (props.inline) { return ( , "colorScheme" | "seedColor" | "colorOverrides">, ) { const { colors, colorScheme, systemColorsActive } = useControlTheme(); - const colorOverrides = useMemo( - () => (systemColorsActive ? undefined : createNativeThemeColors(colors)), - [colors, systemColorsActive], - ); + const colorOverrides = systemColorsActive ? undefined : createNativeThemeColors(colors); return ; } diff --git a/apps/mobile/src/components/ui/NativeThemeHost.tsx b/apps/mobile/src/components/ui/NativeThemeHost.tsx index 36e96d0773d7f..9781feea1b29a 100644 --- a/apps/mobile/src/components/ui/NativeThemeHost.tsx +++ b/apps/mobile/src/components/ui/NativeThemeHost.tsx @@ -2,7 +2,6 @@ import { Host } from "@expo/ui/swift-ui"; import type { ComponentProps } from "react"; import { useControlTheme } from "./useControlTheme"; -/** SwiftUI shares the app's appearance and action tint. Row fills stay explicit. */ export function NativeThemeHost( props: Omit, "colorScheme" | "seedColor">, ) { diff --git a/apps/mobile/src/components/ui/NavigationRow.tsx b/apps/mobile/src/components/ui/NavigationRow.tsx index ce0858e69bdf6..74bced299c8c2 100644 --- a/apps/mobile/src/components/ui/NavigationRow.tsx +++ b/apps/mobile/src/components/ui/NavigationRow.tsx @@ -7,7 +7,6 @@ import { AppText } from "./AppText"; import { SymbolView } from "./AppSymbol"; import { useAndroidControlSizing } from "./useAndroidControlSizing"; -/** Shared geometry for Material navigation and selection lists. Group rows in one card. */ export function NavigationRow({ title, titleClassName, diff --git a/apps/mobile/src/components/ui/Notice.tsx b/apps/mobile/src/components/ui/Notice.tsx index 7bdb3fd6b5169..90a31f7054363 100644 --- a/apps/mobile/src/components/ui/Notice.tsx +++ b/apps/mobile/src/components/ui/Notice.tsx @@ -6,7 +6,6 @@ import { AppText } from "./AppText"; import { SymbolView, type AppSymbolName } from "./AppSymbol"; import { GlassSurface } from "./GlassSurface"; -/** Inline feedback or a dismissible notice positioned by its owning screen. */ export function Notice(props: { readonly message: string; readonly tone?: "default" | "danger"; @@ -17,6 +16,7 @@ export function Notice(props: { readonly dismissLabel?: string; }) { const danger = props.tone === "danger"; + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- announces the message to VoiceOver through AccessibilityInfo useEffect(() => { // Live regions reach TalkBack; VoiceOver needs an explicit announcement. if (Platform.OS === "ios") AccessibilityInfo.announceForAccessibility(props.message); diff --git a/apps/mobile/src/components/ui/NumberField.android.tsx b/apps/mobile/src/components/ui/NumberField.android.tsx index 8eb4708dd569b..6d6ddd19e34cc 100644 --- a/apps/mobile/src/components/ui/NumberField.android.tsx +++ b/apps/mobile/src/components/ui/NumberField.android.tsx @@ -13,7 +13,6 @@ export function NumberField(props: NumberFieldProps) { return ( - {/* Match the 32dp switch track while retaining 48dp button touch targets. */} ; -type Listener = (entries: Entries) => void; let nextKey = 0; @@ -13,25 +10,43 @@ function allocateKey() { return nextKey++; } const entries = new Map(); -const listeners = new Set(); +const listeners = new Set<() => void>(); +let snapshot: Entries = new Map(); function emit() { - const snapshot = new Map(entries); + snapshot = new Map(entries); for (const listener of listeners) { - listener(snapshot); + listener(); } } +function subscribe(listener: () => void) { + listeners.add(listener); + return () => { + listeners.delete(listener); + }; +} + +function getSnapshot() { + return snapshot; +} + export function OverlayPortal(props: { readonly children: ReactNode }) { const [key] = useState(allocateKey); - // No dependency array: re-project after every render so the host always - // shows the current content (menus re-render while open — drill-in, theme). + // RN has no createPortal, so projecting into the out-of-tree host has to + // happen after commit. No dependency array: re-project after every render so + // the host always shows the current content (menus re-render while open — + // drill-in, theme). + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- projects children into the out-of-tree overlay host store after every commit useEffect(() => { entries.set(key, props.children); emit(); }); + // Removal is unmount-only: deleting on every re-projection would move the + // entry to the end of the map and restack it above overlays opened later. + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- removes this entry from the overlay host store on unmount useEffect( () => () => { entries.delete(key); @@ -44,14 +59,7 @@ export function OverlayPortal(props: { readonly children: ReactNode }) { } export function OverlayPortalHost() { - const [current, setCurrent] = useState(() => new Map()); - - useEffect(() => { - listeners.add(setCurrent); - return () => { - listeners.delete(setCurrent); - }; - }, []); + const current = useSyncExternalStore(subscribe, getSnapshot, getSnapshot); if (current.size === 0) { return null; diff --git a/apps/mobile/src/components/ui/RoutedFormSheetContext.ts b/apps/mobile/src/components/ui/RoutedFormSheetContext.ts new file mode 100644 index 0000000000000..29ee63d996e57 --- /dev/null +++ b/apps/mobile/src/components/ui/RoutedFormSheetContext.ts @@ -0,0 +1,3 @@ +import { createContext } from "react"; + +export const RoutedFormSheetContext = createContext(false); diff --git a/apps/mobile/src/components/ui/ScreenContent.tsx b/apps/mobile/src/components/ui/ScreenContent.tsx index df4bc5ca0c700..b526c7b6d3c69 100644 --- a/apps/mobile/src/components/ui/ScreenContent.tsx +++ b/apps/mobile/src/components/ui/ScreenContent.tsx @@ -1,7 +1,6 @@ import type { ReactNode } from "react"; import { Platform, View } from "react-native"; -/** Keeps the header surface visible behind rounded Android content corners. */ export function ScreenContent({ children, insetHorizontal = false, diff --git a/apps/mobile/src/components/ui/ScreenScrollView.tsx b/apps/mobile/src/components/ui/ScreenScrollView.tsx index 9a83807ec55f5..5e48866c16335 100644 --- a/apps/mobile/src/components/ui/ScreenScrollView.tsx +++ b/apps/mobile/src/components/ui/ScreenScrollView.tsx @@ -1,11 +1,27 @@ -import type { ComponentProps } from "react"; +import { createContext, use, type ComponentProps } from "react"; import { Platform } from "react-native"; +import { cn } from "../../lib/cn"; import { NativeScrollView as ScrollView } from "../../native/NativeScrollViewMarker"; +export const ScreenScrollViewBottomInset = createContext(0); +/** + * The screen's surface class. UIKit's scroll-edge material under the header takes the scroll + * view's own color; a clear scroll view gets the system's near-white bar over the screen's surface. + */ +export const ScreenScrollViewSurface = createContext(undefined); + export function ScreenScrollView(props: ComponentProps) { + const bottomInset = use(ScreenScrollViewBottomInset); + const surface = use(ScreenScrollViewSurface); return ( 0 + ? { ...props.contentInset, bottom: (props.contentInset?.bottom ?? 0) + bottomInset } + : props.contentInset + } contentContainerStyle={[ props.contentContainerStyle, Platform.OS === "android" && { diff --git a/apps/mobile/src/components/ui/SegmentedControl.ios.tsx b/apps/mobile/src/components/ui/SegmentedControl.ios.tsx index 4862e99cdabfa..15883d300da41 100644 --- a/apps/mobile/src/components/ui/SegmentedControl.ios.tsx +++ b/apps/mobile/src/components/ui/SegmentedControl.ios.tsx @@ -1,11 +1,8 @@ import { requireNativeView } from "expo"; import { View, type NativeSyntheticEvent, type ViewProps } from "react-native"; -import { - flattenThemeColor, - themeColorWithAlpha, - themeColorWithContrast, -} from "../../lib/mobileTheme"; +import { SegmentedControl as FlatSegmentedControl } from "./SegmentedControl.shared"; +import { segmentedControlColors } from "./segmentedControlColors"; import { useControlTheme } from "./useControlTheme"; import type { SegmentedControlProps } from "./SegmentedControl.types"; @@ -27,17 +24,16 @@ const NativeSegmentedControl = requireNativeView< export function SegmentedControl( props: SegmentedControlProps, ) { - const { colors, colorScheme } = useControlTheme(); - const trackColor = flattenThemeColor( - themeColorWithAlpha(colors["--color-prominent-action"], colorScheme === "dark" ? 0.18 : 0.07), - colors["--color-screen"], + const { colors, colorScheme, themeId } = useControlTheme(); + // UIKit adds a gray fill over the sunken card track. + if (props.variant === "card") return ; + const { trackColor, selectedColor, selectedTextColor, mutedColor } = segmentedControlColors( + colors, + colorScheme, + props.variant, + "ios", + themeId, ); - const selectedColor = - colorScheme === "dark" ? colors["--color-prominent-action"] : colors["--color-secondary"]; - const selectedTextColor = - colorScheme === "dark" - ? colors["--color-prominent-action-foreground"] - : colors["--color-secondary-foreground"]; return ( ( trackColor={trackColor} selectedColor={selectedColor} textColor={selectedTextColor} - mutedColor={themeColorWithContrast( - colors["--color-foreground-muted"], - trackColor, - colorScheme === "dark" ? 7 : 4.5, - )} + mutedColor={mutedColor} appearance={colorScheme} onSelectionChange={({ nativeEvent }) => { const option = props.options[nativeEvent.index]; diff --git a/apps/mobile/src/components/ui/SegmentedControl.shared.tsx b/apps/mobile/src/components/ui/SegmentedControl.shared.tsx new file mode 100644 index 0000000000000..9eac685a8ca21 --- /dev/null +++ b/apps/mobile/src/components/ui/SegmentedControl.shared.tsx @@ -0,0 +1,84 @@ +import { useState } from "react"; +import { I18nManager, Platform, Pressable, View } from "react-native"; +import Animated, { useAnimatedStyle, useReducedMotion, withTiming } from "react-native-reanimated"; + +import { segmentedControlColors } from "./segmentedControlColors"; +import { AppText } from "./AppText"; +import { useControlTheme } from "./useControlTheme"; +import type { SegmentedControlProps } from "./SegmentedControl.types"; + +export type { SegmentedControlProps } from "./SegmentedControl.types"; + +export function SegmentedControl( + props: SegmentedControlProps, +) { + const { colorScheme, colors, themeId } = useControlTheme(); + const [layout, setLayout] = useState({ width: 0, height: 0 }); + const { width } = layout; + const reduceMotion = useReducedMotion(); + const selectedIndex = props.options.findIndex((option) => option.value === props.selected); + const segmentWidth = props.options.length ? Math.max(0, width - 6) / props.options.length : 0; + const selectionOffset = selectedIndex * segmentWidth * (I18nManager.isRTL ? -1 : 1); + const selectionStyle = useAnimatedStyle(() => ({ + width: segmentWidth, + transform: [{ translateX: withTiming(selectionOffset, { duration: reduceMotion ? 0 : 160 }) }], + })); + const { trackColor, selectedColor, selectedTextColor, mutedColor } = segmentedControlColors( + colors, + colorScheme, + props.variant, + Platform.OS, + themeId, + ); + const minHeight = props.size === "compact" ? 32 : Platform.OS === "android" ? 40 : 36; + + return ( + + setLayout(event.nativeEvent.layout)} + className="flex-row rounded-full p-[3px]" + style={{ + minHeight, + backgroundColor: trackColor, + }} + > + {selectedIndex >= 0 && width > 0 ? ( + + ) : null} + {props.options.map((option) => { + const selected = option.value === props.selected; + return ( + props.onSelect(option.value)} + className="flex-1 items-center justify-center rounded-full px-2 py-1 active:opacity-70" + style={{ minHeight: minHeight - 6 }} + > + + {option.label} + + + ); + })} + + + ); +} diff --git a/apps/mobile/src/components/ui/SegmentedControl.tsx b/apps/mobile/src/components/ui/SegmentedControl.tsx index 4f7e8e9dc0d95..bbcbc4a5f4593 100644 --- a/apps/mobile/src/components/ui/SegmentedControl.tsx +++ b/apps/mobile/src/components/ui/SegmentedControl.tsx @@ -1,79 +1 @@ -import { useState } from "react"; -import { I18nManager, Platform, Pressable, View } from "react-native"; -import Animated, { useAnimatedStyle, useReducedMotion, withTiming } from "react-native-reanimated"; - -import { AppText } from "./AppText"; -import { useControlTheme } from "./useControlTheme"; -import type { SegmentedControlProps } from "./SegmentedControl.types"; - -export type { SegmentedControlProps } from "./SegmentedControl.types"; - -/** Shared capsule control with native press targets and a flat, themed selection. */ -export function SegmentedControl( - props: SegmentedControlProps, -) { - const { colorScheme, colors } = useControlTheme(); - const [layout, setLayout] = useState({ width: 0, height: 0 }); - const { width } = layout; - const reduceMotion = useReducedMotion(); - const selectedIndex = props.options.findIndex((option) => option.value === props.selected); - const segmentWidth = props.options.length ? Math.max(0, width - 6) / props.options.length : 0; - const selectionOffset = selectedIndex * segmentWidth * (I18nManager.isRTL ? -1 : 1); - const selectionStyle = useAnimatedStyle(() => ({ - width: segmentWidth, - transform: [{ translateX: withTiming(selectionOffset, { duration: reduceMotion ? 0 : 160 }) }], - })); - const dark = colorScheme === "dark"; - const minHeight = props.size === "compact" ? 32 : Platform.OS === "android" ? 40 : 36; - - return ( - - setLayout(event.nativeEvent.layout)} - className="flex-row rounded-full p-[3px]" - style={{ - minHeight, - backgroundColor: colors[dark ? "--color-screen" : "--color-grouped-card"], - }} - > - {selectedIndex >= 0 && width > 0 ? ( - - ) : null} - {props.options.map((option) => { - const selected = option.value === props.selected; - return ( - props.onSelect(option.value)} - className="flex-1 items-center justify-center rounded-full px-2 py-1 active:opacity-70" - style={{ minHeight: minHeight - 6 }} - > - - {option.label} - - - ); - })} - - - ); -} +export { SegmentedControl, type SegmentedControlProps } from "./SegmentedControl.shared"; diff --git a/apps/mobile/src/components/ui/SegmentedControl.types.ts b/apps/mobile/src/components/ui/SegmentedControl.types.ts index 779b49fe1a4b4..472ed46b0e2f2 100644 --- a/apps/mobile/src/components/ui/SegmentedControl.types.ts +++ b/apps/mobile/src/components/ui/SegmentedControl.types.ts @@ -8,6 +8,7 @@ export interface SegmentedControlProps { readonly onSelect: (value: Value) => void; /** Compact uses a 32-point capsule; default uses 36 points on iOS and 40 on Android. */ readonly size?: "default" | "compact"; + readonly variant?: "standalone" | "card"; readonly role?: "tab" | "button"; readonly className?: string; } diff --git a/apps/mobile/src/components/ui/SelectionRow.tsx b/apps/mobile/src/components/ui/SelectionRow.tsx new file mode 100644 index 0000000000000..db47aaeca1193 --- /dev/null +++ b/apps/mobile/src/components/ui/SelectionRow.tsx @@ -0,0 +1,104 @@ +import type { ReactNode } from "react"; +import { Platform, Pressable, View } from "react-native"; + +import { cn } from "../../lib/cn"; +import { SymbolView, type AppSymbolName } from "./AppSymbol"; +import { AppText as Text } from "./AppText"; +import { NavigationRow } from "./NavigationRow"; + +/** A picker row in a grouped list; the first and last rows round the group's corners. */ +export function SelectionRow(props: { + readonly icon?: AppSymbolName; + /** Drawn where the icon goes, for marks a symbol can't express (a label's color dot). */ + readonly leading?: ReactNode; + readonly onPress: () => void; + readonly disabled?: boolean; + readonly selected: boolean; + /** "checkbox" when several rows can be selected at once. */ + readonly role?: "radio" | "checkbox"; + readonly isFirst?: boolean; + readonly isLast?: boolean; + readonly subtitle?: string; + readonly title: string; +}) { + const role = props.role ?? "radio"; + const row = + Platform.OS === "android" ? ( + + ) : ( + props.leading + ) + } + trailing={ + props.selected ? ( + + ) : null + } + accessibilityRole={role} + accessibilityState={{ checked: props.selected }} + disabled={props.disabled} + onPress={props.onPress} + /> + ) : ( + + {props.icon ? ( + + ) : ( + (props.leading ?? null) + )} + + + {props.title} + + {props.subtitle ? ( + + {props.subtitle} + + ) : null} + + {props.selected ? ( + + ) : null} + + ); + if (!props.isFirst && !props.isLast) return row; + return ( + + {row} + + ); +} diff --git a/apps/mobile/src/components/ui/Sheet.android.tsx b/apps/mobile/src/components/ui/Sheet.android.tsx index 230b5867db5a2..aaafffb8013da 100644 --- a/apps/mobile/src/components/ui/Sheet.android.tsx +++ b/apps/mobile/src/components/ui/Sheet.android.tsx @@ -3,28 +3,38 @@ import { View } from "react-native"; import { FormSheet } from "react-native-screens"; import { useResolveClassNames } from "uniwind"; import { AndroidSheetHeader } from "./AndroidScreenHeader"; +import { RoutedFormSheetContext } from "./RoutedFormSheetContext"; +import { ScreenContent } from "./ScreenContent"; import type { SheetProps } from "./Sheet.types"; export type { SheetProps } from "./Sheet.types"; export function Sheet(props: SheetProps) { - const containerStyle = useResolveClassNames("bg-sheet"); + const containerStyle = useResolveClassNames("bg-header"); const [isOpen, setIsOpen] = useState(true); return ( - {/* Flex children are not bounded by the FormSheet host on Android, so pin to its edges. - Material coordinates drags with the first nested-scrolling view in native order. The Compose - header has one, so the content comes first and column-reverse draws it below. */} - - {props.children} - setIsOpen(false)} /> - + + {/* Android FormSheet does not bound flex children. Material drags target the first scroll view, so place content before the header. */} + + {props.children} + setIsOpen(false)} + hideBottomBorder + /> + + + ); } diff --git a/apps/mobile/src/components/ui/SliderRow.android.tsx b/apps/mobile/src/components/ui/SliderRow.android.tsx index ad774efa21261..d9ab444f2cbf1 100644 --- a/apps/mobile/src/components/ui/SliderRow.android.tsx +++ b/apps/mobile/src/components/ui/SliderRow.android.tsx @@ -1,7 +1,7 @@ import { Slider } from "@expo/ui/jetpack-compose"; import { fillMaxWidth } from "@expo/ui/jetpack-compose/modifiers"; import * as Haptics from "expo-haptics"; -import { useEffect, useRef } from "react"; +import { useRef } from "react"; import { View } from "react-native"; import { AppText as Text } from "./AppText"; @@ -12,11 +12,8 @@ import type { SliderRowProps } from "./SliderRow.types"; export function SliderRow(props: SliderRowProps) { const { colors } = useControlTheme(); - const draft = useRef(props.value); - const dragging = useRef(false); - useEffect(() => { - if (!dragging.current) draft.current = props.value; - }, [props.value]); + // The value of the drag in progress; null between drags. + const draft = useRef(null); const commit = (value: number) => { if (props.disabled) return; const next = Math.min( @@ -66,12 +63,12 @@ export function SliderRow(props: SliderRowProps) { inactiveTrackColor: colors["--color-secondary"], }} onValueChange={(value) => { - dragging.current = true; draft.current = value; }} onValueChangeFinished={() => { - dragging.current = false; - commit(draft.current); + const value = draft.current; + draft.current = null; + if (value !== null) commit(value); }} /> diff --git a/apps/mobile/src/components/ui/SliderRow.tsx b/apps/mobile/src/components/ui/SliderRow.tsx index fcb837129da9f..4e993363df06a 100644 --- a/apps/mobile/src/components/ui/SliderRow.tsx +++ b/apps/mobile/src/components/ui/SliderRow.tsx @@ -6,7 +6,7 @@ import { tint, } from "@expo/ui/swift-ui/modifiers"; import * as Haptics from "expo-haptics"; -import { useEffect, useRef } from "react"; +import { useRef } from "react"; import { View } from "react-native"; import { AppText } from "./AppText"; @@ -19,11 +19,9 @@ export type { SliderRowProps } from "./SliderRow.types"; export function SliderRow(props: SliderRowProps) { const { colors } = useControlTheme(); - const draft = useRef(props.value); + // The value of the drag in progress; null until the drag moves. + const draft = useRef(null); const editing = useRef(false); - useEffect(() => { - if (!editing.current) draft.current = props.value; - }, [props.value]); const commit = (value: number) => { if (props.disabled) return; const next = Math.min( @@ -60,13 +58,15 @@ export function SliderRow(props: SliderRowProps) { accessibilityValue(props.valueLabel), ]} onValueChange={(value) => { - draft.current = value; // Accessibility adjustments do not begin a touch editing session. - if (!editing.current) commit(value); + if (editing.current) draft.current = value; + else commit(value); }} onEditingChanged={(isEditing) => { editing.current = isEditing; - if (!isEditing) commit(draft.current); + const value = draft.current; + draft.current = null; + if (!isEditing && value !== null) commit(value); }} /> diff --git a/apps/mobile/src/components/ui/SplitButton.android.tsx b/apps/mobile/src/components/ui/SplitButton.android.tsx new file mode 100644 index 0000000000000..6f183ede86481 --- /dev/null +++ b/apps/mobile/src/components/ui/SplitButton.android.tsx @@ -0,0 +1,145 @@ +import { + Box, + DropdownMenu, + Icon, + LoadingIndicator, + RNHostView, + Row, + SplitButtonLayout, + Text, +} from "@expo/ui/jetpack-compose"; +import { + defaultMinSize, + fillMaxWidth, + rotate, + semantics, + size, +} from "@expo/ui/jetpack-compose/modifiers"; +import { useState } from "react"; +import { Pressable } from "react-native"; + +import { useScaledTextRole } from "../../features/settings/appearance/useScaledTextRole"; +import { SymbolView } from "./AppSymbol"; +import { Button } from "./Button"; +import { MenuPopupItems } from "./MenuPopup.android"; +import { NativeThemeHost } from "./NativeThemeHost.android"; +import type { SplitButtonProps } from "./SplitButton.types"; +import { useAndroidControlSizing } from "./useAndroidControlSizing"; +import { useControlTheme } from "./useControlTheme"; + +export function SplitButton(props: SplitButtonProps) { + const { colors } = useControlTheme(); + const typography = useScaledTextRole("footnote"); + const { scale, iconSize, mediumIconSize, menuWidth } = useAndroidControlSizing(); + const [expanded, setExpanded] = useState(false); + if (props.actions.length === 0) return + + ), +})); +vi.mock("./nativeReviewDiffHighlighter", () => ({ + highlightNativeReviewDiffVisibleRows: mocks.highlight, +})); +vi.mock("@t3tools/client-runtime/state/runtime", () => ({ + settlePromise: async (execute: () => Promise) => { + try { + return AsyncResult.success(await execute()); + } catch (error) { + return AsyncResult.failure(Cause.die(error)); + } + }, + squashAtomCommandFailure: () => "tokenization failed", +})); +vi.mock("../review/nativeReviewDiffAdapter", () => ({ createNativeReviewDiffTheme: () => ({}) })); +vi.mock("../settings/appearance/useAppearanceCodeSurface", () => ({ + useAppearanceCodeSurface: () => ({ nativeReviewDiffStyle: {} }), +})); +vi.mock("../settings/appearance/AppearancePreferencesProvider", () => ({ + useAppearancePreferences: () => ({ themeAppearance: "light", themeId: "test" }), +})); +vi.mock("../../lib/useUniwindTheme", () => ({ useUniwindTheme: () => ({}) })); + +import { resolveNativeReviewDiffView } from "./nativeReviewDiffSurface"; +import { useNativeReviewDiffBridge } from "../review/useNativeReviewDiffBridge"; +import { + handlePullRequestDiffDebugEvent, + pullRequestDiffInitialPosition, +} from "../pull-requests/pullRequestDiffDebug"; + +function setup(integrated = false) { + vi.useFakeTimers(); + (globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true; + mocks.registrationFailures = 0; + mocks.tokenAccepted = true; + mocks.tokenCompletion = null; + mocks.onDebug = undefined; + mocks.autoViewport = false; + mocks.rows.mockClear(); + mocks.tokens.mockClear(); + mocks.highlight + .mockReset() + .mockImplementation(async (input: HighlightNativeReviewDiffVisibleRowsInput) => { + const rowId = `r${input.firstRowIndex}`; + const tokensByRowId = input.alreadyHighlightedRowIds?.has(rowId) + ? {} + : { [rowId]: [{ content: "const", color: "#ff0000", fontStyle: null }] }; + return { + rowCount: Object.keys(tokensByRowId).length, + durationMs: 0, + retryableRowIds: [], + tokensByRowId, + }; + }); + const frames = new Map(); + let nextFrame = 0; + const requestFrame = vi + .spyOn(globalThis, "requestAnimationFrame") + .mockImplementation((callback) => { + frames.set(++nextFrame, callback); + return nextFrame; + }); + const cancelFrame = vi.spyOn(globalThis, "cancelAnimationFrame").mockImplementation((id) => { + if (id != null) frames.delete(id); + }); + const errors = vi.spyOn(console, "error").mockImplementation(() => {}); + const expo = Object.getOwnPropertyDescriptor(globalThis, "expo"); + Object.defineProperty(globalThis, "expo", { + configurable: true, + value: { getViewConfig: () => ({}) }, + }); + const NativeDiff = resolveNativeReviewDiffView()!; + const container = document.createElement("div"); + const root = createRoot(container); + let data: NativeReviewDiffData = { + rows: Array.from({ length: 1000 }, (_, index) => + index === 999 + ? { kind: "comment", id: `r${index}`, commentText: "Original comment" } + : index === 900 + ? { kind: "file", id: `r${index}`, fileId: "last-file" } + : { kind: "line", id: `r${index}` }, + ), + files: [], + additions: 0, + deletions: 0, + commentTargetsByRowId: new Map(), + rowIdByCommentLineId: new Map(), + }; + const ids: string[] = []; + let collapsedFileIds: ReadonlyArray = ids; + function PullRequestDiff({ targetFileId }: { targetFileId?: string }) { + const bridge = useNativeReviewDiffBridge({ + threadKey: null, + sectionId: "pull-request:test:1:all", + diff: "test diff", + data, + collapsedFileIds, + viewedFileIds: ids, + selectedRowIds: ids, + canHighlight: true, + }); + const nativeView = useRef(null); + const jumpStarted = useRef(true); + const onDebug: NonNullable = (event) => + handlePullRequestDiffDebugEvent(event, { + rowCount: data.rows.length, + targetFileId, + focusIndex: -1, + isIos: true, + nativeView, + jumpStarted: () => jumpStarted.current, + setJumpStarted: (started) => { + jumpStarted.current = started; + }, + loadMore: () => {}, + onDebug: bridge.onDebug, + }); + return ( + + ); + } + if (!integrated) { + act(() => + root.render( + , + ), + ); + } + return { + container, + async mountPullRequest(targetFileId?: string) { + await act(async () => root.render()); + }, + async collapseFiles(fileIds: ReadonlyArray) { + collapsedFileIds = fileIds; + await act(async () => root.render()); + }, + async updateComment() { + data = { + ...data, + rows: data.rows.map((row) => + row.kind === "comment" ? { ...row, commentText: "Updated comment" } : row, + ), + }; + await act(async () => root.render()); + }, + get tokenRows() { + return container.querySelector("[data-token-rows]")?.getAttribute("data-token-rows"); + }, + async jump(firstRowIndex: number, totalRows = 1000) { + await act(async () => { + mocks.onDebug?.({ + nativeEvent: { + message: "visible-range", + firstRowIndex, + lastRowIndex: firstRowIndex + 40, + totalRows, + }, + } as unknown as Parameters>[0]); + await vi.runOnlyPendingTimersAsync(); + }); + }, + async deliverPayloads() { + const callbacks = [...frames.values()]; + frames.clear(); + await act(async () => { + for (const callback of callbacks) callback(0); + await vi.runOnlyPendingTimersAsync(); + }); + }, + retry() { + const button = container.querySelector("button"); + expect(button?.textContent).toBe("Retry diff"); + act(() => button!.click()); + }, + decodeFailure() { + act(() => + mocks.onDebug?.({ + nativeEvent: { message: "rows-decode-failed", error: "Decode failed" }, + } as unknown as Parameters>[0]), + ); + }, + [Symbol.dispose]() { + act(() => root.unmount()); + requestFrame.mockRestore(); + cancelFrame.mockRestore(); + errors.mockRestore(); + vi.useRealTimers(); + if (expo) Object.defineProperty(globalThis, "expo", expo); + else Reflect.deleteProperty(globalThis, "expo"); + }, + }; +} + +it("retries transient native registration without replacing the diff with an error", async () => { + using screen = setup(); + mocks.registrationFailures = 1; + await screen.deliverPayloads(); + expect(screen.container.textContent).toBe("Blank native surface"); + await screen.deliverPayloads(); + expect(screen.container.textContent).toBe("Rendered diff"); +}); + +it.each([false, undefined])( + "keeps colors queued until native accepts them and recovers rejected patches (%s)", + async (rejected) => { + using screen = setup(true); + await screen.mountPullRequest(); + let accept!: (accepted: boolean) => void; + mocks.tokenCompletion = new Promise((resolve) => { + accept = resolve; + }); + mocks.tokens.mockClear(); + await screen.jump(0); + await screen.deliverPayloads(); + await screen.jump(400); + await screen.deliverPayloads(); + expect( + mocks.tokens.mock.calls.map(([json]) => Object.keys(JSON.parse(json).tokensByRowId)), + ).toEqual([["r0"]]); + await act(async () => accept(true)); + + mocks.tokenCompletion = null; + mocks.tokenAccepted = rejected; + await screen.deliverPayloads(); + expect(screen.tokenRows).toBe("r0"); + + mocks.tokenAccepted = true; + await screen.jump(800); + await screen.deliverPayloads(); + expect(screen.tokenRows).toBe("r0,r800"); + await screen.jump(400); + await screen.deliverPayloads(); + expect(screen.tokenRows).toBe("r0,r800,r400"); + }, +); + +it.each(["retry", "comment update"])( + "re-highlights accepted rows after a native row failure, PR %s, and viewport revisit", + async (recovery) => { + using screen = setup(true); + await screen.mountPullRequest(); + mocks.tokens.mockClear(); + await screen.jump(0); + await screen.deliverPayloads(); + await screen.jump(400); + await screen.deliverPayloads(); + expect(screen.tokenRows).toBe("r0,r400"); + + screen.decodeFailure(); + expect(screen.container.textContent).toContain("Could not display diff"); + if (recovery === "retry") await act(async () => screen.retry()); + else await screen.updateComment(); + await screen.deliverPayloads(); + expect(screen.container.textContent).toBe("Rendered diff"); + await screen.jump(800); + await screen.deliverPayloads(); + await screen.jump(400); + await screen.deliverPayloads(); + expect(screen.tokenRows?.split(",")).toContain("r400"); + }, +); + +it("delivers the selected file first with a warm highlighter and no startup command", async () => { + using screen = setup(true); + mocks.autoViewport = true; + await screen.mountPullRequest("last-file"); + await screen.deliverPayloads(); + await screen.deliverPayloads(); + expect(screen.tokenRows).toBe("r900"); +}); + +it("recognizes registration races for the installed native view name", async () => { + const { isPendingNativeViewRegistration } = await import("./nativeReviewDiffSurface"); + + expect( + isPendingNativeViewRegistration( + new Error("Unable to find the 'T3ReviewDiffSurface' view for this native tag"), + ), + ).toBe(true); + expect( + isPendingNativeViewRegistration( + new Error("Unable to find the 'T3ReviewDiffView' view for this native tag"), + ), + ).toBe(false); + expect( + isPendingNativeViewRegistration( + new Error( + "Unable to find the class expo.modules.t3reviewdiff.T3ReviewDiffView view with tag 1150", + ), + ), + ).toBe(true); +}); + +it("cancels stale collapse work and highlights expansion without resetting accepted tokens", async () => { + using screen = setup(true); + await screen.mountPullRequest(); + await screen.jump(0); + await screen.deliverPayloads(); + expect(screen.tokenRows).toBe("r0"); + + const response = Promise.withResolvers(); + const highlight = mocks.highlight.getMockImplementation()!; + mocks.highlight.mockImplementation(async (input: HighlightNativeReviewDiffVisibleRowsInput) => { + if (input.firstRowIndex === 400) { + await response.promise; + if (input.collapsedFileIds?.has("last-file")) { + return { tokensByRowId: {}, rowCount: 0, retryableRowIds: [], durationMs: 0 }; + } + } + return highlight(input); + }); + await screen.jump(400); + await screen.collapseFiles(["last-file"]); + await act(async () => response.resolve()); + await screen.deliverPayloads(); + expect(screen.tokenRows).toBe("r0"); + + await screen.collapseFiles([]); + await screen.deliverPayloads(); + expect(screen.tokenRows).toBe("r0,r400"); + await screen.jump(0); + await screen.deliverPayloads(); + expect(screen.tokenRows).toBe("r0,r400"); +}); diff --git a/apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts b/apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts index 9d51c72272b63..a21dd973577e4 100644 --- a/apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts +++ b/apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts @@ -1,14 +1,17 @@ import { createElement, + useCallback, useEffect, useImperativeHandle, useRef, + useState, type ComponentType, type Ref, } from "react"; -import type { NativeSyntheticEvent, ViewProps } from "react-native"; +import { View, type NativeSyntheticEvent, type ViewProps } from "react-native"; import { requireNativeView } from "expo"; +import { EmptyState } from "../../components/ui/EmptyState"; import { NativeViewResolutionError } from "../../native/nativeViewResolutionError"; const NATIVE_REVIEW_DIFF_MODULE_NAME = "T3ReviewDiffSurface"; @@ -125,6 +128,7 @@ export interface NativeReviewDiffViewProps extends ViewProps { /** Android ignores this and measures the widest row. */ readonly contentWidth: number; readonly initialRowIndex?: number; + readonly initialFileId?: string; readonly scrollEnabled?: boolean; readonly bounces?: boolean; readonly refreshing?: boolean; @@ -161,7 +165,7 @@ export function isNativeReviewDiffDrawEvent(payload: Readonly Promise; readonly setTokensJson: (tokensJson: string) => Promise; - readonly setTokensPatchJson: (tokensPatchJson: string) => Promise; + readonly setTokensPatchJson: (tokensPatchJson: string) => Promise; readonly scrollToFile: (fileId: string, animated: boolean) => Promise; readonly scrollToTop: (animated: boolean) => Promise; } @@ -192,7 +196,11 @@ function useNativeReviewDiffPayload( nativeRef: React.RefObject, method: NativeReviewDiffPayloadMethod, payload: string | undefined, + resetKey?: string, + onFailure?: () => void, + onDelivered?: (payload: string) => void, ) { + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- sends the payload to the native diff view's imperative method, retrying per frame until it mounts useEffect(() => { if (payload === undefined) { return; @@ -208,31 +216,46 @@ function useNativeReviewDiffPayload( } const view = nativeRef.current; - const command = view?.[method]; + const command: ((payload: string) => Promise) | undefined = view?.[method]; if (!view || !command) { if (attempts < NATIVE_REVIEW_DIFF_PAYLOAD_RETRY_FRAMES) { attempts += 1; frame = requestAnimationFrame(dispatch); + } else { + console.error(`[native-review-diff] ${method} unavailable`); + onFailure?.(); } return; } - void command.call(view, payload).catch((error: unknown) => { - if ( - !cancelled && - attempts < NATIVE_REVIEW_DIFF_PAYLOAD_RETRY_FRAMES && - isPendingNativeViewRegistration(error) - ) { - attempts += 1; - frame = requestAnimationFrame(dispatch); - return; - } - console.error(`[native-review-diff] ${method} failed`, error); - }); + void Promise.resolve() + .then(() => { + if (!cancelled) return command.call(view, payload); + }) + .then((accepted) => { + if (cancelled) return; + // This promise resolves after native decode, reset validation, and merge. + if (method === "setTokensPatchJson" && accepted !== true) { + throw new Error("Native token patch was not accepted"); + } + onDelivered?.(payload); + }) + .catch((error: unknown) => { + if (cancelled) return; + if ( + attempts < NATIVE_REVIEW_DIFF_PAYLOAD_RETRY_FRAMES && + isPendingNativeViewRegistration(error) + ) { + attempts += 1; + frame = requestAnimationFrame(dispatch); + return; + } + console.error(`[native-review-diff] ${method} failed`, error); + onFailure?.(); + }); }; - // Fabric attaches the React ref before Expo registers the native tag used by - // view functions. Starting on the next frame avoids racing that registration. + // Expo registers native tags after Fabric attaches refs; dispatch next frame. frame = requestAnimationFrame(dispatch); return () => { @@ -241,7 +264,8 @@ function useNativeReviewDiffPayload( cancelAnimationFrame(frame); } }; - }, [method, nativeRef, payload]); + // oxlint-disable-next-line react/exhaustive-effect-dependencies -- A new resetKey redelivers an unchanged payload after the diff surface resets. + }, [method, nativeRef, payload, resetKey, onFailure, onDelivered]); } function getExpoViewConfig(moduleName: string) { @@ -251,11 +275,104 @@ function getExpoViewConfig(moduleName: string) { } function NativeReviewDiffView(props: NativeReviewDiffViewProps) { - const { nativeViewRef, rowsJson, tokensJson, tokensPatchJson, ...nativeProps } = props; + const [failedRowsJson, setFailedRowsJson] = useState(null); + const onRowsFailure = useCallback(() => setFailedRowsJson(props.rowsJson), [props.rowsJson]); + if (failedRowsJson !== null && failedRowsJson !== props.rowsJson) setFailedRowsJson(null); + if (failedRowsJson === props.rowsJson) { + return createElement( + View, + { + style: [ + props.style, + { + flex: 1, + justifyContent: "center", + paddingTop: props.contentInsetTop, + paddingBottom: props.contentInsetBottom, + }, + ], + }, + createElement(EmptyState, { + title: "Could not display diff", + detail: "Try loading the diff view again.", + variant: "plain", + actionLabel: "Retry diff", + onAction: () => { + props.onDebug?.({ + nativeEvent: { message: "surface-retry" }, + } as unknown as NativeSyntheticEvent>); + setFailedRowsJson(null); + }, + }), + ); + } + return createElement(NativeReviewDiffContent, { ...props, onRowsFailure }); +} + +function NativeReviewDiffContent( + props: NativeReviewDiffViewProps & { readonly onRowsFailure: () => void }, +) { + const { + nativeViewRef, + rowsJson, + tokensJson, + tokensPatchJson, + onRowsFailure, + onDebug, + ...nativeProps + } = props; const nativeRef = useRef(null); - useNativeReviewDiffPayload(nativeRef, "setRowsJson", rowsJson); + useNativeReviewDiffPayload( + nativeRef, + "setRowsJson", + rowsJson, + props.contentResetKey, + onRowsFailure, + ); useNativeReviewDiffPayload(nativeRef, "setTokensJson", tokensJson); - useNativeReviewDiffPayload(nativeRef, "setTokensPatchJson", tokensPatchJson); + const onDebugRef = useRef(onDebug); + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- keeps the latest onDebug for callbacks the native diff view fires outside render + useEffect(() => { + onDebugRef.current = onDebug; + }, [onDebug]); + const reportedMountRef = useRef(false); + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- reports the native surface mount to the debug callback once per mount + useEffect(() => { + // Effect replay keeps the same native content; only a new mount loses tokens. + if (reportedMountRef.current) return; + reportedMountRef.current = true; + onDebugRef.current?.({ + nativeEvent: { message: "surface-content-mounted" }, + } as unknown as NativeSyntheticEvent>); + }, []); + const reportTokenDelivery = useCallback((json: string, message: string) => { + const patch = JSON.parse(json) as { resetKey?: string; chunkIndex?: number }; + if (patch.chunkIndex === undefined) return; + onDebugRef.current?.({ + nativeEvent: { + message, + resetKey: patch.resetKey, + chunkIndex: patch.chunkIndex, + }, + } as unknown as NativeSyntheticEvent>); + }, []); + const onTokensDelivered = useCallback( + (json: string) => { + reportTokenDelivery(json, "tokens-patch-delivered"); + }, + [reportTokenDelivery], + ); + const onTokensFailure = useCallback(() => { + if (tokensPatchJson !== undefined) reportTokenDelivery(tokensPatchJson, "tokens-patch-failed"); + }, [reportTokenDelivery, tokensPatchJson]); + useNativeReviewDiffPayload( + nativeRef, + "setTokensPatchJson", + tokensPatchJson, + undefined, + onTokensFailure, + onTokensDelivered, + ); useImperativeHandle( nativeViewRef, () => ({ @@ -274,11 +391,20 @@ function NativeReviewDiffView(props: NativeReviewDiffViewProps) { return null; } + /* oxlint-disable react/refs -- The native view receives this ref; only event callbacks access its current value. */ return createElement(RawNativeView, { ...nativeProps, refreshEnabled: props.onPullToRefresh !== undefined, + onDebug: (event) => { + if (event.nativeEvent.message === "rows-decode-failed") { + console.error("[native-review-diff] rows decode failed", event.nativeEvent.error); + onRowsFailure(); + } + onDebug?.(event); + }, ref: nativeRef, }); + /* oxlint-enable react/refs */ } export function resolveNativeReviewDiffView(): ComponentType | null { diff --git a/apps/mobile/src/features/diffs/nativeReviewDiffTrace.test.ts b/apps/mobile/src/features/diffs/nativeReviewDiffTrace.test.ts new file mode 100644 index 0000000000000..e43a2d7ec9a09 --- /dev/null +++ b/apps/mobile/src/features/diffs/nativeReviewDiffTrace.test.ts @@ -0,0 +1,98 @@ +import { expect, it, vi } from "vite-plus/test"; + +const sink = vi.hoisted(() => ({ + created: vi.fn(), + written: vi.fn<(line: string, options: unknown) => Promise>(), + opened: vi.fn(), +})); + +vi.mock("expo-file-system", () => ({ + Paths: { document: "documents" }, + File: class { + constructor(...args: unknown[]) { + sink.opened(...args); + } + create(options: unknown) { + sink.created(options); + } + write(line: string, options: unknown) { + return sink.written(line, options); + } + }, +})); + +it("leaves the filesystem untouched when Release tracing is disabled", async () => { + vi.resetModules(); + sink.opened.mockClear(); + vi.stubEnv("EXPO_PUBLIC_T3_DIFF_TRACE", "0"); + try { + const { traceDiffHighlight } = await import("./nativeReviewDiffTrace"); + traceDiffHighlight("viewport-start", { rows: 80 }); + expect(sink.opened).not.toHaveBeenCalled(); + } finally { + vi.unstubAllEnvs(); + } +}); + +it("keeps object, function, and primitive identities stable without collisions", async () => { + vi.resetModules(); + vi.stubEnv("EXPO_PUBLIC_T3_DIFF_TRACE", "1"); + try { + const { diffHighlightTraceId } = await import("./nativeReviewDiffTrace"); + const values = [{}, {}, () => {}, () => {}, null, undefined, "file", 1, "1", false]; + const ids = values.map(diffHighlightTraceId); + expect(ids.every((id) => id > 0)).toBe(true); + expect(new Set(ids).size).toBe(values.length); + expect(values.map(diffHighlightTraceId)).toEqual(ids); + } finally { + vi.unstubAllEnvs(); + } +}); + +it("serializes appends to a retrievable file and bounds a process to 1000 events", async () => { + vi.resetModules(); + sink.opened.mockClear(); + sink.created.mockClear(); + sink.written.mockReset(); + const firstWrite = Promise.withResolvers(); + const releaseFirst = Promise.withResolvers(); + const finished = Promise.withResolvers(); + sink.written.mockImplementation(async (line) => { + const { seq } = JSON.parse(line); + if (seq === 1) { + firstWrite.resolve(); + await releaseFirst.promise; + } + if (seq === 1000) finished.resolve(); + }); + using warning = vi.spyOn(console, "warn").mockImplementation(() => {}); + vi.stubEnv("EXPO_PUBLIC_T3_DIFF_TRACE", "1"); + try { + const { diffHighlightTraceId, traceDiffHighlight } = await import("./nativeReviewDiffTrace"); + const request = {}; + expect(diffHighlightTraceId(request)).toBeGreaterThan(0); + for (let index = 0; index < 1001; index++) + traceDiffHighlight("viewport-start", { rows: index }); + await firstWrite.promise; + expect(sink.written).toHaveBeenCalledTimes(1); + releaseFirst.resolve(); + await finished.promise; + expect(sink.opened.mock.calls).toEqual([["documents", "t3-diff-highlight-trace.jsonl"]]); + expect(sink.created.mock.calls).toEqual([[{ overwrite: true, intermediates: true }]]); + expect(sink.written).toHaveBeenCalledTimes(1000); + expect(warning).toHaveBeenCalledTimes(1000); + expect(diffHighlightTraceId(request)).toBe(0); + expect(diffHighlightTraceId("file")).toBe(0); + expect(sink.written.mock.calls.map(([line]) => JSON.parse(line).seq)).toEqual( + Array.from({ length: 1000 }, (_, index) => index + 1), + ); + expect( + sink.written.mock.calls.every( + ([line, options]) => line.endsWith("\n") && JSON.stringify(options) === '{"append":true}', + ), + ).toBe(true); + } finally { + releaseFirst.resolve(); + vi.unstubAllEnvs(); + } +}); diff --git a/apps/mobile/src/features/diffs/nativeReviewDiffTrace.ts b/apps/mobile/src/features/diffs/nativeReviewDiffTrace.ts new file mode 100644 index 0000000000000..c7f39b051d23f --- /dev/null +++ b/apps/mobile/src/features/diffs/nativeReviewDiffTrace.ts @@ -0,0 +1,70 @@ +// Opt in at bundle time for bounded Release diagnostics; never log source or RPC payloads. +const MAX_TRACE_EVENTS = 1_000; +let eventCount = 0; +let nextId = 0; +// Diagnostics must not keep requests, source loaders, or their row graphs alive. +const objectIds = new WeakMap(); +const primitiveIds = new Map(); +let fileSink: Promise | undefined; + +export function diffHighlightTraceHash(value: string): number { + let hash = 2166136261; + for (let index = 0; index < value.length; index++) + hash = Math.imul(hash ^ value.charCodeAt(index), 16777619); + return hash >>> 0; +} + +function appendTraceLine(line: string) { + fileSink ??= import("expo-file-system") + .then(({ File, Paths }) => { + const file = new File(Paths.document, "t3-diff-highlight-trace.jsonl"); + file.create({ overwrite: true, intermediates: true }); + return file; + }) + .catch(() => null); + // File.write is async in Expo 58. Serialize appends to preserve sequence order. + fileSink = fileSink.then(async (file) => { + if (!file) return null; + try { + await file.write(line + "\n", { append: true }); + return file; + } catch { + return null; + } + }); +} + +export function diffHighlightTraceId(value: unknown): number { + if (process.env.EXPO_PUBLIC_T3_DIFF_TRACE !== "1" || eventCount >= MAX_TRACE_EVENTS) return 0; + if ((typeof value === "object" && value !== null) || typeof value === "function") { + let id = objectIds.get(value); + if (id === undefined) { + id = ++nextId; + objectIds.set(value, id); + } + return id; + } + let id = primitiveIds.get(value); + if (id === undefined) { + id = ++nextId; + primitiveIds.set(value, id); + } + return id; +} + +export function traceDiffHighlight( + event: string, + fields: Readonly> = {}, +) { + if (process.env.EXPO_PUBLIC_T3_DIFF_TRACE !== "1" || eventCount >= MAX_TRACE_EVENTS) return; + eventCount += 1; + const line = JSON.stringify({ + event, + seq: eventCount, + at: Math.round(performance.now()), + ...fields, + }); + appendTraceLine(line); + console.warn("[diff-highlight-trace] " + line); + if (eventCount === MAX_TRACE_EVENTS) primitiveIds.clear(); +} diff --git a/apps/mobile/src/features/diffs/nativeReviewDiffTypes.ts b/apps/mobile/src/features/diffs/nativeReviewDiffTypes.ts index fe34352cfa150..6d0427c262295 100644 --- a/apps/mobile/src/features/diffs/nativeReviewDiffTypes.ts +++ b/apps/mobile/src/features/diffs/nativeReviewDiffTypes.ts @@ -1,17 +1,14 @@ -export type NativeReviewDiffLanguage = - | "bash" - | "diff" - | "javascript" - | "json" - | "jsx" - | "tsx" - | "typescript" - | "yaml"; +export interface NativeReviewDiffSource { + readonly oldContents: string; + readonly newContents: string; +} export interface NativeReviewDiffFile { readonly id: string; readonly path: string; - readonly language: NativeReviewDiffLanguage; + /** A @pierre/highlights language name. */ + readonly language: string; readonly additions: number; readonly deletions: number; + readonly loadContents?: (signal?: AbortSignal) => Promise; } diff --git a/apps/mobile/src/features/files/AttachmentDocumentBody.tsx b/apps/mobile/src/features/files/AttachmentDocumentBody.tsx new file mode 100644 index 0000000000000..8cea0b4ce7998 --- /dev/null +++ b/apps/mobile/src/features/files/AttachmentDocumentBody.tsx @@ -0,0 +1,111 @@ +import type { EnvironmentId } from "@t3tools/contracts"; +import { View } from "react-native"; + +import { EmptyState } from "../../components/ui/EmptyState"; +import type { useAttachmentDocument } from "../../lib/attachmentDocument"; +import { HtmlRenderWebView } from "../threads/HtmlRenderWebView"; +import { AudioFilePreview } from "./AudioFilePreview"; +import { DelimitedFilePreview } from "./DelimitedFilePreview"; +import { FileMarkdownPreview } from "./FileMarkdownPreview"; +import { FilePreviewLoading, FilePreviewNotice } from "./FilePreviewFeedback"; +import { SourceFileSurface } from "./SourceFileSurface"; +import { WorkspaceFileWebPreview } from "./WorkspaceFileWebPreview"; + +export function nativeViewerKind(kind: ReturnType["kind"]) { + if (kind === "image") return "image" as const; + if (kind === "pdf") return "pdf" as const; + if (kind === "video" || kind === "unsupported") return "document" as const; + return null; +} + +export function AttachmentDocumentBody(props: { + readonly document: Pick< + ReturnType, + | "kind" + | "activeMode" + | "uri" + | "content" + | "table" + | "error" + | "needsText" + | "retry" + | "revision" + >; + readonly name: string; + readonly environmentId: EnvironmentId | null; + readonly htmlRender: boolean; + readonly nativeViewer: "pending" | "open" | "unavailable" | null; + readonly nativeError: string | null; + readonly onOpenNative: () => void; +}) { + const { document } = props; + if (document.error) { + return ( + + + + ); + } + if (props.nativeViewer !== null && props.nativeViewer !== "unavailable") { + return ; + } + // ZIP text entries are read into memory and have no file URI. + if (document.needsText ? !document.content : !document.uri) { + return ; + } + if (document.needsText && document.content) { + const { content, table } = document; + return ( + + {content.truncated ? ( + + Preview limited to the first 1 MB. Save or share the file to read it in full. + + ) : null} + {table && document.activeMode === "table" ? ( + + ) : document.activeMode === "markdown" && props.environmentId ? ( + + ) : ( + + )} + + ); + } + if (!document.uri) return null; + if (document.kind === "audio") { + return ; + } + if (document.kind === "html") { + return props.htmlRender ? ( + + ) : ( + + ); + } + return ( + + + + ); +} diff --git a/apps/mobile/src/features/files/AttachmentFileScreen.tsx b/apps/mobile/src/features/files/AttachmentFileScreen.tsx index 5a92ea913b57a..a1d3978a57d45 100644 --- a/apps/mobile/src/features/files/AttachmentFileScreen.tsx +++ b/apps/mobile/src/features/files/AttachmentFileScreen.tsx @@ -1,22 +1,21 @@ import { Toolbar } from "../../components/ui/Toolbar"; import * as Dialog from "../../components/ui/Dialog"; -/* oxlint-disable react/no-array-index-key -- Captured table rows and columns have stable positions and may contain identical values. */ import { NativeStackScreenOptions } from "../../native/StackHeader"; import { useNavigation, type StaticScreenProps } from "@react-navigation/native"; import type { MenuAction } from "@react-native-menu/menu"; -import { EnvironmentId } from "@t3tools/contracts"; -import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; -import { useEffect, useRef, useState } from "react"; -import { Platform, ScrollView, View } from "react-native"; +import { EnvironmentId, ThreadId } from "@t3tools/contracts"; +import { + clampFileAttachmentUploadBytes, + formatAttachmentSize, +} from "@t3tools/client-runtime/state/attachments"; +import { useRef, useState } from "react"; +import { Platform, View } from "react-native"; import { AndroidHeaderIconButton, AndroidScreenHeader, } from "../../components/ui/AndroidScreenHeader"; -import { AppText as Text } from "../../components/ui/AppText"; -import { AudioFilePreview } from "./AudioFilePreview"; import { Menu } from "../../components/ui/Menu"; -import { EmptyState } from "../../components/ui/EmptyState"; import { FilePreviewModal, type FilePreviewSource } from "../../components/FilePreviewModal"; import { useAttachmentDocument } from "../../lib/attachmentDocument"; import { nativeViewerErrorMessage } from "../../lib/attachmentDownload"; @@ -24,12 +23,12 @@ import { isFileBackedComposerAttachment } from "../../lib/composerImages"; import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; import { useUniwindTheme } from "../../lib/useUniwindTheme"; import { removeComposerDraftAttachment, useComposerDraft } from "../../state/use-composer-drafts"; -import { FilePreviewLoading, FilePreviewNotice } from "./FilePreviewFeedback"; -import { FileMarkdownPreview } from "./FileMarkdownPreview"; +import { useEnvironmentServerConfig } from "../../state/entities"; +import { useRefreshAssetUrl } from "../../state/assets"; +import { scopedThreadKey } from "../../lib/scopedEntities"; import { useAppearancePreferences } from "../settings/appearance/AppearancePreferencesProvider"; -import { SourceFileSurface } from "./SourceFileSurface"; -import { WorkspaceFileWebPreview } from "./WorkspaceFileWebPreview"; -import { HtmlRenderWebView } from "../threads/HtmlRenderWebView"; +import { isZipFile, ZipArchiveView } from "./ZipArchiveView"; +import { AttachmentDocumentBody, nativeViewerKind } from "./AttachmentDocumentBody"; export type AttachmentFileRouteParams = { readonly environmentId?: string; @@ -44,126 +43,6 @@ export type AttachmentFileRouteParams = { type AttachmentFileScreenProps = StaticScreenProps; -function nativeViewerKind(kind: ReturnType["kind"]) { - if (kind === "image") return "image" as const; - if (kind === "pdf") return "pdf" as const; - if (kind === "video" || kind === "unsupported") return "document" as const; - return null; -} - -function AttachmentDocumentBody(props: { - readonly document: ReturnType; - readonly name: string; - readonly environmentId: EnvironmentId | null; - readonly htmlRender: boolean; - readonly nativeViewer: "pending" | "open" | "unavailable" | null; - readonly nativeError: string | null; - readonly onOpenNative: () => void; -}) { - const { document } = props; - if (document.error) { - return ( - - - - ); - } - if (props.nativeViewer !== null && props.nativeViewer !== "unavailable") { - return ; - } - if (!document.uri || (document.needsText && !document.content)) { - return ; - } - if (document.needsText && document.content) { - const { content, table } = document; - return ( - - {content.truncated ? ( - - Preview limited to the first 1 MB. Save or share the file to read it in full. - - ) : null} - {table && document.activeMode === "table" ? ( - - {table.truncated ? ( - - Table limited to the first 100 rows and 30 columns. Source shows the rest. - - ) : null} - - - {table.rows.map((row, rowIndex) => ( - - {row.map((cell, columnIndex) => ( - - - {cell} - - - ))} - - ))} - - - - ) : document.activeMode === "markdown" && props.environmentId ? ( - - ) : ( - - )} - - ); - } - if (document.kind === "audio") { - return ; - } - if (document.kind === "html") { - return props.htmlRender ? ( - - ) : ( - - ); - } - return ( - - - - ); -} - export function AttachmentFileScreen(props: AttachmentFileScreenProps) { const navigation = useNavigation(); const { appearance, setCodeWordBreak } = useAppearancePreferences(); @@ -200,14 +79,12 @@ export function AttachmentFileScreen(props: AttachmentFileScreenProps) { if (navigation.canGoBack()) navigation.goBack(); }; const { uri, resource } = document; - useEffect(() => { - if (nativeViewer !== "pending" || !uri) return; - // oxlint-disable-next-line react/set-state-in-effect -- Presenting the viewer waits on the resolved file. + // A file only the native viewer can show opens it as soon as the file resolves. + if (nativeViewer === "pending" && uri) { setNativeViewer("open"); setNativeOpen(true); - }, [nativeViewer, uri]); - // The viewer mints its own fresh URL from the resource, so a link that expired while this - // screen sat in the background is never handed to Quick Look or ACTION_VIEW. + } + // Mint a fresh URL: cached URLs may expire in the background before Quick Look or ACTION_VIEW opens. const nativeSource = ((): FilePreviewSource | null => { const kind = nativeKind ?? "document"; const base = { kind, name: params.name, mimeType: params.mimeType }; @@ -223,7 +100,6 @@ export function AttachmentFileScreen(props: AttachmentFileScreenProps) { const message = pendingNativeError.current; pendingNativeError.current = null; if (nativeViewer === null) { - // A file this screen renders itself: an explicit viewer failure is worth a word. if (message) Dialog.alert("Could not open document", message); return; } @@ -322,6 +198,36 @@ export function AttachmentFileScreen(props: AttachmentFileScreenProps) { menuActions.find(({ id }) => id === event.nativeEvent.event)?.onPress(); }; const subtitle = `${draftKey ? "Draft attachment" : "Attachment"}${sizeBytes > 0 ? ` · ${formatAttachmentSize(sizeBytes)}` : ""}`; + const refresh = useRefreshAssetUrl(environmentId, resource); + const capabilities = useEnvironmentServerConfig(environmentId)?.environment.capabilities; + + if (document.kind === "archive" && isZipFile(params) && !document.error) { + const threadDraftKey = + environmentId && params.threadId + ? scopedThreadKey(environmentId, ThreadId.make(params.threadId)) + : null; + return ( + void share()} + onRemove={draftKey ? removeFromDraft : null} + /> + ); + } return ( diff --git a/apps/mobile/src/features/files/AudioFilePreview.tsx b/apps/mobile/src/features/files/AudioFilePreview.tsx index 02358055e2a61..e1b3214d38290 100644 --- a/apps/mobile/src/features/files/AudioFilePreview.tsx +++ b/apps/mobile/src/features/files/AudioFilePreview.tsx @@ -1,9 +1,11 @@ import { Button } from "../../components/ui/Button"; -import { useAudioPlayer, useAudioPlayerStatus } from "expo-audio"; +import { useAudioPlayerStatus } from "expo-audio"; import { useEffect, useState } from "react"; -import { View } from "react-native"; +import { AppState, View } from "react-native"; import { AppText as Text } from "../../components/ui/AppText"; import { useFullscreenVideoOpen, useMediaAudioSessionHold } from "../../lib/videoAudioSession"; +import { createAudioPlaybackSession } from "../../lib/audioSession"; +import { usePlaybackAudioPlayer } from "../voice-input/usePlaybackAudioPlayer"; function timestamp(seconds: number) { const value = Number.isFinite(seconds) ? Math.max(0, Math.floor(seconds)) : 0; @@ -11,23 +13,32 @@ function timestamp(seconds: number) { } export function AudioFilePreview(props: { uri: string; onRetry: () => void }) { - const player = useAudioPlayer({ uri: props.uri }, { updateInterval: 500 }); + const player = usePlaybackAudioPlayer(props.uri); const status = useAudioPlayerStatus(player); + const [playbackRequested, setPlaybackRequested] = useState(false); + const playback = createAudioPlaybackSession(player, false, setPlaybackRequested); const [seekError, setSeekError] = useState(false); // Video teardown deactivates the shared iOS session, which would stop this player. useMediaAudioSessionHold(status.playing); const fullscreenVideoOpen = useFullscreenVideoOpen(); + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- keeps the shared audio session in step with the native player status and fullscreen video useEffect(() => { - if (fullscreenVideoOpen) player.pause(); - }, [fullscreenVideoOpen, player]); - const seek = (seconds: number, play = false) => { + if (fullscreenVideoOpen || status.didJustFinish || status.error) playback.pause(); + else playback.playingChanged(status.playing); + }, [fullscreenVideoOpen, status.didJustFinish, status.error, status.playing, playback]); + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- subscribes to AppState to pause playback in the background, and pauses on cleanup + useEffect(() => { + const subscription = AppState.addEventListener("change", (state) => { + if (state !== "active") playback.pause(); + }); + return () => { + subscription.remove(); + playback.pause(); + }; + }, [playback]); + const seek = (seconds: number) => { setSeekError(false); - void player - .seekTo(seconds) - .then(() => { - if (play) player.play(); - }) - .catch(() => setSeekError(true)); + void player.seekTo(seconds).catch(() => setSeekError(true)); }; return ( @@ -43,13 +54,23 @@ export function AudioFilePreview(props: { uri: string; onRetry: () => void }) { onPress={() => seek(Math.max(0, status.currentTime - 15))} /> + ), + TextInput: (props: { + readonly accessibilityLabel?: string; + readonly value: string; + readonly onChangeText: (value: string) => void; + }) => ( + props.onChangeText(event.target.value)} + /> + ), + }; +}); +vi.mock("@legendapp/list/react-native", () => ({ + LegendList: (props: { + readonly data: ZipTreeRow[]; + readonly ListHeaderComponent: ReactNode; + readonly ListEmptyComponent: ReactNode; + readonly keyExtractor: (row: ZipTreeRow) => string; + readonly renderItem: (input: { item: ZipTreeRow }) => ReactNode; + }) => ( +
+ {props.ListHeaderComponent} + {props.data.length === 0 ? props.ListEmptyComponent : null} + {props.data.map((item) => ( +
{props.renderItem({ item })}
+ ))} +
+ ), +})); +vi.mock("expo-file-system", () => ({ + Directory: class { + create() {} + }, + Paths: { document: { uri: "file:///documents" } }, + File: class { + constructor(private readonly uri: string) {} + get exists() { + return false; + } + get size() { + return files.get(this.uri)?.byteLength ?? null; + } + async arrayBuffer() { + const bytes = files.get(this.uri); + if (!bytes) throw new Error(`Missing ZIP fixture: ${this.uri}`); + return Uint8Array.from(bytes).buffer; + } + }, +})); +vi.mock("expo/fetch", () => ({ fetch: vi.fn() })); +vi.mock("expo-crypto", () => ({ randomUUID: vi.fn() })); +vi.mock("@react-navigation/native", () => ({ + useNavigation: () => ({ canGoBack: () => false }), + usePreventRemove: (enabled: boolean, remove: () => void) => { + navigation.remove = enabled ? remove : null; + }, +})); +vi.mock("react-native-safe-area-context", () => ({ + useSafeAreaInsets: () => ({ top: 0, right: 0, bottom: 0, left: 0 }), +})); +vi.mock("../../native/NativeScrollViewMarker", () => ({ NativeScrollView: () => null })); +vi.mock("../../native/StackHeader", () => ({ NativeStackScreenOptions: () => null })); +vi.mock("../../components/ui/Toolbar", () => { + const Slot = (props: { readonly children?: ReactNode }) =>
{props.children}
; + return { + Toolbar: Object.assign(Slot, { + Button: () => null, + Menu: Slot, + MenuAction: (props: { + readonly children?: ReactNode; + readonly disabled?: boolean; + readonly onPress?: () => void; + }) => ( + + ), + }), + }; +}); +vi.mock("../../components/ui/AndroidScreenHeader", () => ({ AndroidScreenHeader: () => null })); +vi.mock("../../components/ui/Menu", () => ({ Menu: () => null })); +vi.mock("../../components/ui/AppSymbol", () => ({ SymbolView: () => null })); +vi.mock("../../components/ui/Progress", () => ({ Progress: () => null })); +vi.mock("../../components/PierreEntryIcon", () => ({ PierreEntryIcon: () => null })); +vi.mock("../../components/FilePreviewModal", () => ({ FilePreviewModal: () => null })); +vi.mock("../../lib/copyTextWithHaptic", () => ({})); +vi.mock("./SourceFileSurface", () => ({ + SourceFileSurface: (props: { readonly contents: string }) =>
{props.contents}
, +})); +vi.mock("./AudioFilePreview", () => ({ AudioFilePreview: () => null })); +vi.mock("./FileMarkdownPreview", () => ({ FileMarkdownPreview: () => null })); +vi.mock("./WorkspaceFileWebPreview", () => ({ WorkspaceFileWebPreview: () => null })); +vi.mock("../threads/HtmlRenderWebView", () => ({ HtmlRenderWebView: () => null })); +vi.mock("../settings/appearance/AppearancePreferencesProvider", () => ({ + useAppearancePreferences: () => ({ + appearance: { codeWordBreak: false }, + themeVariables: { "--color-icon": "#000000" }, + setCodeWordBreak: () => {}, + }), +})); + +import { ZipArchiveView } from "./ZipArchiveView"; +import { AttachmentFileScreen } from "./AttachmentFileScreen"; +import { appAtomRegistry } from "../../state/atom-registry"; +import { composerDraftsAtom } from "../../state/use-composer-drafts"; + +function setup() { + vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true); + vi.useFakeTimers({ toFake: ["setImmediate", "clearImmediate"] }); + files.clear(); + navigation.remove = null; + server.capabilities = { repositoryIdentity: false }; + server.refresh.mockClear(); + appAtomRegistry.set(composerDraftsAtom, {}); + files.set( + "file:///first.zip", + Uint8Array.from( + atob( + "UEsDBBQAAAAAAAAAIVyzyFShFgAAABYAAAAJAAAAZmlyc3QudHh0Rmlyc3QgYXJjaGl2ZSBjb250ZW50c1BLAQIUAxQAAAAAAAAAIVyzyFShFgAAABYAAAAJAAAAAAAAAAAAAACAAQAAAABmaXJzdC50eHRQSwUGAAAAAAEAAQA3AAAAPQAAAAAA", + ), + (character) => character.charCodeAt(0), + ), + ); + + const container = document.createElement("div"); + const root = createRoot(container); + onTestFinished(() => { + act(() => root.unmount()); + files.clear(); + vi.useRealTimers(); + vi.unstubAllGlobals(); + }); + const props: ComponentProps = { + name: "archive.zip", + subtitle: "ZIP", + tintColor: "#000000", + sizeBytes: 0, + uri: "file:///first.zip", + isLocal: true, + refresh: async () => null, + environmentId: null, + draftKey: null, + maxAttachmentBytes: undefined, + onSave: () => {}, + onRemove: null, + }; + return { + container, + root, + props, + render: async (input = props) => { + await act(async () => root.render()); + }, + settle: async (assert: () => void) => { + await act(async () => vi.runAllTimersAsync()); + assert(); + }, + }; +} + +it("opens a ZIP chat attachment as a browsable archive on the attachment file screen", async () => { + const screen = setup(); + server.capabilities = { + repositoryIdentity: false, + attachmentUploads: true, + fileAttachments: { maxUploadBytes: 1024 }, + }; + const { fetch } = await import("expo/fetch"); + vi.mocked(fetch, { partial: true }).mockImplementation(async () => ({ + ok: true, + body: new Response(Uint8Array.from(files.get("file:///first.zip")!)).body, + })); + await act(async () => + screen.root.render( + , + ), + ); + await screen.settle(() => + expect(screen.container.querySelector('[aria-label="first.txt"]')).not.toBeNull(), + ); + await act(async () => + screen.container.querySelector('[aria-label="first.txt"]')!.click(), + ); + await screen.settle(() => + expect(screen.container.querySelector("pre")?.textContent).toBe("First archive contents"), + ); + const add = Array.from(screen.container.querySelectorAll("button")).find( + (button) => button.textContent === "Add to chat", + ); + expect(add?.disabled).toBe(false); +}); + +it("keeps the ZIP filter and archive open when native Back closes a selected entry", async () => { + const screen = setup(); + await screen.render(); + await screen.settle(() => + expect(screen.container.querySelector('[aria-label="first.txt"]')).not.toBeNull(), + ); + const filter = screen.container.querySelector( + '[aria-label="Filter files in ZIP"]', + )!; + await act(async () => { + Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value")!.set!.call( + filter, + "first", + ); + filter.dispatchEvent(new Event("input", { bubbles: true })); + }); + await act(async () => + screen.container.querySelector('[aria-label="first.txt"]')!.click(), + ); + await screen.settle(() => + expect(screen.container.querySelector("pre")?.textContent).toBe("First archive contents"), + ); + + expect(navigation.remove).not.toBeNull(); + await act(async () => navigation.remove!()); + + expect(screen.container.querySelector("pre")).toBeNull(); + expect(screen.container.querySelector('[aria-label="first.txt"]')).not.toBeNull(); + expect( + screen.container.querySelector('[aria-label="Filter files in ZIP"]')?.value, + ).toBe("first"); +}); + +it("explains why an encrypted ZIP cannot be browsed", async () => { + const screen = setup(); + const bytes = files.get("file:///first.zip")!; + const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength); + const directory = view.getUint32(bytes.length - 6, true); + view.setUint16(directory + 8, view.getUint16(directory + 8, true) | 1, true); + await screen.render(); + await screen.settle(() => expect(screen.container.textContent).toContain("Encrypted zip")); + expect(screen.container.querySelector('[aria-label="first.txt"]')).toBeNull(); +}); + +it("keeps the archive and selected entry when the parent re-renders with a new refresh", async () => { + const screen = setup(); + await screen.render(); + await screen.settle(() => + expect(screen.container.querySelector('[aria-label="first.txt"]')).not.toBeNull(), + ); + await act(async () => + screen.container.querySelector('[aria-label="first.txt"]')!.click(), + ); + await screen.settle(() => + expect(screen.container.querySelector("pre")?.textContent).toBe("First archive contents"), + ); + files.delete("file:///first.zip"); + + await screen.render({ ...screen.props, refresh: async () => null }); + await screen.settle(() => + expect(screen.container.querySelector("pre")?.textContent).toBe("First archive contents"), + ); + expect(navigation.remove).not.toBeNull(); +}); diff --git a/apps/mobile/src/features/files/ZipArchiveView.tsx b/apps/mobile/src/features/files/ZipArchiveView.tsx new file mode 100644 index 0000000000000..bb9931d4e3c00 --- /dev/null +++ b/apps/mobile/src/features/files/ZipArchiveView.tsx @@ -0,0 +1,870 @@ +import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; +import { + ARCHIVE_ENTRY_MAX_BYTES, + ARCHIVE_MAX_BYTES, + boundedZip, +} from "@t3tools/client-runtime/zip/bounded-zip"; +import type { EnvironmentId } from "@t3tools/contracts"; +import { filePreviewDelimiter, parseDelimitedPreview } from "@t3tools/shared/delimitedPreview"; +import { + decodeFilePreviewText, + filePreviewKind, + hostPreviewMimeTypeFromExtension, +} from "@t3tools/shared/filePreview"; +import { LegendList } from "@legendapp/list/react-native"; +import { fetch } from "expo/fetch"; +import { File } from "expo-file-system"; +import { useNavigation, usePreventRemove } from "@react-navigation/native"; +import { useEffect, useEffectEvent, useRef, useState } from "react"; +import { Keyboard, Platform, Pressable, ScrollView, TextInput, View } from "react-native"; +import { useSafeAreaInsets } from "react-native-safe-area-context"; + +import { PierreEntryIcon } from "../../components/PierreEntryIcon"; +import { AndroidScreenHeader } from "../../components/ui/AndroidScreenHeader"; +import { SymbolView } from "../../components/ui/AppSymbol"; +import { AppText as Text } from "../../components/ui/AppText"; +import { Button } from "../../components/ui/Button"; +import { EmptyState } from "../../components/ui/EmptyState"; +import { Progress } from "../../components/ui/Progress"; +import { Toolbar } from "../../components/ui/Toolbar"; +import { useNativeColumnLayoutMetrics } from "../../native/native-layout-metrics"; +import { NativeScrollView } from "../../native/NativeScrollViewMarker"; +import { NativeStackScreenOptions } from "../../native/StackHeader"; +import * as Dialog from "../../components/ui/Dialog"; +import { FilePreviewModal } from "../../components/FilePreviewModal"; +import { + nativeViewerErrorMessage, + shareGeneratedAttachment, + writeGeneratedAttachmentFile, +} from "../../lib/attachmentDownload"; +import { attachmentDocumentPresentation } from "../../lib/attachmentDocumentPresentation"; +import { + createComposerFileAttachment, + removePersistedComposerAttachmentFile, +} from "../../lib/composerImages"; +import { appendComposerDraftAttachments } from "../../state/use-composer-drafts"; +import { AttachmentDocumentBody, nativeViewerKind } from "./AttachmentDocumentBody"; +import { FilePreviewLoading } from "./FilePreviewFeedback"; +import { + buildZipTree, + flattenZipTree, + zipDownloadTimeLeft, + zipFolderLabel, + type ZipEntry, + type ZipTreeRow, +} from "./zipTree"; + +export function isZipFile(file: { readonly name: string; readonly mimeType: string }) { + const mime = file.mimeType.split(";", 1)[0]?.trim().toLowerCase(); + return ( + mime === "application/zip" || + mime === "application/x-zip-compressed" || + file.name.toLowerCase().endsWith(".zip") + ); +} + +interface ZipArchive { + readonly entries: ReadonlyArray; + readonly fileCount: number; +} + +interface ZipFailure { + readonly title: string; + readonly detail: string; + readonly retry: boolean; +} + +const SAVE_ZIP_HINT = "Save the ZIP to open it in another app."; +const TOO_LARGE: ZipFailure = { + title: "Too large to browse here", + detail: `Browsing works up to ${formatAttachmentSize(ARCHIVE_MAX_BYTES)}. ${SAVE_ZIP_HINT}`, + retry: false, +}; +const CANCELLED: ZipFailure = { + title: "Download cancelled", + detail: "The ZIP wasn't downloaded. Try again to list its files.", + retry: true, +}; +const NETWORK: ZipFailure = { + title: "Couldn't download this ZIP", + detail: "Check the connection to this environment and try again.", + retry: true, +}; + +class ZipFailureError extends Error { + constructor(readonly failure: ZipFailure) { + super(failure.title); + } +} + +function errorMessage(cause: unknown, fallback: string) { + return cause instanceof Error ? cause.message : fallback; +} + +async function readArchiveBody( + body: ReadableStream, + onProgress: (receivedBytes: number) => void, +) { + const reader = body.getReader(); + const chunks: Uint8Array[] = []; + let size = 0; + try { + while (true) { + const { value, done } = await reader.read(); + if (done) break; + size += value.byteLength; + if (size > ARCHIVE_MAX_BYTES) throw new ZipFailureError(TOO_LARGE); + chunks.push(value); + onProgress(size); + } + } finally { + void reader.cancel().catch(() => {}); + } + const bytes = new Uint8Array(size); + let offset = 0; + for (const chunk of chunks) { + bytes.set(chunk, offset); + offset += chunk.byteLength; + } + return bytes.buffer; +} + +async function openArchive(bytes: ArrayBuffer): Promise { + let files: Awaited>; + try { + files = await boundedZip(bytes); + } catch (cause) { + throw new ZipFailureError({ + title: "Couldn't browse this ZIP", + detail: `${errorMessage(cause, "It may be incomplete or damaged.")} ${SAVE_ZIP_HINT}`, + retry: false, + }); + } + const entries = [...files].map(([path, file]): ZipEntry => { + const name = path.split("/").findLast(Boolean) ?? path; + const dot = name.lastIndexOf("."); + return { + path, + name, + isDirectory: file.directory, + sizeBytes: file.bytes.byteLength, + mimeType: + (dot > 0 ? hostPreviewMimeTypeFromExtension(name.slice(dot).toLowerCase()) : null) ?? + "application/octet-stream", + bytes: file.bytes, + }; + }); + return { entries, fileCount: entries.filter((entry) => !entry.isDirectory).length }; +} + +type ArchiveState = + | { readonly status: "loading"; readonly receivedBytes: number; readonly timeLeft: string | null } + | { readonly status: "ready"; readonly archive: ZipArchive } + | { readonly status: "failed"; readonly failure: ZipFailure }; + +function useZipArchive(input: { + readonly uri: string | null; + readonly isLocal: boolean; + readonly sizeBytes: number; + readonly refresh: () => Promise; +}) { + const [state, setState] = useState({ + status: "loading", + receivedBytes: 0, + timeLeft: null, + }); + const [revision, setRevision] = useState(0); + const controller = useRef(null); + const { uri, isLocal, sizeBytes } = input; + // The parent mints a new refresh callback on every render; it must not reload the archive. + const refresh = useEffectEvent(input.refresh); + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- Load archive bytes and cancel the stream on cleanup. + useEffect(() => { + if (!uri) return; + const abort = new AbortController(); + controller.current = abort; + const startedAt = Date.now(); + // oxlint-disable-next-line react/set-state-in-effect -- A new archive load resets its progress. + setState({ status: "loading", receivedBytes: 0, timeLeft: null }); + void (async () => { + if (sizeBytes > ARCHIVE_MAX_BYTES) throw new ZipFailureError(TOO_LARGE); + if (isLocal) { + const file = new File(uri); + if ((file.size ?? 0) > ARCHIVE_MAX_BYTES) throw new ZipFailureError(TOO_LARGE); + return openArchive(await file.arrayBuffer()); + } + const url = (await refresh()) ?? uri; + const response = await fetch(url, { signal: abort.signal }); + if (!response.ok || !response.body) throw new ZipFailureError(NETWORK); + const bytes = await readArchiveBody(response.body, (receivedBytes) => + setState({ + status: "loading", + receivedBytes, + timeLeft: zipDownloadTimeLeft({ + receivedBytes, + totalBytes: sizeBytes, + elapsedMs: Date.now() - startedAt, + }), + }), + ); + abort.signal.throwIfAborted(); + return openArchive(bytes); + })() + .then((archive) => { + if (!abort.signal.aborted) setState({ status: "ready", archive }); + }) + .catch((cause: unknown) => { + if (!abort.signal.aborted) + setState({ + status: "failed", + failure: cause instanceof ZipFailureError ? cause.failure : NETWORK, + }); + }); + return () => abort.abort(); + // oxlint-disable-next-line react/exhaustive-effect-dependencies -- Retry must reload the archive. + }, [uri, isLocal, sizeBytes, revision]); + return { + state, + retry: () => setRevision((value) => value + 1), + cancel: () => { + controller.current?.abort(); + setState({ status: "failed", failure: CANCELLED }); + }, + }; +} + +function ZipTreeRowView(props: { + readonly row: ZipTreeRow; + readonly collapsed: boolean; + readonly onToggle: (path: string) => void; + readonly onOpen: (entry: ZipEntry) => void; +}) { + const { node, depth } = props.row; + const entry = node.entry; + const folder = entry ? null : zipFolderLabel(node.label); + return ( + (entry ? props.onOpen(entry) : props.onToggle(node.path))} + className="mx-2 h-11 flex-row items-center gap-1.5 rounded-lg pr-2.5 active:bg-subtle" + style={{ paddingLeft: 8 + depth * 18 }} + > + + {entry ? null : ( + + )} + + + + + + {folder ? ( + <> + {folder.prefix} + {folder.name} + + ) : ( + node.label + )} + + + {entry + ? formatAttachmentSize(entry.sizeBytes) + : props.collapsed + ? `${node.fileCount} ${node.fileCount === 1 ? "file" : "files"}` + : ""} + + + ); +} + +function ZipArchiveHeader(props: { + readonly name: string; + readonly subtitle: string; + readonly tintColor: string; + readonly onSave: () => void; + readonly onRemove: (() => void) | null; +}) { + const navigation = useNavigation(); + const isAndroid = Platform.OS === "android"; + return ( + <> + + {isAndroid ? ( + { + if (navigation.canGoBack()) navigation.goBack(); + }} + actions={[ + { accessibilityLabel: "Save ZIP", icon: "square.and.arrow.up", onPress: props.onSave }, + ...(props.onRemove + ? [ + { + accessibilityLabel: "Remove from draft", + icon: "trash" as const, + onPress: props.onRemove, + destructive: true, + overflowOnly: true, + }, + ] + : []), + ]} + /> + ) : ( + + {props.onRemove ? ( + + + Save ZIP + + + Remove from draft + + + ) : ( + + )} + + )} + + ); +} + +function ZipArchiveProgress(props: { + readonly receivedBytes: number; + readonly totalBytes: number; + readonly timeLeft: string | null; + readonly onCancel: () => void; +}) { + const { timeLeft } = props; + return ( + + + {formatAttachmentSize(props.receivedBytes)} + {props.totalBytes > 0 ? ( + + {` of ${formatAttachmentSize(props.totalBytes)}`} + + ) : null} + + 0 ? props.receivedBytes / props.totalBytes : undefined} + label="ZIP download progress" + /> + + {`Downloading the ZIP so its files can be listed.${timeLeft ? ` ${timeLeft} on this connection.` : ""}`} + + + ), +})); +vi.mock("react-native-safe-area-context", () => ({ useSafeAreaInsets: () => ({ top: 0 }) })); +vi.mock("../../native/NativeScrollViewMarker", () => ({ NativeScrollView: Nothing })); +vi.mock("../../native/native-layout-metrics", () => ({ useNativeColumnLayoutMetrics: () => null })); +vi.mock("@legendapp/list/react-native", () => ({ + LegendList: (props: { + data: ReadonlyArray; + keyExtractor: (item: T) => string; + renderItem: (info: { item: T }) => ReactNode; + ListHeaderComponent?: ReactNode; + ListEmptyComponent?: ReactNode; + }) => ( +
+ {props.ListHeaderComponent} + {props.data.length === 0 + ? props.ListEmptyComponent + : props.data.map((item) => ( +
{props.renderItem({ item })}
+ ))} +
+ ), +})); +vi.mock("../../components/ui/Button", () => ({ + Button: ({ + label, + onPress, + disabled, + }: { + label: string; + onPress: () => void; + disabled?: boolean; + }) => ( + + ), +})); +vi.mock("../../components/ui/AppActivityIndicator", () => ({ AppActivityIndicator: Nothing })); +vi.mock("../../components/ui/AppSymbol", () => ({ SymbolView: Nothing })); +vi.mock("../../components/ui/AppText", () => ({ AppText: Children })); +vi.mock("../../components/PierreEntryIcon", () => ({ PierreEntryIcon: Nothing })); +vi.mock("../../lib/cn", () => ({ cn: () => "" })); + +import { FileTreeBrowser } from "./FileTreeBrowser"; +import { useFileTreeEntries } from "./useFileTreeEntries"; + +type Hook = typeof useFileTreeEntries; +type Input = Parameters[0]; + +function setup(withBrowser = false) { + (globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true; + const state = mocks.createState(); + mocks.state = state; + const rootQuery: QueryState = { + success: null, + data: { entries: rootEntries, truncated: false }, + error: null, + failure: null, + isPending: false, + refresh: vi.fn(), + }; + state.rootQuery = rootQuery; + const searchQuery: QueryState = { ...rootQuery, data: { entries: [], truncated: false } }; + state.searchQuery = searchQuery; + const { requests } = state; + const container = document.body.appendChild(document.createElement("div")); + const root = createRoot(container); + let current: ReturnType; + let renders = 0; + let controlledSelection: string | undefined; + function Probe(input: Input) { + if (++renders > 100 && withBrowser) throw new Error("File tree did not settle"); + const result = useFileTreeEntries(input); + useLayoutEffect(() => { + current = result; + }); + return withBrowser ? ( + + ) : null; + } + const unmount = () => { + act(() => root.unmount()); + container.remove(); + }; + return { + requests, + rootQuery, + searchQuery, + get searchSuccess() { + const result = searchQuery.success ?? state.results.get(searchQuery)?.result; + if (result?._tag !== "Success") throw new Error("Search has not succeeded"); + return result; + }, + get responseTimestamp() { + return state.responseTimestamp; + }, + controlSelection(path: string) { + controlledSelection = path; + }, + updateView(expanded: string[], selected: string) { + renders = 0; + act(() => { + current.setExpandedPaths(() => new Set(expanded)); + current.selectPath(selected); + }); + }, + unmount, + get current() { + return current; + }, + get rows() { + return [...container.querySelectorAll("button")].map((button) => + button.getAttribute("aria-label"), + ); + }, + press(label: string) { + renders = 0; + const button = container.querySelector(`button[aria-label="${label}"]`); + if (!button) throw new Error(`No row labelled ${label}`); + act(() => button.click()); + }, + render(target: Partial = {}) { + renders = 0; + const probe = ; + act(() => root.render(probe)); + }, + load(path = "src", refresh = false) { + renders = 0; + act(() => { + void current.loadDirectory(path, refresh); + }); + }, + async succeed(index: number, entries: ProjectEntry[] = []) { + renders = 0; + await act(async () => { + requests[index]!.resolve({ + _tag: "Success", + value: { entries, truncated: false }, + timestamp: ++state.responseTimestamp, + }); + }); + }, + async fail(index: number, message = "Directory unavailable") { + renders = 0; + await act(async () => { + requests[index]!.resolve({ _tag: "Failure", cause: Cause.fail(new Error(message)) }); + }); + }, + [Symbol.dispose]: unmount, + }; +} + +describe("file tree workspace state", () => { + it("retries failed folders once on reconnect", async () => { + using screen = setup(); + screen.render(); + screen.load(); + await screen.fail(0); + act(() => mocks.state.reconnect()); + expect(screen.requests).toHaveLength(2); + act(() => mocks.state.reconnect()); + expect(screen.requests).toHaveLength(2); + await screen.succeed(1); + act(() => mocks.state.reconnect()); + expect(screen.requests).toHaveLength(2); + }); + + it("publishes immutable loading and loaded snapshots", async () => { + using screen = setup(); + screen.render(); + const initial = screen.current; + screen.load(); + const loading = screen.current; + expect(loading.isPending).toBe(true); + expect([...loading.loadingDirectories]).toEqual(["src"]); + expect([...initial.loadingDirectories]).toEqual([]); + await screen.succeed(0, [{ kind: "file", path: "src/first.ts" }]); + expect(screen.current.entries.map((entry) => entry.path)).toEqual(["src", "src/first.ts"]); + expect([...screen.current.loadedDirectories]).toEqual(["src"]); + expect(screen.current.isPending).toBe(false); + expect([...screen.current.loadingDirectories]).toEqual([]); + expect(loading.entries.map((entry) => entry.path)).toEqual(["src"]); + expect([...loading.loadedDirectories]).toEqual([]); + expect([...loading.loadingDirectories]).toEqual(["src"]); + }); + + it.each([{ cwd: "/second" }, { environmentId: EnvironmentId.make("second") }])( + "isolates directory state and restores it on return from %j", + async (target) => { + using screen = setup(); + screen.render(); + screen.load(); + await screen.succeed(0, [{ kind: "file", path: "src/first.ts" }]); + + screen.updateView(["src"], "src/first.ts"); + const firstView = screen.current; + screen.render(target); + expect([...screen.current.expandedPaths]).toEqual([]); + expect(screen.current.selectedPath).toBeNull(); + expect(screen.current.entries.map((entry) => entry.path)).toEqual(["src"]); + expect([...screen.current.loadedDirectories]).toEqual([]); + expect([...screen.current.loadingDirectories]).toEqual([]); + screen.load(); + expect(screen.requests[1]!.query).toEqual({ + environmentId: target.environmentId ?? firstTarget.environmentId, + input: { cwd: target.cwd ?? firstTarget.cwd, directoryPath: "src" }, + }); + await screen.succeed(1, [{ kind: "file", path: "src/second.ts" }]); + + screen.updateView([], "src/second.ts"); + expect([...firstView.expandedPaths]).toEqual(["src"]); + expect(firstView.selectedPath).toBe("src/first.ts"); + screen.render(); + expect([...screen.current.expandedPaths]).toEqual(["src"]); + expect(screen.current.selectedPath).toBe("src/first.ts"); + expect(screen.current.entries.map((entry) => entry.path)).toEqual(["src", "src/first.ts"]); + expect([...screen.current.loadedDirectories]).toEqual(["src"]); + screen.load(); + expect(screen.requests).toHaveLength(3); + await screen.succeed(2, [{ kind: "file", path: "src/first.ts" }]); + + screen.render(target); + expect([...screen.current.expandedPaths]).toEqual([]); + expect(screen.current.selectedPath).toBe("src/second.ts"); + expect(screen.current.entries.map((entry) => entry.path)).toEqual(["src", "src/second.ts"]); + expect([...screen.current.loadedDirectories]).toEqual(["src"]); + }, + ); + + it("ignores stale successes and failures after leaving and returning to a workspace", async () => { + using screen = setup(); + screen.render(); + screen.load(); + screen.load("src/other"); + screen.render({ cwd: "/second" }); + screen.render(); + screen.load(); + + await screen.succeed(0, [{ kind: "file", path: "src/stale.ts" }]); + await screen.fail(1, "Stale error"); + expect(screen.current.entries.map((entry) => entry.path)).toEqual(["src"]); + expect(screen.current.error).toBeNull(); + expect([...screen.current.loadingDirectories]).toEqual(["src"]); + expect(screen.current.isPending).toBe(true); + + await screen.succeed(2, [{ kind: "file", path: "src/current.ts" }]); + expect(screen.current.entries.map((entry) => entry.path)).toEqual(["src", "src/current.ts"]); + expect(screen.current.error).toBeNull(); + expect(screen.current.isPending).toBe(false); + expect([...screen.current.loadingDirectories]).toEqual([]); + }); + + it("retains recent listings and expansion when leaving a large workspace", async () => { + using screen = setup(); + screen.render(); + const paths = Array.from({ length: 70 }, (_, index) => `src/directory-${index}`); + screen.load(); + await screen.succeed( + 0, + paths.map((path) => ({ kind: "directory", path })), + ); + for (const path of paths) { + screen.load(path); + await screen.succeed(screen.requests.length - 1, [{ kind: "file", path: `${path}/file.ts` }]); + } + screen.updateView(["src", ...paths], `${paths[69]}/file.ts`); + screen.render({ cwd: "/other" }); + screen.render(); + expect(screen.current.loadedDirectories.size).toBe(64); + expect(screen.current.loadedDirectories.has(paths[69]!)).toBe(true); + expect(screen.current.expandedPaths.size).toBe(71); + expect(screen.current.selectedPath).toBe(`${paths[69]}/file.ts`); + for (let index = 1; index <= 8; index++) screen.render({ cwd: `/workspace-${index}` }); + screen.render(); + expect(screen.current.loadedDirectories.size).toBe(0); + expect(screen.current.expandedPaths.size).toBe(0); + expect(screen.current.selectedPath).toBeNull(); + }); + + it("retries a failed folder only when the user expands it again", async () => { + using screen = setup(true); + screen.render(); + expect(screen.rows).toEqual(["src"]); + expect(screen.requests).toHaveLength(0); + + screen.press("src"); + expect(screen.requests).toHaveLength(1); + await screen.fail(0); + expect(screen.current.error).toBe("Directory unavailable"); + // Re-rendering and the browser's passive expansion effect never retry a failed listing. + screen.render(); + screen.render(); + expect(screen.requests).toHaveLength(1); + expect(screen.rows).toEqual(["src"]); + + screen.press("src"); + expect([...screen.current.expandedPaths]).toEqual([]); + expect(screen.requests).toHaveLength(1); + screen.press("src"); + expect([...screen.current.expandedPaths]).toEqual(["src"]); + expect(screen.requests).toHaveLength(2); + await screen.succeed(1, [{ kind: "file", path: "src/file.ts" }]); + expect(screen.current.error).toBeNull(); + expect(screen.rows).toEqual(["src", "src/file.ts"]); + + // A loaded folder serves from cache on collapse and expand. + screen.press("src"); + screen.press("src"); + expect(screen.rows).toEqual(["src", "src/file.ts"]); + expect(screen.requests).toHaveLength(2); + }); + + it("reveals a controlled leaf-only search result after search clears", () => { + using screen = setup(true); + screen.render(); + screen.searchQuery.data = { + entries: [{ kind: "file", path: "src/new/file.ts" }], + truncated: false, + }; + screen.controlSelection("src/new/file.ts"); + screen.render({ searchQuery: "file" }); + expect([...screen.current.expandedPaths]).toEqual(["src", "src/new"]); + screen.render(); + expect(screen.current.entries.map((entry) => entry.path)).toContain("src/new/file.ts"); + }); + + it.each(["collapse", "delete"])("settles controlled selection after %s", async (action) => { + using screen = setup(true); + screen.render(); + screen.updateView([], "src/nested/file.ts"); + await screen.succeed(0, [{ kind: "directory", path: "src/nested" }]); + expect([...screen.current.expandedPaths]).toEqual(["src", "src/nested"]); + if (action === "collapse") { + screen.updateView([], "src/nested/file.ts"); + expect([...screen.current.expandedPaths]).toEqual([]); + screen.render({ cwd: "/second" }); + screen.render(); + expect([...screen.current.expandedPaths]).toEqual([]); + } + screen.rootQuery.data = { entries: [], truncated: false }; + screen.render(); + expect([...screen.current.expandedPaths]).toEqual([]); + expect(screen.current.selectedPath).toBeNull(); + if (action === "delete") { + screen.controlSelection("src/nested/file.ts"); + screen.searchQuery.data = { + entries: [ + { kind: "directory", path: "src" }, + { kind: "directory", path: "src/nested" }, + { kind: "file", path: "src/nested/file.ts" }, + ], + truncated: false, + }; + screen.rootQuery.failure = new ProjectListEntriesError({ + cwd: "/first", + failure: "workspace_root_not_found", + }); + screen.rootQuery.error = screen.rootQuery.failure.message; + const requestCount = screen.requests.length; + for (const error of [null, "Search unavailable"]) { + screen.searchQuery.error = error; + screen.render({ searchQuery: "nested" }); + expect(screen.current.entries).toEqual([]); + expect([...screen.current.expandedPaths]).toEqual([]); + expect([...screen.current.loadedDirectories]).toEqual([]); + expect(screen.current.isPending).toBe(false); + expect(screen.requests).toHaveLength(requestCount); + } + } + }); + + it.each(["return", "missing root"])( + "revalidates retained children after %s without clearing for transient errors", + async (scenario) => { + using screen = setup(); + screen.render(); + screen.load(); + await screen.succeed(0, [{ kind: "file", path: "src/old.ts" }]); + screen.updateView(["src"], "src/old.ts"); + screen.render({ cwd: "/second" }); + screen.render(); + screen.rootQuery.error = "Connection unavailable"; + screen.render(); + expect(screen.current.selectedPath).toBe("src/old.ts"); + expect(screen.current.entries.map((entry) => entry.path)).toEqual(["src", "src/old.ts"]); + if (scenario === "missing root") { + screen.rootQuery.failure = new ProjectListEntriesError({ + cwd: "/first", + failure: "workspace_root_not_found", + }); + screen.rootQuery.error = screen.rootQuery.failure.message; + expect(screen.rootQuery.error).toBe("Failed to list workspace entries in '/first'."); + screen.render(); + expect(screen.current.selectedPath).toBeNull(); + expect([...screen.current.expandedPaths]).toEqual([]); + expect([...screen.current.loadedDirectories]).toEqual([]); + } + screen.rootQuery.error = null; + screen.rootQuery.failure = null; + screen.render(); + if (scenario === "missing root") { + expect(screen.current.entries.map((entry) => entry.path)).toEqual(["src"]); + expect(screen.current.selectedPath).toBeNull(); + } + screen.load(); + expect(screen.requests).toHaveLength(2); + await screen.succeed(1, []); + expect(screen.current.entries.map((entry) => entry.path)).toEqual(["src"]); + expect(screen.current.selectedPath).toBeNull(); + }, + ); + + it.each(["new", "src/new"])( + "keeps search discovery %s until its parent listing revalidates it", + async (path) => { + using screen = setup(); + screen.render(); + screen.load(); + await screen.succeed(0, []); + screen.searchQuery.data = { + entries: [{ kind: "file", path: `${path}/file.ts` }], + truncated: false, + }; + screen.render({ searchQuery: "new" }); + const expanded = path.includes("/") ? ["src", path] : [path]; + screen.updateView(expanded, `${path}/file.ts`); + expect(screen.current.selectedPath).toBe(`${path}/file.ts`); + expect([...screen.current.expandedPaths]).toEqual(expanded); + screen.load(path); + await screen.succeed(1, [ + { kind: "file", path: `${path}/file.ts` }, + { kind: "file", path: `${path}/other.ts` }, + ]); + expect([...screen.current.loadedDirectories]).toEqual(["src", path]); + + const cachedSearch = screen.searchSuccess; + for (const searchQuery of ["", "other"]) { + screen.searchQuery.data = { entries: [], truncated: false }; + screen.render({ searchQuery }); + expect(screen.current.selectedPath).toBe(`${path}/file.ts`); + expect([...screen.current.expandedPaths]).toEqual(expanded); + expect([...screen.current.loadedDirectories]).toEqual(["src", path]); + expect(screen.current.entries).toContainEqual({ kind: "file", path: `${path}/file.ts` }); + expect(screen.current.entries).toContainEqual({ kind: "file", path: `${path}/other.ts` }); + } + + screen.render(); + for (const target of [{ cwd: "/second" }, { environmentId: EnvironmentId.make("second") }]) { + screen.render(target); + screen.render(); + expect(screen.current.selectedPath).toBe(`${path}/file.ts`); + expect([...screen.current.expandedPaths]).toEqual(expanded); + expect([...screen.current.loadedDirectories]).toEqual(["src", path]); + expect(screen.current.entries).toContainEqual({ kind: "file", path: `${path}/other.ts` }); + } + + screen.searchQuery.data = { + entries: [{ kind: "file", path: `${path}/file.ts` }], + truncated: false, + }; + screen.render({ searchQuery: "new" }); + for (const equalContents of [false, true]) { + // A later parent listing wins over retained discovery evidence. + if (path.includes("/")) { + // Refresh re-lists the root and every reachable folder; the empty parent prunes the child. + const refreshed = screen.requests.length; + act(() => { + void screen.current.refresh(); + }); + expect(screen.requests.slice(refreshed).map((request) => request.query.input)).toEqual([ + { cwd: "/first", directoryPath: "" }, + { cwd: "/first", query: "new", limit: 200 }, + { cwd: "/first", directoryPath: "src" }, + { cwd: "/first", directoryPath: path }, + ]); + // The parent settles last so its listing carries the newest response timestamp. + for (const index of [refreshed, refreshed + 1, refreshed + 3, refreshed + 2]) { + await screen.succeed(index, []); + } + } else { + const cachedData = screen.rootQuery.data; + screen.rootQuery.isPending = true; + screen.render({ searchQuery: "new" }); + expect(screen.current.selectedPath).toBe(`${path}/file.ts`); + screen.rootQuery.isPending = false; + expect(screen.rootQuery.data).toBe(cachedData); + screen.render({ searchQuery: "new" }); + } + expect(screen.current.selectedPath).toBeNull(); + expect([...screen.current.expandedPaths]).toEqual(path.includes("/") ? ["src"] : []); + expect([...screen.current.loadedDirectories]).toEqual(["src"]); + + // Cover an older cache and the timestamp's ambiguous same-millisecond boundary. + for (const success of [ + cachedSearch, + AsyncResult.success(cachedSearch.value, { timestamp: screen.responseTimestamp }), + ]) { + screen.searchQuery.data = { entries: [], truncated: false }; + screen.render({ searchQuery: "other" }); + screen.searchQuery.success = success; + screen.searchQuery.data = success.value; + screen.render({ searchQuery: "new" }); + screen.updateView(expanded, `${path}/file.ts`); + const requestCount = screen.requests.length; + screen.load(path); + expect(screen.requests).toHaveLength(requestCount + 1); + await screen.fail(requestCount); + screen.searchQuery.success = null; + screen.render(); + expect(screen.current.selectedPath).toBeNull(); + expect([...screen.current.expandedPaths]).toEqual(path.includes("/") ? ["src"] : []); + expect([...screen.current.loadedDirectories]).toEqual(["src"]); + expect( + screen.current.entries.some( + (entry) => entry.path === path || entry.path.startsWith(`${path}/`), + ), + ).toBe(false); + } + + const cachedSearchData = screen.searchQuery.data; + screen.searchQuery.isPending = true; + screen.render({ searchQuery: "new" }); + expect(screen.current.selectedPath).toBeNull(); + expect([...screen.current.loadedDirectories]).toEqual(["src"]); + screen.searchQuery.isPending = false; + if (!equalContents) { + screen.searchQuery.data = { + ...cachedSearchData, + entries: [...cachedSearchData.entries, { kind: "file", path: `${path}/added.ts` }], + }; + } + expect(screen.searchQuery.data === cachedSearchData).toBe(equalContents); + screen.render({ searchQuery: "new" }); + screen.updateView(expanded, `${path}/file.ts`); + screen.load(path); + await screen.succeed(screen.requests.length - 1, [ + { kind: "file", path: `${path}/file.ts` }, + { kind: "file", path: `${path}/recreated.ts` }, + ]); + expect(screen.current.selectedPath).toBe(`${path}/file.ts`); + expect([...screen.current.expandedPaths]).toEqual(expanded); + expect([...screen.current.loadedDirectories]).toEqual(["src", path]); + expect(screen.current.entries).toContainEqual({ kind: "file", path: `${path}/file.ts` }); + expect(screen.current.entries).toContainEqual({ + kind: "file", + path: `${path}/recreated.ts`, + }); + } + }, + ); + + it("prunes deleted directory contents, expansion and selection after a fresh parent listing", async () => { + using screen = setup(); + screen.render(); + screen.load(); + await screen.succeed(0, [{ kind: "directory", path: "src/nested" }]); + screen.load("src/nested"); + await screen.succeed(1, [{ kind: "file", path: "src/nested/file.ts" }]); + screen.updateView(["src", "src/nested"], "src/nested/file.ts"); + screen.rootQuery.data = { entries: [], truncated: true }; + screen.render(); + expect([...screen.current.loadedDirectories]).toEqual(["src", "src/nested"]); + expect(screen.current.selectedPath).toBe("src/nested/file.ts"); + screen.rootQuery.data = { entries: [], truncated: false }; + screen.render(); + expect(screen.current.entries).toEqual([]); + expect([...screen.current.loadedDirectories]).toEqual([]); + expect([...screen.current.expandedPaths]).toEqual([]); + expect(screen.current.selectedPath).toBeNull(); + screen.rootQuery.data = { entries: rootEntries, truncated: false }; + screen.render(); + expect(screen.current.entries.map((entry) => entry.path)).toEqual(["src"]); + }); +}); diff --git a/apps/mobile/src/features/files/useFileTreeEntries.ts b/apps/mobile/src/features/files/useFileTreeEntries.ts index 3c728d48ad090..62c2e33746a9f 100644 --- a/apps/mobile/src/features/files/useFileTreeEntries.ts +++ b/apps/mobile/src/features/files/useFileTreeEntries.ts @@ -1,13 +1,104 @@ +import { useAtomMount, useAtomSubscribe } from "@effect/atom-react"; import { executeAtomQuery } from "@t3tools/client-runtime/state/runtime"; -import type { EnvironmentId, ProjectEntry } from "@t3tools/contracts"; +import { ProjectListEntriesError, type EnvironmentId, type ProjectEntry } from "@t3tools/contracts"; import * as Cause from "effect/Cause"; -import { useEffect, useReducer, useRef, useState } from "react"; +import { useLayoutEffect, useRef, useState } from "react"; +import { Atom } from "effect/reactivity"; +import { environmentCatalog } from "../../connection/catalog"; import { appAtomRegistry } from "../../state/atom-registry"; import { projectEnvironment } from "../../state/projects"; import { useDebouncedValue } from "../../state/queries"; import { useEnvironmentQuery } from "../../state/query"; +function createDirectories() { + return { + target: {}, + entries: new Map>(), + errors: new Map(), + completeDirectories: new Set(), + listingCompletedAt: new Map(), + discoveries: new Map(), + rootListing: null as { readonly timestamp: number } | null, + validatedDirectories: new Set(), + loading: new Set(), + expandedPaths: new Set(), + selectedPath: null as string | null, + revealedSelection: { path: null as string | null, ancestors: new Set() }, + isRefreshing: false, + }; +} + +function boundDirectories(current: ReturnType, preserveVisible = true) { + const visible = (path: string) => { + const parts = path.split("/"); + return parts.every((_, index) => + current.expandedPaths.has(parts.slice(0, index + 1).join("/")), + ); + }; + const inactive = [...new Set([...current.entries.keys(), ...current.errors.keys()])].filter( + (path) => !preserveVisible || !visible(path), + ); + const ownedPaths = [ + ...current.entries.keys(), + ...current.expandedPaths, + current.selectedPath, + ].filter((path) => path !== null); + const discoveries = new Map( + [...current.discoveries].filter(([path]) => + ownedPaths.some((owned) => owned === path || owned.startsWith(`${path}/`)), + ), + ); + if (inactive.length <= 64) + return discoveries.size === current.discoveries.size ? current : { ...current, discoveries }; + const evicted = new Set(inactive.slice(0, -64)); + // Evict listing data, not the user's expansion and selection. A missing parent reloads on return. + return { + ...current, + discoveries, + entries: new Map([...current.entries].filter(([path]) => !evicted.has(path))), + errors: new Map([...current.errors].filter(([path]) => !evicted.has(path))), + completeDirectories: new Set( + [...current.completeDirectories].filter((path) => !evicted.has(path)), + ), + validatedDirectories: new Set( + [...current.validatedDirectories].filter((path) => !evicted.has(path)), + ), + listingCompletedAt: new Map( + [...current.listingCompletedAt].filter(([path]) => !evicted.has(path)), + ), + }; +} + +function contradictsListing(path: string, parent: string, entries: ReadonlyArray) { + if (parent !== "" && !path.startsWith(`${parent}/`)) return false; + const child = path.slice(parent === "" ? 0 : parent.length + 1).split("/")[0]; + const childPath = parent === "" ? child : `${parent}/${child}`; + const entry = entries.find((item) => item.path === childPath); + return !entry || (path !== childPath && entry.kind !== "directory"); +} + +function createRequests() { + return { + active: true, + refreshVersion: 0, + pending: new Map(), + }; +} + +function getRequests( + requestsByTarget: WeakMap>, + target: object, +) { + let requests = requestsByTarget.get(target); + if (!requests) { + requests = createRequests(); + requestsByTarget.set(target, requests); + } + return requests; +} +const noSessionGeneration = Atom.make(0); + export function useFileTreeEntries(input: { readonly cwd: string | null; readonly environmentId: EnvironmentId | null; @@ -22,6 +113,7 @@ export function useFileTreeEntries(input: { ? projectEnvironment.listEntries({ environmentId, input: { cwd, directoryPath: "" } }) : null, ); + const { refresh: refreshRoot } = root; const search = useEnvironmentQuery( searching && debouncedQuery.length > 0 && cwd !== null && environmentId !== null ? projectEnvironment.searchEntries({ @@ -30,42 +122,98 @@ export function useFileTreeEntries(input: { }) : null, ); - const [, render] = useReducer((value: number) => value + 1, 0); - const [entriesRevision, entriesChanged] = useReducer((value: number) => value + 1, 0); - const refreshVersion = useRef(0); - const directories = { - cwd, - environmentId, - entries: new Map>(), - requested: new Set(), - pending: new Map(), - errors: new Map(), - }; - const [refreshingDirectories, setRefreshingDirectories] = useState( - null, - ); - useEffect( - () => () => { - refreshVersion.current++; - for (const controller of directories.pending.values()) controller.abort(); - directories.pending.clear(); - }, - [directories], - ); + const workspaceKey = JSON.stringify([environmentId, cwd]); + const [cache, setCache] = useState(() => ({ + key: workspaceKey, + workspaces: new Map([[workspaceKey, createDirectories()]]), + })); + const savedDirectories = cache.workspaces.get(workspaceKey) ?? createDirectories(); + // Requests belong to a visit, so returning cannot revive an old completion. + const directories = + cache.key === workspaceKey + ? savedDirectories + : { + ...savedDirectories, + target: {}, + validatedDirectories: new Set(), + errors: new Map(), + loading: new Set(), + isRefreshing: false, + }; + if (cache.key !== workspaceKey) { + const workspaces = new Map(cache.workspaces); + const previous = workspaces.get(cache.key); + if (previous) { + workspaces.set( + cache.key, + boundDirectories( + { + ...previous, + errors: new Map(), + loading: new Set(), + isRefreshing: false, + }, + false, + ), + ); + } + workspaces.delete(workspaceKey); + workspaces.set(workspaceKey, directories); + if (workspaces.size > 8) workspaces.delete(workspaces.keys().next().value!); + setCache({ key: workspaceKey, workspaces }); + } + const setDirectories = ( + update: (current: ReturnType) => ReturnType, + ) => + setCache((current) => { + const previous = current.workspaces.get(workspaceKey); + if (!previous) return current; + const next = boundDirectories(update(previous)); + if (next === previous) return current; + return { ...current, workspaces: new Map(current.workspaces).set(workspaceKey, next) }; + }); + const { target } = directories; + const requestsByTarget = useRef(new WeakMap>()); + // Cancel the old target before consumers' passive effects start new directory loads. + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- loads the root and aborts the old target's directory requests before consumers start new loads + useLayoutEffect(() => { + const requests = getRequests(requestsByTarget.current, target); + requests.active = true; + refreshRoot(); + return () => { + requests.active = false; + requests.refreshVersion++; + for (const controller of requests.pending.values()) controller.abort(); + requests.pending.clear(); + setDirectories((current) => + current.target === target + ? { ...current, loading: new Set(), isRefreshing: false } + : current, + ); + }; + }, [target, setDirectories, requestsByTarget, refreshRoot]); + const updateDirectories = ( + update: (current: ReturnType) => ReturnType, + ) => setDirectories((current) => (current.target === target ? update(current) : current)); const loadDirectory = (directoryPath: string, refresh = false) => { + const requests = getRequests(requestsByTarget.current, target); if ( + !requests.active || + missingRoot || cwd === null || environmentId === null || - (!refresh && directories.entries.has(directoryPath)) || - directories.pending.has(directoryPath) + (!refresh && directories.validatedDirectories.has(directoryPath)) || + requests.pending.has(directoryPath) ) { return; } const controller = new AbortController(); - directories.requested.add(directoryPath); - directories.pending.set(directoryPath, controller); - directories.errors.delete(directoryPath); - render(); + requests.pending.set(directoryPath, controller); + updateDirectories((current) => { + const errors = new Map(current.errors); + errors.delete(directoryPath); + return { ...current, errors, loading: new Set(current.loading).add(directoryPath) }; + }); const atom = projectEnvironment.listEntries({ environmentId, input: { cwd, directoryPath } }); appAtomRegistry.refresh(atom); return executeAtomQuery(appAtomRegistry, atom, { @@ -74,31 +222,87 @@ export function useFileTreeEntries(input: { reportDefect: false, }).then((result) => { if (controller.signal.aborted) return; - directories.pending.delete(directoryPath); - if (result._tag === "Success") { - directories.entries.set( - directoryPath, - result.value.entries.filter( - (entry) => - entry.path.slice(0, Math.max(0, entry.path.lastIndexOf("/"))) === directoryPath, - ), - ); - entriesChanged(); - } else { + requests.pending.delete(directoryPath); + updateDirectories((current) => { + const validatedDirectories = new Set(current.validatedDirectories).add(directoryPath); + const loading = new Set(current.loading); + loading.delete(directoryPath); + if (result._tag === "Success") { + const entries = new Map(current.entries); + entries.delete(directoryPath); + entries.set( + directoryPath, + result.value.entries.filter( + (entry) => + entry.path.slice(0, Math.max(0, entry.path.lastIndexOf("/"))) === directoryPath, + ), + ); + const completeDirectories = new Set(current.completeDirectories); + if (result.value.truncated) completeDirectories.delete(directoryPath); + else completeDirectories.add(directoryPath); + return { + ...current, + entries, + loading, + completeDirectories, + discoveries: result.value.truncated + ? current.discoveries + : new Map( + [...current.discoveries].filter( + ([path]) => !contradictsListing(path, directoryPath, result.value.entries), + ), + ), + validatedDirectories, + listingCompletedAt: new Map(current.listingCompletedAt).set( + directoryPath, + result.timestamp, + ), + }; + } const error = Cause.squash(result.cause); - directories.errors.set( - directoryPath, - error instanceof Error ? error.message : "Files unavailable", - ); - } - render(); + return { + ...current, + loading, + validatedDirectories, + errors: new Map(current.errors).set( + directoryPath, + error instanceof Error ? error.message : "Files unavailable", + ), + }; + }); }); }; - const { refresh: refreshRoot, data: rootData } = root; - const { refresh: refreshSearch, data: searchData } = search; + const missingRoot = + root.failure instanceof ProjectListEntriesError && + root.failure.failure === "workspace_root_not_found"; + const rootData = missingRoot ? null : root.data; + const rootListing = root.successResult ?? directories.rootListing; + if ( + missingRoot && + (directories.entries.size > 0 || + directories.errors.size > 0 || + directories.loading.size > 0 || + directories.expandedPaths.size > 0 || + directories.selectedPath !== null || + directories.discoveries.size > 0) + ) { + setDirectories(() => createDirectories()); + } + const { refresh: refreshSearch, data: searchData, successResult: searchResult } = search; + // A folder read fails at once while its environment is unreachable; read it again once a new + // session is up rather than leaving the error until someone refreshes. + const sessionGeneration = + environmentId === null + ? noSessionGeneration + : environmentCatalog.sessionGenerationAtom(environmentId); + // A listener alone does not compute the atom, so nothing would follow the connection. + useAtomMount(sessionGeneration); + useAtomSubscribe(sessionGeneration, () => { + for (const path of directories.errors.keys()) void loadDirectory(path, true); + }); const snapshot = (() => { - const merged = new Map(); - if (searching) { + const merged = new Map(missingRoot ? [] : directories.discoveries); + if (searching && !missingRoot) { for (const entry of searchData?.entries ?? []) merged.set(entry.path, entry); } const reachableDirectories = new Set(); @@ -111,31 +315,158 @@ export function useFileTreeEntries(input: { } } }; + if (!missingRoot) { + const discoveries = new Map(directories.discoveries); + // Search can return only leaves; their inferred parents still own loaded children. + for (const entry of directories.discoveries.values()) { + const parts = entry.path.split("/"); + for (let index = 1; index < parts.length; index++) { + const path = parts.slice(0, index).join("/"); + if (!discoveries.has(path)) discoveries.set(path, { kind: "directory", path }); + } + } + visit([...discoveries.values()]); + } visit((rootData?.entries ?? []).filter((entry) => !entry.path.includes("/"))); return { - revision: entriesRevision, entries: [...merged.values()], reachableDirectories, - searchResultPaths: searching - ? new Set((searchData?.entries ?? []).map((entry) => entry.path)) - : null, + searchResultPaths: + searching && !missingRoot + ? new Set((searchData?.entries ?? []).map((entry) => entry.path)) + : null, }; })(); + if (rootData) { + const deleted = (path: string, directory = false) => { + const parts = path.split("/"); + for (let index = 0; index < parts.length; index++) { + const parent = parts.slice(0, index).join("/"); + const listing = index === 0 ? rootData.entries : directories.entries.get(parent); + const child = parts.slice(0, index + 1).join("/"); + const complete = + index === 0 ? !rootData.truncated : directories.completeDirectories.has(parent); + const entry = listing?.find((item) => item.path === child); + if (complete && listing && !entry) { + const listingCompletedAt = + index === 0 && directories.rootListing !== rootListing + ? rootListing?.timestamp + : directories.listingCompletedAt.get(parent); + // Cached queries keep their completion time across query switches. + // Equal-millisecond responses cannot prove a path postdates the listing. + const retained = + !(index === 0 && directories.rootListing !== rootListing) && + [...directories.discoveries.keys()].some( + (path) => path === child || path.startsWith(`${child}/`), + ); + const discovered = + retained || + (searching && + query === debouncedQuery && + searchResult !== null && + searchResult.timestamp > (listingCompletedAt ?? -Infinity) && + searchData?.entries.some( + (item) => item.path === child || item.path.startsWith(`${child}/`), + )); + if (!discovered) return true; + } + if (entry && (directory || index < parts.length - 1) && entry.kind !== "directory") + return true; + } + return false; + }; + const reconciled = (() => { + const current = directories; + const discoveries = new Map(current.discoveries); + if (current.rootListing !== rootListing && !rootData.truncated) { + for (const path of discoveries.keys()) { + if (contradictsListing(path, "", rootData.entries)) discoveries.delete(path); + } + } + if (searching && query === debouncedQuery && searchResult !== null) { + const ownedPaths = [ + ...current.entries.keys(), + ...current.expandedPaths, + current.selectedPath, + ]; + for (const entry of searchData?.entries ?? []) { + if ( + ownedPaths.some((path) => path === entry.path || path?.startsWith(`${entry.path}/`)) && + !deleted(entry.path, entry.kind === "directory") + ) + discoveries.set(entry.path, entry); + } + } + const entries = new Map([...current.entries].filter(([path]) => !deleted(path, true))); + const errors = new Map([...current.errors].filter(([path]) => !deleted(path, true))); + const expandedPaths = new Set( + [...current.expandedPaths].filter((path) => !deleted(path, true)), + ); + const selectedPath = + current.selectedPath !== null && deleted(current.selectedPath) + ? null + : current.selectedPath; + if ( + entries.size === current.entries.size && + errors.size === current.errors.size && + expandedPaths.size === current.expandedPaths.size && + selectedPath === current.selectedPath && + current.rootListing === rootListing && + discoveries.size === current.discoveries.size && + [...discoveries].every(([path, entry]) => current.discoveries.get(path) === entry) + ) + return current; + const completeDirectories = new Set( + [...current.completeDirectories].filter((path) => entries.has(path)), + ); + return { + ...current, + rootListing, + discoveries, + listingCompletedAt: new Map( + [...current.listingCompletedAt].filter(([path]) => path === "" || entries.has(path)), + ).set( + "", + current.rootListing === rootListing + ? (current.listingCompletedAt.get("") ?? -Infinity) + : (rootListing?.timestamp ?? -Infinity), + ), + entries, + errors, + expandedPaths, + selectedPath, + completeDirectories, + validatedDirectories: new Set( + [...current.validatedDirectories].filter((path) => !deleted(path, true)), + ), + }; + })(); + if (reconciled !== directories) setDirectories(() => reconciled); + } + const refresh = () => { + const requests = getRequests(requestsByTarget.current, target); + if (!requests.active) return Promise.resolve(); refreshRoot(); - if (searching) refreshSearch(); + if (searching && !missingRoot) refreshSearch(); const paths = new Set( - [...directories.requested].filter((path) => snapshot.reachableDirectories.has(path)), + [...directories.entries.keys(), ...directories.errors.keys(), ...directories.loading].filter( + (path) => snapshot.reachableDirectories.has(path), + ), ); - for (const controller of directories.pending.values()) controller.abort(); - directories.pending.clear(); - directories.errors.clear(); - const version = ++refreshVersion.current; - setRefreshingDirectories(directories); + for (const controller of requests.pending.values()) controller.abort(); + requests.pending.clear(); + const version = ++requests.refreshVersion; + updateDirectories((current) => ({ + ...current, + errors: new Map(), + loading: new Set(), + isRefreshing: true, + })); const remaining = paths.values(); const worker = async () => { - while (version === refreshVersion.current) { + while (requests.active && version === requests.refreshVersion) { const next = remaining.next(); if (next.done) return; await loadDirectory(next.value, true); @@ -145,7 +476,7 @@ export function useFileTreeEntries(input: { cwd !== null && environmentId !== null ? [ projectEnvironment.listEntries({ environmentId, input: { cwd, directoryPath: "" } }), - ...(searching + ...(searching && !missingRoot ? [ projectEnvironment.searchEntries({ environmentId, @@ -161,29 +492,80 @@ export function useFileTreeEntries(input: { ), ...Array.from({ length: Math.min(4, paths.size) }, () => worker()), ]; - render(); return Promise.all(work).finally(() => { - if (version === refreshVersion.current) setRefreshingDirectories(null); + if (version === requests.refreshVersion) { + updateDirectories((current) => ({ ...current, isRefreshing: false })); + } }); }; + const revealSelection = (path: string | null) => { + if (missingRoot) return; + updateDirectories((current) => { + const previous = current.revealedSelection; + const handled = previous.path === path ? previous.ancestors : new Set(); + const parts = path?.split("/").filter(Boolean) ?? []; + const ancestors = parts + .slice(1) + .map((_, index) => parts.slice(0, index + 1).join("/")) + .filter( + (ancestor) => + !handled.has(ancestor) && + snapshot.entries.some( + (entry) => + (entry.kind === "directory" && entry.path === ancestor) || + (entry.path === path && entry.path.startsWith(`${ancestor}/`)), + ), + ); + if (previous.path === path && ancestors.length === 0) return current; + return { + ...current, + discoveries: new Map([ + ...current.discoveries, + ...snapshot.entries + .filter((entry) => entry.path === path) + .map((entry) => [entry.path, entry] as const), + ]), + selectedPath: path, + revealedSelection: { path, ancestors: new Set([...handled, ...ancestors]) }, + expandedPaths: new Set([...current.expandedPaths, ...ancestors]), + }; + }); + }; + + const setExpandedPaths = (update: (current: ReadonlySet) => ReadonlySet) => + setDirectories((current) => { + const expandedPaths = update(current.expandedPaths); + return expandedPaths === current.expandedPaths + ? current + : { ...current, expandedPaths: new Set(expandedPaths) }; + }); + return { + revealSelection, + expandedPaths: directories.expandedPaths, + setExpandedPaths, + selectedPath: directories.selectedPath, + selectPath: (selectedPath: string) => + updateDirectories((current) => ({ ...current, selectedPath })), entries: snapshot.entries, searchResultPaths: snapshot.searchResultPaths, - isRefreshing: refreshingDirectories === directories, + isRefreshing: directories.isRefreshing, error: root.error ?? (searching ? search.error : null) ?? [...directories.errors].find(([path]) => snapshot.reachableDirectories.has(path))?.[1] ?? null, isPending: - root.isPending || - directories.pending.size > 0 || - (searching && (query !== debouncedQuery || search.isPending)), - searchTruncated: searching && (search.data?.truncated ?? false), + !missingRoot && + (root.isPending || + directories.loading.size > 0 || + (searching && (query !== debouncedQuery || search.isPending))), + searchTruncated: !missingRoot && searching && (search.data?.truncated ?? false), loadedDirectories: new Set(directories.entries.keys()), - loadingDirectories: new Set(directories.pending.keys()), - loadDirectory, + loadingDirectories: directories.loading, + loadDirectory: (path: string, retry = false) => + loadDirectory(path, retry && directories.errors.has(path)), refresh, }; } diff --git a/apps/mobile/src/features/files/workspaceFileAssetUrl.ts b/apps/mobile/src/features/files/workspaceFileAssetUrl.ts index f109ac0042a8e..fa52af019cb0a 100644 --- a/apps/mobile/src/features/files/workspaceFileAssetUrl.ts +++ b/apps/mobile/src/features/files/workspaceFileAssetUrl.ts @@ -16,13 +16,10 @@ export function useWorkspaceFileAssetUrlState(props: { readonly threadId: ThreadId | null; readonly draftCwd?: string | null; }) { - const absolutePath = useMemo( - () => - props.cwd !== null && props.relativePath !== null - ? resolveWorkspaceFilePath(props.cwd, props.relativePath) - : null, - [props.cwd, props.relativePath], - ); + const absolutePath = + props.cwd !== null && props.relativePath !== null + ? resolveWorkspaceFilePath(props.cwd, props.relativePath) + : null; const relativePath = props.relativePath; const draftCwd = props.draftCwd ?? null; diff --git a/apps/mobile/src/features/files/zipTree.ts b/apps/mobile/src/features/files/zipTree.ts new file mode 100644 index 0000000000000..dcc9552c5c122 --- /dev/null +++ b/apps/mobile/src/features/files/zipTree.ts @@ -0,0 +1,139 @@ +export interface ZipEntry { + readonly path: string; + readonly name: string; + readonly isDirectory: boolean; + readonly sizeBytes: number; + readonly mimeType: string; + readonly bytes: Uint8Array; +} + +export interface ZipTreeNode { + readonly path: string; + readonly label: string; + readonly entry: ZipEntry | null; + readonly children: ReadonlyArray; + readonly fileCount: number; +} + +export interface ZipTreeRow { + readonly node: ZipTreeNode; + readonly depth: number; +} + +interface MutableNode { + path: string; + name: string; + entry: ZipEntry | null; + children: Map; +} + +const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: "base" }); + +function freeze(node: MutableNode): ZipTreeNode { + let current = node; + let label = node.name; + while (current.path !== "" && current.entry === null && current.children.size === 1) { + const [only] = current.children.values(); + if (!only || only.entry !== null) break; + current = only; + label = `${label}/${only.name}`; + } + const children = [...current.children.values()] + .sort((left, right) => + (left.entry === null) !== (right.entry === null) + ? left.entry === null + ? -1 + : 1 + : collator.compare(left.name, right.name), + ) + .map(freeze); + return { + path: current.path, + label, + entry: current.entry, + children, + fileCount: + current.entry === null ? children.reduce((sum, child) => sum + child.fileCount, 0) : 1, + }; +} + +export function buildZipTree(entries: ReadonlyArray): ReadonlyArray { + const root: MutableNode = { path: "", name: "", entry: null, children: new Map() }; + for (const entry of entries) { + const parts = entry.path.split("/").filter(Boolean); + let current = root; + parts.forEach((part, index) => { + const leaf = index === parts.length - 1 && !entry.isDirectory; + const key = leaf ? part : `${part}/`; + let child = current.children.get(key); + if (!child) { + child = { + path: parts.slice(0, index + 1).join("/"), + name: part, + entry: leaf ? entry : null, + children: new Map(), + }; + current.children.set(key, child); + } + current = child; + }); + } + return freeze(root).children; +} + +function flatten( + output: ZipTreeRow[], + node: ZipTreeNode, + depth: number, + collapsed: ReadonlySet, + query: string, +): boolean { + if (node.entry) { + if (query && !node.entry.path.toLowerCase().includes(query)) return false; + output.push({ node, depth }); + return true; + } + const children: ZipTreeRow[] = []; + let visible = !query; + if (query || !collapsed.has(node.path)) { + for (const child of node.children) { + if (flatten(children, child, depth + 1, collapsed, query)) visible = true; + } + } + if (!visible) return false; + output.push({ node, depth }, ...children); + return true; +} + +export function flattenZipTree( + nodes: ReadonlyArray, + collapsed: ReadonlySet, + query: string, +): ReadonlyArray { + const output: ZipTreeRow[] = []; + const normalized = query.trim().toLowerCase(); + for (const node of nodes) flatten(output, node, 0, collapsed, normalized); + return output; +} + +export function zipFolderLabel(label: string) { + const parts = label.split("/"); + const name = parts.at(-1) ?? label; + if (parts.length > 3) return { prefix: `${parts[0]}/…/${parts.at(-2)}/`, name }; + return { prefix: parts.length > 1 ? `${parts.slice(0, -1).join("/")}/` : "", name }; +} + +export function zipDownloadTimeLeft(input: { + readonly receivedBytes: number; + readonly totalBytes: number; + readonly elapsedMs: number; +}) { + if (input.receivedBytes <= 0 || input.totalBytes <= input.receivedBytes || input.elapsedMs < 1000) + return null; + const seconds = Math.ceil( + ((input.totalBytes - input.receivedBytes) * input.elapsedMs) / input.receivedBytes / 1000, + ); + return seconds < 60 + ? `About ${seconds} ${seconds === 1 ? "second" : "seconds"} left` + : `About ${Math.ceil(seconds / 60)} minutes left`; +} diff --git a/apps/mobile/src/features/home/AndroidHomeFab.android.tsx b/apps/mobile/src/features/home/AndroidHomeFab.android.tsx index 7c6fa8c6850fd..1a54ed4ad46c3 100644 --- a/apps/mobile/src/features/home/AndroidHomeFab.android.tsx +++ b/apps/mobile/src/features/home/AndroidHomeFab.android.tsx @@ -1,4 +1,4 @@ -import { useCallback, useRef, useState, type ComponentProps } from "react"; +import { useRef, useState, type ComponentProps } from "react"; import { useWindowDimensions, View, @@ -14,17 +14,40 @@ import { import { useWorkspaceState } from "../../state/workspace"; import { FabScrollContext } from "./FabScrollContext"; import { updateFabScroll } from "./fab-scroll"; -import { useAppearancePreferences } from "../settings/appearance/AppearancePreferencesProvider"; +import { useAndroidControlSizing } from "../../components/ui/useAndroidControlSizing"; +import { useEnabledNavigationTabs } from "../workspace/navigation-tabs"; +import { WorkspaceTabsContext, useWorkspaceTabs } from "../workspace/WorkspaceTabsContext"; +import { FLOATING_TABS, floatingTabsMetrics } from "../workspace/floating-workspace-tabs"; +import { + useAppearancePreferences, + useAndroidFloatingTabs, +} from "../settings/appearance/AppearancePreferencesProvider"; export function AndroidHomeFabLayout(props: ComponentProps) { + const floatingTabsEnabled = useAndroidFloatingTabs(); const insets = useSafeAreaInsets(); const { appearance } = useAppearancePreferences(); const { fontScale } = useWindowDimensions(); const [layoutWidth, setLayoutWidth] = useState(null); const { state } = useWorkspaceState(); const [expanded, setExpanded] = useState(true); + const { scale, fabSize } = useAndroidControlSizing(); + const tabs = useEnabledNavigationTabs(); + const floating = floatingTabsMetrics( + tabs.length + 1, + scale, + fabSize, + props.paneWidth ?? layoutWidth ?? undefined, + ); + const workspace = useWorkspaceTabs(); + const bottomClearance = + insets.bottom + + FLOATING_TABS.bottom + + FLOATING_TABS.edge + + Math.max(floating.height, floating.fabOffset + fabSize); + const context = floatingTabsEnabled && workspace ? { ...workspace, bottomClearance } : workspace; const scrollState = useRef({ anchor: 0, expanded: true }); - const onScroll = useCallback((event: NativeSyntheticEvent) => { + const onScroll = (event: NativeSyntheticEvent) => { const { contentOffset, contentSize, layoutMeasurement } = event.nativeEvent; const next = updateFabScroll( scrollState.current, @@ -33,22 +56,33 @@ export function AndroidHomeFabLayout(props: ComponentProps setLayoutWidth(event.nativeEvent.layout.width)}> - {props.children} - {!props.disabled && !props.sidebar && state.hasConnections && layoutWidth !== null ? ( + + {props.children} + + {!props.disabled && + (!props.sidebar || floatingTabsEnabled) && + state.hasConnections && + layoutWidth !== null ? ( ) : null}
diff --git a/apps/mobile/src/features/home/AndroidHomeFab.shared.tsx b/apps/mobile/src/features/home/AndroidHomeFab.shared.tsx index 5226fce97c2f3..b3a5453f3449f 100644 --- a/apps/mobile/src/features/home/AndroidHomeFab.shared.tsx +++ b/apps/mobile/src/features/home/AndroidHomeFab.shared.tsx @@ -5,6 +5,7 @@ export function AndroidHomeFabLayout(props: { readonly children: ReactNode; readonly sidebar?: boolean; readonly disabled?: boolean; + readonly paneWidth?: number; }) { return <>{props.children}; } diff --git a/apps/mobile/src/features/home/HomeHeader.android.tsx b/apps/mobile/src/features/home/HomeHeader.android.tsx index 8666329f87aba..1d984c2f0fd3c 100644 --- a/apps/mobile/src/features/home/HomeHeader.android.tsx +++ b/apps/mobile/src/features/home/HomeHeader.android.tsx @@ -1,5 +1,4 @@ import type { MenuAction } from "@react-native-menu/menu"; -import { useCallback, useMemo } from "react"; import { NativeStackScreenOptions } from "../../native/StackHeader"; import { ThreadListToolbar } from "./ThreadListToolbar"; import type { HomeHeaderProps } from "./HomeHeader.types"; @@ -13,81 +12,75 @@ function checkedMenuState(checked: boolean) { export function HomeHeader(props: HomeHeaderProps) { const hasCustomListOptions = props.selectedEnvironmentId !== null || props.selectedProjectKey !== null; - const menuActions = useMemo( - () => [ - { - id: "environment", - title: "Environment", - subactions: [ + const menuActions: MenuAction[] = [ + { + id: "environment", + title: "Environment", + subactions: [ + { + id: "environment:all", + title: "All environments", + state: checkedMenuState(props.selectedEnvironmentId === null), + }, + ...props.environments.map((environment) => ({ + id: `environment:${environment.environmentId}`, + title: environment.label, + state: checkedMenuState(props.selectedEnvironmentId === environment.environmentId), + })), + ], + }, + ...(props.projects.length === 0 + ? [] + : ([ { - id: "environment:all", - title: "All environments", - state: checkedMenuState(props.selectedEnvironmentId === null), + id: "project", + title: "Project", + subactions: [ + { + id: "project:all", + title: "All projects", + state: checkedMenuState(props.selectedProjectKey === null), + }, + ...props.projects.map((project) => ({ + id: `project:${project.key}`, + title: project.label, + state: checkedMenuState(props.selectedProjectKey === project.key), + })), + ], }, - ...props.environments.map((environment) => ({ - id: `environment:${environment.environmentId}`, - title: environment.label, - state: checkedMenuState(props.selectedEnvironmentId === environment.environmentId), - })), - ], - }, - ...(props.projects.length === 0 - ? [] - : ([ - { - id: "project", - title: "Project", - subactions: [ - { - id: "project:all", - title: "All projects", - state: checkedMenuState(props.selectedProjectKey === null), - }, - ...props.projects.map((project) => ({ - id: `project:${project.key}`, - title: project.label, - state: checkedMenuState(props.selectedProjectKey === project.key), - })), - ], - }, - ] satisfies MenuAction[])), - ], - [props.environments, props.projects, props.selectedEnvironmentId, props.selectedProjectKey], - ); - const handleMenuAction = useCallback( - (event: { nativeEvent: { event: string } }) => { - const id = event.nativeEvent.event; - if (id === "environment:all") { - props.onEnvironmentChange(null); - return; - } + ] satisfies MenuAction[])), + ]; + const handleMenuAction = (event: { nativeEvent: { event: string } }) => { + const id = event.nativeEvent.event; + if (id === "environment:all") { + props.onEnvironmentChange(null); + return; + } - if (id.startsWith("environment:")) { - const environmentId = id.slice("environment:".length); - const environment = props.environments.find( - (candidate) => candidate.environmentId === environmentId, - ); - if (environment) { - props.onEnvironmentChange(environment.environmentId); - } - return; + if (id.startsWith("environment:")) { + const environmentId = id.slice("environment:".length); + const environment = props.environments.find( + (candidate) => candidate.environmentId === environmentId, + ); + if (environment) { + props.onEnvironmentChange(environment.environmentId); } + return; + } - if (id === "project:all") { - props.onProjectChange(null); - return; - } + if (id === "project:all") { + props.onProjectChange(null); + return; + } - if (id.startsWith("project:")) { - const projectKey = id.slice("project:".length); - if (props.projects.some((project) => project.key === projectKey)) { - props.onProjectChange(projectKey); - } - return; + if (id.startsWith("project:")) { + const projectKey = id.slice("project:".length); + if (props.projects.some((project) => project.key === projectKey)) { + props.onProjectChange(projectKey); } - }, - [props], - ); + return; + } + }; return ( <> diff --git a/apps/mobile/src/features/home/HomeRouteScreen.tsx b/apps/mobile/src/features/home/HomeRouteScreen.tsx index 494966d886f67..c522da701e75c 100644 --- a/apps/mobile/src/features/home/HomeRouteScreen.tsx +++ b/apps/mobile/src/features/home/HomeRouteScreen.tsx @@ -6,11 +6,14 @@ import { NativePrimaryColumnContext } from "../../native/v5-workspace-context"; import * as Arr from "effect/Array"; import * as Order from "effect/Order"; import { useNavigation } from "@react-navigation/native"; -import { useCallback, useEffect, useMemo, useState } from "react"; +import { useMemo, useState } from "react"; import { Platform, useWindowDimensions } from "react-native"; import type { EnvironmentThreadShell } from "@t3tools/client-runtime/state/shell"; -import { resolveScratchProjectScopeKey } from "@t3tools/client-runtime/state/project-grouping"; +import { + pickableProjectGroups, + resolveScratchProjectScopeKey, +} from "@t3tools/client-runtime/state/project-grouping"; import { NativeStackScreenOptions } from "../../native/StackHeader"; import { useProjects } from "../../state/entities"; @@ -22,18 +25,19 @@ import { useAdaptiveWorkspaceLayout } from "../layout/AdaptiveWorkspaceLayout"; import { useDeviceType, useNativeColumnLayoutMetrics } from "../../native/native-layout-metrics"; import { WorkspaceEmptyDetail } from "../layout/WorkspaceEmptyDetail"; import { AndroidScreenHeader } from "../../components/ui/AndroidScreenHeader"; -import { checkForAppUpdateOnLaunch, startAppUpdateForegroundRecheck } from "../updates/app-updates"; import { AndroidHomeFabLayout } from "./AndroidHomeFab"; import { HomeScreen } from "./HomeScreen"; import { HomeHeader } from "./HomeHeader"; import { useHomeListOptions } from "./home-list-options"; import { useAtomValueWhileVisible, useHomeRouteVisible } from "./home-route-visibility"; -import { useHomeThreadRouteSelection, useHomeThreadSelection } from "./home-thread-navigation"; import { buildHomeProjectScopes } from "./homeThreadList"; import { usePendingTaskListActions } from "./usePendingTaskListActions"; import { useThreadListActions } from "./useThreadListActions"; import { getConnectionAwareBrandHeaderOptions } from "./WorkspaceConnectionTitle"; import { useWorkspaceTabs } from "../workspace/WorkspaceTabsContext"; +import { openSettings } from "../settings/settings-navigation"; +import { useSelectWorkspaceTab } from "../workspace/useSelectWorkspaceTab"; +import { useSelectWorkspaceDetail } from "../workspace/useSelectWorkspaceDetail"; export function HomeRouteScreen() { const { width: windowWidth } = useWindowDimensions(); @@ -43,9 +47,9 @@ export function HomeRouteScreen() { const headerWidth = nativePrimaryColumn ? (columnMetrics?.width ?? windowWidth) : windowWidth; const { layout, panes, primarySidebarSearchQuery, setPrimarySidebarSearchQuery, startNewTask } = useAdaptiveWorkspaceLayout(); + const selectDetail = useSelectWorkspaceDetail(); const projects = useProjects(); - // Streaming turns rewrite thread shells many times a second. While a Thread - // covers Home, rebuilding this list is invisible work. + // Stop rebuilding the streaming thread list while Thread covers Home. const visible = useHomeRouteVisible(); const threads = useAtomValueWhileVisible( environmentThreadShells.navigationThreadShellsAtom, @@ -54,6 +58,7 @@ export function HomeRouteScreen() { const { environments: workspaceEnvironments, state: catalogState } = useWorkspaceState(); const { savedConnectionsById } = useSavedRemoteConnections(); const navigation = useNavigation(); + const selectTab = useSelectWorkspaceTab(); const workspace = useWorkspaceTabs(); const [localSearchQuery, setLocalSearchQuery] = useState(""); const searchQuery = @@ -65,27 +70,24 @@ export function HomeRouteScreen() { else if (workspace) workspace.dispatch({ type: "query", query, tab: "threads" }); else setLocalSearchQuery(query); }; - const handleSelectThread = useHomeThreadSelection(); - const selectThreadRoute = useHomeThreadRouteSelection(); - const handleNewThreadOnBranch = useCallback( - (thread: EnvironmentThreadShell) => { - selectThreadRoute({ - draft: { - requestId: uuidv4(), - environmentId: String(thread.environmentId), - projectId: String(thread.projectId), - branch: thread.branch, - worktreePath: thread.worktreePath, - }, - }); - }, - [selectThreadRoute], - ); - - useEffect(() => { - void checkForAppUpdateOnLaunch(); - startAppUpdateForegroundRecheck(); - }, []); + const handleSelectThread = (thread: EnvironmentThreadShell) => + selectDetail({ + name: "Thread", + params: { environmentId: String(thread.environmentId), threadId: String(thread.id) }, + }); + const selectThreadRoute = (params: ReactNavigation.RootParamList["Thread"]) => + selectDetail({ name: "Thread", params }); + const handleNewThreadOnBranch = (thread: EnvironmentThreadShell) => { + selectThreadRoute({ + draft: { + requestId: uuidv4(), + environmentId: String(thread.environmentId), + projectId: String(thread.projectId), + branch: thread.branch, + worktreePath: thread.worktreePath, + }, + }); + }; const { archiveThread, @@ -102,23 +104,21 @@ export function HomeRouteScreen() { unsettleThread, } = useThreadListActions(); const pendingTasks = usePendingNewTasks(); - const { openPendingTask, confirmDeletePendingTask } = usePendingTaskListActions(); - const environments = useMemo(() => { - const connectionStateByEnvironmentId = new Map( - workspaceEnvironments.map( - (environment) => [environment.environmentId, environment.connectionState] as const, - ), - ); - return Arr.sort( - Object.values(savedConnectionsById).map((connection) => ({ - environmentId: connection.environmentId, - label: connection.environmentLabel, - connectionState: - connectionStateByEnvironmentId.get(connection.environmentId) ?? "available", - })), - Order.mapInput(Order.String, (environment: { readonly label: string }) => environment.label), - ); - }, [savedConnectionsById, workspaceEnvironments]); + const { openPendingTask, confirmDeletePendingTask } = + usePendingTaskListActions(selectThreadRoute); + const connectionStateByEnvironmentId = new Map( + workspaceEnvironments.map( + (environment) => [environment.environmentId, environment.connectionState] as const, + ), + ); + const environments = Arr.sort( + Object.values(savedConnectionsById).map((connection) => ({ + environmentId: connection.environmentId, + label: connection.environmentLabel, + connectionState: connectionStateByEnvironmentId.get(connection.environmentId) ?? "available", + })), + Order.mapInput(Order.String, (environment: { readonly label: string }) => environment.label), + ); const availableEnvironmentIds = useMemo( () => new Set(environments.map((environment) => environment.environmentId)), [environments], @@ -129,23 +129,25 @@ export function HomeRouteScreen() { setSelectedProjectKey, } = useHomeListOptions(availableEnvironmentIds); const selectedEnvironmentId = listOptions.selectedEnvironmentId; - const projectScopeKey = listOptions.selectedProjectKey; - const resolvedProjectKey = resolveScratchProjectScopeKey(projectScopeKey, projects, { - sidebarProjectGroupingMode: listOptions.projectGroupingMode, - sidebarProjectGroupingOverrides: {}, - }); - useEffect(() => { - if (resolvedProjectKey !== projectScopeKey) { - setSelectedProjectKey(resolvedProjectKey); - } - }, [projectScopeKey, resolvedProjectKey, setSelectedProjectKey]); + // A legacy per-environment scratch key resolves here on every render; the stored + // value is only rewritten when the user picks a filter. + const resolvedProjectKey = resolveScratchProjectScopeKey( + listOptions.selectedProjectKey, + projects, + { + sidebarProjectGroupingMode: listOptions.projectGroupingMode, + sidebarProjectGroupingOverrides: {}, + }, + ); const projectFilterOptions = useMemo( () => - buildHomeProjectScopes({ - projects, - environmentId: selectedEnvironmentId, - projectGroupingMode: listOptions.projectGroupingMode, - }).map((scope) => ({ + pickableProjectGroups( + buildHomeProjectScopes({ + projects, + environmentId: selectedEnvironmentId, + projectGroupingMode: listOptions.projectGroupingMode, + }), + ).map((scope) => ({ key: scope.key, label: scope.title, })), @@ -187,11 +189,7 @@ export function HomeRouteScreen() { - navigation.navigate("SettingsSheet", { - screen: "SettingsContent", - params: { screen: "SettingsEnvironmentNew" }, - }) + ? () => openSettings(navigation, "SettingsEnvironmentNew") : undefined } onStartNewTask={ @@ -208,8 +206,7 @@ export function HomeRouteScreen() { onStartNewTask={startNewTask} > <> - {/* Restore the header after leaving split view; screen options are - shallow-merged. */} + {/* Screen options merge shallowly; restore the header after split view. */} {workspace !== null && Platform.OS === "ios" ? null : ( - navigation.navigate("SettingsSheet", { - screen: "SettingsContent", - params: { screen: "SettingsEnvironments" }, - }), + onOpenEnvironments: () => openSettings(navigation, "SettingsEnvironments"), }), headerShown: Platform.OS !== "android", }} @@ -235,18 +228,8 @@ export function HomeRouteScreen() { selectedProjectKey={selectedProjectKey} onEnvironmentChange={setSelectedEnvironmentId} onProjectChange={setSelectedProjectKey} - onOpenEnvironments={() => - navigation.navigate("SettingsSheet", { - screen: "SettingsContent", - params: { screen: "SettingsEnvironments" }, - }) - } - onOpenSettings={() => - navigation.navigate("SettingsSheet", { - screen: "SettingsContent", - params: { screen: "Settings" }, - }) - } + onOpenEnvironments={() => openSettings(navigation, "SettingsEnvironments")} + onOpenSettings={() => selectTab("settings")} onSearchQueryChange={setSearchQuery} onStartNewTask={startNewTask} /> @@ -254,12 +237,7 @@ export function HomeRouteScreen() { - navigation.navigate("SettingsSheet", { - screen: "SettingsContent", - params: { screen: "SettingsEnvironmentNew" }, - }) - } + onAddConnection={() => openSettings(navigation, "SettingsEnvironmentNew")} onArchiveThread={archiveThread} onDeleteThread={confirmDeleteThread} onSettleThread={settleThread} @@ -274,12 +252,7 @@ export function HomeRouteScreen() { onRegenerateThreadTitle={regenerateThreadTitle} onEnvironmentChange={setSelectedEnvironmentId} onProjectChange={setSelectedProjectKey} - onOpenSettings={() => - navigation.navigate("SettingsSheet", { - screen: "SettingsContent", - params: { screen: "Settings" }, - }) - } + onOpenSettings={() => selectTab("settings")} onSearchQueryChange={setSearchQuery} onSelectThread={handleSelectThread} onSelectPendingTask={openPendingTask} diff --git a/apps/mobile/src/features/home/HomeScreen.tsx b/apps/mobile/src/features/home/HomeScreen.tsx index 389054aa1035e..243e693d1b893 100644 --- a/apps/mobile/src/features/home/HomeScreen.tsx +++ b/apps/mobile/src/features/home/HomeScreen.tsx @@ -2,7 +2,6 @@ import { useActiveNewTask } from "../../state/active-new-task"; import { AppActivityIndicator } from "../../components/ui/AppActivityIndicator"; import { useAndroidControlSizing } from "../../components/ui/useAndroidControlSizing"; import type { ThreadMoveDestination } from "../threads/threadOrder"; -import { computeThreadMoveAvailability } from "../threads/threadOrder"; import type { LegendListRef } from "@legendapp/list/react-native"; import { AnimatedLegendList } from "@legendapp/list/reanimated"; import { THREAD_SIDEBAR_ROW_LAYOUT } from "../threads/threadListAnimations"; @@ -10,13 +9,10 @@ import { type EnvironmentProject, type EnvironmentThreadShell, } from "@t3tools/client-runtime/state/shell"; -import { - threadSearchMatchKey, - type EnvironmentThreadSearchMatch, -} from "@t3tools/client-runtime/state/thread-search"; +import { pickableProjectGroups } from "@t3tools/client-runtime/state/project-grouping"; +import { threadSearchMatchKey } from "@t3tools/client-runtime/state/thread-search"; import { type EnvironmentId, type SidebarProjectGroupingMode } from "@t3tools/contracts"; import { useAtomValue } from "@effect/atom-react"; -import { useFocusEffect } from "@react-navigation/native"; import { use, useEffect, useRef, useState, type ComponentProps } from "react"; import { Platform, @@ -28,7 +24,7 @@ import { type NativeScrollEvent, type NativeSyntheticEvent, } from "react-native"; -import { ScrollViewMarker } from "react-native-screens"; +import { NativeScrollViewMarker as ScrollViewMarker } from "../../native/NativeScrollViewMarker"; import { GestureDetector, useNativeGesture } from "react-native-gesture-handler"; import type { SwipeableMethods } from "react-native-gesture-handler/ReanimatedSwipeable"; import { useSafeAreaInsets } from "react-native-safe-area-context"; @@ -45,7 +41,6 @@ import type { SavedRemoteConnection } from "../../lib/connection"; import { scopedProjectKey, scopedThreadKey } from "../../lib/scopedEntities"; import { NativePrimaryColumnContext } from "../../native/v5-workspace-context"; import { nativeHeaderScrollEdgeEffects } from "../../native/scrollEdgeEffects"; -import { useRestingTopOffset } from "../../native/useRestingTopOffset"; import { useNativeColumnLayoutMetrics, useNativeLayoutMetrics, @@ -53,9 +48,13 @@ import { import { NATIVE_LIQUID_GLASS_SUPPORTED } from "../../native/native-glass"; import { useNativeWorkspaceColumnsSupported } from "../../native/NativeWorkspaceColumns"; import { useThreadSearch } from "../../state/queries"; +import { requestThreadMessageJump } from "../threads/threadMessageJump"; +import { useThreadListSearchMatches } from "../threads/useThreadListSearchMatches"; +import { useThreadListV2 } from "../threads/useThreadListV2"; +import { useThreadListNow } from "../threads/use-thread-list-now"; import { useThreadJumpShortcuts } from "../keyboard/threadKeyboardShortcuts"; import { usePendingThreadOrder } from "../../state/thread-order"; -import { threadListEnvironmentsAtom } from "../../state/server"; +import { threadListEnvironmentsAtom } from "../../state/presentation"; import type { PendingNewTask } from "../../state/use-pending-new-tasks"; import { useQueuedThreadKeys } from "../../state/use-thread-outbox"; import { @@ -70,11 +69,7 @@ import { useThreadRowProviderInstanceResolver } from "../threads/thread-provider import { useOpenThreadPullRequests } from "../threads/use-open-thread-pull-requests"; import type { ThreadPrPresentation } from "../../state/thread-pr-presentation"; import { - buildThreadListV2Items, - getThreadListV2OrderedSection, - buildThreadListV2ListItems, threadListV2ListItemsAreEqual, - threadListInboxReturns, THREAD_LIST_V2_SETTLED_INITIAL_COUNT, THREAD_LIST_V2_SETTLED_PAGE_COUNT, type ThreadListV2ListItem, @@ -218,13 +213,10 @@ function HomeTopContentSpacer() { } function HomeScrollView(props: ComponentProps) { - const insets = useSafeAreaInsets(); const primaryColumn = use(NativePrimaryColumnContext); - const restingOffset = useRestingTopOffset(insets.top, props); if (Platform.OS !== "ios") return ; - // v5 needs the actual content scroll view registered with its screen controller. - // The layout observer and header siblings prevent UIKit from finding it implicitly. + // Register the scroll view explicitly; layout and header siblings hide it from UIKit. return ( ) { > ); } function renderHomeScrollView(props: ScrollViewProps) { - // FlatList clones this element with its cells and ref. Keep the marker inside - // the component so those cells remain children of the actual ScrollView. + // FlatList clones this with cells and ref; keep the marker inside their actual ScrollView. return ; } @@ -277,8 +262,7 @@ export function HomeScreen(props: HomeScreenProps) { const contentSideInsets = usesNativeWorkspaceColumns ? (columnMetrics ?? screenMetrics)?.safeArea : undefined; - // Android lists that span a wide window (foldables in portrait) keep the - // reading width, so rows stay clear of the edges and the camera cutout. + // Wide Android lists need reading-width gutters to clear edges and camera cutouts. const { width: windowWidth } = useWindowDimensions(); const androidListGutter = Platform.OS === "android" @@ -305,17 +289,6 @@ export function HomeScreen(props: HomeScreenProps) { ) ? [props.selectedEnvironmentId] : []; - const threadSearch = useThreadSearch(searchEnvironmentIds, props.searchQuery); - const threadSearchMatchByKey = (() => { - const matches = new Map(); - for (const match of threadSearch.matches) { - if (match.source === "user" || match.source === "assistant") { - matches.set(threadSearchMatchKey(match), match); - } - } - return matches; - })(); - const matchedThreadKeys = new Set(threadSearch.matches.map(threadSearchMatchKey)); const handleSwipeableWillOpen = (methods: SwipeableMethods) => { if (openSwipeableRef.current !== methods) { openSwipeableRef.current?.close(); @@ -344,6 +317,7 @@ export function HomeScreen(props: HomeScreenProps) { const listRef = useRef(null); const searchMode = workspace?.state.tabs.threads.searchMode; const restoredOffset = workspace?.state.tabs.threads.scrollOffset; + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- restores the thread list's saved scroll offset through the list ref when search goes back to resting useEffect(() => { if (searchMode !== "resting" || restoredOffset === undefined) return; listRef.current?.scrollToOffset({ @@ -359,9 +333,9 @@ export function HomeScreen(props: HomeScreenProps) { rows.slice(Math.max(0, state.start - 2), state.end + 3).map((row) => row.key), ); }; - // Status-bar, accessibility and programmatic scrolls never arm the scroll - // gate, so every scroll also activates the visible rows once it settles. + // Status-bar, accessibility and programmatic scrolls bypass the gate; activate visible rows after settling. const activationTimerRef = useRef | undefined>(undefined); + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- clears the row activation timer on unmount useEffect(() => () => clearTimeout(activationTimerRef.current), []); const handleListScroll = (event: NativeSyntheticEvent) => { onFabScroll?.(event); @@ -403,7 +377,19 @@ export function HomeScreen(props: HomeScreenProps) { })(); const v2ProjectScopeKey = props.selectedProjectKey; - const v2ScopedProjectGroup = findHomeProjectScope(projectScopes, v2ProjectScopeKey); + // An archived project's filter reads as all projects, matching the filter menu. + const v2ScopedProjectGroup = findHomeProjectScope( + pickableProjectGroups(projectScopes), + v2ProjectScopeKey, + ); + const threadSearch = useThreadSearch( + searchEnvironmentIds, + props.searchQuery, + v2ScopedProjectGroup === null + ? {} + : { projectIds: v2ScopedProjectGroup.projectRefs.map((ref) => ref.projectId) }, + ); + const threadSearchMatchByKey = useThreadListSearchMatches(props.threads, threadSearch); const v2ProjectTitleByProjectKey = new Map( projectScopes.flatMap((scope) => scope.projectRefs.map( @@ -412,14 +398,6 @@ export function HomeScreen(props: HomeScreenProps) { ), ), ); - const v2ScopedProjectKeys = - v2ScopedProjectGroup === null - ? null - : new Set( - v2ScopedProjectGroup.projectRefs.map((projectRef) => - scopedProjectKey(projectRef.environmentId, projectRef.projectId), - ), - ); const handleSettleThread = props.onSettleThread; const handleSnoozeThread = props.onSnoozeThread; const handleUnsnoozeThread = props.onUnsnoozeThread; @@ -452,23 +430,14 @@ export function HomeScreen(props: HomeScreenProps) { toggleSnoozedShelf, toggleWorkingShelf, } = useThreadListV2ShelfPreferences(); - // The list's clock is state: the compiler caches anything computed from it on - // its other inputs, so a render-time `new Date()` would stop moving. The minute - // interval and the snooze-wake timer below both advance it. - const [now, setNow] = useState(() => new Date().toISOString()); - const nowMinute = now.slice(0, 16); - const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); - useFocusEffect(() => { - setNow(new Date().toISOString()); - const id = setInterval(() => setNow(new Date().toISOString()), 60_000); - return () => clearInterval(id); - }); + const now = useThreadListNow(props.threads); const listEnvironments = useAtomValue(threadListEnvironmentsAtom); const { providersByEnvironmentId, machineByEnvironmentId, settlementEnvironmentIds, snoozeEnvironmentIds, + snoozePresetsByEnvironmentId, pinningEnvironmentIds, autoSettleOptOutEnvironmentIds, pinReorderEnvironmentIds, @@ -476,101 +445,51 @@ export function HomeScreen(props: HomeScreenProps) { titleRegenerationEnvironmentIds, } = listEnvironments; const resolveProviderInstance = useThreadRowProviderInstanceResolver(providersByEnvironmentId); - const pendingOrder = usePendingThreadOrder(nowMinute, snoozeWakeTick); - // Up/down menu availability for every card, computed once per section per - // rebuild (see computeThreadMoveAvailability): per-thread planner calls made - // list construction quadratic, and this list rebuilds on every minute tick. - const threadMoveAvailability = (() => { - const sectionAvailability = (section: "pinned" | "active") => - computeThreadMoveAvailability({ - allThreads: props.threads, - section, - pendingOrder, - reorderableEnvironmentIds: - section === "pinned" ? pinReorderEnvironmentIds : activeReorderEnvironmentIds, - ordered: getThreadListV2OrderedSection({ - threads: props.threads, - section, - pendingOrder, - now, - settlementEnvironmentIds, - snoozeEnvironmentIds, - queuedThreadKeys, - }), - }); - return new Map([ - ...sectionAvailability("pinned"), - ...(workingShelfEnabled ? [] : sectionAvailability("active")), - ]); - })(); - const threadListV2Layout = (() => { - threadListInboxReturns.observe(workingShelfEnabled ? props.threads : null); - return buildThreadListV2Items({ - pendingOrder, - threads: props.threads.filter((thread) => thread.archivedAt === null), - environmentId: props.selectedEnvironmentId, - projectRefs: v2ScopedProjectGroup === null ? null : v2ScopedProjectGroup.projectRefs, - searchQuery: props.searchQuery, - matchedThreadKeys, - settlementEnvironmentIds, - snoozeEnvironmentIds, - queuedThreadKeys, - settledLimit: settledVisibleCount, - now, - workingShelfEnabled, - workingShelfExpanded, - inboxReturnAt: threadListInboxReturns.returnedAt, - snoozedShelfExpanded, - settledShelfExpanded, - selectedThreadKey, - }); - })(); - const nextSnoozeWakeAt = threadListV2Layout.nextSnoozeWakeAt; - useEffect(() => { - if (nextSnoozeWakeAt === null) return; - const wakeAtMs = Date.parse(nextSnoozeWakeAt); - if (Number.isNaN(wakeAtMs)) return; - const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); - const id = setTimeout(() => { - setNow(new Date().toISOString()); - bumpSnoozeWakeTick((tick) => tick + 1); - }, delayMs); - return () => clearTimeout(id); - // snoozeWakeTick must re-arm the timer even when nextSnoozeWakeAt is - // unchanged: after a clamped fire (wake beyond the 32-bit setTimeout - // range) the boundary string is identical and the chain would die. - }, [nextSnoozeWakeAt, snoozeWakeTick]); - const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); - const v2PendingTasks = props.pendingTasks.filter( - (pendingTask) => - (props.selectedEnvironmentId === null || - pendingTask.environmentId === props.selectedEnvironmentId) && - (v2ScopedProjectKeys === null || - v2ScopedProjectKeys.has( - scopedProjectKey(pendingTask.environmentId, pendingTask.projectId), - )) && - (v2SearchQuery.length === 0 || pendingTask.title.toLocaleLowerCase().includes(v2SearchQuery)), - ); - const threadListV2Items = buildThreadListV2ListItems({ - items: threadListV2Layout.items, - pendingTasks: v2PendingTasks, - workingCount: threadListV2Layout.workingCount, + const pendingOrder = usePendingThreadOrder(); + const { + layout: threadListV2Layout, + items: threadListV2Items, + contentOnlyThreadKeys, + olderSettledShelf, + } = useThreadListV2({ + threads: props.threads, + pendingTasks: props.pendingTasks, + environmentId: props.selectedEnvironmentId, + projectRefs: v2ScopedProjectGroup === null ? null : v2ScopedProjectGroup.projectRefs, + searchQuery: props.searchQuery, + searchMatches: threadSearchMatchByKey, + settlementEnvironmentIds, + snoozeEnvironmentIds, + pinReorderEnvironmentIds, + activeReorderEnvironmentIds, + queuedThreadKeys, + settledLimit: settledVisibleCount, + now, + pendingOrder, + shelfPreferencesLoaded, + workingShelfEnabled, workingShelfExpanded, - workingShelfHeaderIndex: threadListV2Layout.workingShelfHeaderIndex, - snoozedCount: threadListV2Layout.snoozedCount, snoozedShelfExpanded, - snoozedShelfHeaderIndex: threadListV2Layout.snoozedShelfHeaderIndex, - settledCount: threadListV2Layout.settledCount, settledShelfExpanded, - settledShelfHeaderIndex: threadListV2Layout.settledShelfHeaderIndex, - snoozeLabelNow: `${nowMinute}:00.000Z`, - snoozeEnvironmentIds, - queuedThreadKeys, - moveAvailability: threadMoveAvailability, - shelfPreferencesLoading: !shelfPreferencesLoaded, + selectedThreadKey, }); - - useThreadJumpShortcuts(threadListV2Items, props.onSelectThread); + // Called as `props.onSelectThread(...)`, the compiler would cache this handler on the whole + // props object, which is new on every render of Home's parent. + const { onSelectThread } = props; + // A row listed for a message match opens the thread at that message, by + // tap or by shortcut. + const selectThread = (thread: EnvironmentThreadShell) => { + const key = threadSearchMatchKey({ environmentId: thread.environmentId, threadId: thread.id }); + const messageId = contentOnlyThreadKeys.has(key) + ? threadSearchMatchByKey.get(key)?.messageId + : undefined; + if (messageId) { + requestThreadMessageJump(scopedThreadKey(thread.environmentId, thread.id), messageId); + } + onSelectThread(thread); + }; + useThreadJumpShortcuts(threadListV2Items, selectThread); + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- reads the list's visible range after commit to enable swipe gestures on those rows useEffect(() => { if (swipeEnabled) activateVisibleRows(threadListV2Items); }, [activateVisibleRows, swipeEnabled, threadListV2Items]); @@ -660,9 +579,6 @@ export function HomeScreen(props: HomeScreenProps) { timeLabel={item.timeLabel} showTrailingDivider={item.showTrailingDivider} project={projectByKey.get(scopedProjectKey(thread.environmentId, thread.projectId)) ?? null} - projectTitle={v2ProjectTitleByProjectKey.get( - scopedProjectKey(thread.environmentId, thread.projectId), - )} providerInstance={resolveProviderInstance(thread)} providers={providersByEnvironmentId.get(thread.environmentId)} environmentLabel={ @@ -671,14 +587,18 @@ export function HomeScreen(props: HomeScreenProps) { : null } environmentMachine={machineByEnvironmentId.get(thread.environmentId)} - searchMatch={threadSearchMatchByKey.get( - threadSearchMatchKey({ - environmentId: thread.environmentId, - threadId: thread.id, - }), - )} - searchQuery={props.searchQuery} - onSelectThread={props.onSelectThread} + searchMatch={ + // Only rows listed for their messages show one and open at it. + contentOnlyThreadKeys.has( + threadSearchMatchKey({ environmentId: thread.environmentId, threadId: thread.id }), + ) + ? threadSearchMatchByKey.get( + threadSearchMatchKey({ environmentId: thread.environmentId, threadId: thread.id }), + ) + : undefined + } + searchQuery={threadSearch.query} + onSelectThread={selectThread} onOpenThreadPullRequests={handleOpenThreadPullRequests} onDeleteThread={handleDeleteThread} onArchiveThread={props.onArchiveThread} @@ -688,6 +608,7 @@ export function HomeScreen(props: HomeScreenProps) { settlementSupported={settlementEnvironmentIds.has(thread.environmentId)} onSettleThread={handleSettleThread} snoozeSupported={snoozeEnvironmentIds.has(thread.environmentId)} + snoozePresets={snoozePresetsByEnvironmentId.get(thread.environmentId)} pinningSupported={pinningEnvironmentIds.has(thread.environmentId)} autoSettleOptOutSupported={autoSettleOptOutEnvironmentIds.has(thread.environmentId)} reorderSupported={ @@ -713,10 +634,7 @@ export function HomeScreen(props: HomeScreenProps) { }; const v2KeyExtractor = (item: ThreadListV2ListItem) => item.key; - // FlatList/LegendList treat a changed extraData identity as "re-render every - // visible row", so an inline object literal would invalidate all rows on - // every HomeScreen render — and the minute clock must stay out of it for - // the same reason: the clock text is precomputed per item instead. + // extraData changes invalidate every visible row; put the minute clock on items to limit updates. const v2ExtraData = { activeNewTask, projectByKey, @@ -730,7 +648,9 @@ export function HomeScreen(props: HomeScreenProps) { }; const hasAnyThreads = - props.threads.some((thread) => thread.archivedAt === null) || props.pendingTasks.length > 0; + props.threads.some((thread) => thread.archivedAt === null) || + props.pendingTasks.length > 0 || + threadListV2Layout.settledCount > 0; const selectedEnvironmentLabel = props.selectedEnvironmentId === null ? null @@ -794,8 +714,12 @@ export function HomeScreen(props: HomeScreenProps) { {listHeader} {Platform.OS === "ios" && workspace ? ( ({ key: scope.key, label: scope.title }))} + projects={pickableProjectGroups(projectScopes).map((scope) => ({ + key: scope.key, + label: scope.title, + }))} selectedEnvironmentId={props.selectedEnvironmentId} selectedProjectKey={props.selectedProjectKey} onEnvironmentChange={props.onEnvironmentChange} @@ -878,15 +802,24 @@ export function HomeScreen(props: HomeScreenProps) { settledShelfExpanded && threadListV2Layout.hiddenSettledCount > 0 ? ( { + olderSettledShelf.retry(); + showMoreSettled(); + }} /> ) : null } ListEmptyComponent={v2ListEmpty} style={{ flex: 1 }} automaticallyAdjustsScrollIndicatorInsets={Platform.OS === "ios"} - contentInsetAdjustmentBehavior="never" - contentInset={Platform.OS === "ios" ? { top: insets.top } : undefined} + // UIKit owns the bar's inset, so a minimizing bar and a resized column move + // the list in the same frame as the bar. + contentInsetAdjustmentBehavior="automatic" contentInsetStartAdjustment={Platform.OS === "ios" ? insets.top : 0} initialScrollOffset={ initialScrollOffset > 0 @@ -905,7 +838,7 @@ export function HomeScreen(props: HomeScreenProps) { (contentSideInsets?.right ?? 0) + (primaryColumn ? 8 : 0) + androidListGutter, paddingBottom: Platform.OS === "ios" - ? iosBottomClearance + ? iosBottomClearance - (columnMetrics?.safeArea.bottom ?? insets.bottom) : (workspace?.bottomClearance ?? Math.max(insets.bottom, 16) + (Platform.OS === "android" ? fabClearance : 88)), diff --git a/apps/mobile/src/features/home/ThreadListFilters.tsx b/apps/mobile/src/features/home/ThreadListFilters.tsx index 93f9e7f68cd2a..a7d6894c35d91 100644 --- a/apps/mobile/src/features/home/ThreadListFilters.tsx +++ b/apps/mobile/src/features/home/ThreadListFilters.tsx @@ -12,7 +12,10 @@ export function ThreadListFilters( | "selectedProjectKey" | "onEnvironmentChange" | "onProjectChange" - >, + > & { + /** List padding the scroller bleeds through so pills start where row content does. */ + readonly gutter: number; + }, ) { const selectedEnvironment = props.environments.find( (environment) => environment.environmentId === props.selectedEnvironmentId, @@ -24,7 +27,8 @@ export function ThreadListFilters( void; @@ -43,20 +42,21 @@ export function ThreadListToolbar(props: { const searchRef = useRef(null); const [searchOpen, setSearchOpen] = useState(false); const searching = searchOpen || props.searchQuery.length > 0; - const openSearch = useCallback(() => { + const openSearch = () => { onRequestVisibility?.(); setSearchOpen(true); searchRef.current?.focus(); return true; - }, [onRequestVisibility]); + }; useHardwareKeyboardCommand("focusSearch", openSearch); - const closeSearch = useCallback(() => { + const closeSearch = () => { onSearchQueryChange(""); setSearchOpen(false); Keyboard.dismiss(); - }, [onSearchQueryChange]); + }; + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- subscribes to BackHandler while searching to close search on Android back useEffect(() => { if (!searching || !listFocused) return; const subscription = BackHandler.addEventListener("hardwareBackPress", () => { diff --git a/apps/mobile/src/features/home/ThreadUndoNotice.tsx b/apps/mobile/src/features/home/ThreadUndoNotice.tsx index 578dc356e6edb..364873a3eadeb 100644 --- a/apps/mobile/src/features/home/ThreadUndoNotice.tsx +++ b/apps/mobile/src/features/home/ThreadUndoNotice.tsx @@ -1,17 +1,80 @@ -import { View } from "react-native"; +import { useAndroidFloatingTabs } from "../settings/appearance/AppearancePreferencesProvider"; +import { useState } from "react"; +import { useKeyboardState } from "react-native-keyboard-controller"; +import { Platform, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { Toast } from "../../components/ui/Toast"; -import { APP_BAR_HEIGHT } from "../../lib/layoutMetrics"; -import { dismissThreadUndoNotice, useThreadUndoNotice } from "./thread-undo-notice"; +import { + useDeviceType, + useDuoBottomBarInset, + useNativeLayoutMetrics, + useNativeColumnLayoutMetrics, +} from "../../native/native-layout-metrics"; +import { workspaceSearchBottomClearance } from "../workspace/workspace-tabs-state"; +import { useWorkspaceTabs } from "../workspace/WorkspaceTabsContext"; +import { + dismissThreadUndoNotice, + readThreadUndoNotice, + useThreadUndoNotice, +} from "./thread-undo-notice"; export function ThreadUndoNotice(props: { readonly visible: boolean }) { + const floatingTabsEnabled = useAndroidFloatingTabs(); const notice = useThreadUndoNotice(); const insets = useSafeAreaInsets(); + const columnMetrics = useNativeColumnLayoutMetrics(); + const rootMetrics = useNativeLayoutMetrics(); + const workspace = useWorkspaceTabs(); + const deviceType = useDeviceType(); + const keyboardHeight = useKeyboardState((keyboard) => keyboard.height); + const horizontalInsets = + Platform.OS === "ios" + ? deviceType === "phone" + ? { left: 29, right: 23 } + : { left: 20, right: 20 } + : { left: 12, right: 12 }; + // The Duo's native tab pill extends above the 48-point toolbar reservation. + const workspacePadding = + useDuoBottomBarInset() === undefined + ? deviceType === "phone" && keyboardHeight === 0 + ? 32 + : 16 + : 8; + // Replacing a notice must also cancel the native gesture tracking the old one. + const [instance, setInstance] = useState({ notice, key: 0 }); + if (instance.notice !== notice) setInstance({ notice, key: instance.key + 1 }); if (!props.visible || notice === null) return null; + const foldedResting = + rootMetrics?.hasHinge && + rootMetrics.horizontalSizeClass === "compact" && + workspace?.state.tabs.threads.searchMode === "resting"; + const bottom = + Platform.OS === "ios" + ? foldedResting + ? Math.max(rootMetrics.safeArea.bottom, keyboardHeight) + 8 + : rootMetrics?.hasHinge && rootMetrics.verticalBarEdge !== "none" + ? // The column's safe area already includes UIKit's search toolbar in this posture. + workspaceSearchBottomClearance({ + bottomInset: rootMetrics.safeArea.bottom, + bottomBarInset: rootMetrics.bottomBarInset, + keyboardHeight, + }) - + 16 + + 8 + : Math.max( + insets.bottom, + columnMetrics?.safeArea.bottom ?? 0, + (workspace?.bottomClearance ?? 0) - workspacePadding, + ) + 8 + : floatingTabsEnabled && keyboardHeight === 0 + ? Math.max(insets.bottom + 12, workspace?.bottomClearance ?? 0) + : insets.bottom + 12; return ( { + // A newer action can replace the notice while the swipe is animating out. + if (readThreadUndoNotice() === notice) dismissThreadUndoNotice(); + }} /> ); diff --git a/apps/mobile/src/features/home/WorkspaceConnectionTitle.tsx b/apps/mobile/src/features/home/WorkspaceConnectionTitle.tsx index ab22cd6e7d4d9..58cf4138483a2 100644 --- a/apps/mobile/src/features/home/WorkspaceConnectionTitle.tsx +++ b/apps/mobile/src/features/home/WorkspaceConnectionTitle.tsx @@ -1,5 +1,5 @@ import type { NativeStackNavigationOptions } from "@react-navigation/native-stack"; -import { createContext, use, useEffect, useMemo, useState, type ReactNode } from "react"; +import { createContext, use, useEffect, useState, type ReactNode } from "react"; import { Animated, Platform, Pressable, View } from "react-native"; import { AppActivityIndicator } from "../../components/ui/AppActivityIndicator"; @@ -11,6 +11,7 @@ import { CompactBrandTitle, getCompactBrandHeaderOptions, } from "../../components/CompactBrandTitle"; +import { useDeadlinePassed } from "../../lib/clock"; import { useWorkspaceState } from "../../state/workspace"; import { workspaceConnectionStatusPresentation, @@ -37,38 +38,28 @@ export function WorkspaceConnectionStatusProvider(props: { readonly children: Re const { state } = useWorkspaceState(); const presentation = workspaceConnectionStatusPresentation(state); const hasStatus = presentation !== null; - const [phase, setPhase] = useState<"waiting" | "fading" | "shown">("waiting"); - - useEffect(() => { - if (!hasStatus) return; - const timers = [ - setTimeout(() => setPhase("fading"), STATUS_SHOW_DELAY_MS), - setTimeout(() => setPhase("shown"), STATUS_SHOW_DELAY_MS + FADE_IN_MS), - ]; - return () => { - for (const timer of timers) clearTimeout(timer); - setPhase("waiting"); - }; - }, [hasStatus]); + // When the current status run began; a gap in the status restarts the delay. + const [statusSince, setStatusSince] = useState(() => (hasStatus ? Date.now() : null)); + if (hasStatus !== (statusSince !== null)) { + // oxlint-disable-next-line react/purity -- Reads the clock only in the render-phase adjustment that runs when the status appears. + setStatusSince(hasStatus ? Date.now() : null); + } + const since = hasStatus ? statusSince : null; + const fadeStarted = useDeadlinePassed(since === null ? null : since + STATUS_SHOW_DELAY_MS); + const fadeEnded = useDeadlinePassed( + since === null ? null : since + STATUS_SHOW_DELAY_MS + FADE_IN_MS, + ); const label = presentation?.label; const showsProgress = presentation?.showsProgress ?? false; - const status = useMemo( - () => - label === undefined || phase === "waiting" - ? null - : { label, showsProgress, fadeIn: phase === "fading" }, - [label, showsProgress, phase], - ); + const status = + label === undefined || since === null || !fadeStarted + ? null + : { label, showsProgress, fadeIn: !fadeEnded }; return {props.children}; } -/** - * Deliberately JS-driven: this can mount inside a native header item - * (RNSScreenStackHeaderSubview), where native-driver animated nodes blank the - * re-hosted view entirely. The JS driver updates opacity through the ordinary - * style path, which those subviews handle. - */ +/** Native-driver animation blanks views re-hosted in RNSScreenStackHeaderSubview; use the JS style path. */ function StatusFadeIn(props: { readonly children: ReactNode; readonly animate: boolean; @@ -77,7 +68,7 @@ function StatusFadeIn(props: { }) { const { animate } = props; const [opacity] = useState(() => new Animated.Value(0)); - + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- runs the Animated opacity fade-in and stops it on cleanup useEffect(() => { if (!animate) return; const animation = Animated.timing(opacity, { diff --git a/apps/mobile/src/features/home/fab-scroll.ts b/apps/mobile/src/features/home/fab-scroll.ts index 2361fdf3f047b..6a44489d2d345 100644 --- a/apps/mobile/src/features/home/fab-scroll.ts +++ b/apps/mobile/src/features/home/fab-scroll.ts @@ -3,7 +3,6 @@ export interface FabScrollState { readonly expanded: boolean; } -/** Ignore small direction changes and overscroll; always show the label at the top. */ export function updateFabScroll( state: FabScrollState, offset: number, diff --git a/apps/mobile/src/features/home/home-list-options.test.tsx b/apps/mobile/src/features/home/home-list-options.test.tsx new file mode 100644 index 0000000000000..f25d4ff690851 --- /dev/null +++ b/apps/mobile/src/features/home/home-list-options.test.tsx @@ -0,0 +1,49 @@ +import type { EnvironmentId } from "@t3tools/contracts"; +import { act, useLayoutEffect } from "react"; +import { createRoot } from "react-dom/client"; +import { expect, it, vi } from "vite-plus/test"; + +const harness = vi.hoisted(() => ({ saved: [] as unknown[] })); + +vi.mock("../../state/preferences", () => ({ updateMobilePreferencesAtom: {} })); +vi.mock("@effect/atom-react", async (importOriginal) => ({ + ...(await importOriginal()), + useAtomSet: () => (value: unknown) => harness.saved.push(value), +})); + +import { HomeListOptionsProvider, useHomeListOptions } from "./home-list-options"; + +const ENVIRONMENT = "env-1" as EnvironmentId; +const AVAILABLE = new Set([ENVIRONMENT]); + +it("saves the scope from every update made in one event", async () => { + harness.saved = []; + let controls: ReturnType | undefined; + function Probe() { + const result = useHomeListOptions(AVAILABLE); + useLayoutEffect(() => { + controls = result; + }); + return null; + } + + const root = createRoot(document.createElement("div")); + await act(async () => + root.render( + + + , + ), + ); + act(() => { + controls!.setSelectedEnvironmentId(ENVIRONMENT); + controls!.setSelectedProjectKey("env-1:project-1"); + }); + + expect(harness.saved.at(-1)).toEqual({ + threadListFilters: { environmentId: ENVIRONMENT, projectKey: "env-1:project-1" }, + }); + expect(controls!.options.selectedEnvironmentId).toBe(ENVIRONMENT); + expect(controls!.options.selectedProjectKey).toBe("env-1:project-1"); + act(() => root.unmount()); +}); diff --git a/apps/mobile/src/features/home/home-list-options.ts b/apps/mobile/src/features/home/home-list-options.ts index 9ee8cadf67602..09c8be2c9a7c1 100644 --- a/apps/mobile/src/features/home/home-list-options.ts +++ b/apps/mobile/src/features/home/home-list-options.ts @@ -1,17 +1,8 @@ import type { EnvironmentId, SidebarProjectGroupingMode } from "@t3tools/contracts"; import { DEFAULT_SIDEBAR_PROJECT_SORT_ORDER } from "@t3tools/contracts"; -import { useAtomSet } from "@effect/atom-react"; -import { - createContext, - createElement, - useContext, - useEffect, - useRef, - useState, - type PropsWithChildren, - type Dispatch, - type SetStateAction, -} from "react"; +import { RegistryContext, useAtomSet, useAtomValue } from "@effect/atom-react"; +import { Atom } from "effect/reactivity"; +import { createContext, createElement, useContext, useState, type PropsWithChildren } from "react"; import type { ThreadListFilters } from "../../persistence/mobile-preferences"; import { updateMobilePreferencesAtom } from "../../state/preferences"; @@ -40,7 +31,7 @@ function defaultHomeListOptions(filters?: ThreadListFilters): HomeListOptions { interface HomeListOptionsContextValue { readonly options: HomeListOptions; - readonly setOptions: Dispatch>; + readonly updateOptions: (patch: Partial) => void; readonly projectGroupingMode: SidebarProjectGroupingMode; } @@ -54,20 +45,29 @@ export function HomeListOptionsProvider({ readonly projectGroupingMode: SidebarProjectGroupingMode; readonly savedFilters?: ThreadListFilters | undefined; }>) { - const [options, setOptions] = useState(() => defaultHomeListOptions(savedFilters)); + const registry = useContext(RegistryContext); + const [optionsAtom] = useState(() => Atom.make(defaultHomeListOptions(savedFilters))); + const options = useAtomValue(optionsAtom); const savePreferences = useAtomSet(updateMobilePreferencesAtom); - const saved = useRef(savedFilters); - const { selectedEnvironmentId: environmentId, selectedProjectKey: projectKey } = options; - useEffect(() => { + // Only the scope persists; the sort order is per session. Updates read the + // registry, so several in one event each build on the last and save it. + const updateOptions = (patch: Partial) => { + const current = registry.get(optionsAtom); + const next = { ...current, ...patch }; + registry.set(optionsAtom, next); if ( - (saved.current?.environmentId ?? null) === environmentId && - (saved.current?.projectKey ?? null) === projectKey - ) - return; - saved.current = { environmentId, projectKey }; - savePreferences({ threadListFilters: saved.current }); - }, [environmentId, projectKey, savePreferences]); - const value = { options, setOptions, projectGroupingMode }; + next.selectedEnvironmentId !== current.selectedEnvironmentId || + next.selectedProjectKey !== current.selectedProjectKey + ) { + savePreferences({ + threadListFilters: { + environmentId: next.selectedEnvironmentId, + projectKey: next.selectedProjectKey, + }, + }); + } + }; + const value = { options, updateOptions, projectGroupingMode }; return createElement(HomeListOptionsContext, { value }, children); } @@ -75,7 +75,9 @@ export function useHomeListOptions(availableEnvironmentIds: ReadonlySet(defaultHomeListOptions); const options = shared?.options ?? localOptions; - const setOptions = shared?.setOptions ?? setLocalOptions; + const updateOptions = + shared?.updateOptions ?? + ((patch: Partial) => setLocalOptions((current) => ({ ...current, ...patch }))); const selectedEnvironmentId = options.selectedEnvironmentId !== null && availableEnvironmentIds.has(options.selectedEnvironmentId) @@ -91,13 +93,13 @@ export function useHomeListOptions(availableEnvironmentIds: ReadonlySet { - setOptions((current) => ({ ...current, selectedEnvironmentId: value })); + updateOptions({ selectedEnvironmentId: value }); }; const setSelectedProjectKey = (value: string | null) => { - setOptions((current) => ({ ...current, selectedProjectKey: value })); + updateOptions({ selectedProjectKey: value }); }; const setProjectSortOrder = (value: HomeProjectSortOrder) => { - setOptions((current) => ({ ...current, projectSortOrder: value })); + updateOptions({ projectSortOrder: value }); }; return { options: resolvedOptions, diff --git a/apps/mobile/src/features/home/home-route-visibility.ts b/apps/mobile/src/features/home/home-route-visibility.ts index b66a539f50f5f..5413ea1b1b0d4 100644 --- a/apps/mobile/src/features/home/home-route-visibility.ts +++ b/apps/mobile/src/features/home/home-route-visibility.ts @@ -1,45 +1,59 @@ import { RegistryContext } from "@effect/atom-react"; import { useNavigation } from "@react-navigation/native"; -import type { NativeStackNavigationProp } from "@react-navigation/native-stack"; -import { useCallback, useContext, useEffect, useRef, useState, useSyncExternalStore } from "react"; +import { useContext, useRef, useSyncExternalStore } from "react"; import type { Atom } from "effect/reactivity"; /** * Home stays mounted under a pushed Thread, and native-stack never freezes the * route directly below the focused one on Fabric, so Home has to stop its own - * work. + * work. The Home screen's static `listeners` (Stack.tsx) drive this store. */ +let homeVisible: boolean | null = null; +const visibilityListeners = new Set<() => void>(); + +function setHomeVisible(next: boolean) { + if (next === homeVisible) return; + homeVisible = next; + for (const listener of visibilityListeners) listener(); +} + +function subscribeHomeVisibility(onChange: () => void) { + visibilityListeners.add(onChange); + return () => { + visibilityListeners.delete(onChange); + // The value describes one Home instance. A later Home can mount under a + // Thread with no event of its own (Android activity replacement, a cold + // deep link), so it must fall back to `isFocused()` instead of this one. + if (visibilityListeners.size === 0) homeVisible = null; + }; +} + +export function recordHomeTransitionStart(closing: boolean): void { + if (!closing) setHomeVisible(true); +} + +export function recordHomeTransitionEnd(closing: boolean): void { + if (closing) setHomeVisible(false); +} + +/** Popping a sheet or a deep-linked route above Home has no appear event. */ +export function recordHomeFocus(): void { + setHomeVisible(true); +} + export function useHomeRouteVisible(): boolean { - const navigation = - useNavigation>(); - // A cold deep link mounts Home under its Thread without ever showing it. - const [visible, setVisible] = useState(() => navigation.isFocused()); - useEffect(() => { - const show = () => setVisible(true); - const removeTransitionStart = navigation.addListener("transitionStart", ({ data }) => { - if (!data.closing) show(); - }); - const removeTransitionEnd = navigation.addListener("transitionEnd", ({ data }) => { - if (data.closing) setVisible(false); - }); - // Popping a sheet or a deep-linked route above Home has no appear event. - const removeFocus = navigation.addListener("focus", show); - return () => { - removeTransitionStart(); - removeTransitionEnd(); - removeFocus(); - }; - }, [navigation]); - return visible; + const navigation = useNavigation(); + const visible = useSyncExternalStore(subscribeHomeVisibility, () => homeVisible); + // Before Home's first navigation event: a cold deep link mounts Home under + // its Thread without ever showing it. + return visible ?? navigation.isFocused(); } export function useAtomValueWhileVisible(atom: Atom.Atom, visible: boolean): A { const registry = useContext(RegistryContext); const held = useRef<{ readonly value: A } | null>(null); - const subscribe = useCallback( - (onChange: () => void) => (visible ? registry.subscribe(atom, onChange) : () => undefined), - [registry, atom, visible], - ); + const subscribe = (onChange: () => void) => + visible ? registry.subscribe(atom, onChange) : () => undefined; return useSyncExternalStore(subscribe, () => { if (visible || held.current === null) held.current = { value: registry.get(atom) }; return held.current.value; diff --git a/apps/mobile/src/features/home/home-thread-navigation.test.ts b/apps/mobile/src/features/home/home-thread-navigation.test.ts deleted file mode 100644 index 820a666650548..0000000000000 --- a/apps/mobile/src/features/home/home-thread-navigation.test.ts +++ /dev/null @@ -1,234 +0,0 @@ -import * as NodeModule from "node:module"; -import type { - StackNavigationState, - StackRouter as StackRouterType, - StackActions as StackActionsType, -} from "@react-navigation/native"; -import { describe, expect, it, vi } from "vite-plus/test"; - -function loadRouters() { - const require = NodeModule.createRequire(import.meta.url); - const nativePackage = require.resolve("@react-navigation/native/package.json"); - const requireFromNative = NodeModule.createRequire(nativePackage); - const corePackage = requireFromNative.resolve("@react-navigation/core/package.json"); - const requireFromCore = NodeModule.createRequire(corePackage); - return requireFromCore("@react-navigation/routers") as { - readonly CommonActions: typeof import("@react-navigation/native").CommonActions; - readonly StackActions: typeof StackActionsType; - readonly StackRouter: typeof StackRouterType; - }; -} - -vi.mock("react-native", () => ({ Platform: { OS: "ios" }, Keyboard: { dismiss: vi.fn() } })); - -vi.mock("@react-navigation/native", () => { - const { CommonActions, StackActions } = loadRouters(); - return { CommonActions, StackActions }; -}); - -import { - createHomeThreadRouteAction, - createHomeThreadNavigationAction, -} from "./home-thread-navigation"; - -const { StackActions, StackRouter } = loadRouters(); -const routeNames = ["Home", "Thread"]; -const routeParamList = { - Home: undefined, - Thread: undefined, -}; -const router = StackRouter({}); -const routerOptions = { - routeNames, - routeParamList, - routeGetIdList: {}, -}; - -type ThreadSelection = Parameters[0]["thread"]; - -function thread(id: string): ThreadSelection { - return { - environmentId: "environment-1", - id, - } as ThreadSelection; -} - -function initialState() { - return router.getInitialState(routerOptions); -} - -function apply( - state: StackNavigationState>, - action: Parameters[1], -) { - const nextState = router.getStateForAction(state, action, routerOptions); - expect(nextState).not.toBeNull(); - return nextState as StackNavigationState>; -} - -function selectThread( - state: ReturnType, - selectedThread: ThreadSelection, - dismissingRouteKey: string | null = null, -) { - return apply( - state, - createHomeThreadNavigationAction({ - state, - dismissingRouteKey, - thread: selectedThread, - }), - ); -} - -function dismissRoute(state: ReturnType, routeKey: string) { - return apply(state, { - ...StackActions.pop(), - source: routeKey, - target: state.key, - }); -} - -describe("createHomeThreadNavigationAction", () => { - it("coalesces ordinary repeat selections onto the current thread route", () => { - const firstState = selectThread(initialState(), thread("thread-a")); - const threadRouteKey = firstState.routes[firstState.index]?.key; - const secondAction = createHomeThreadNavigationAction({ - state: firstState, - dismissingRouteKey: null, - thread: thread("thread-b"), - }); - - const secondState = apply(firstState, secondAction); - expect(secondState.routes).toHaveLength(2); - expect(secondState.routes[secondState.index]).toMatchObject({ - key: threadRouteKey, - name: "Thread", - params: { environmentId: "environment-1", threadId: "thread-b" }, - }); - }); - - it("keeps an overlap selection after native dismisses the outgoing route", () => { - const outgoingState = selectThread(initialState(), thread("thread-a")); - const outgoingRouteKey = outgoingState.routes[outgoingState.index]?.key; - expect(outgoingRouteKey).toBeDefined(); - - const overlapAction = createHomeThreadNavigationAction({ - state: outgoingState, - dismissingRouteKey: outgoingRouteKey ?? null, - thread: thread("thread-b"), - }); - const overlapState = apply(outgoingState, overlapAction); - const incomingRoute = overlapState.routes[overlapState.index]; - expect(incomingRoute?.key).not.toBe(outgoingRouteKey); - - const dismissedState = dismissRoute(overlapState, outgoingRouteKey!); - expect(dismissedState.routes).toHaveLength(2); - expect(dismissedState.routes[dismissedState.index]).toMatchObject({ - key: incomingRoute?.key, - name: "Thread", - params: { environmentId: "environment-1", threadId: "thread-b" }, - }); - }); - - it("uses a fresh key for the same thread selected during dismissal", () => { - const outgoingState = selectThread(initialState(), thread("thread-a")); - const outgoingRouteKey = outgoingState.routes[outgoingState.index]?.key; - expect(outgoingRouteKey).toBeDefined(); - - const overlapState = selectThread(outgoingState, thread("thread-a"), outgoingRouteKey ?? null); - const incomingRouteKey = overlapState.routes[overlapState.index]?.key; - expect(incomingRouteKey).not.toBe(outgoingRouteKey); - - const dismissedState = dismissRoute(overlapState, outgoingRouteKey!); - expect(dismissedState.routes[dismissedState.index]).toMatchObject({ - key: incomingRouteKey, - params: { environmentId: "environment-1", threadId: "thread-a" }, - }); - }); - - it("coalesces a second overlap selection onto the fresh incoming route", () => { - const outgoingState = selectThread(initialState(), thread("thread-a")); - const outgoingRouteKey = outgoingState.routes[outgoingState.index]?.key; - expect(outgoingRouteKey).toBeDefined(); - - const firstOverlapState = selectThread( - outgoingState, - thread("thread-b"), - outgoingRouteKey ?? null, - ); - const incomingRouteKey = firstOverlapState.routes[firstOverlapState.index]?.key; - const secondOverlapAction = createHomeThreadNavigationAction({ - state: firstOverlapState, - dismissingRouteKey: outgoingRouteKey ?? null, - thread: thread("thread-c"), - }); - - const secondOverlapState = apply(firstOverlapState, secondOverlapAction); - expect(secondOverlapState.routes).toHaveLength(3); - expect(secondOverlapState.routes[secondOverlapState.index]).toMatchObject({ - key: incomingRouteKey, - params: { environmentId: "environment-1", threadId: "thread-c" }, - }); - - const dismissedState = dismissRoute(secondOverlapState, outgoingRouteKey!); - expect(dismissedState.routes).toHaveLength(2); - expect(dismissedState.routes[dismissedState.index]).toMatchObject({ - key: incomingRouteKey, - params: { environmentId: "environment-1", threadId: "thread-c" }, - }); - }); - - it("uses ordinary navigation when native pops before the selection", () => { - const outgoingState = selectThread(initialState(), thread("thread-a")); - const outgoingRouteKey = outgoingState.routes[outgoingState.index]?.key; - expect(outgoingRouteKey).toBeDefined(); - - const poppedState = dismissRoute(outgoingState, outgoingRouteKey!); - const action = createHomeThreadNavigationAction({ - state: poppedState, - dismissingRouteKey: outgoingRouteKey ?? null, - thread: thread("thread-b"), - }); - - const selectedState = apply(poppedState, action); - expect(selectedState.routes).toHaveLength(2); - expect(selectedState.routes[selectedState.index]).toMatchObject({ - name: "Thread", - params: { environmentId: "environment-1", threadId: "thread-b" }, - }); - }); -}); - -describe("draft and live thread selection", () => { - it("keeps the screen key and clears old identity when switching both ways", () => { - const live = selectThread(initialState(), thread("thread-a")); - const key = live.routes[live.index]!.key; - const draft = apply( - live, - createHomeThreadRouteAction({ - state: live, - dismissingRouteKey: null, - params: { draft: { draftId: "new-task:draft-a" } }, - }), - ); - expect(draft.routes[draft.index]).toMatchObject({ - key, - params: { - environmentId: undefined, - threadId: undefined, - draft: { draftId: "new-task:draft-a" }, - }, - }); - const restored = selectThread(draft, thread("thread-b")); - expect(restored.routes[restored.index]).toMatchObject({ - key, - params: { - environmentId: "environment-1", - threadId: "thread-b", - draft: undefined, - }, - }); - expect(restored.routes).toHaveLength(live.routes.length); - }); -}); diff --git a/apps/mobile/src/features/home/home-thread-navigation.ts b/apps/mobile/src/features/home/home-thread-navigation.ts deleted file mode 100644 index 94948bb8f5ac8..0000000000000 --- a/apps/mobile/src/features/home/home-thread-navigation.ts +++ /dev/null @@ -1,107 +0,0 @@ -import type { EnvironmentThreadShell } from "@t3tools/client-runtime/state/shell"; -import { - CommonActions, - StackActions, - useNavigation, - type NavigationState, -} from "@react-navigation/native"; -import type { NativeStackNavigationProp } from "@react-navigation/native-stack"; -import { useCallback, useEffect, useRef } from "react"; -import { Platform } from "react-native"; -import { useAndroidWorkspaceSelection } from "../workspace/useAndroidWorkspaceSelection"; - -type ThreadSelection = Pick; - -export function createHomeThreadRouteAction(input: { - readonly state: Pick; - readonly dismissingRouteKey: string | null; - readonly params: ReactNavigation.RootParamList["Thread"]; -}) { - const currentRoute = input.state.routes[input.state.index]; - if (input.dismissingRouteKey !== null && currentRoute?.key === input.dismissingRouteKey) { - return StackActions.push("Thread", input.params); - } - if (currentRoute?.name === "Thread") { - return { - ...CommonActions.setParams({ - environmentId: undefined, - threadId: undefined, - draft: undefined, - ...input.params, - }), - source: currentRoute.key, - }; - } - return CommonActions.navigate("Thread", input.params); -} - -export function createHomeThreadNavigationAction(input: { - readonly state: Pick; - readonly dismissingRouteKey: string | null; - readonly thread: ThreadSelection; -}) { - return createHomeThreadRouteAction({ - ...input, - params: { - environmentId: input.thread.environmentId, - threadId: input.thread.id, - }, - }); -} - -export function useHomeThreadRouteSelection() { - const navigation = - useNavigation>(); - const dismissingRouteKey = useRef(null); - const selectAndroidWorkspace = useAndroidWorkspaceSelection(); - - useEffect(() => { - const clear = () => { - dismissingRouteKey.current = null; - }; - // This listener belongs to Home, so swipe-back is its opening transition. - // Thread's closing event is targeted at the outgoing Thread route. - const removeTransitionStart = navigation.addListener("transitionStart", ({ data }) => { - const state = navigation.getState(); - const currentRoute = state.routes[state.index]; - dismissingRouteKey.current = - !data.closing && currentRoute?.name === "Thread" ? currentRoute.key : null; - }); - const removeFocus = navigation.addListener("focus", clear); - - return () => { - clear(); - removeTransitionStart(); - removeFocus(); - }; - }, [navigation]); - - return useCallback( - (params: ReactNavigation.RootParamList["Thread"]) => { - if (Platform.OS === "android") { - selectAndroidWorkspace({ - name: "Thread", - params, - }); - return; - } - navigation.dispatch((state) => - createHomeThreadRouteAction({ - state, - dismissingRouteKey: dismissingRouteKey.current, - params, - }), - ); - }, - [navigation, selectAndroidWorkspace], - ); -} - -export function useHomeThreadSelection() { - const selectRoute = useHomeThreadRouteSelection(); - return useCallback( - (thread: ThreadSelection) => - selectRoute({ environmentId: thread.environmentId, threadId: thread.id }), - [selectRoute], - ); -} diff --git a/apps/mobile/src/features/home/homeThreadList.ts b/apps/mobile/src/features/home/homeThreadList.ts index 82eab6b384b9c..1b2e1a8c541f7 100644 --- a/apps/mobile/src/features/home/homeThreadList.ts +++ b/apps/mobile/src/features/home/homeThreadList.ts @@ -27,6 +27,8 @@ export interface HomeProjectScope { readonly representative: EnvironmentProject; readonly projects: ReadonlyArray; readonly projectRefs: ReadonlyArray; + readonly pinned: boolean; + readonly archived: boolean; } function getProjectSortTimestamp( @@ -62,6 +64,8 @@ export function buildHomeProjectScopes(input: { representative: group.representative, projects: group.members.map((member) => member.project), projectRefs: group.memberProjectRefs, + pinned: group.pinned, + archived: group.archived, }; }); } diff --git a/apps/mobile/src/features/home/thread-swipe-actions.tsx b/apps/mobile/src/features/home/thread-swipe-actions.tsx index 33c4a44d05244..a6c48086f2c85 100644 --- a/apps/mobile/src/features/home/thread-swipe-actions.tsx +++ b/apps/mobile/src/features/home/thread-swipe-actions.tsx @@ -50,8 +50,8 @@ const ACTION_ICON_SIZE = 15; const COMPACT_ACTION_CIRCLE_SIZE = 28; const COMPACT_ACTION_ICON_SIZE = 13; -export const THREAD_SWIPE_ACTIONS_WIDTH = ACTION_ITEM_WIDTH * 2; -export const THREAD_SWIPE_SPRING = { +const THREAD_SWIPE_ACTIONS_WIDTH = ACTION_ITEM_WIDTH * 2; +const THREAD_SWIPE_SPRING = { damping: 26, mass: 0.7, overshootClamping: true, @@ -119,13 +119,11 @@ function resolveSecondaryAction(input: { }; } -/** - * Delivers the scroll gate to swipeables via context so that flipping it does - * NOT re-render whole rows: putting the flag in list extraData/renderItem deps - * re-rendered every visible row (hooks, subscriptions and all) exactly at - * scroll start — peak frame pressure. - */ +/** Keep the scroll gate in context so scroll start cannot re-render every row and its subscriptions. */ const SwipeableScrollGateContext = createContext(true); +// Swipeable rebuilds its native pan gesture whenever its config changes identity, so the props +// that feed it stay stable across row re-renders such as selection. +const FAIL_OFFSET_Y: [number, number] = [-10, 10]; export function SwipeableScrollGateProvider(props: { readonly enabled: boolean; @@ -141,13 +139,7 @@ export function SwipeableScrollGateProvider(props: { ); } -/** - * failOffsetY on the swipe pan covers the first pan of a scroll, but trackpad - * scroll sessions spawn fresh gesture sessions (momentum catch, direction - * changes) whose reset translation can re-activate a swipe mid-scroll — so - * while the list has moved vertically during an active drag/momentum phase, row - * swipes are disabled entirely. - */ +/** Trackpads can start pans mid-momentum, bypassing failOffsetY; disable swipes during vertical scrolls. */ export function useSwipeableScrollGate(options?: { readonly onScroll?: (event: NativeSyntheticEvent) => void; readonly onScrollBeginDrag?: (event: NativeSyntheticEvent) => void; @@ -172,6 +164,7 @@ export function useSwipeableScrollGate(options?: { settleTimerRef.current = null; } }, []); + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- clears the scroll settle timer on unmount useEffect(() => clearSettle, [clearSettle]); const onScrollBeginDrag = useCallback( @@ -227,11 +220,7 @@ interface ThreadSwipeableProps { readonly containerStyle?: StyleProp; readonly enabled?: boolean; readonly enableTrackpadSwipe?: boolean; - /** - * Omitted keeps the v1 Delete behavior only when the built-in Delete - * secondary action is in use; custom or absent secondary actions default to - * the advertised primary action. - */ + /** Omitted uses Delete only with the built-in Delete secondary action; otherwise it uses primary. */ readonly fullSwipeAction?: "delete" | "primary"; readonly fullSwipeWidth: number; readonly onDelete: () => void; @@ -239,11 +228,7 @@ interface ThreadSwipeableProps { readonly onSwipeableWillOpen?: (methods: SwipeableMethods) => void; readonly primaryAction: ThreadSwipeAction; readonly threadKey: string; - /** - * Omitted keeps the v1 destructive Delete action. Explicit null opts out of - * a secondary action entirely so a gated Snooze can never fall back to an - * unadvertised Delete. - */ + /** Omitted defaults to Delete; null removes it so gated Snooze cannot fall back to Delete. */ readonly secondaryAction?: ThreadSwipeAction | null; readonly resetKey?: string; readonly dormant?: boolean; @@ -305,6 +290,7 @@ export function ThreadSwipeable(props: ThreadSwipeableProps) { pending.resolve(); }, []); + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- cancels the row's Reanimated animations and settles a pending dismissal on unmount useLayoutEffect(() => { mountedRef.current = true; return () => { @@ -318,6 +304,7 @@ export function ThreadSwipeable(props: ThreadSwipeableProps) { }, [actionOpacity, collapse, fallbackTranslation, finishDismiss]); // Reset recycled rows in place so their child views stay mounted. + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- resets the swipeable and its shared values when the list recycles this row for new content useLayoutEffect(() => { if (contentRef.current === content) return; contentRef.current = content; @@ -325,6 +312,7 @@ export function ThreadSwipeable(props: ThreadSwipeableProps) { restoreRow(); }, [content, finishDismiss, restoreRow]); + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- closes the open swipeable and resets its shared values when the row goes dormant useLayoutEffect(() => { if (props.dormant && activeTranslationRef.current && dismissalRef.current === null) { restoreRow(); @@ -355,6 +343,7 @@ export function ThreadSwipeable(props: ThreadSwipeableProps) { }, [actionOpacity, collapse, dismissing, finishDismiss, rowWidth], ); + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- registers this row's animated dismissal in the module-level thread dismissal registry useLayoutEffect( () => props.dormant @@ -421,11 +410,77 @@ export function ThreadSwipeable(props: ThreadSwipeableProps) { }, [content], ); - const handleWillOpen = () => { - if (!props.dormant && !dismissalRef.current && swipeableRef.current) { - props.onSwipeableWillOpen?.(swipeableRef.current); + const { dormant, onSwipeableWillOpen, backgroundColor, containerStyle } = props; + const handleWillOpen = useCallback(() => { + if (!dormant && !dismissalRef.current && swipeableRef.current) { + onSwipeableWillOpen?.(swipeableRef.current); } + }, [dormant, onSwipeableWillOpen]); + const handleSwipeableClose = useCallback(() => { + if (swipeableRef.current) onSwipeableClose?.(swipeableRef.current); + }, [onSwipeableClose]); + const compactActions = props.compactActions === true; + const { secondaryAction, threadTitle } = props; + // Swipeable calls this on every render; returning the previous element while nothing it shows + // changed keeps a selection change from re-rendering the hidden actions. + const rightActions = useRef<{ deps: readonly unknown[]; element: ReactNode } | null>(null); + const renderRightActions = ( + _progress: SharedValue, + translation: SharedValue, + methods: SwipeableMethods, + ) => { + const deps = [ + dormant, + translation, + methods, + actionStyle, + backgroundColor, + compactActions, + fullSwipeAction, + fullSwipeThreshold, + handleFullSwipeArmedChange, + primaryAction, + commitPrimaryAction, + onDelete, + secondaryAction, + threadTitle, + ]; + const cached = rightActions.current; + if (cached && deps.every((dep, index) => Object.is(dep, cached.deps[index]))) { + return cached.element; + } + const element = dormant ? null : ( + { + activeTranslationRef.current = translation; + }} + style={actionStyle} + > + methods.close(), + onDelete, + secondaryAction, + threadTitle, + })} + translation={translation} + /> + + ); + rightActions.current = { deps, element }; + return element; }; + const childrenContainerStyle = useMemo(() => ({ backgroundColor }), [backgroundColor]); + const swipeableContainerStyle = useMemo( + () => [{ backgroundColor }, containerStyle], + [backgroundColor, containerStyle], + ); return ( @@ -438,60 +493,29 @@ export function ThreadSwipeable(props: ThreadSwipeableProps) { { - if (swipeableRef.current) { - props.onSwipeableClose?.(swipeableRef.current); - } - }} + onSwipeableClose={handleSwipeableClose} onSwipeableRelease={handleRelease} onSwipeableOpenStartDrag={handleWillOpen} onSwipeableWillOpen={handleWillOpen} overshootFriction={1} overshootRight - renderRightActions={(_progress, translation, methods) => - props.dormant ? null : ( - { - activeTranslationRef.current = translation; - }} - style={actionStyle} - > - methods.close(), - onDelete: props.onDelete, - secondaryAction: props.secondaryAction, - threadTitle: props.threadTitle, - })} - translation={translation} - /> - - ) - } + renderRightActions={renderRightActions} rightThreshold={actionsWidth * 0.42} simultaneousWith={props.simultaneousWith} > - {props.children(close)} + { + /* oxlint-disable react/refs -- The render callback receives a close/open handler; only invoking that handler accesses the ref. */ + props.children(close) + /* oxlint-enable react/refs */ + }
@@ -692,7 +716,7 @@ function SwipeActionButton(props: { ); } -export function ThreadSwipeActions(props: { +function ThreadSwipeActions(props: { readonly backgroundColor: ColorValue; readonly compact: boolean; readonly fullSwipeAction?: "delete" | "primary"; diff --git a/apps/mobile/src/features/home/usePendingTaskListActions.ts b/apps/mobile/src/features/home/usePendingTaskListActions.ts index 5e058090a6540..698df0bfce702 100644 --- a/apps/mobile/src/features/home/usePendingTaskListActions.ts +++ b/apps/mobile/src/features/home/usePendingTaskListActions.ts @@ -1,5 +1,4 @@ import * as Dialog from "../../components/ui/Dialog"; -import { useHomeThreadRouteSelection } from "./home-thread-navigation"; import { useCallback } from "react"; import { removeThreadOutboxMessage } from "../../state/thread-outbox-removal"; @@ -14,14 +13,11 @@ import { import { withThreadDismissal } from "./thread-dismissal"; export function usePendingTaskListActions( - selectRoute?: (params: ReactNavigation.RootParamList["Thread"]) => void, + selectThreadRoute: (params: ReactNavigation.RootParamList["Thread"]) => void, ): { readonly openPendingTask: (pendingTask: PendingNewTask) => void; readonly confirmDeletePendingTask: (pendingTask: PendingNewTask) => void; } { - const selectHomeRoute = useHomeThreadRouteSelection(); - const selectThreadRoute = selectRoute ?? selectHomeRoute; - const openPendingTask = useCallback( (pendingTask: PendingNewTask) => { selectThreadRoute( @@ -73,11 +69,9 @@ export function usePendingTaskListActions( text: "Delete", style: "destructive", onPress: () => { - // The row animates out before removal runs, so hold delivery from - // confirmation on: a reconnect must not send a task being deleted. - // The hold is shared with the editor, which could release it - // mid-animation, so a task open in the editor is removed at once - // and keeps its hold unless removal succeeds. + // Hold delivery from confirmation so reconnects cannot send a task during removal. + // The editor can release the shared hold mid-animation; remove edited tasks at once. + // Keep an editor's hold unless removal succeeds. const messageId = pendingTask.message.messageId; const heldByEditor = appAtomRegistry.get(editingQueuedMessageIdsAtom)[messageId]; holdEditingQueuedMessage(messageId); diff --git a/apps/mobile/src/features/home/useThreadListActions.test.ts b/apps/mobile/src/features/home/useThreadListActions.test.ts index 9a59367a9543a..9313aef299881 100644 --- a/apps/mobile/src/features/home/useThreadListActions.test.ts +++ b/apps/mobile/src/features/home/useThreadListActions.test.ts @@ -13,6 +13,7 @@ import { AsyncResult } from "effect/reactivity"; import { afterEach, beforeEach, describe, expect, it, vi } from "vite-plus/test"; const state = vi.hoisted(() => ({ + connectedEnvironmentIds: [] as EnvironmentId[], pendingOrder: null as object | null, dropBusy: false, failedAction: null as string | null, @@ -60,6 +61,9 @@ vi.mock("../../state/session", () => ({ readEnvironmentScope: (environmentId: string, scope: string) => state.scopes.get(environmentId)?.has(scope) === true, })); +vi.mock("../../state/presentation", () => ({ + connectedEnvironmentIdsAtom: "connected-environments", +})); vi.mock("../../state/server", () => ({ environmentServerConfigsAtom: "server-configs", })); @@ -69,28 +73,30 @@ vi.mock("../../state/atom-registry", () => ({ state.dropBusy = value; }, get: (atom: string) => - atom === "thread-drop-busy" - ? state.dropBusy - : atom === "thread-shells" - ? state.shells - : atom === "queued-thread-keys" - ? new Set() - : new Map( - [...state.scopes.keys()].map((environmentId) => [ - environmentId, - { - environment: { - capabilities: { - threadSettlement: true, - threadSnooze: true, - threadPinning: true, - threadPinReorder: true, - threadTitleRegeneration: true, + atom === "connected-environments" + ? state.connectedEnvironmentIds + : atom === "thread-drop-busy" + ? state.dropBusy + : atom === "thread-shells" + ? state.shells + : atom === "queued-thread-keys" + ? new Set() + : new Map( + [...state.scopes.keys()].map((environmentId) => [ + environmentId, + { + environment: { + capabilities: { + threadSettlement: true, + threadSnooze: true, + threadPinning: true, + threadPinReorder: true, + threadTitleRegeneration: true, + }, }, }, - }, - ]), - ), + ]), + ), }, })); vi.mock("../../state/use-atom-command", () => ({ @@ -114,7 +120,10 @@ vi.mock("../../state/thread-order", () => ({ }, })); vi.mock("../../state/threads", () => ({ - environmentThreadShells: { threadShellsAtom: "thread-shells" }, + environmentThreadShells: { + threadShellsAtom: "thread-shells", + navigationThreadShellsAtom: "thread-shells", + }, threadEnvironment: Object.fromEntries( [ "archive", @@ -127,6 +136,7 @@ vi.mock("../../state/threads", () => ({ "pin", "unpin", "reorderPin", + "reorderActive", "updateMetadata", ].map((action) => [ action, @@ -176,6 +186,7 @@ const mutationCases = [ ] as const; beforeEach(() => { + state.connectedEnvironmentIds = [primaryEnvironmentId, otherEnvironmentId]; state.failedAction = null; state.archivedRefreshes = []; state.pendingOrder = null; @@ -283,6 +294,76 @@ describe("pinned thread operation permissions", () => { }); }); +describe("thread reorder connection availability", () => { + it.each(["active", "pinned"] as const)( + "rejects %s materialization involving a cached capable offline neighbor", + async (section) => { + const moved = makeThread({ + pinnedAt: section === "pinned" ? "2026-09-02T00:00:00.000Z" : null, + }); + state.shells = [ + moved, + makeThread({ + id: ThreadId.make("offline-neighbor"), + environmentId: otherEnvironmentId, + createdAt: "2026-09-02T00:00:00.000Z", + pinnedAt: moved.pinnedAt, + }), + ]; + state.scopes.get(otherEnvironmentId)?.add(AuthOrchestrationOperateScope); + state.connectedEnvironmentIds = [primaryEnvironmentId]; + + const { moveThread } = useThreadListActions(); + expect(await moveThread(moved, "up")).toBe(false); + expect(state.requests).toEqual([]); + + state.connectedEnvironmentIds = [primaryEnvironmentId, otherEnvironmentId]; + + expect(await moveThread(moved, "up")).toBe(true); + expect(state.requests).toHaveLength(2); + expect(new Set(state.requests.map(({ environmentId }) => environmentId))).toEqual( + new Set([primaryEnvironmentId, otherEnvironmentId]), + ); + }, + ); + + it.each(["active", "pinned"] as const)( + "uses the latest connection state in a retained %s move callback", + async (section) => { + const moved = makeThread({ + pinnedAt: section === "pinned" ? "2026-09-02T00:00:00.000Z" : null, + pinOrderKey: section === "pinned" ? "m" : null, + activeOrderKey: section === "active" ? "m" : null, + }); + state.shells = [ + moved, + makeThread({ + id: ThreadId.make("offline-neighbor"), + environmentId: otherEnvironmentId, + pinnedAt: moved.pinnedAt, + pinOrderKey: section === "pinned" ? "g" : null, + activeOrderKey: section === "active" ? "g" : null, + }), + ]; + const { moveThread } = useThreadListActions(); + state.connectedEnvironmentIds = []; + + expect(await moveThread(moved, "up")).toBe(false); + expect(state.requests).toEqual([]); + + state.connectedEnvironmentIds = [primaryEnvironmentId]; + + expect(await moveThread(moved, "up")).toBe(true); + expect(state.requests).toEqual([ + expect.objectContaining({ + action: section === "pinned" ? "reorderPin" : "reorderActive", + environmentId: primaryEnvironmentId, + }), + ]); + }, + ); +}); + describe("thread action undo", () => { it.each([ ["settleThread", "settle", "Settled", "unsettle"], diff --git a/apps/mobile/src/features/home/useThreadListActions.ts b/apps/mobile/src/features/home/useThreadListActions.ts index 0f18f24923cc4..248c436905311 100644 --- a/apps/mobile/src/features/home/useThreadListActions.ts +++ b/apps/mobile/src/features/home/useThreadListActions.ts @@ -2,7 +2,7 @@ import type { ThreadMoveDestination } from "../threads/threadOrder"; import type { EnvironmentThreadShell } from "@t3tools/client-runtime/state/shell"; import * as ThreadUndo from "@t3tools/client-runtime/state/thread-undo"; import { showThreadUndoNotice } from "./thread-undo-notice"; -import { canSnooze, effectiveSnoozed } from "@t3tools/client-runtime/state/thread-settled"; +import { canSnooze } from "@t3tools/client-runtime/state/thread-settled"; import { AuthOrchestrationOperateScope } from "@t3tools/contracts"; import * as Cause from "effect/Cause"; import * as Haptics from "expo-haptics"; @@ -15,6 +15,7 @@ import { refreshArchivedThreadsForEnvironment } from "../archive/useArchivedThre import { pinOrderKeyBetween } from "@t3tools/client-runtime/state/thread-sort"; import { appAtomRegistry } from "../../state/atom-registry"; import { environmentServerConfigsAtom } from "../../state/server"; +import { connectedEnvironmentIdsAtom } from "../../state/presentation"; import { readEnvironmentScope } from "../../state/session"; import { environmentThreadShells, threadEnvironment } from "../../state/threads"; import { queuedThreadKeysAtom } from "../../state/use-thread-outbox"; @@ -33,34 +34,8 @@ import { getThreadListV2OrderedSection } from "../threads/threadListV2"; import { threadCanArchive } from "./threadArchive"; import { resolveThreadTitleRename } from "../threads/thread-title-rename"; -/** Version skew: never send settle/unsettle to a server that predates them - (capability defaults false on decode for older servers). */ -function environmentSupportsSettlement(environmentId: EnvironmentThreadShell["environmentId"]) { - return ( - appAtomRegistry.get(environmentServerConfigsAtom).get(environmentId)?.environment.capabilities - .threadSettlement === true - ); -} - -function environmentSupportsSnooze(environmentId: EnvironmentThreadShell["environmentId"]) { - return ( - appAtomRegistry.get(environmentServerConfigsAtom).get(environmentId)?.environment.capabilities - .threadSnooze === true - ); -} - -function environmentSupportsPinning(environmentId: EnvironmentThreadShell["environmentId"]) { - return ( - appAtomRegistry.get(environmentServerConfigsAtom).get(environmentId)?.environment.capabilities - .threadPinning === true - ); -} - -function environmentSupportsPinReorder(environmentId: EnvironmentThreadShell["environmentId"]) { - return ( - appAtomRegistry.get(environmentServerConfigsAtom).get(environmentId)?.environment.capabilities - .threadPinReorder === true - ); +function environmentConfigLoaded(environmentId: EnvironmentThreadShell["environmentId"]) { + return appAtomRegistry.get(environmentServerConfigsAtom).has(environmentId); } function environmentSupportsAutoSettleOptOut( @@ -72,15 +47,6 @@ function environmentSupportsAutoSettleOptOut( ); } -function environmentSupportsTitleRegeneration( - environmentId: EnvironmentThreadShell["environmentId"], -) { - return ( - appAtomRegistry.get(environmentServerConfigsAtom).get(environmentId)?.environment.capabilities - .threadTitleRegeneration === true - ); -} - type ThreadListAction = "archive" | "unarchive" | "delete" | "settle" | "unsettle"; const ACTION_VERBS: Record = { @@ -143,7 +109,7 @@ function useThreadActionExecutor( const succeeded = await (async () => { if ( (action === "settle" || action === "unsettle") && - !environmentSupportsSettlement(thread.environmentId) + !environmentConfigLoaded(thread.environmentId) ) { Dialog.alert( actionFailureTitle(action), @@ -204,8 +170,7 @@ function useThreadActionExecutor( return executeAction; } -// A plain function, not a hook: a `use*` function that calls no hooks is skipped by -// the compiler, so the delete handler it returned was a new closure every render. +// Hookless use* functions skip compilation, leaving their returned handlers unstable. function confirmThreadDeletion( executeAction: (action: ThreadListAction, thread: EnvironmentThreadShell) => Promise, thread: EnvironmentThreadShell, @@ -333,7 +298,7 @@ export function useThreadListActions(): { } snoozeInFlightThreadKeys.current.add(key); const succeeded = await (async () => { - if (!environmentSupportsSnooze(thread.environmentId)) { + if (!environmentConfigLoaded(thread.environmentId)) { Dialog.alert( "Could not snooze thread", "This environment's server does not support snoozing yet. Update the server to use Snooze.", @@ -391,7 +356,7 @@ export function useThreadListActions(): { } snoozeInFlightThreadKeys.current.add(key); const succeeded = await (async () => { - if (!environmentSupportsSnooze(thread.environmentId)) { + if (!environmentConfigLoaded(thread.environmentId)) { Dialog.alert( "Could not wake thread", "This environment's server does not support snoozing yet. Update the server to wake this thread.", @@ -429,7 +394,7 @@ export function useThreadListActions(): { (await executeAction("unsettle", thread)) === true; const pinThread = async (thread: EnvironmentThreadShell, restoreOrderKey?: string) => { if (!checkThreadOperationPermission(thread, "Could not pin thread")) return false; - if (!environmentSupportsPinning(thread.environmentId)) { + if (!environmentConfigLoaded(thread.environmentId)) { Dialog.alert( "Could not pin thread", "This environment's server does not support pinning yet. Update the server to use Pin.", @@ -437,21 +402,13 @@ export function useThreadListActions(): { return false; } selectionHaptic(); - // Same placement as web: a fresh pin takes the top of the arranged - // run. Servers that predate reordering get the bare pin (keyless). - let orderKey: string | undefined; - if (environmentSupportsPinReorder(thread.environmentId)) { - const shells = appAtomRegistry.get(environmentThreadShells.threadShellsAtom); - let firstKey: string | null = null; - for (const shell of shells) { - if (shell.pinnedAt == null || shell.pinOrderKey == null) continue; - if (firstKey === null || shell.pinOrderKey < firstKey) firstKey = shell.pinOrderKey; - } - orderKey = pinOrderKeyBetween(null, firstKey) ?? undefined; + const shells = appAtomRegistry.get(environmentThreadShells.threadShellsAtom); + let firstKey: string | null = null; + for (const shell of shells) { + if (shell.pinnedAt == null || shell.pinOrderKey == null) continue; + if (firstKey === null || shell.pinOrderKey < firstKey) firstKey = shell.pinOrderKey; } - orderKey = environmentSupportsPinReorder(thread.environmentId) - ? (restoreOrderKey ?? orderKey) - : undefined; + const orderKey = restoreOrderKey ?? pinOrderKeyBetween(null, firstKey) ?? undefined; ThreadUndo.invalidate("pin", scopedThreadKey(thread.environmentId, thread.id)); // Pinning clears snooze, so older Settled or Snoozed undos would fight this pin. ThreadUndo.invalidate("settle", scopedThreadKey(thread.environmentId, thread.id)); @@ -479,7 +436,7 @@ export function useThreadListActions(): { }; const unpinThread = async (thread: EnvironmentThreadShell) => { if (!checkThreadOperationPermission(thread, "Could not unpin thread")) return false; - if (!environmentSupportsPinning(thread.environmentId)) { + if (!environmentConfigLoaded(thread.environmentId)) { Dialog.alert( "Could not unpin thread", "This environment's server does not support pinning yet. Update the server to use Pin.", @@ -543,7 +500,7 @@ export function useThreadListActions(): { if (thread.titleRegeneration != null || titleRegenerationInFlightThreadKeys.current.has(key)) { return false; } - if (!environmentSupportsTitleRegeneration(thread.environmentId)) { + if (!environmentConfigLoaded(thread.environmentId)) { Dialog.alert( "Could not regenerate title", "This environment's server does not support title regeneration yet. Update the server to regenerate thread titles.", @@ -615,7 +572,7 @@ export function useThreadListActions(): { const moveThread = async (thread: EnvironmentThreadShell, direction: ThreadMoveDestination) => { if (!checkThreadOperationPermission(thread, "Could not move thread")) return false; if (getPendingThreadOrder() !== null || appAtomRegistry.get(threadDropBusyAtom)) return false; - const shells = appAtomRegistry.get(environmentThreadShells.threadShellsAtom); + const shells = appAtomRegistry.get(environmentThreadShells.navigationThreadShellsAtom); const current = shells.find( (row) => row.id === thread.id && row.environmentId === thread.environmentId, ); @@ -628,20 +585,18 @@ export function useThreadListActions(): { ? "pinned" : "active"; if (section === "settled") { - if (!environmentSupportsSettlement(thread.environmentId)) return false; + if (!environmentConfigLoaded(thread.environmentId)) return false; appAtomRegistry.set(threadDropBusyAtom, true); const settled = await settleThread(thread); appAtomRegistry.set(threadDropBusyAtom, false); return settled; } const configs = appAtomRegistry.get(environmentServerConfigsAtom); - const supportsReorder = (environmentId: EnvironmentThreadShell["environmentId"]) => { - const capabilities = configs.get(environmentId)?.environment.capabilities; - return section === "pinned" - ? capabilities?.threadPinReorder === true - : capabilities?.threadActiveReorder === true; - }; - if (!supportsReorder(thread.environmentId)) { + const connectedEnvironmentIds = new Set(appAtomRegistry.get(connectedEnvironmentIdsAtom)); + + if (!connectedEnvironmentIds.has(thread.environmentId)) return false; + + if (!configs.has(thread.environmentId)) { Dialog.alert( "Could not move thread", "This environment's server does not support reordering these threads. Update the server to arrange them.", @@ -653,38 +608,22 @@ export function useThreadListActions(): { section, now: new Date().toISOString(), queuedThreadKeys: appAtomRegistry.get(queuedThreadKeysAtom), - settlementEnvironmentIds: new Set( - [...configs].flatMap(([id, config]) => - config.environment.capabilities.threadSettlement === true ? [id] : [], - ), - ), - snoozeEnvironmentIds: new Set( - [...configs].flatMap(([id, config]) => - config.environment.capabilities.threadSnooze === true ? [id] : [], - ), - ), + settlementEnvironmentIds: new Set(configs.keys()), + snoozeEnvironmentIds: new Set(configs.keys()), }); const assignments = createThreadMovePlanner({ allThreads: shells, ordered, section, - reorderableEnvironmentIds: new Set([...configs.keys()].filter(supportsReorder)), + reorderableEnvironmentIds: new Set( + [...configs.keys()].filter((environmentId) => connectedEnvironmentIds.has(environmentId)), + ), })(scopedThreadKey(thread.environmentId, thread.id), direction); if (assignments === null) return false; const lifecycle = threadDropLifecycle(thread, section, new Date().toISOString()); const crossSection = !ordered.some( (row) => row.id === thread.id && row.environmentId === thread.environmentId, ); - if ( - crossSection && - (((section === "pinned" || thread.pinnedAt != null) && - !environmentSupportsPinning(thread.environmentId)) || - (thread.settledOverride === "settled" && - !environmentSupportsSettlement(thread.environmentId)) || - (effectiveSnoozed(thread, { now: new Date().toISOString() }) && - !environmentSupportsSnooze(thread.environmentId))) - ) - return false; const shellByKey = new Map( shells.map((shell) => [scopedThreadKey(shell.environmentId, shell.id), shell]), ); diff --git a/apps/mobile/src/features/keyboard/CommandPalette.tsx b/apps/mobile/src/features/keyboard/CommandPalette.tsx index c70062ab04c7c..841eaae7c6dc2 100644 --- a/apps/mobile/src/features/keyboard/CommandPalette.tsx +++ b/apps/mobile/src/features/keyboard/CommandPalette.tsx @@ -1,9 +1,23 @@ +import { useAtomValue } from "@effect/atom-react"; import { uuidv4 } from "../../lib/uuid"; import { useNavigation } from "@react-navigation/native"; -import type { EnvironmentThreadSearchMatch } from "@t3tools/client-runtime/state/thread-search"; -import { THREAD_JUMP_KEYBINDING_COMMANDS } from "@t3tools/contracts"; -import { threadPullRequestSearchTerms } from "@t3tools/shared/threadPullRequests"; -import { useCallback, useEffect, useMemo, useRef, useState } from "react"; +import { + claimThreadOpen, + nextShownOrder, + threadSearchSubject, + type EnvironmentThreadSearchMatch, + type ShownOrder, +} from "@t3tools/client-runtime/state/thread-search"; +import { isListedThreadLineage, THREAD_JUMP_KEYBINDING_COMMANDS } from "@t3tools/contracts"; +import { + foldSearchQuery, + PALETTE_MESSAGE_LIMIT, + rankMessageMatches, + splitSearchText, + pickedQuery, + threadRecentUse, +} from "@t3tools/shared/paletteSearch"; +import { useEffect, useMemo, useRef, useState } from "react"; import { FlatList, KeyboardAvoidingView, @@ -18,6 +32,7 @@ import { import { GestureHandlerRootView } from "react-native-gesture-handler"; +import { ProjectFavicon } from "../../components/ProjectFavicon"; import { GlassSurface } from "../../components/ui/GlassSurface"; import { RowPressable } from "../../components/ui/RowPressable"; import { AppText as Text } from "../../components/ui/AppText"; @@ -27,21 +42,37 @@ import { deriveBottomControlInsets } from "../../lib/reserved-regions"; import { scopedProjectKey, scopedThreadKey } from "../../lib/scopedEntities"; import { useNativeLayoutMetrics } from "../../native/native-layout-metrics"; import { T3KeyboardCommands } from "../../native/T3KeyboardCommands"; -import { useProjects, useThreadShell, useThreadShells } from "../../state/entities"; +import { + useProjects, + useServerConfigs, + useThreadShell, + useThreadShells, +} from "../../state/entities"; import { useThreadSearch } from "../../state/queries"; +import { requestThreadMessageJump } from "../threads/threadMessageJump"; +import { threadEnvironment } from "../../state/threads"; +import { useAtomCommand } from "../../state/use-atom-command"; +import { serverEnvironment } from "../../state/server"; import { useWorkspaceEnvironments } from "../../state/workspace"; import { useSavedRemoteConnections } from "../../state/use-remote-environment-registry"; -import { useAdaptiveWorkspaceLayout } from "../layout/AdaptiveWorkspaceLayout"; import { useAppearancePreferences } from "../settings/appearance/AppearancePreferencesProvider"; import { ThreadSearchMatchExcerpt } from "../threads/thread-search-match"; +import { pickTriageEnvironment } from "../triage/triageTarget"; +import { useStartTriage } from "../triage/useStartTriage"; +import { useNewTaskFlow } from "../threads/new-task-flow-provider"; +import { useActiveNewTask } from "../../state/active-new-task"; import { filterCommandPaletteItems, nextPaletteIndex, type CommandPaletteItem, + type CommandPaletteResult, } from "./commandPaletteItems"; import { parseActiveThreadPath, type HardwareKeyboardCommand } from "./hardwareKeyboardCommands"; import { threadJumpIndex } from "./threadKeyboardShortcuts"; import { PullRequestGlyph } from "../pull-requests/pullRequestGlyphs"; +import { openSettings } from "../settings/settings-navigation"; +import { useSelectWorkspaceTab } from "../workspace/useSelectWorkspaceTab"; +import { useSelectWorkspaceDetail } from "../workspace/useSelectWorkspaceDetail"; const PALETTE_COMMANDS: ReadonlyArray = [ "commandPalette", @@ -51,6 +82,8 @@ const PALETTE_COMMANDS: ReadonlyArray = [ ...THREAD_JUMP_KEYBINDING_COMMANDS, ]; const ROW_HEIGHT = 50; +// The "In messages" label above the first message match; server results always come last. +const SECTION_LABEL_HEIGHT = 26; const ACTION_ICONS: Record = { newTask: "square.and.pencil", @@ -68,13 +101,12 @@ const ACTION_ICONS: Record = { }; function itemIcon(item: CommandPaletteItem): AppSymbolName { - if (item.kind === "project") return "folder"; if (item.kind === "thread") return "text.bubble"; return ACTION_ICONS[item.key] ?? "ellipsis"; } function PaletteRow(props: { - readonly item: CommandPaletteItem; + readonly item: CommandPaletteResult; readonly index: number; readonly selected: boolean; readonly searchMatch?: EnvironmentThreadSearchMatch; @@ -101,16 +133,54 @@ function PaletteRow(props: { style={{ height: ROW_HEIGHT }} > - + {props.item.project ? ( + + ) : ( + + )} - - {props.item.title} - + + + {props.item.titleRanges?.length + ? splitSearchText(props.item.title, props.item.titleRanges).map((part) => ( + + {part.text} + + )) + : props.item.title} + + {/* The second line shows the snippet or hint, so keep where the thread + lives, unless the hint already names it. */} + {(props.searchMatch || + (props.item.matchHint && + props.item.matchHint.label !== "Project" && + props.item.matchHint.label !== "Environment")) && + props.item.detail ? ( + + {props.item.detail} + + ) : null} + {props.searchMatch ? ( + ) : props.item.matchHint ? ( + + {props.item.matchHint.label}:{" "} + {splitSearchText(props.item.matchHint.text, props.item.matchHint.ranges).map((part) => ( + + {part.text} + + ))} + ) : props.item.detail ? ( {props.item.detail} @@ -142,22 +221,26 @@ export function CommandPalette(props: { readonly onCommand: (command: HardwareKeyboardCommand) => void; }) { const navigation = useNavigation(); + const selectTab = useSelectWorkspaceTab(); const { themeVariables } = useAppearancePreferences(); - const { selectThread, selectThreadRoute } = useAdaptiveWorkspaceLayout(); + const selectDetail = useSelectWorkspaceDetail(); const runCommand = props.onCommand; const projects = useProjects(); const threads = useThreadShells(); - const activeThreadRef = useMemo(() => parseActiveThreadPath(props.pathname), [props.pathname]); + const activeThreadRef = parseActiveThreadPath(props.pathname); const activeThread = useThreadShell(activeThreadRef); + const visitThread = useAtomCommand(threadEnvironment.visit, { reportFailure: false }); const environments = useWorkspaceEnvironments(); const { savedConnectionsById } = useSavedRemoteConnections(); const [query, setQuery] = useState(""); + // Ranking is relative to when the palette opened, so rows do not reorder as time passes. + const [now] = useState(() => Date.now()); const [selection, setSelection] = useState(null); const [visible, setVisible] = useState(true); const pendingAction = useRef<(() => void) | null>(null); const closing = useRef(false); const inputRef = useRef(null); - const listRef = useRef>(null); + const listRef = useRef>(null); const { width, height } = useWindowDimensions(); // The palette floats above every column, so it keeps itself inside the window's side insets // and to one side of a book fold. @@ -169,20 +252,41 @@ export function CommandPalette(props: { .map((environment) => environment.environmentId), [environments], ); - const search = useThreadSearch(searchEnvironmentIds, query.startsWith(">") ? "" : query); - const matchedThreadKeys = useMemo( - () => - new Set(search.matches.map((match) => scopedThreadKey(match.environmentId, match.threadId))), - [search.matches], + // The palette matches environment names when there are several; older rows must match the same. + const environmentLabels = + environments.length > 1 + ? Object.fromEntries( + searchEnvironmentIds.flatMap((environmentId) => { + const label = savedConnectionsById[environmentId]?.environmentLabel; + return label === undefined ? [] : [[environmentId, label]]; + }), + ) + : undefined; + const search = useThreadSearch( + searchEnvironmentIds, + query.startsWith(">") ? "" : query, + environmentLabels === undefined ? {} : { environmentLabels }, ); - const contentMatchByKey = useMemo( - () => - new Map( - search.matches - .filter((match) => match.source === "user" || match.source === "assistant") - .map((match) => [scopedThreadKey(match.environmentId, match.threadId), match]), - ), - [search.matches], + const serverConfigs = useServerConfigs(); + const startTriage = useStartTriage(); + const newTaskFlow = useNewTaskFlow(); + const draftEnvironmentId = + useActiveNewTask() === null ? null : (newTaskFlow.selectedProject?.environmentId ?? null); + const triageEnvironmentId = pickTriageEnvironment({ + // The route names the machine even before the thread shell loads. + onScreen: activeThreadRef?.environmentId ?? draftEnvironmentId, + connected: searchEnvironmentIds, + supportsTriage: (environmentId) => + serverConfigs.get(environmentId)?.environment.capabilities.triage === true, + }); + const canTriage = + useAtomValue(serverEnvironment.prepareTriage.permissionAtom(triageEnvironmentId)) && + triageEnvironmentId !== null && + serverConfigs.get(triageEnvironmentId)?.environment.capabilities.triage === true; + const contentMatchByKey = new Map( + search.matches + .filter((match) => match.source === "user" || match.source === "assistant") + .map((match) => [scopedThreadKey(match.environmentId, match.threadId), match]), ); const items = useMemo(() => { const actions: CommandPaletteItem[] = [ @@ -205,68 +309,55 @@ export function CommandPalette(props: { kind: "action", title: "Open settings", searchTerms: ["preferences", "configuration"], - run: () => - navigation.navigate("SettingsSheet", { - screen: "SettingsContent", - params: { screen: "Settings" }, - }), + run: () => selectTab("settings"), }, { key: "appearance", kind: "action", title: "Appearance", searchTerms: ["theme", "colors", "dark", "light"], - run: () => - navigation.navigate("SettingsSheet", { - screen: "SettingsContent", - params: { screen: "SettingsAppearance" }, - }), + run: () => openSettings(navigation, "SettingsAppearance"), }, { key: "environments", kind: "action", title: "Manage environments", searchTerms: ["connections", "server", "remote"], - run: () => - navigation.navigate("SettingsSheet", { - screen: "SettingsContent", - params: { screen: "SettingsEnvironments" }, - }), + run: () => openSettings(navigation, "SettingsEnvironments"), }, { key: "scheduledTasks", kind: "action", title: "Scheduled tasks", searchTerms: ["schedule", "automations", "recurring"], - run: () => - navigation.navigate("SettingsSheet", { - screen: "SettingsContent", - params: { screen: "SettingsScheduledTasks" }, - }), + run: () => openSettings(navigation, "SettingsScheduledTasks"), }, { key: "usage", kind: "action", title: "Usage", searchTerms: ["limits", "accounts", "quota"], - run: () => - navigation.navigate("SettingsSheet", { - screen: "SettingsContent", - params: { screen: "SettingsUsage" }, - }), + run: () => openSettings(navigation, "SettingsUsage"), }, { key: "archive", kind: "action", title: "Archived threads", searchTerms: ["restore", "history"], - run: () => - navigation.navigate("SettingsSheet", { - screen: "SettingsContent", - params: { screen: "SettingsArchive" }, - }), + run: () => openSettings(navigation, "SettingsArchive"), }, ]; + if (canTriage) { + actions.push({ + key: "triage", + kind: "action", + title: "Triage an issue", + // Mobile has no triage hero, so name the machine before it starts. + detail: `On ${savedConnectionsById[triageEnvironmentId]?.environmentLabel ?? "this machine"}`, + searchTerms: ["triage", "bug", "issue", "report", "broken", "debug", "help", "support"], + run: () => void startTriage(triageEnvironmentId), + }); + } const projectByKey = new Map( projects.map((project) => [scopedProjectKey(project.environmentId, project.id), project]), ); @@ -280,12 +371,15 @@ export function CommandPalette(props: { title: `New thread in ${activeProject.title}`, searchTerms: ["new task", "chat", "create"], run: () => - selectThreadRoute({ - draft: { - requestId: uuidv4(), - environmentId: activeProject.environmentId, - projectId: activeProject.id, - title: activeProject.title, + selectDetail({ + name: "Thread", + params: { + draft: { + requestId: uuidv4(), + environmentId: activeProject.environmentId, + projectId: activeProject.id, + title: activeProject.title, + }, }, }), }); @@ -295,7 +389,7 @@ export function CommandPalette(props: { ["files", "Go to file", ["open", "files", "browse", "search"]], ["terminal", "Open terminal", ["shell", "console"]], ["review", "Review changes", ["diff", "git", "pull request"]], - ["copyThreadReference", "Copy PR link or thread ID", ["reference", "clipboard"]], + ["copyThreadReference", "Copy PR link or thread", ["reference", "clipboard"]], ] as const; actions.push( ...threadActions.map(([command, title, searchTerms]) => ({ @@ -307,29 +401,32 @@ export function CommandPalette(props: { })), ); } - const projectItems: CommandPaletteItem[] = projects.map((project) => ({ + const openProjects = projects.filter((project) => project.archivedAt == null); + const projectItems: CommandPaletteItem[] = [ + ...openProjects.filter((project) => project.pinnedAt != null), + ...openProjects.filter((project) => project.pinnedAt == null), + ].map((project) => ({ key: `project:${scopedProjectKey(project.environmentId, project.id)}`, kind: "project", + project, title: project.title, detail: `New thread · ${savedConnectionsById[project.environmentId]?.environmentLabel ?? project.environmentId}`, searchTerms: [project.workspaceRoot, "new thread", "project"], run: () => - selectThreadRoute({ - draft: { - requestId: uuidv4(), - environmentId: project.environmentId, - projectId: project.id, - title: project.title, + selectDetail({ + name: "Thread", + params: { + draft: { + requestId: uuidv4(), + environmentId: project.environmentId, + projectId: project.id, + title: project.title, + }, }, }), })); const threadItems: CommandPaletteItem[] = threads - .filter((thread) => thread.archivedAt === null) - .sort((left, right) => - (right.latestUserMessageAt ?? right.updatedAt).localeCompare( - left.latestUserMessageAt ?? left.updatedAt, - ), - ) + .filter((thread) => thread.archivedAt === null && isListedThreadLineage(thread.lineage)) .map((thread) => { const project = projectByKey.get(scopedProjectKey(thread.environmentId, thread.projectId)); const environment = @@ -339,36 +436,116 @@ export function CommandPalette(props: { kind: "thread", title: thread.title || "Untitled thread", detail: [project?.title, environment].filter(Boolean).join(" · "), - searchTerms: [ - project?.title ?? "", - environment, - thread.branch ?? "", - ...threadPullRequestSearchTerms(thread), - ], - run: () => selectThread(thread), + searchTerms: [], + threadSearch: threadSearchSubject( + thread, + project?.title, + environments.length > 1 ? environment : null, + ), + // Last among threads: picking the thread already open does nothing. + ...(thread.environmentId === activeThread?.environmentId && thread.id === activeThread.id + ? { secondary: true } + : {}), + run: () => + selectDetail({ + name: "Thread", + params: { environmentId: String(thread.environmentId), threadId: String(thread.id) }, + }), }; }); + // Recent means used recently: written in or opened, whichever is later. + threadItems.sort( + (left, right) => + (right.threadSearch ? threadRecentUse(right.threadSearch) : 0) - + (left.threadSearch ? threadRecentUse(left.threadSearch) : 0), + ); return [...actions, ...projectItems, ...threadItems]; }, [ + selectTab, activeThread, activeThreadRef, + environments.length, + canTriage, navigation, projects, runCommand, savedConnectionsById, - selectThread, - selectThreadRoute, + selectDetail, + startTriage, threads, + triageEnvironmentId, ]); - const results = useMemo( - () => filterCommandPaletteItems(items, query, matchedThreadKeys), - [items, matchedThreadKeys, query], + const rankedMessageKeys = useMemo(() => { + const subjectByKey = new Map( + items.flatMap((item) => (item.threadSearch ? [[item.key, item.threadSearch] as const] : [])), + ); + const keyOf = (match: EnvironmentThreadSearchMatch) => + scopedThreadKey(match.environmentId, match.threadId); + return rankMessageMatches( + search.matches, + (match) => subjectByKey.get(keyOf(match)), + foldSearchQuery(query), + now, + { withoutTitleMatches: true }, + ).map(keyOf); + }, [items, now, query, search.matches]); + // Rows already shown keep their places when a slower environment answers. + const [shownOrder, setShownOrder] = useState(null); + const messageOrder = nextShownOrder( + shownOrder, + search.query, + rankedMessageKeys, + PALETTE_MESSAGE_LIMIT, + ); + if (messageOrder !== shownOrder) setShownOrder(messageOrder); + const messageMatchKeys = useMemo( + () => messageOrder.keys.slice(0, messageOrder.shown), + [messageOrder.keys, messageOrder.shown], ); + const results = useMemo(() => { + const ranked = filterCommandPaletteItems(items, query, messageMatchKeys, now); + // Recent threads leave out the open one, which would always lead them. + const activeKey = activeThread + ? scopedThreadKey(activeThread.environmentId, activeThread.id) + : null; + return query.trim() ? ranked : ranked.filter((item) => item.key !== activeKey); + }, [activeThread, items, messageMatchKeys, now, query]); + const runResult = (item: CommandPaletteResult) => { + const thread = + item.kind === "thread" && query.trim() && !query.startsWith(">") + ? threads.find( + (candidate) => scopedThreadKey(candidate.environmentId, candidate.id) === item.key, + ) + : undefined; + // A message result opens the thread at that message. + const messageId = item.fromMessages ? contentMatchByKey.get(item.key)?.messageId : undefined; + if (messageId) requestThreadMessageJump(item.key, messageId); + // A pick sends its open with the query, always, so the server records it; + // the thread screen then skips its own open. The open thread is no pick. + if (thread && !item.secondary) claimThreadOpen(thread.environmentId, thread.id, Date.now()); + if (thread && thread.lastVisitedAt !== undefined && !item.secondary) { + void visitThread({ + environmentId: thread.environmentId, + input: { + threadId: thread.id, + visitedAt: thread.updatedAt, + opened: true, + searchQuery: pickedQuery(query), + }, + }); + } + item.run(); + }; + const firstMessageIndex = results.findIndex((item) => item.fromMessages); const selectedIndex = Math.max( 0, results.findIndex((item) => item.key === selection), ); const selectedKey = results[selectedIndex]?.key; + // The native list follows the highlighted row. Key presses move it, but so do + // live thread updates and late message matches that reorder or drop the + // selected row under a kept selection, so no single handler owns the scroll. + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- scrolls the native list to the highlighted row, which key presses and live result updates both move useEffect(() => { if (selectedIndex === 0) { // Centering before the list measures its height scrolls half the first row out of view. @@ -379,28 +556,31 @@ export function CommandPalette(props: { }, [selectedIndex, selectedKey]); const dismissed = useRef(false); - const handleDismissed = useCallback(() => { + const dismissFallback = useRef | null>(null); + const handleDismissed = () => { + if (dismissFallback.current !== null) clearTimeout(dismissFallback.current); + dismissFallback.current = null; if (dismissed.current) return; dismissed.current = true; // Present navigation sheets only after UIKit has dismissed this modal. props.onClose(); pendingAction.current?.(); - }, [props]); - - // iOS drops Modal onDismiss when the VC is dismissed mid-presentation (e.g. - // ⌘K during the fade-in) or raced by another sheet — without a fallback the - // palette stays mounted-but-invisible and ⌘K dead-ends on a stale open state. - useEffect(() => { - if (visible) return; - const fallback = setTimeout(handleDismissed, 400); - return () => clearTimeout(fallback); - }, [visible, handleDismissed]); + }; + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- clears the dismiss fallback timer on unmount + useEffect( + () => () => { + if (dismissFallback.current !== null) clearTimeout(dismissFallback.current); + }, + [], + ); function close(run?: () => void) { if (closing.current) return; closing.current = true; pendingAction.current = run ?? null; setVisible(false); + // iOS may drop onDismiss during presentation or competing sheets; a fallback clears stale palette state. + dismissFallback.current = setTimeout(handleDismissed, 400); } function onCommand(command: HardwareKeyboardCommand) { @@ -413,7 +593,7 @@ export function CommandPalette(props: { ); } else { const item = results[threadJumpIndex(command)]; - if (item) close(item.run); + if (item) close(() => runResult(item)); } } @@ -470,13 +650,15 @@ export function CommandPalette(props: { onChangeText={(value) => { setQuery(value); setSelection(null); + // The follow effect stays idle when the top row and its key are unchanged, + // so a touch-scrolled list would otherwise keep its old offset. listRef.current?.scrollToOffset({ offset: 0, animated: false }); }} returnKeyType="go" submitBehavior="submit" onSubmitEditing={() => { const item = results[selectedIndex]; - if (item) close(item.run); + if (item) close(() => runResult(item)); }} /> @@ -488,8 +670,12 @@ export function CommandPalette(props: { keyboardShouldPersistTaps="handled" keyExtractor={(item) => item.key} getItemLayout={(_, index) => ({ - length: ROW_HEIGHT, - offset: ROW_HEIGHT * index, + length: ROW_HEIGHT + (index === firstMessageIndex ? SECTION_LABEL_HEIGHT : 0), + offset: + ROW_HEIGHT * index + + (firstMessageIndex !== -1 && index > firstMessageIndex + ? SECTION_LABEL_HEIGHT + : 0), index, })} contentContainerClassName="pb-2" @@ -498,17 +684,33 @@ export function CommandPalette(props: { {search.isPending ? "Searching…" : "No results"}
} + // Message results from slower environments may still arrive below. + ListFooterComponent={ + results.length > 0 && search.isPending && !query.startsWith(">") ? ( + + Searching messages… + + ) : undefined + } renderItem={({ item, index }) => ( - close(item.run)} - /> + <> + {index === firstMessageIndex ? ( + + In messages + + ) : null} + close(() => runResult(item))} + /> + )} /> diff --git a/apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx b/apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx index ada99e1569600..135715f064924 100644 --- a/apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx +++ b/apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx @@ -1,5 +1,6 @@ import { StackActions, useNavigation } from "@react-navigation/native"; -import { resolveThreadReferenceCopyTarget } from "@t3tools/shared/threadReference"; +import { Platform } from "react-native"; +import { resolveThreadReferenceCopyTarget } from "@t3tools/client-runtime/thread-reference"; import { createContext, use, @@ -13,7 +14,11 @@ import { type ReactNode, } from "react"; -import { tryCopyTextWithHaptic } from "../../lib/copyTextWithHaptic"; +import { copyThreadReference } from "../../lib/copyThreadReference"; +import { + firstWorkspaceDetailOpen, + workspaceHasColumns, +} from "../workspace/workspace-selection-store"; import { T3KeyboardCommands } from "../../native/T3KeyboardCommands"; import { useThreadShell } from "../../state/entities"; import type { GitActionProgress } from "../../state/use-vcs-action-state"; @@ -27,6 +32,7 @@ import { subscribeToHardwareKeyboardCommandRegistrations, type HardwareKeyboardCommand, } from "./hardwareKeyboardCommands"; +import { selectWorkspaceDetail } from "../workspace/workspace-detail-selection"; const EMPTY_COPY_FEEDBACK: GitActionProgress = { phase: "idle", @@ -56,7 +62,8 @@ export function HardwareKeyboardCommandProvider({ activeThreadRef === null ? null : resolveThreadReferenceCopyTarget({ - threadId: activeThread?.id ?? activeThreadRef.threadId, + threadRef: activeThreadRef, + title: activeThread?.title ?? "", pullRequests: activeThread?.pullRequests, linkedPullRequestUrl: (activeThread?.linkedPullRequest ?? activeThread?.branchPullRequest)?.url ?? null, @@ -83,6 +90,7 @@ export function HardwareKeyboardCommandProvider({ setCopyFeedback(EMPTY_COPY_FEEDBACK); }, COPY_FEEDBACK_DISMISS_MS); }, []); + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- clears the copy feedback timer on unmount useEffect( () => () => { if (copyFeedbackTimerRef.current !== null) { @@ -113,6 +121,7 @@ export function HardwareKeyboardCommandProvider({ if (pathname.split("/")[4] !== "terminal") commands.add("copyThreadReference"); } return [...commands]; + // oxlint-disable-next-line react/memo-dependencies -- registrationVersion invalidates the snapshot of the external keyboard-command registry. }, [activeThreadRef, pathname, registrationVersion, navigation]); const onCommand = useCallback( @@ -126,16 +135,14 @@ export function HardwareKeyboardCommandProvider({ if (command === "copyThreadReference") { if (copyTarget === null) return; const requestId = ++copyRequestIdRef.current; - void tryCopyTextWithHaptic(copyTarget.value, { - target: copyTarget.clipboardTarget, - }).then((didCopy) => { + void copyThreadReference(copyTarget).then((didCopy) => { if (requestId !== copyRequestIdRef.current) return; showCopyFeedback( didCopy ? { phase: "success", label: copyTarget.successTitle, - description: copyTarget.value, + description: copyTarget.description, } : { phase: "error", @@ -148,10 +155,13 @@ export function HardwareKeyboardCommandProvider({ } if (command === "newTask") { - navigation.navigate("Thread", { draft: {} }); + navigation.dispatch(selectWorkspaceDetail({ name: "Thread", params: { draft: {} } })); return; } if (command === "back") { + // Beside a visible list, the first detail page has nothing to go back to. + if (Platform.OS === "ios" && workspaceHasColumns() && firstWorkspaceDetailOpen(navigation)) + return; if (navigation.canGoBack()) { navigation.goBack(); } else { diff --git a/apps/mobile/src/features/keyboard/commandPaletteItems.test.ts b/apps/mobile/src/features/keyboard/commandPaletteItems.test.ts index af51ce71dbfdd..b5a57c2e23ed5 100644 --- a/apps/mobile/src/features/keyboard/commandPaletteItems.test.ts +++ b/apps/mobile/src/features/keyboard/commandPaletteItems.test.ts @@ -2,39 +2,55 @@ import { describe, expect, it } from "vite-plus/test"; import { filterCommandPaletteItems, type CommandPaletteItem } from "./commandPaletteItems"; +const NOW = Date.UTC(2026, 9, 23); + function item( key: string, title: string, kind: CommandPaletteItem["kind"], searchTerms: string[] = [], ): CommandPaletteItem { - return { key, title, kind, searchTerms, run: () => {} }; + return { + key, + title, + kind, + searchTerms, + ...(kind === "thread" ? { threadSearch: { title, activityAt: NOW } } : {}), + run: () => {}, + }; } const items = [ item("new", "New thread in…", "action", ["project", "create"]), item("settings", "Open settings", "action", ["preferences"]), item("project", "Mobile app", "project", ["/workspaces/mobile", "new thread"]), - item("siva:one", "Keyboard shortcuts", "thread", ["Mobile app", "Siva"]), - item("mac:one", "Mobile app", "thread", ["Mac"]), + item("siva:one", "Keyboard shortcuts", "thread"), + item("mac:one", "Mobile app layout", "thread"), ]; -const emptyMatches = new Set(); +const keys = (results: ReadonlyArray<{ readonly key: string }>) => + results.map((entry) => entry.key); describe("filterCommandPaletteItems", () => { - it("matches query tokens across titles and metadata and ranks exact titles first", () => { - expect( - filterCommandPaletteItems(items, " MOBILE app ", emptyMatches).map((item) => item.key), - ).toEqual(["project", "mac:one", "siva:one"]); - expect( - filterCommandPaletteItems(items, "siva keyboard", emptyMatches).map((item) => item.key), - ).toEqual(["siva:one"]); + it("ranks like the web palette, whole words first, with every token required", () => { + // A thread active today outranks a project that matches as well, but not + // one whose whole name was typed. + expect(keys(filterCommandPaletteItems(items, "mobile", [], NOW))).toEqual([ + "mac:one", + "project", + ]); + expect(keys(filterCommandPaletteItems(items, " MOBILE app ", [], NOW))).toEqual([ + "project", + "mac:one", + ]); + expect(keys(filterCommandPaletteItems(items, "keyboard short", [], NOW))).toEqual(["siva:one"]); }); - it("includes server content matches scoped to the correct environment, except in actions-only mode", () => { - const matches = new Set(["siva:one", "project"]); - expect( - filterCommandPaletteItems(items, "message content", matches).map((item) => item.key), - ).toEqual(["siva:one"]); - expect(filterCommandPaletteItems(items, "> message content", matches)).toEqual([]); + it("lists message matches after the other results, once, except in actions-only mode", () => { + const results = filterCommandPaletteItems(items, "layout", ["siva:one", "mac:one"], NOW); + expect(results.map((entry) => [entry.key, entry.fromMessages ?? false])).toEqual([ + ["mac:one", false], + ["siva:one", true], + ]); + expect(filterCommandPaletteItems(items, "> layout", ["siva:one"], NOW)).toEqual([]); }); }); diff --git a/apps/mobile/src/features/keyboard/commandPaletteItems.ts b/apps/mobile/src/features/keyboard/commandPaletteItems.ts index 2e7c2399ae490..4207a85b095ef 100644 --- a/apps/mobile/src/features/keyboard/commandPaletteItems.ts +++ b/apps/mobile/src/features/keyboard/commandPaletteItems.ts @@ -1,43 +1,106 @@ +import type { EnvironmentProject } from "@t3tools/client-runtime/state/shell"; +import { + foldSearchQuery, + PALETTE_SECONDARY_LIMIT, + PALETTE_THREAD_LIMIT, + rankSearchGroups, + scoreSearchTerms, + scoreThreadSearch, + type SearchMatchHint, + type SearchRange, + type SearchTermsMatch, + type ThreadSearchSubject, +} from "@t3tools/shared/paletteSearch"; + export interface CommandPaletteItem { readonly key: string; readonly kind: "action" | "project" | "thread"; + readonly project?: EnvironmentProject; readonly title: string; readonly detail?: string; readonly searchTerms: ReadonlyArray; + /** Thread rows rank by match quality and use instead of by `searchTerms`. */ + readonly threadSearch?: ThreadSearchSubject; + /** Listed last in its group, as the thread already open. */ + readonly secondary?: boolean; readonly run: () => void; } +export interface CommandPaletteResult extends CommandPaletteItem { + /** Listed because its messages match; the row shows the message snippet. */ + readonly fromMessages?: boolean; + /** Title ranges the query matched, for highlighting. */ + readonly titleRanges?: ReadonlyArray; + /** Shown in place of the detail when the match is not in the title. */ + readonly matchHint?: SearchMatchHint; +} + +/** + * Ranks like the web palette: actions, projects, and threads order by their + * best match, threads by match quality and use. Threads whose messages match + * come last, in `messageMatchKeys` order, so late server results never move + * the rows above them. + */ export function filterCommandPaletteItems( items: ReadonlyArray, query: string, - matchedThreadKeys: ReadonlySet, -) { + messageMatchKeys: ReadonlyArray, + now = Date.now(), +): CommandPaletteResult[] { const actionsOnly = query.startsWith(">"); - const normalized = (actionsOnly ? query.slice(1) : query).trim().toLocaleLowerCase(); - const tokens = normalized.split(/\s+/); - return items - .flatMap((item, index) => { - if (actionsOnly && item.kind !== "action") return []; - if (!normalized) return item.kind === "project" ? [] : [{ item, rank: 0, index }]; - const title = item.title.toLocaleLowerCase(); - const haystack = [title, ...item.searchTerms].join(" ").toLocaleLowerCase(); - if ( - !tokens.every((token) => haystack.includes(token)) && - !(item.kind === "thread" && matchedThreadKeys.has(item.key)) + const normalizedQuery = foldSearchQuery(actionsOnly ? query.slice(1) : query); + const candidates = actionsOnly ? items.filter((item) => item.kind === "action") : items; + if (!normalizedQuery) return candidates.filter((item) => item.kind !== "project"); + + // On equal match classes, groups keep this order, as on web. + const kinds = ["action", "thread", "project"] as const; + const groups = rankSearchGroups( + kinds.map((kind) => ({ group: kind, items: candidates.filter((item) => item.kind === kind) })), + ( + item, + options, + ): (SearchTermsMatch & { explain?: () => SearchMatchHint | undefined }) | null => { + const match = item.threadSearch + ? scoreThreadSearch(normalizedQuery, item.threadSearch, now, options) + : scoreSearchTerms(normalizedQuery, [item.title, ...item.searchTerms], options); + // The open thread, listed last, does not decide where its group sits. + return match && item.secondary ? { ...match, groupQuality: 0 } : match; + }, + ); + const threadsMatch = groups.some(({ group }) => group === "thread"); + const ranked = groups.flatMap(({ group, ranked: entries }) => + [...entries] + // Stable, so rank order holds otherwise. + .sort( + (left, right) => + Number(left.item.secondary ?? false) - Number(right.item.secondary ?? false), + ) + .slice( + 0, + group === "thread" + ? PALETTE_THREAD_LIMIT + : threadsMatch && !actionsOnly + ? PALETTE_SECONDARY_LIMIT + : entries.length, ) - return []; - const rank = - title === normalized - ? 3 - : title.startsWith(normalized) - ? 2 - : title.includes(normalized) - ? 1 - : 0; - return [{ item, rank, index }]; - }) - .sort((left, right) => right.rank - left.rank || left.index - right.index) - .map(({ item }) => item); + .map(({ item, match }): CommandPaletteResult => { + // Built only for the rows shown. + const matchHint = match.explain?.(); + return { ...item, titleRanges: match.ranges, ...(matchHint ? { matchHint } : {}) }; + }), + ); + if (actionsOnly) return ranked; + + const listed = new Set(ranked.map((item) => item.key)); + const threadByKey = new Map( + items.filter((item) => item.kind === "thread").map((item) => [item.key, item]), + ); + // `messageMatchKeys` arrive cut to what the palette shows; see `nextShownOrder`. + const fromMessages = messageMatchKeys.flatMap((key) => { + const item = threadByKey.get(key); + return item && !listed.has(key) ? [{ ...item, fromMessages: true }] : []; + }); + return [...ranked, ...fromMessages]; } export function nextPaletteIndex(index: number, direction: -1 | 1, count: number) { diff --git a/apps/mobile/src/features/keyboard/hardwareKeyboardCommands.ts b/apps/mobile/src/features/keyboard/hardwareKeyboardCommands.ts index cabe2949788ed..3525e17828099 100644 --- a/apps/mobile/src/features/keyboard/hardwareKeyboardCommands.ts +++ b/apps/mobile/src/features/keyboard/hardwareKeyboardCommands.ts @@ -27,6 +27,7 @@ export function useHardwareKeyboardCommand( command: HardwareKeyboardCommand | ReadonlyArray, handler: CommandHandler, ): void { + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- registers the handler in the module-level hardware keyboard command registry useEffect(() => { const commands = typeof command === "string" ? [command] : command; for (const command of commands) { diff --git a/apps/mobile/src/features/keyboard/threadKeyboardShortcuts.ts b/apps/mobile/src/features/keyboard/threadKeyboardShortcuts.ts index 3143d164c1781..8d6f131704423 100644 --- a/apps/mobile/src/features/keyboard/threadKeyboardShortcuts.ts +++ b/apps/mobile/src/features/keyboard/threadKeyboardShortcuts.ts @@ -1,6 +1,5 @@ import type { EnvironmentThreadShell } from "@t3tools/client-runtime/state/shell"; import { THREAD_JUMP_KEYBINDING_COMMANDS } from "@t3tools/contracts"; -import { useCallback } from "react"; import type { ThreadListV2ListItem } from "../threads/threadListV2"; import { @@ -31,13 +30,10 @@ export function useThreadJumpShortcuts( items: ReadonlyArray, onSelectThread: (thread: EnvironmentThreadShell) => void, ) { - const jumpToThread = useCallback( - (command: HardwareKeyboardCommand) => { - const thread = threadJumpTarget(items, command); - if (thread !== null) onSelectThread(thread); - return true; - }, - [items, onSelectThread], - ); + const jumpToThread = (command: HardwareKeyboardCommand) => { + const thread = threadJumpTarget(items, command); + if (thread !== null) onSelectThread(thread); + return true; + }; useHardwareKeyboardCommand(THREAD_JUMP_KEYBINDING_COMMANDS, jumpToThread); } diff --git a/apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx b/apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx index bec83816b5856..517d3ddf2981b 100644 --- a/apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx +++ b/apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx @@ -1,4 +1,11 @@ -import { createDeferredNavigation } from "./deferred-navigation"; +import { + WorkspaceColumnsRendererContext, + WorkspacePresentationHostContext, +} from "./workspace-presentation-context"; +import { useAndroidFloatingTabs } from "../settings/appearance/AppearancePreferencesProvider"; +import { SafeAreaInsetsContext, useSafeAreaInsets } from "react-native-safe-area-context"; +import { AdaptiveWorkspaceContext, useAdaptiveWorkspaceLayout } from "./adaptive-workspace-context"; +import { threadSelectionDeferral } from "./deferred-navigation"; import { uuidv4 } from "../../lib/uuid"; import type { EnvironmentProject, @@ -7,15 +14,8 @@ import type { import { EnvironmentId, ThreadId, type SidebarProjectGroupingMode } from "@t3tools/contracts"; import { useAtomValue } from "@effect/atom-react"; import { useFocusEffect } from "@react-navigation/native"; +import { NavigationContext, NavigationRouteContext, useNavigation } from "@react-navigation/native"; import { - CommonActions, - NavigationContext, - NavigationRouteContext, - StackActions, - useNavigation, -} from "@react-navigation/native"; -import { - createContext, use, useDeferredValue, useEffect, @@ -25,7 +25,7 @@ import { useState, type ReactNode, } from "react"; -import { Platform, useWindowDimensions, View } from "react-native"; +import { Keyboard, Platform, useWindowDimensions, View } from "react-native"; import { KeyboardController, useKeyboardState } from "react-native-keyboard-controller"; import Animated, { runOnJS, @@ -43,19 +43,14 @@ import { type VerticalHinge, deriveWorkspacePaneLayout, isPrimarySidebarPinned, - type FileInspectorPaneLayout, - type Layout, + isWorkspaceListPath, type WorkspaceAuxiliaryPaneRole, - type WorkspacePaneLayout, } from "../../lib/layout"; -import { - resolveThreadSelectionNavigationAction, - resolveThreadSelectionOverlayState, -} from "../../lib/adaptive-navigation"; import { scopedThreadKey } from "../../lib/scopedEntities"; import type { ThreadListFilters } from "../../persistence/mobile-preferences"; import { appAtomRegistry } from "../../state/atom-registry"; import { useProjects } from "../../state/entities"; +import { useThreadCwd } from "../../state/use-selected-thread-worktree"; import { environmentThreadShells } from "../../state/threads"; import { mobilePreferencesAtom } from "../../state/preferences"; import { @@ -66,13 +61,23 @@ import { parseActiveThreadPath, useHardwareKeyboardCommand, } from "../keyboard/hardwareKeyboardCommands"; +import { useAndroidControlSizing } from "../../components/ui/useAndroidControlSizing"; +import { useEnabledNavigationTabs } from "../workspace/navigation-tabs"; +import { FLOATING_TABS, floatingTabsMetrics } from "../workspace/floating-workspace-tabs"; import { AndroidHomeFabLayout } from "../home/AndroidHomeFab"; import { AndroidWorkspaceNavigation, + FloatingWorkspaceTabs, ANDROID_WORKSPACE_RAIL_WIDTH, } from "../workspace/AndroidWorkspaceNavigation"; import { AndroidWorkspaceSidebar } from "../workspace/AndroidWorkspaceSidebar"; -import { useAndroidWorkspaceSelection } from "../workspace/useAndroidWorkspaceSelection"; +import { + selectWorkspaceDetail, + type WorkspaceDetail, + type WorkspaceDetailSheet, +} from "../workspace/workspace-detail-selection"; +import { startOpeningDetail } from "../workspace/useSelectWorkspaceDetail"; +import { useWorkspaceTabs } from "../workspace/WorkspaceTabsContext"; import { HomeListOptionsProvider } from "../home/home-list-options"; import { newTaskDestination } from "../threads/new-task-project-selection"; import { usePendingTaskListActions } from "../home/usePendingTaskListActions"; @@ -93,66 +98,22 @@ import { import { useNativeLayoutMetrics } from "../../native/native-layout-metrics"; import { AndroidHingeObserver } from "../../native/AndroidHingeObserver"; import { WindowHingeContext } from "../../native/window-hinge-context"; +import { useAndroidWorkspaceRoot } from "../workspace/AndroidWorkspaceTabsProvider"; +import { openSettings } from "../settings/settings-navigation"; +import { dispatchRootStackReset, rootStackState } from "../../lib/root-stack-reset"; +import { + currentWorkspaceSelections, + workspaceSelectionCheck, +} from "../workspace/workspace-selection-store"; +import { + workspaceTabColumns, + workspaceTabNavigationState, +} from "../workspace/workspace-tab-navigation"; +import type { WorkspaceTab } from "../workspace/workspace-tabs-state"; +import { workspaceRoutesOf } from "./workspace-overlay-routes"; +import { SettingsWorkspaceLayout } from "../settings/SettingsWorkspaceLayout"; -interface AdaptiveWorkspaceContextValue { - readonly layout: Layout; - readonly panes: WorkspacePaneLayout; - readonly fileInspector: FileInspectorPaneLayout; - readonly primarySidebarSearchQuery: string; - readonly startNewTask: () => void; - readonly deferThreadSelectionUntil: (operation: Promise) => void; - readonly selectThread: (thread: EnvironmentThreadShell) => void; - readonly selectThreadRoute: (params: ReactNavigation.RootParamList["Thread"]) => void; - readonly activateAuxiliaryPaneRole: (role: WorkspaceAuxiliaryPaneRole) => () => void; - readonly registerWorkspaceInspector: (render: () => ReactNode) => () => void; - readonly setPrimarySidebarSearchQuery: (query: string) => void; - readonly showAuxiliaryPane: (role: WorkspaceAuxiliaryPaneRole) => void; - readonly toggleAuxiliaryPane: () => void; - readonly togglePrimarySidebar: () => void; - readonly setAuxiliaryPaneWidth: (width: number) => void; - /** - * Android split view while the thread composer has the soft keyboard: the - * sidebar and rail step aside and the thread header drops to one line. - */ - readonly composerKeyboardActive: boolean; - /** The thread composer reports its focus so the layout can make room for typing. */ - readonly setComposerEditing: (editing: boolean) => void; -} - -const compactLayout = deriveLayout({ width: 0, height: 0 }); -const compactPanes = deriveWorkspacePaneLayout({ - layout: compactLayout, - viewportWidth: 0, - primarySidebarPreferredVisible: true, - auxiliaryPanePreferredVisible: true, -}); -const compactFileInspector = deriveFileInspectorPaneLayout({ - layout: compactLayout, - viewportWidth: 0, -}); -const AdaptiveWorkspaceContext = createContext({ - layout: compactLayout, - panes: compactPanes, - fileInspector: compactFileInspector, - primarySidebarSearchQuery: "", - startNewTask: () => undefined, - deferThreadSelectionUntil: () => undefined, - selectThread: () => undefined, - selectThreadRoute: () => undefined, - activateAuxiliaryPaneRole: () => () => undefined, - registerWorkspaceInspector: () => () => undefined, - setPrimarySidebarSearchQuery: () => undefined, - showAuxiliaryPane: () => undefined, - toggleAuxiliaryPane: () => undefined, - togglePrimarySidebar: () => undefined, - setAuxiliaryPaneWidth: () => undefined, - composerKeyboardActive: false, - setComposerEditing: () => undefined, -}); - -export function useAdaptiveWorkspaceLayout(): AdaptiveWorkspaceContextValue { - return use(AdaptiveWorkspaceContext); -} +export { useAdaptiveWorkspaceLayout }; export function useAdaptiveWorkspacePaneRole(role: WorkspaceAuxiliaryPaneRole) { const { activateAuxiliaryPaneRole } = useAdaptiveWorkspaceLayout(); @@ -160,16 +121,7 @@ export function useAdaptiveWorkspacePaneRole(role: WorkspaceAuxiliaryPaneRole) { useFocusEffect(() => activateAuxiliaryPaneRole(role)); } -/** - * The column renders BESIDE the navigator — outside any screen — so the - * registering screen's navigation and route contexts are captured here and - * re-provided around the portal content. - * - * Registration is FOCUS-scoped, driven by navigation events rather than the - * screen's own render cycle: react-native-screens freezes blurred screens, so a - * cleanup that depends on the blurred subtree re-rendering never runs and would - * leak the pane into the next route. - */ +/** Capture inspector navigation contexts. Register on focus events because frozen blurred screens may never clean up. */ export function useRegisterWorkspaceInspector(render: (() => ReactNode) | undefined) { const { registerWorkspaceInspector } = useAdaptiveWorkspaceLayout(); const navigation = use(NavigationContext); @@ -189,8 +141,6 @@ export function useRegisterWorkspaceInspector(render: (() => ReactNode) | undefi const focusedRef = useRef(false); const deactivateRef = useRef<(() => void) | null>(null); - // An effect event reads this render's pane without making the focus - // subscription re-run (and deactivate) every time the pane closure changes. const syncRegistration = useEffectEvent(() => { if (!focusedRef.current || wrappedRender === undefined) { deactivateRef.current?.(); @@ -199,34 +149,45 @@ export function useRegisterWorkspaceInspector(render: (() => ReactNode) | undefi deactivateRef.current = registerWorkspaceInspector(wrappedRender); }); - useFocusEffect(() => { - focusedRef.current = true; - syncRegistration(); - return () => { + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- Navigation focus events own the inspector registration lifetime. + useEffect(() => { + if (navigation === undefined) return; + const focus = () => { + if (focusedRef.current) return; + focusedRef.current = true; + syncRegistration(); + }; + const blur = () => { focusedRef.current = false; syncRegistration(); }; - }); + if (navigation.isFocused()) focus(); + const unsubscribeFocus = navigation.addListener("focus", focus); + const unsubscribeBlur = navigation.addListener("blur", blur); + return () => { + unsubscribeFocus(); + unsubscribeBlur(); + focusedRef.current = false; + deactivateRef.current?.(); + deactivateRef.current = null; + }; + }, [navigation]); + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- Changed pane content replaces the focused inspector registration. useEffect(() => { if (focusedRef.current) { syncRegistration(); } + // oxlint-disable-next-line react/exhaustive-effect-dependencies -- Changed pane content replaces its existing native workspace registration. }, [wrappedRender]); - - useEffect( - () => () => { - deactivateRef.current?.(); - deactivateRef.current = null; - }, - [], - ); } export function AdaptiveWorkspaceLayout(props: { readonly children: ReactNode; readonly pathname: string; readonly workspaceRouteKey: string | undefined; + readonly workspaceRouteName: string | undefined; + readonly workspaceRouteKeys: ReadonlyArray; readonly selectedPullRequestKey?: string | null; }) { const preferencesResult = useAtomValue(mobilePreferencesAtom); @@ -253,21 +214,28 @@ function AdaptiveWorkspaceLayoutContent( readonly children: ReactNode; readonly pathname: string; readonly workspaceRouteKey: string | undefined; + readonly workspaceRouteName: string | undefined; + readonly workspaceRouteKeys: ReadonlyArray; readonly selectedPullRequestKey?: string | null; } & { readonly projectGroupingMode: SidebarProjectGroupingMode; readonly savedThreadListFilters?: ThreadListFilters | undefined; }, ) { + const floatingTabsEnabled = useAndroidFloatingTabs(); const projectGroupingMode = props.projectGroupingMode; const nativeWorkspace = use(NativeWorkspaceModeContext); + const usesPresentationHost = use(WorkspacePresentationHostContext); const windowDimensions = useWindowDimensions(); const nativeMetrics = useNativeLayoutMetrics(); const { width: viewportWidth, height } = nativeMetrics ?? windowDimensions; const pathname = props.pathname; - // Android's Settings tab is a full workspace page: the rail stays, the sidebar and - // auxiliary panes hide. - const workspacePage = Platform.OS === "android" && pathname.startsWith("/settings"); + const workspace = useWorkspaceTabs(); + // Settings and Usage occupy the workspace rather than a list/detail pair. + const androidSettingsOpen = useAndroidWorkspaceRoot()?.settingsOpen ?? false; + const safeAreaInsets = useSafeAreaInsets(); + const workspacePage = + Platform.OS === "android" && (androidSettingsOpen || workspace?.state.selectedTab === "usage"); const navigation = useNavigation(); const activeRoleOwner = useRef(null); const [primarySidebarPreferredVisible, setPrimarySidebarPreferredVisible] = useState(true); @@ -288,9 +256,34 @@ function AdaptiveWorkspaceLayoutContent( // re-renders on any layout state change, and the inspector registration then loops: each // re-register re-renders its screen, which hands over a new inspector renderer. const baseLayout = useMemo( - () => deriveLayout({ width: viewportWidth, height, nativeMetrics }), - [height, viewportWidth, nativeMetrics], + () => deriveLayout({ width: viewportWidth, height, nativeMetrics, nativeWorkspace }), + [height, viewportWidth, nativeMetrics, nativeWorkspace], ); + // The overlay sidebar closes when a page opens from it, and stays open on a list or on the + // page a tab switch opened (`keepOpenFor`, set by that switch). + const [overlaySidebar, setOverlaySidebar] = useState({ + active: baseLayout.primarySidebarOverlaysContent, + pathname, + visible: isWorkspaceListPath(pathname), + keepOpenFor: null as string | null, + }); + if ( + overlaySidebar.active !== baseLayout.primarySidebarOverlaysContent || + (overlaySidebar.active && overlaySidebar.pathname !== pathname) + ) { + setOverlaySidebar({ + active: baseLayout.primarySidebarOverlaysContent, + pathname, + visible: + isWorkspaceListPath(pathname) || + (overlaySidebar.keepOpenFor !== null && + overlaySidebar.keepOpenFor === props.workspaceRouteKey), + keepOpenFor: null, + }); + } + const preferredSidebarVisible = baseLayout.primarySidebarOverlaysContent + ? overlaySidebar.visible + : primarySidebarPreferredVisible; const primarySidebarPinned = isPrimarySidebarPinned({ pathname, nativeWorkspace, @@ -298,18 +291,20 @@ function AdaptiveWorkspaceLayoutContent( }); const [composerEditing, setComposerEditing] = useState(false); const softKeyboardVisible = useKeyboardState((state) => state.isVisible); - // Keyed on the soft keyboard, not focus alone: a hardware keyboard leaves room - // for the sidebar, and Back closes the keyboard while the editor keeps focus. - // Deferred because the thread composer follows the keyboard only once its own render of this - // keyboard event commits; re-laying out the workspace in that commit held it behind the - // keyboard until the feed had reflowed. + // Keyed on the soft keyboard, not focus: a hardware keyboard leaves room for the sidebar, and + // Back closes the keyboard while the editor keeps focus. Deferred so the composer commits its + // keyboard render first; relaying out in the same commit held it behind the keyboard. const composerKeyboardActive = useDeferredValue( Platform.OS === "android" && baseLayout.usesSplitView && composerEditing && softKeyboardVisible, ); const showPrimarySidebar = !workspacePage && - (primarySidebarPinned || (primarySidebarPreferredVisible && !composerKeyboardActive)); - const shouldRenderNavigationRail = Platform.OS === "android" && baseLayout.usesSplitView; + (primarySidebarPinned || (preferredSidebarVisible && !composerKeyboardActive)); + const shouldRenderNavigationRail = + Platform.OS === "android" && baseLayout.usesSplitView && !floatingTabsEnabled; + const enabledTabs = useEnabledNavigationTabs(); + const { scale, fabSize } = useAndroidControlSizing(); + const floatingTabs = floatingTabsMetrics(enabledTabs.length + 1, scale, fabSize); const navigationRailWidth = shouldRenderNavigationRail && (showPrimarySidebar || workspacePage) ? ANDROID_WORKSPACE_RAIL_WIDTH @@ -320,16 +315,31 @@ function AdaptiveWorkspaceLayoutContent( setHinge(next); setWindowHinge(nextWindow); }; - const layout = useMemo( - () => - alignListPaneToHinge({ - layout: baseLayout, - hinge, - viewportWidth, - leadingWidth: navigationRailWidth, - }), - [baseLayout, hinge, navigationRailWidth, viewportWidth], - ); + const layout = useMemo(() => { + const aligned = alignListPaneToHinge({ + layout: baseLayout, + hinge, + viewportWidth, + leadingWidth: navigationRailWidth, + }); + if ( + !floatingTabsEnabled || + !aligned.usesSplitView || + aligned.listPaneGap !== undefined || + aligned.listPaneWidth === null || + aligned.listPaneWidth >= floatingTabs.row || + viewportWidth - floatingTabs.row < 320 + ) + return aligned; + return { ...aligned, listPaneWidth: floatingTabs.row }; + }, [ + baseLayout, + hinge, + navigationRailWidth, + viewportWidth, + floatingTabs.row, + floatingTabsEnabled, + ]); const width = viewportWidth - navigationRailWidth; // The sidebar stays mounted under a workspace page, so its list is ready on the way back. const shouldRenderPrimarySidebar = layout.usesSplitView; @@ -340,7 +350,7 @@ function AdaptiveWorkspaceLayoutContent( viewportWidth: width, preferredWidth: fileInspectorPreferredWidth ?? undefined, reservedLeadingWidth: - shouldRenderPrimarySidebar && showPrimarySidebar + shouldRenderPrimarySidebar && showPrimarySidebar && !layout.primarySidebarOverlaysContent ? (layout.listPaneWidth ?? 0) + (layout.listPaneGap ?? 0) : 0, }), @@ -362,6 +372,7 @@ function AdaptiveWorkspaceLayoutContent( deriveWorkspacePaneLayout({ layout, viewportWidth: width, + nativeWorkspace, primarySidebarPreferredVisible: showPrimarySidebar, auxiliaryPanePreferredVisible, auxiliaryPaneRole, @@ -372,6 +383,7 @@ function AdaptiveWorkspaceLayoutContent( auxiliaryPaneRole, auxiliaryPanePreferredWidth, layout, + nativeWorkspace, showPrimarySidebar, width, ], @@ -379,16 +391,52 @@ function AdaptiveWorkspaceLayoutContent( const activeThread = parseActiveThreadPath(pathname); const environmentId = activeThread?.environmentId ?? null; const threadId = activeThread?.threadId ?? null; - const selectedThreadKey = (() => { + const selectedThreadRef = (() => { if (environmentId === null || threadId === null) { return null; } try { - return scopedThreadKey(EnvironmentId.make(environmentId), ThreadId.make(threadId)); + return { + environmentId: EnvironmentId.make(environmentId), + threadId: ThreadId.make(threadId), + }; } catch { return null; } })(); + const selectedThreadKey = + selectedThreadRef === null + ? null + : scopedThreadKey(selectedThreadRef.environmentId, selectedThreadRef.threadId); + const isFilesRoute = props.workspaceRouteName === "ThreadFiles"; + // Same resolution the Files screen uses: without a cwd it shows "Files unavailable" and + // registers no inspector, so revealing would only hide the sidebar beside that screen. + const filesCwd = useThreadCwd(isFilesRoute && fileInspector.supported ? selectedThreadRef : null); + // Opening a review or the files route reveals its inspector once per route and thread. + // Routes still on the stack remember their reveal, so going back to one keeps the user's choice. + const revealsInspector = + props.workspaceRouteName === "ThreadReview" || (isFilesRoute && filesCwd !== null); + const [revealedInspectors, setRevealedInspectors] = useState>( + () => new Map(), + ); + if ( + revealsInspector && + props.workspaceRouteKey !== undefined && + selectedThreadKey !== null && + revealedInspectors.get(props.workspaceRouteKey) !== selectedThreadKey + ) { + const next = new Map(); + for (const routeKey of props.workspaceRouteKeys) { + const revealedThreadKey = revealedInspectors.get(routeKey); + if (revealedThreadKey !== undefined) { + next.set(routeKey, revealedThreadKey); + } + } + next.set(props.workspaceRouteKey, selectedThreadKey); + setRevealedInspectors(next); + setFocusedAuxiliaryPaneRole("inspector"); + setFileInspectorPreferredVisible(true); + } const [workspaceInspector, setWorkspaceInspector] = useState<{ readonly render: () => ReactNode; readonly active: boolean; @@ -400,8 +448,7 @@ function AdaptiveWorkspaceLayoutContent( setWorkspaceInspector({ render, active: true }); return () => { - // During a push/replace the outgoing screen deactivates AFTER the - // incoming screen registered — only the current owner may deactivate. + // Outgoing screens deactivate after incoming registration; only the current owner may deactivate. if (workspaceInspectorOwner.current !== owner) { return; } @@ -424,6 +471,13 @@ function AdaptiveWorkspaceLayoutContent( setFocusedAuxiliaryPaneRole(null); }; }; + const setPrimarySidebarVisible = (visible: boolean) => { + if (layout.primarySidebarOverlaysContent) { + setOverlaySidebar((current) => ({ ...current, visible })); + } else { + setPrimarySidebarPreferredVisible(visible); + } + }; const togglePrimarySidebar = () => { if (primarySidebarPinned) { return; @@ -439,14 +493,14 @@ function AdaptiveWorkspaceLayoutContent( setPrimarySidebarPreferredVisible(true); return; } - setPrimarySidebarPreferredVisible((current) => !current); + setPrimarySidebarVisible(!preferredSidebarVisible); }; const revealPrimarySidebar = () => { if (composerKeyboardActive) void KeyboardController.dismiss(); if (panes.primarySidebarSuppressedByAuxiliary) { setFileInspectorPreferredVisible(false); } - setPrimarySidebarPreferredVisible(true); + setPrimarySidebarVisible(true); }; const handleToggleSidebarCommand = () => { togglePrimarySidebar(); @@ -490,93 +544,89 @@ function AdaptiveWorkspaceLayoutContent( } setSupplementaryPanePreferredWidth(nextWidth); }; - const handleOpenSettings = () => { - navigation.navigate("SettingsSheet", { - screen: "SettingsContent", - params: { screen: "Settings" }, - }); + /** + * The one way to open a workspace tab: replaces the workspace with the tab's list and, when the + * window has columns, the page it last showed, keeping any sheet on top. An overlay sidebar + * stays open over that page. + */ + const openWorkspaceTab = ( + tab: WorkspaceTab | "settings", + options?: { readonly columns?: boolean }, + ) => { + const state = rootStackState(navigation); + if (!state) return; + const { workspace, overlays } = workspaceRoutesOf(state.routes.slice(0, state.index + 1)); + const next = workspaceTabNavigationState( + { ...state, routes: workspace }, + tab, + currentWorkspaceSelections(), + { + columns: workspaceTabColumns(Platform.OS, tab, options?.columns ?? layout.usesSplitView), + check: workspaceSelectionCheck, + overlays, + }, + ); + if (layout.primarySidebarOverlaysContent) { + const opened = next.routes.at(-1 - overlays.length)?.key ?? null; + setOverlaySidebar((current) => ({ ...current, visible: true, keepOpenFor: opened })); + } + dispatchRootStackReset(navigation, state, next); }; + const handleOpenSettings = () => openWorkspaceTab("settings"); - const selectAndroidWorkspace = useAndroidWorkspaceSelection(); - const deferredThreadSelection = useMemo(() => createDeferredNavigation(), []); - function handleSelectThreadRoute(params: ReactNavigation.RootParamList["Thread"]) { - deferredThreadSelection.run(() => applyThreadRouteSelection(params)); - } - function applyThreadRouteSelection(params: ReactNavigation.RootParamList["Thread"]) { - if (Platform.OS === "android") { + /** The one way to show a page in the detail column; see `selectWorkspaceDetail`. */ + function handleSelectDetail(detail: WorkspaceDetail, sheet?: WorkspaceDetailSheet) { + threadSelectionDeferral.run(() => { + if (Platform.OS === "android") Keyboard.dismiss(); setFileInspectorPreferredVisible(false); - selectAndroidWorkspace({ name: "Thread", params }); - return; - } - const navigationAction = resolveThreadSelectionNavigationAction({ - usesSplitView: layout.usesSplitView, - pathname, - workspaceRouteName: navigation - .getState() - ?.routes.find((route) => route.key === props.workspaceRouteKey)?.name, + if (layout.primarySidebarOverlaysContent) setPrimarySidebarVisible(false); + workspace?.dispatch({ + type: "select", + tab: detail.name === "Thread" ? "threads" : "pullRequests", + }); + startOpeningDetail(detail); + navigation.dispatch(selectWorkspaceDetail(detail, sheet)); }); - const overlayState = resolveThreadSelectionOverlayState({ - state: navigation.getState(), - workspaceRouteKey: props.workspaceRouteKey, - action: navigationAction, - params, - }); - if (overlayState !== null) { - setFileInspectorPreferredVisible(false); - navigation.dispatch(CommonActions.reset(overlayState)); - return; - } - if (navigationAction === "set-params") { - setFileInspectorPreferredVisible(false); - const state = navigation.getState(); - const route = state?.routes.find((candidate) => candidate.key === props.workspaceRouteKey); - if (route?.name === "Thread") { - navigation.dispatch({ - ...CommonActions.setParams({ - environmentId: undefined, - threadId: undefined, - draft: undefined, - ...params, - }), - source: route.key, - }); - } else { - navigation.navigate("Thread", params); - } - return; - } - if (navigationAction === "replace") { - setFileInspectorPreferredVisible(false); - navigation.dispatch(StackActions.replace("Thread", params)); - return; - } - navigation.navigate("Thread", params); } + const handleSelectThreadRoute = (params: ReactNavigation.RootParamList["Thread"]) => + handleSelectDetail({ name: "Thread", params }); const projects = useProjects(); + const compactAndroidSettings = + Platform.OS === "android" && androidSettingsOpen && !layout.usesSplitView; + // Reads the open page when pressed, so the layout context doesn't change on every navigation. const handleStartNewTask = () => { - const thread = appAtomRegistry - .get(environmentThreadShells.navigationThreadShellsAtom) - .find((candidate) => candidate.environmentId === environmentId && candidate.id === threadId); - const currentRoute = navigation - .getState() - ?.routes.find((route) => route.key === props.workspaceRouteKey); - const draft = + const state = rootStackState(navigation); + const currentRoute = workspaceRoutesOf( + state?.routes.slice(0, state.index + 1) ?? [], + ).workspace.at(-1); + const params = currentRoute?.name === "Thread" - ? (currentRoute.params as ReactNavigation.RootParamList["Thread"])?.draft + ? (currentRoute.params as ReactNavigation.RootParamList["Thread"]) : undefined; const first = (value: string | string[] | undefined) => Array.isArray(value) ? value[0] : value; - const draftEnvironmentId = first(draft?.environmentId); - const draftProjectId = first(draft?.projectId); - const currentProject = thread - ? { environmentId: thread.environmentId, id: thread.projectId } - : projects.find( - (project) => - project.environmentId === draftEnvironmentId && project.id === draftProjectId, - ); + const environmentId = first(params?.environmentId); + const threadId = first(params?.threadId); + // The full index, not the sidebar list: subagent and archived threads are current threads too. + const projectId = + environmentId && threadId + ? appAtomRegistry + .get( + environmentThreadShells.environmentThreadIndexAtom(EnvironmentId.make(environmentId)), + ) + .get(ThreadId.make(threadId))?.projectId + : undefined; + const preferences = appAtomRegistry.get(mobilePreferencesAtom); + const saved = AsyncResult.isSuccess(preferences) ? preferences.value : undefined; handleSelectThreadRoute( - newTaskDestination(layout.usesSplitView, projects, currentProject, uuidv4()), + newTaskDestination({ + projects, + requestId: uuidv4(), + useLastProject: saved?.useLastProjectForNewThreads, + currentProject: environmentId && projectId ? { environmentId, projectId } : undefined, + lastProject: saved?.lastThreadProject, + }), ); }; @@ -585,13 +635,9 @@ function AdaptiveWorkspaceLayoutContent( return true; }); - // Minted here (root stack navigation) so the sidebar pane stays free of - // navigation hooks — on iOS it renders inside an independent nav tree. + // Create at root: the iOS sidebar renders in an independent navigation tree. const handleOpenEnvironmentSettings = () => { - navigation.navigate("SettingsSheet", { - screen: "SettingsContent", - params: { screen: "SettingsEnvironments" }, - }); + openSettings(navigation, "SettingsEnvironments"); }; const handleOpenThreadPullRequests = useOpenThreadPullRequests(); @@ -625,8 +671,10 @@ function AdaptiveWorkspaceLayoutContent( workspaceInspector !== null && workspaceInspector.active && panes.auxiliaryPaneVisible ? (panes.auxiliaryPaneWidth ?? 0) : 0; + // Android's split content is a rounded card: keep it off the screen edge like the list card. + const contentEndGap = Platform.OS === "android" && layout.usesSplitView ? 4 : 0; const contentTargetWidth = layout.usesSplitView - ? Math.max(0, panes.contentPaneWidth - inspectorColumnTargetWidth) + ? Math.max(0, panes.contentPaneWidth - inspectorColumnTargetWidth - contentEndGap) : null; const [listPaneSizing, setListPaneSizing] = useState({ viewportWidth, @@ -656,8 +704,7 @@ function AdaptiveWorkspaceLayoutContent( workspacePage, sidebarVisible: panes.primarySidebarVisible, listPaneTarget: layout.listPaneWidth, - // While a hinge resizes the list, its width follows the pane edge within this span. A - // retarget mid-animation widens the span, since the edge is still somewhere inside it. + // Retargets widen the list-width span because the animated hinge edge may still be inside it. listPaneFloor: resizingSidebar ? Math.min(listPaneSizing.listPaneFloor ?? 0, layout.listPaneWidth ?? 0) : layout.listPaneWidth, @@ -719,6 +766,7 @@ function AdaptiveWorkspaceLayoutContent( ); const renderedRailWidth = useSharedValue(navigationRailWidth); const leavingWorkspacePage = useRef(false); + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- animates the Reanimated rail and sidebar width shared values toward the layout's targets useEffect(() => { if (nativeWorkspace) return; renderedRailWidth.set(withTiming(navigationRailWidth, WORKSPACE_PANE_TIMING)); @@ -763,13 +811,14 @@ function AdaptiveWorkspaceLayoutContent( })); const sidebarAnimatedStyle = useAnimatedStyle(() => ({ // Fading a UIKit glass ancestor can leave remounted header effects missing. - opacity: Platform.OS === "ios" ? 1 : Math.min(1, renderedSidebarWidth.value / 80), + opacity: + Platform.OS === "ios" || floatingTabsEnabled + ? 1 + : Math.min(1, renderedSidebarWidth.value / 80), width: renderedSidebarWidth.value, })); - // The navigator (native header + markdown feed) lays out ONCE per pane toggle - // instead of re-measuring on every animation frame — the animating columns - // merely clip/reveal it over a matching background. + // Clip the navigator at its settled width so native headers and markdown reflow only once per pane toggle. const renderedInspectorWidth = useSharedValue(inspectorColumnTargetWidth); const renderedContentWidth = useDerivedValue(() => Math.max( @@ -788,24 +837,43 @@ function AdaptiveWorkspaceLayoutContent( }); }; + // Rotating flips the overlay; until the new size reaches JS, predict the reset above. + const sidebarOverRotates = + nativeWorkspace && nativeMetrics?.hasHinge === true && layout.usesSplitView; + // The current orientation's panes already account for an inspector that needs the sidebar's room. + const sidebarInLandscape = baseLayout.primarySidebarOverlaysContent + ? primarySidebarPinned || primarySidebarPreferredVisible + : panes.primarySidebarVisible; + const sidebarInPortrait = + primarySidebarPinned || + (baseLayout.primarySidebarOverlaysContent + ? overlaySidebar.visible + : isWorkspaceListPath(pathname)); + const sidebarByOrientation = useMemo( + () => + sidebarOverRotates ? { landscape: sidebarInLandscape, portrait: sidebarInPortrait } : null, + [sidebarInLandscape, sidebarInPortrait, sidebarOverRotates], + ); + const contextValue = { layout, panes, fileInspector, primarySidebarSearchQuery, startNewTask: handleStartNewTask, - deferThreadSelectionUntil: deferredThreadSelection.waitFor, - selectThread: handleSelectThread, - selectThreadRoute: handleSelectThreadRoute, + selectDetail: handleSelectDetail, activateAuxiliaryPaneRole, registerWorkspaceInspector, setPrimarySidebarSearchQuery, showAuxiliaryPane, toggleAuxiliaryPane, togglePrimarySidebar, + setPrimarySidebarVisible, + openWorkspaceTab, setAuxiliaryPaneWidth, composerKeyboardActive, setComposerEditing, + sidebarByOrientation, }; if (nativeWorkspace) { @@ -824,135 +892,186 @@ function AdaptiveWorkspaceLayoutContent( ); } - return ( - ( + - - - - - {shouldRenderNavigationRail ? ( - - ) : null} - {shouldRenderPrimarySidebar && layout.listPaneWidth !== null ? ( - + {shouldRenderNavigationRail ? ( + + ) : null} + {shouldRenderPrimarySidebar && layout.listPaneWidth !== null ? ( + + + ( + + )} + > + - - ( - - )} - > - - - - - - - - + + + + + + {/* Keep the pill under the content throughout the sidebar's clipping animation. */} + {floatingTabsEnabled && !workspacePage ? ( + ) : null} - + + ) : null} + + + {/* Android holds the content still, so its floating controls keep its width. */} + + - - {/* Android holds the content still, so its floating controls keep its width. */} - - - {props.children} - - - - - - {shouldRenderNavigationRail && navigationRailWidth > 0 ? ( - // The rail reserves its slot above and draws over the panes, so it can widen over - // the list in place. It takes the whole workspace only while it is open. - - + {children} + + + {floatingTabsEnabled && + (compactAndroidSettings || (layout.usesSplitView && workspacePage)) ? ( + - - ) : null} - + ) : compactAndroidSettings ? ( + + ) : null} + + + + + + {shouldRenderNavigationRail && navigationRailWidth > 0 ? ( + // The rail reserves its slot above and draws over the panes, so it can widen over + // the list in place. It takes the whole workspace only while it is open. + + + + ) : null} + + ); + + return ( + + + + {usesPresentationHost ? ( + + {props.children} + + ) : ( + renderColumns(props.children) + )} diff --git a/apps/mobile/src/features/layout/WorkspaceEmptyDetail.tsx b/apps/mobile/src/features/layout/WorkspaceEmptyDetail.tsx index d719c85525d13..aa33effa93693 100644 --- a/apps/mobile/src/features/layout/WorkspaceEmptyDetail.tsx +++ b/apps/mobile/src/features/layout/WorkspaceEmptyDetail.tsx @@ -8,11 +8,13 @@ import { EmptyState } from "../../components/ui/EmptyState"; import type { WorkspaceTab } from "../workspace/workspace-tabs-state"; export function WorkspaceEmptyDetail(props: { - readonly tab?: WorkspaceTab; + readonly tab?: WorkspaceTab | "settings"; readonly onStartNewTask?: () => void; readonly onAddConnection?: () => void; }) { const pullRequests = props.tab === "pullRequests"; + const settings = props.tab === "settings"; + if (props.tab === "usage") return ; return ( - {pullRequests ? "Select a pull request" : "Select a thread"} + {settings + ? "Select a setting" + : pullRequests + ? "Select a pull request" + : "Select a thread"} - {pullRequests - ? "Choose a pull request from the sidebar to review it." - : Platform.OS === "android" - ? "Choose a thread from the sidebar or start a new thread." - : "Choose a thread from the sidebar or start a new task."} + {settings + ? "Choose a page from the sidebar." + : pullRequests + ? "Choose a pull request from the sidebar to review it." + : Platform.OS === "android" + ? "Choose a thread from the sidebar or start a new thread." + : "Choose a thread from the sidebar or start a new task."} - {props.onStartNewTask && !pullRequests ? ( + {props.onStartNewTask && !pullRequests && !settings ? ( Platform.OS === "android" ? ( ) : ( diff --git a/apps/mobile/src/features/layout/adaptive-workspace-context.ts b/apps/mobile/src/features/layout/adaptive-workspace-context.ts new file mode 100644 index 0000000000000..a22459e6ecdb4 --- /dev/null +++ b/apps/mobile/src/features/layout/adaptive-workspace-context.ts @@ -0,0 +1,85 @@ +import type { WorkspaceTab } from "../workspace/workspace-tabs-state"; +import { createContext, use, type ReactNode } from "react"; +import type { + WorkspaceDetail, + WorkspaceDetailSheet, +} from "../workspace/workspace-detail-selection"; +import { + deriveFileInspectorPaneLayout, + deriveLayout, + deriveWorkspacePaneLayout, + type FileInspectorPaneLayout, + type Layout, + type WorkspaceAuxiliaryPaneRole, + type WorkspacePaneLayout, +} from "../../lib/layout"; + +interface AdaptiveWorkspaceContextValue { + readonly layout: Layout; + readonly panes: WorkspacePaneLayout; + readonly fileInspector: FileInspectorPaneLayout; + readonly primarySidebarSearchQuery: string; + readonly startNewTask: () => void; + /** Use `useSelectWorkspaceDetail`, which also works outside the layout. */ + readonly selectDetail?: (detail: WorkspaceDetail, sheet?: WorkspaceDetailSheet) => void; + readonly activateAuxiliaryPaneRole: (role: WorkspaceAuxiliaryPaneRole) => () => void; + readonly registerWorkspaceInspector: (render: () => ReactNode) => () => void; + readonly setPrimarySidebarSearchQuery: (query: string) => void; + readonly showAuxiliaryPane: (role: WorkspaceAuxiliaryPaneRole) => void; + readonly toggleAuxiliaryPane: () => void; + readonly togglePrimarySidebar: () => void; + readonly setPrimarySidebarVisible: (visible: boolean) => void; + /** Opens a workspace tab with its list and, with columns, the page it last showed. */ + readonly openWorkspaceTab: ( + tab: WorkspaceTab | "settings", + options?: { readonly columns?: boolean }, + ) => void; + readonly setAuxiliaryPaneWidth: (width: number) => void; + /** + * Android split view while the thread composer has the soft keyboard: the + * sidebar and rail step aside and the thread header drops to one line. + */ + readonly composerKeyboardActive: boolean; + /** + * Whether the sidebar shows in each orientation, where it floats over the content in portrait + * (the unfolded Duo). The native split switches between them as a rotation starts. + */ + readonly sidebarByOrientation: { readonly landscape: boolean; readonly portrait: boolean } | null; + /** The thread composer reports its focus so the layout can make room for typing. */ + readonly setComposerEditing: (editing: boolean) => void; +} + +const compactLayout = deriveLayout({ width: 0, height: 0 }); +const compactPanes = deriveWorkspacePaneLayout({ + layout: compactLayout, + viewportWidth: 0, + primarySidebarPreferredVisible: true, + auxiliaryPanePreferredVisible: true, +}); +const compactFileInspector = deriveFileInspectorPaneLayout({ + layout: compactLayout, + viewportWidth: 0, +}); +export const AdaptiveWorkspaceContext = createContext({ + layout: compactLayout, + panes: compactPanes, + fileInspector: compactFileInspector, + primarySidebarSearchQuery: "", + startNewTask: () => undefined, + activateAuxiliaryPaneRole: () => () => undefined, + registerWorkspaceInspector: () => () => undefined, + setPrimarySidebarSearchQuery: () => undefined, + showAuxiliaryPane: () => undefined, + toggleAuxiliaryPane: () => undefined, + togglePrimarySidebar: () => undefined, + setPrimarySidebarVisible: () => undefined, + openWorkspaceTab: () => undefined, + setAuxiliaryPaneWidth: () => undefined, + composerKeyboardActive: false, + sidebarByOrientation: null, + setComposerEditing: () => undefined, +}); + +export function useAdaptiveWorkspaceLayout(): AdaptiveWorkspaceContextValue { + return use(AdaptiveWorkspaceContext); +} diff --git a/apps/mobile/src/features/layout/createWorkspaceStackNavigator.android.tsx b/apps/mobile/src/features/layout/createWorkspaceStackNavigator.android.tsx new file mode 100644 index 0000000000000..765b23243798b --- /dev/null +++ b/apps/mobile/src/features/layout/createWorkspaceStackNavigator.android.tsx @@ -0,0 +1,152 @@ +import { + createNavigatorFactory, + StackRouter, + useNavigationBuilder, + type NavigatorTypeBagBase, + type ParamListBase, + type StackActionHelpers, + type StackNavigationState, + type StackRouterOptions, + type StaticConfig, + type TypedNavigator, +} from "@react-navigation/native"; +import { + NativeStackView, + type NativeStackNavigationEventMap, + type NativeStackNavigationOptions, + type NativeStackNavigatorProps, + type NativeStackTypeBag, +} from "@react-navigation/native-stack"; +import { use, type ComponentProps } from "react"; + +import { RoutedFormSheetContext } from "../../components/ui/RoutedFormSheetContext"; + +import { projectStackPresentation } from "../../native/workspace-stack-projection"; +import { + WorkspaceColumnsRendererContext, + WorkspacePresentationHostContext, +} from "./workspace-presentation-context"; + +type ViewProps = ComponentProps; +type Descriptor = ViewProps["descriptors"][string]; +type Route = ViewProps["state"]["routes"][number]; + +function WorkspaceStackView(props: ViewProps) { + const renderColumns = use(WorkspaceColumnsRendererContext); + if (!renderColumns) return ; + + const isOverlay = (route: Route) => { + const descriptor = props.descriptors[route.key] ?? props.describe(route, true); + const presentation = descriptor.options.presentation; + return presentation !== undefined && presentation !== "card"; + }; + const projection = projectStackPresentation(props.state, isOverlay); + const workspaceRoutes = projection.workspace; + const visibleRoute = workspaceRoutes.at(-1); + if (!visibleRoute) return ; + + const visibleDescriptor = props.descriptors[visibleRoute.key]!; + const baseRoute = { key: `${props.state.key}:workspace`, name: "Workspace" }; + const baseDescriptor: Descriptor = { + ...visibleDescriptor, + options: { headerShown: false, freezeOnBlur: false }, + render: () => + renderColumns( + !isOverlay(route)), + }} + />, + ), + }; + const routes = [baseRoute, ...projection.overlays]; + return ( + + ); +} + +function WorkspaceStackNavigator({ + id, + initialRouteName, + UNSTABLE_routeNamesChangeBehavior, + children, + layout, + screenListeners, + screenOptions, + screenLayout, + UNSTABLE_router, + ...rest +}: NativeStackNavigatorProps) { + const { state, describe, descriptors, navigation, NavigationContent } = useNavigationBuilder< + StackNavigationState, + StackRouterOptions, + StackActionHelpers, + NativeStackNavigationOptions, + NativeStackNavigationEventMap + >(StackRouter, { + id, + initialRouteName, + UNSTABLE_routeNamesChangeBehavior, + children, + layout, + screenListeners, + screenOptions, + screenLayout, + UNSTABLE_router, + }); + return ( + + + [ + key, + descriptor.options.presentation === "formSheet" + ? { + ...descriptor, + render: () => ( + {descriptor.render()} + ), + } + : descriptor, + ]), + )} + navigation={navigation} + /> + + + ); +} + +type WorkspaceTypeBag< + ParamList extends ParamListBase, + NavigatorID extends string | undefined, +> = Omit, "Navigator"> & { + Navigator: typeof WorkspaceStackNavigator; +}; + +export function createWorkspaceStackNavigator< + const ParamList extends ParamListBase, + const NavigatorID extends string | undefined = string | undefined, + const TypeBag extends NavigatorTypeBagBase = WorkspaceTypeBag, + const Config extends StaticConfig = StaticConfig, +>(config?: Config): TypedNavigator { + return createNavigatorFactory(WorkspaceStackNavigator)(config); +} diff --git a/apps/mobile/src/features/layout/createWorkspaceStackNavigator.ios.tsx b/apps/mobile/src/features/layout/createWorkspaceStackNavigator.ios.tsx index 262e0ac71676f..e2697f4e4d238 100644 --- a/apps/mobile/src/features/layout/createWorkspaceStackNavigator.ios.tsx +++ b/apps/mobile/src/features/layout/createWorkspaceStackNavigator.ios.tsx @@ -19,17 +19,23 @@ import { type NativeStackNavigatorProps, type NativeStackTypeBag, } from "@react-navigation/native-stack"; -import { use, useCallback, useEffect, useMemo, useRef, useState, type ComponentProps } from "react"; -import { View } from "react-native"; +import { Fragment, use, useEffect, useRef, useState, type ComponentProps } from "react"; +import { StyleSheet, useWindowDimensions, View } from "react-native"; import { Split, type SplitHostCommands } from "react-native-screens"; +import { SafeAreaView } from "react-native-safe-area-context"; +import { GestureHandlerRootView } from "react-native-gesture-handler"; import { EnvironmentId, ThreadId } from "@t3tools/contracts"; import { scopedThreadKey } from "../../lib/scopedEntities"; import { WorkspaceTabsProvider, useWorkspaceTabs } from "../workspace/WorkspaceTabsContext"; import { WorkspaceNativeTabs } from "../workspace/WorkspaceNativeTabs.ios"; -import { isDuoDevice } from "../../lib/device-type"; +import { workspaceUsesColumns } from "../workspace/workspace-tabs-state"; +import { isSettingsRoute, settingsOpenIn } from "../settings/settings-navigation"; +import { workspaceRoutesOf } from "./workspace-overlay-routes"; +import { setNativelyPoppingWorkspaceRoute } from "../workspace/workspace-detail-selection"; import { useDeviceType, useNativeLayoutMetrics } from "../../native/native-layout-metrics"; import { useAdaptiveWorkspaceLayout } from "./AdaptiveWorkspaceLayout"; +import { WorkspacePaneDivider } from "./workspace-pane-divider"; import { WorkspaceEmptyDetail } from "./WorkspaceEmptyDetail"; import { NativeColumnContent as ColumnContent } from "../../native/NativeColumnContent.ios"; import { @@ -55,6 +61,8 @@ import { NativePrimaryColumnContext, NativeWorkspaceInspectorContext, NativeWorkspaceModeContext, + WorkspaceSlotOptionsContext, + slotScreenOptions, } from "../../native/v5-workspace-context"; type ViewProps = ComponentProps; @@ -66,8 +74,12 @@ const isPullRequestRoute = (route: Route) => route.name === "PullRequestFile" || route.name === "PullRequestFiles"; +/** Beside the list, the first Settings page shows on one native screen that swaps its content. */ +const SETTINGS_DETAIL_SCREEN = "settings-detail"; + function ColumnScreen(props: { readonly descriptor: Descriptor; + readonly screenKey?: string; readonly primary?: boolean; readonly attached?: boolean; readonly selectedThreadKey?: string | null; @@ -78,20 +90,24 @@ function ColumnScreen(props: { readonly navigation: ViewProps["navigation"]; }) { const { descriptor } = props; - const primaryColumn = useMemo( - () => - props.primary - ? { - selectedThreadKey: props.selectedThreadKey ?? null, - selectedPullRequestKey: props.selectedPullRequestKey ?? null, - } - : null, - [props.primary, props.selectedThreadKey, props.selectedPullRequestKey], + // Options a screen set inside this workspace tab slot, over its route's. + const options = slotScreenOptions( + use(WorkspaceSlotOptionsContext), + descriptor.route.key, + descriptor.options, ); + const [presented, setPresented] = useState(false); + const primaryColumn = props.primary + ? { + presented, + selectedThreadKey: props.selectedThreadKey ?? null, + selectedPullRequestKey: props.selectedPullRequestKey ?? null, + } + : null; const key = descriptor.route.key; return ( { props.onDismiss(key, event.nativeEvent.isNativeDismiss); @@ -101,10 +117,12 @@ function ColumnScreen(props: { props.navigation.emit({ type: "transitionStart", target: key, data: { closing: false } }); }} onDidAppear={() => { + setPresented(true); props.onAppearance("didAppear", key); props.navigation.emit({ type: "transitionEnd", target: key, data: { closing: false } }); }} onWillDisappear={() => { + setPresented(false); props.onAppearance("willDisappear", key); props.navigation.emit({ type: "transitionStart", target: key, data: { closing: true } }); }} @@ -115,7 +133,7 @@ function ColumnScreen(props: { - {descriptor.render()} + {/* The Settings slot swaps pages here; its column keeps its measured insets. */} + {descriptor.render()} @@ -145,9 +164,28 @@ function ColumnScreen(props: { function WorkspaceColumns( props: ViewProps & { readonly primary: Route; readonly detail: Route[] }, ) { - const { layout, panes, togglePrimarySidebar, toggleAuxiliaryPane, startNewTask } = - useAdaptiveWorkspaceLayout(); + const { + layout, + panes, + togglePrimarySidebar, + setPrimarySidebarVisible, + toggleAuxiliaryPane, + startNewTask, + openWorkspaceTab, + sidebarByOrientation, + } = useAdaptiveWorkspaceLayout(); const deviceType = useDeviceType(); + const windowDimensions = useWindowDimensions(); + const nativeMetrics = useNativeLayoutMetrics(); + const viewportWidth = nativeMetrics?.width ?? windowDimensions.width; + const [inspectorWidthFraction, setInspectorWidthFraction] = useState(0.4); + const inspectorWidth = Math.max( + 260, + Math.min(viewportWidth * 0.6, viewportWidth * inspectorWidthFraction), + ); + const resizeStartWidth = useRef(inspectorWidth); + const settingsDetailIn = (detail: readonly Route[]) => + layout.usesSplitView && detail[0] && isSettingsRoute(detail[0].name) ? detail[0] : undefined; // Split screens must remain mounted while UIKit animates a detached route away. const [screens, setScreens] = useState({ routes: props.detail, @@ -160,9 +198,13 @@ function WorkspaceColumns( screens.observedRoutes !== props.detail || screens.observedDescriptors !== props.descriptors ) { - const routes = reconcileStackScreens(screens.routes, props.detail, screens.completed); - const retained = new Set(routes.map((route) => route.key)); const active = new Set(props.detail.map((route) => route.key)); + const settingsSlot = settingsDetailIn(props.detail); + const routes = reconcileStackScreens(screens.routes, props.detail, screens.completed).filter( + // The slot's native screen stays; the pages it showed, and any above them, just go. + (route) => !settingsSlot || active.has(route.key) || !isSettingsRoute(route.name), + ); + const retained = new Set(routes.map((route) => route.key)); setScreens({ routes, descriptors: Object.fromEntries( @@ -176,14 +218,16 @@ function WorkspaceColumns( }); } - const selectedTab = useWorkspaceTabs()?.state.selectedTab; + const workspaceTabs = useWorkspaceTabs(); + const selectedTab = workspaceTabs?.state.selectedTab; + const settingsOpen = workspaceTabs?.settingsOpen ?? false; const openNewTask = startNewTask; - // The Duo keeps compose in the detail column's bar, which is its vertical bar in landscape - // and folded, so it sits with the column's other actions whichever screen is shown. Pull - // requests leave it out, including one opened from a thread; their bar is already full of - // review actions. + // The cover detail rail needs room for thread tools above the fixed tabs. + // The unfolded Duo keeps compose in its detail bar. const detailCompose = - isDuoDevice(deviceType) && selectedTab !== "pullRequests" ? openNewTask : undefined; + deviceType === "duo-unfolded" && selectedTab !== "pullRequests" && !settingsOpen + ? openNewTask + : undefined; const inspector = use(NativeWorkspaceInspectorContext); const hostRef = useRef(null); const activeDetailKey = props.detail.at(-1)?.key; @@ -215,21 +259,18 @@ function WorkspaceColumns( ThreadId.make(threadParams.threadId), ) : null; - const handleNativeDismiss = useCallback( - (key: string, native: boolean) => { - setScreens((current) => ({ - ...current, - routes: current.routes.filter((route) => route.key !== key), - completed: new Set([...current.completed, key]), - })); - if (native) { - const state = props.navigation.getState(); - const action = nativeWorkspacePopAction(state, key); - if (action) props.navigation.dispatch(action); - } - }, - [props.navigation], - ); + const handleNativeDismiss = (key: string, native: boolean) => { + setScreens((current) => ({ + ...current, + routes: current.routes.filter((route) => route.key !== key), + completed: new Set([...current.completed, key]), + })); + if (native) { + const state = props.navigation.getState(); + const action = nativeWorkspacePopAction(state, key); + if (action) props.navigation.dispatch(action); + } + }; const followCollapsedSplit = ( type: "willAppear" | "didAppear" | "willDisappear", key: string, @@ -242,9 +283,11 @@ function WorkspaceColumns( props.primary.key, ); collapsedColumn.current = transition.column; + setNativelyPoppingWorkspaceRoute(transition.column.leaving); if (transition.pop) props.navigation.dispatch(transition.pop); }; + // oxlint-disable-next-line t3code/no-unreasoned-state-sync -- tells the native split host which column to show while collapsed useEffect(() => { if (layout.usesSplitView || collapsedColumn.current.visible === compactColumn) return; collapsedColumn.current = { ...collapsedColumn.current, visible: compactColumn }; @@ -257,23 +300,53 @@ function WorkspaceColumns( { collapsed.current = true; collapsedColumn.current = { visible: compactColumn, leaving: null }; + setNativelyPoppingWorkspaceRoute(null); }} onExpand={() => { collapsed.current = false; + setNativelyPoppingWorkspaceRoute(null); + // Native callbacks can outlive the render that created them, so decide from the live + // router state. An expanded split has columns, so its tab gets a page beside the list. + const live = props.navigation.getState(); + const { workspace } = workspaceRoutesOf(live.routes.slice(0, live.index + 1)); + if (workspace.some((route) => route.name !== "Home" && route.name !== "Settings")) return; + const tab = workspace.some((route) => route.name === "Settings") + ? "settings" + : (["threads", "pullRequests", "usage"] as const).find((candidate) => + workspaceTabs?.isTabActive(candidate), + ); + openWorkspaceTab(tab ?? "threads", { columns: true }); }} preferredDisplayMode={ - // UIKit applies the mode as a collapsed split expands, before the new width reaches JS, so a - // collapsed split already carries the sidebar the expanded one will show. - (layout.usesSplitView ? panes.primarySidebarVisible : panes.primarySidebarWhenExpanded) || - (!layout.usesSplitView && !activeDetailKey) - ? "oneBesideSecondary" - : "secondaryOnly" + sidebarByOrientation + ? sidebarDisplayMode(sidebarByOrientation.landscape, false) + : sidebarDisplayMode( + // UIKit applies the mode as a collapsed split expands, before the new width reaches + // JS, so a collapsed split already carries the sidebar the expanded one will show. + (layout.usesSplitView + ? panes.primarySidebarVisible + : panes.primarySidebarWhenExpanded) || + (!layout.usesSplitView && !activeDetailKey), + layout.primarySidebarOverlaysContent, + ) } + onDisplayModeWillChange={({ nativeEvent }) => { + if (!layout.primarySidebarOverlaysContent) return; + if (nativeEvent.nextDisplayMode === "oneOverSecondary") setPrimarySidebarVisible(true); + else if (nativeEvent.nextDisplayMode === "secondaryOnly") setPrimarySidebarVisible(false); + }} displayModeButtonVisibility="never" presentsWithGesture showInspector={inspector.visible} @@ -285,6 +358,10 @@ function WorkspaceColumns( maximumPrimaryColumnWidth: Math.max(380, layout.listPaneWidth ?? 0), preferredPrimaryColumnWidthOrFraction: layout.listPaneWidth ?? 320, minimumSecondaryColumnWidth: 320, + // UIKit can retain its automatic width despite a new preference; constrain both edges. + minimumInspectorColumnWidth: inspectorWidth, + maximumInspectorColumnWidth: inspectorWidth, + preferredInspectorColumnWidthOrFraction: inspectorWidth, }} > @@ -325,7 +402,7 @@ function WorkspaceColumns( /> {screens.routes.map((route) => { const descriptor = props.descriptors[route.key] ?? screens.descriptors[route.key]; + const inSettingsSlot = settingsDetailIn(props.detail)?.key === route.key; + const screenKey = inSettingsSlot ? SETTINGS_DETAIL_SCREEN : route.key; return descriptor ? ( current.key === route.key)} onDismiss={handleNativeDismiss} @@ -354,7 +434,45 @@ function WorkspaceColumns( {/* Inspector panes host their own native stacks, which UIKit insets for the Duo's vertical bar wherever they sit, so each pane insets its own content instead. */} - {inspector.render?.()} + + {inspector.render?.()} + {inspector.visible ? ( + + + + + { + resizeStartWidth.current = inspectorWidth; + }} + onResizeBy={(delta) => { + const width = Math.max( + 260, + Math.min(viewportWidth * 0.6, resizeStartWidth.current + delta), + ); + setInspectorWidthFraction(width / viewportWidth); + }} + /> + + + + + ) : null} + @@ -362,7 +480,8 @@ function WorkspaceColumns( } function WorkspaceStackView(props: ViewProps & { readonly nativeColumns: boolean }) { - const { layout, startNewTask } = useAdaptiveWorkspaceLayout(); + const { layout } = useAdaptiveWorkspaceLayout(); + const workspace = useWorkspaceTabs()!; // Native dismiss commits the route pop after the transition. Restore the dock // when the primary screen starts appearing, including interactive back gestures. const [primaryVisible, setPrimaryVisible] = useState(false); @@ -371,37 +490,39 @@ function WorkspaceStackView(props: ViewProps & { readonly nativeColumns: boolean const presentation = props.descriptors[route.key]?.options.presentation; return presentation !== undefined && presentation !== "card"; }); - // Linking normally restores Home via initialRouteName. A detail-only history - // must stay a single stack: placeholder descriptors cannot own an interactive - // sidebar because React Navigation rejects their actions and setOptions. + // The root's willDisappear reaches JS frames into the push, so hide the dock in the commit that + // pushes; the native events still own every later change, including back gestures. + const topDetailKey = projection.detail.at(-1)?.key; + const [pushedDetailKey, setPushedDetailKey] = useState(topDetailKey); + if (pushedDetailKey !== topDetailKey) { + setPushedDetailKey(topDetailKey); + if (topDetailKey !== undefined && primaryVisible) setPrimaryVisible(false); + } + // Detail-only histories must stay single-stack: placeholder descriptors cannot own sidebar actions or setOptions. const primaryRoute = projection.primary; if (!primaryRoute) return ; const primaryDescriptor = props.descriptors[primaryRoute.key]!; const descriptors = props.descriptors; const baseRoute = { key: `${props.state.key}:workspace`, name: "Workspace" }; const visibleRoute = projection.detail.at(-1) ?? primaryRoute; + const workspacePage = !workspaceUsesColumns(workspace.state.selectedTab, workspace.settingsOpen); const baseDescriptor: Descriptor = { ...primaryDescriptor, navigation: props.descriptors[visibleRoute.key]!.navigation, - // The native envelope keeps a stable key, but its NavigationProvider must - // identify the real visible route or useIsFocused closes media viewers. + // Identify the real visible route under the stable envelope key, or useIsFocused closes media viewers. route: visibleRoute, options: { headerShown: false }, render: () => (