From eb8ba20c35c4b495ee8f13cde5bcfff845dc6094 Mon Sep 17 00:00:00 2001 From: Evtim Kostadinov <60880468+EvtimKostadinov@users.noreply.github.com> Date: Mon, 9 Nov 2026 15:13:49 +0100 Subject: [PATCH] docs(i18n): add Bulgarian README (#9656) * docs(i18n): add Bulgarian README Add a complete Bulgarian (bg) translation of the README and list it in every README language bar and the website language inventory. Register bg with a pending website catalog that uses the labeled, nonindexable English fallback, with the fallback notice translated. Regenerate the shared language picker and hreflang links and refresh messages.pot. * docs(i18n): clarify Bulgarian project code license scope --------- Co-authored-by: morluto <76467478+morluto@users.noreply.github.com> --- README.md | 2 +- docs/readme/README_ar.md | 2 +- docs/readme/README_bg.md | 515 + docs/readme/README_de.md | 2 +- docs/readme/README_el.md | 2 +- docs/readme/README_es.md | 2 +- docs/readme/README_fa.md | 2 +- docs/readme/README_fr.md | 2 +- docs/readme/README_id.md | 2 +- docs/readme/README_it.md | 2 +- docs/readme/README_ja.md | 2 +- docs/readme/README_ko.md | 2 +- docs/readme/README_ml.md | 2 +- docs/readme/README_pl.md | 2 +- docs/readme/README_pt-BR.md | 2 +- docs/readme/README_ro.md | 2 +- docs/readme/README_ru.md | 2 +- docs/readme/README_th.md | 2 +- docs/readme/README_tr.md | 2 +- docs/readme/README_uk.md | 2 +- docs/readme/README_ur-Latn.md | 2 +- docs/readme/README_vi.md | 2 +- docs/readme/README_zh-TW.md | 2 +- docs/readme/README_zh.md | 2 +- website/locales/README.md | 4 + website/locales/bg/messages.po | 13932 ++++++++++++++++ website/locales/languages.json | 6 + website/locales/messages.pot | 3914 ++--- website/public/blog/index.html | 4 +- .../reverse-engineering-models/index.html | 4 +- .../blog/touhou-reconstruction/index.html | 4 +- website/public/contributors/index.html | 4 +- website/public/examples/dino-lab/index.html | 4 +- website/public/faq/index.html | 4 +- website/public/first-investigation/index.html | 4 +- website/public/get-started/index.html | 4 +- website/public/guides/browser/index.html | 4 +- website/public/guides/index.html | 4 +- website/public/guides/javascript/index.html | 4 +- website/public/guides/native/index.html | 4 +- .../public/guides/rl-environments/index.html | 4 +- website/public/index.html | 4 +- website/public/showcase/aegis/index.html | 4 +- website/public/showcase/ctf/index.html | 4 +- website/public/showcase/dx-ball/index.html | 4 +- website/public/showcase/index.html | 4 +- website/public/showcase/notion/index.html | 4 +- website/public/showcase/th04/index.html | 4 +- 48 files changed, 16497 insertions(+), 2000 deletions(-) create mode 100644 docs/readme/README_bg.md create mode 100644 website/locales/bg/messages.po diff --git a/README.md b/README.md index f48a12163c..d30acbbcfe 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@
npx rea-agents setup
+
+
+
+|
+
+ + Присъединете се към общността за обратно инженерство + + Discord · Въпроси и отговори · Покажете какво сте направили + |
+
Supervisor::LoadDat
+#. {ph4}:
+#: website/public/blog/reverse-engineering-models/index.html:391
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"In TH095, for example, {ph0}even the name used for a local variable could "
+"change where VC7.1 stored it{ph1}. Moving the declaration alone did not "
+"solve the layout, but an earlier background function had revealed a naming "
+"pattern that affected the compiler's choice. That gave us a more promising "
+"hypothesis for {ph2}the reconstruction of {ph3}{ph4}."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:405
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"Reusing that pattern for the file-size variable produced the required layout"
+" without adding storage. The full function then matched."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:410
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"This is the sort of narrow detail a general model may not know when it "
+"arrives. A specialist trained on this compiler could encounter many such "
+"cases and learn which source variations are worth testing first."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:416
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"The opportunity is especially clear in final matching problems where we "
+"already understand the behavior. We are then asking which ordinary source "
+"form this compiler turns into the observed instructions. Specialization "
+"could help the model propose those forms more efficiently, while the target "
+"still determines which hypotheses survive."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/reverse-engineering-models/index.html:424
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"The useful patterns would have to retain their context, though. TH08 uses an"
+" earlier Visual C++ version than TH095 and TH09. TH04 uses a different DOS-"
+"era compiler, and its {ph0}player reconstruction{ph1} needed different "
+"hypotheses about source patterns and how the compiled code was combined into"
+" an executable. Shared authorship gives us a prior, but each target tells us"
+" whether it applies. Distinguishing those contexts is part of what a "
+"specialist would need to learn."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:440
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "Where should that experience live?"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/reverse-engineering-models/index.html:441
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"Before deciding to teach those patterns through model training, I would look"
+" at the knowledge we already keep in the repository. In the {ph0}previous "
+"essay{ph1}, I wrote about it becoming the project's working memory. That "
+"memory includes compiler lessons, along with the source and failed "
+"experiments that made them useful."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:450
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"By retrieving that record, an agent can start with a known result and "
+"inspect how we reached it. It can also avoid alternatives that have already "
+"failed in the same context. The starting point improves without changing the"
+" model's weights."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/reverse-engineering-models/index.html:456
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"When reconstructing TH09's enemy-spawn function, a {ph0}GPT-6-Luna-max "
+"session{ph1} drew a hypothesis from TH08's corresponding source family. That"
+" earlier source suggested how to structure the loop and handle failures "
+"within it. TH09's own evidence supplied the game-specific details, and clean"
+" rebuilds confirmed the complete match."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/reverse-engineering-models/index.html:467
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"{ph0}\"The model did not know that compiler quirk\" and \"the model could "
+"not use it\" are different problems.{ph1} Retrieval may solve the first, but"
+" turning that fact into a useful candidate still takes work. And if the "
+"candidate fails, the model must decide what the result means for its next "
+"attempt. Knowing the relevant pattern is only the beginning of that process."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:477
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"For that reason, I would include a smaller general model with good retrieval"
+" in any comparison. Giving it the same library of experience would help us "
+"identify what training adds: better candidate generation, better decisions "
+"after feedback, or both."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:485
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "Learning the next useful experiment"
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:486
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"Those decisions after feedback are what I would most like to study. In "
+"agentic reconstruction, the model proposes an explanation and tests it "
+"against the program. Even when the candidate fails, the result can narrow "
+"the remaining possibilities and suggest a more useful next experiment."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:493
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"Consider the temporary-results example again. Its final source shows the "
+"arrangement that worked, but the route to that source contains more "
+"information. Each of the following experiments helped identify what still "
+"needed to change."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:506
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "Experiment"
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:507
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "What its result taught us"
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:512
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "Try a different way to copy the results"
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:513
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "The copy code changes, but the function still differs."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:518
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "Use the returned values directly"
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:519
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"Copying follows the original pattern, but temporary storage still differs."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:525
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "Keep the temporary results alive together"
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:526
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"They get separate storage, but one still overlaps a value used later for "
+"collision checks."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:532
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "Keep the collision-check value separate"
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:533
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "A clean rebuild confirms the complete match."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:538
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"Selected experiments from the attack-function reconstruction above, grouped "
+"by what they taught us."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:542
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"A training record that keeps this sequence can teach more than the final "
+"source alone. It connects each proposed change to an observed result and the"
+" next decision. Keeping ineffective variations matters too: they tell a "
+"later agent which hypotheses have already been tested in that context."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/reverse-engineering-models/index.html:549
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"{ph0}I would want the model to learn how to use feedback.{ph1} A neutral "
+"result is a reason to reconsider the variation; a changed mismatch may point"
+" to another cause. When local edits stop being informative, the agent should"
+" be able to revisit the source representation or inspect the evidence again."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:558
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"Learning to make those choices requires autonomy. Sometimes the useful next "
+"step is inspecting another caller rather than compiling another edit. A "
+"rigid sequence of required rewrites would remove that choice, along with "
+"part of the behavior we want the model to learn."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:567
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "Why RE is interesting for reinforcement learning"
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:568
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"Bounded reconstruction gives us a practical environment for studying these "
+"choices. Once the target and compiler are pinned, many source experiments "
+"produce quick, repeatable feedback. The agent can compile a candidate, "
+"inspect the mismatch and use that observation to choose its next step."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:575
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"Reinforcement learning could train that decision-making process through the "
+"feedback it receives. A candidate accepted by a defined check gives us a "
+"concrete outcome, while the sequence of attempts lets us observe how much "
+"work it took to reach it."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/blog/reverse-engineering-models/index.html:581
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"There is already research supporting this direction. {ph0}LLM4Decompile{ph1}"
+" studies models specialized for decompilation. {ph2}AutoDecompiler{ph3} "
+"trains multi-turn refinement using compiler and execution feedback. Their "
+"studies focus on functional recovery. For this work, I would use them as a "
+"starting point for the related task of finding source that matches a "
+"historical compiler's output."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/reverse-engineering-models/index.html:593
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"To reach such a well-defined task, though, we may first need to establish "
+"what a function owns or devise a new runtime measurement. In TH08, for "
+"example, a {ph0}collision difference led back to how the original program "
+"handled floating-point calculations{ph1}. Before the agent could test a "
+"useful correction, it had to work out what to measure."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:604
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"This suggests another role for a broadly capable model: helping make the "
+"problem checkable in the first place. Once that check exists, we can "
+"investigate how far a learned search policy can get with it."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:612
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "When the oracle is wrong"
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:613
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"Once we train against that check, its coverage becomes part of what the "
+"model learns. I call the reference or checker an oracle. Even if it gives a "
+"repeatable answer, we still need to understand what that answer covers."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:619
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"TH08 showed how much can hide outside that coverage. Some reconstructed "
+"functions passed their exact comparisons with wrong floating constants. The "
+"comparator adjusted relocated addresses before checking instructions, but it"
+" checked the values behind those addresses only when they had been "
+"explicitly recorded for verification. Other literal references could pass "
+"without their values being examined."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: 1.0f
+#. {ph3}: 32.0f
+#: website/public/blog/reverse-engineering-models/index.html:628
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"To close that gap, a {ph0}wider audit{ph1} found incorrect constants in "
+"functions that had already been accepted. In one calculation, the "
+"reconstructed source added {ph2} where the original added {ph3}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/reverse-engineering-models/index.html:638
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"{ph0}A learner rewarded by the old check could learn to produce the wrong "
+"reconstruction.{ph1} We had not trained an RL model against this oracle; the"
+" observed failure was in the check itself. But using that check as a reward "
+"would have made the same blind spot part of the learning environment."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/reverse-engineering-models/index.html:648
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"A functional test can have a similar blind spot. {ph0}Differential-fuzzing "
+"research on LLM decompilers{ph1} has found behavior differences beyond the "
+"supplied tests. Passing those tests therefore needs to be read in terms of "
+"the cases they exercise, just as an instruction match needs to be read in "
+"terms of the bytes and data it checks."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:658
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"Before using either kind of check as a reward, I would test it with "
+"deliberate failures. I would also keep final acceptance outside the "
+"candidate's editable source, so the model has to satisfy the check through "
+"its reconstruction. Otherwise, something like a byte array copied from the "
+"target could satisfy a naive score without recovering useful source."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/reverse-engineering-models/index.html:666
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"{ph0}Improving the learner and improving its oracle belong to the same "
+"research problem.{ph1} As the learner gets better at optimizing the feedback"
+" we give it, understanding that feedback becomes more important too."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:676
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "A comparison worth running"
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:677
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"With those checks in place, I would start the comparison on a fixed VC7.1 "
+"task family. First, I would establish baselines for a strong general model "
+"and a smaller one. Adding repository knowledge to the smaller model would "
+"show what retrieval changes. From there, supervised specialization and an "
+"RL-trained version would let us examine what training adds."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:685
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"To make those comparisons informative, each model would receive the same "
+"target evidence and tools. For the training-specific comparisons, I would "
+"keep the base model and available knowledge fixed as well. Repeated trials "
+"would help distinguish a reliable search strategy from a lucky candidate."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:692
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"I would then separate two starting conditions: reconstructing a function "
+"from its instructions, and closing the last few differences in maintained "
+"source. A specialist might be excellent at the second task while a general "
+"model does much of the work needed to reach it. Measuring them separately "
+"would reveal that division of work."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:700
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"Both tasks need genuinely held-out examples. Because related Touhou games "
+"share engine code, holding out a game's name would still allow nearly "
+"identical functions to appear in training. I would instead hold out source "
+"families and keep their accepted answers out of both training and retrieval."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:707
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"On those examples, the outcome would be complete, independently validated "
+"matches. Giving each model the same candidate or compile budget would help "
+"compare search quality. Measuring elapsed time and total cost, including "
+"compilation, would tell us whether that quality produces an efficient "
+"workflow. Training costs would need their own accounting too."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:715
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"Both views matter because a cheaper proposal can become an expensive "
+"workflow if it causes more uninformative compiles. Conversely, a slower "
+"model may pay for itself by finding a useful experiment sooner. The "
+"comparison should capture those costs."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/reverse-engineering-models/index.html:721
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"Counting accepted results also keeps intermediate progress in perspective. "
+"One TH09 {ph0}replay-save candidate{ph1} looked promising because the "
+"compiled function had the expected size, but a full comparison still found "
+"substantial differences. Changes in how the compiler arranges instructions "
+"can also make a candidate look closer without resolving the underlying "
+"problem. Such diagnostics can guide the next experiment, but I would "
+"validate any reward for \"getting closer\" against the full acceptance "
+"check."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:736
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"I would be interested in the pattern across these results. If a specialist "
+"does well within a familiar compiler family, does that advantage survive a "
+"toolchain change? And once both models have good retrieval, how much does "
+"training still add? The answers would help us decide where each kind of "
+"model is most useful."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:745
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "What kind of agent does this suggest?"
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:746
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"If the models turn out to help at different stages, a useful arrangement "
+"might be a broad agent with access to a specialist. Once a task becomes a "
+"familiar compiler search, it could ask the specialist for candidates. If the"
+" results stop making sense, the broader agent could return to the target "
+"evidence or investigate the measurement itself."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:754
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"In that arrangement, specialization becomes a tool the agent can choose as "
+"the investigation develops. The agent keeps the freedom to change direction "
+"that made the earlier breakthroughs possible."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:759
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"This follows naturally from the industrial shift I described in the previous"
+" essay. Being able to run many more experiments changes how we organize the "
+"work. It also gives us a reason to ask which decisions need broad judgment "
+"and which improve through repeated experience with a particular craft."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:766
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"For now, the strongest general model has earned its place in my workflow by "
+"opening problems I had left unresolved. Those successes are what make me "
+"want to examine the work more closely: how much depended on the model's "
+"breadth, and how much could be handled by a model trained in this particular"
+" kind of reconstruction?"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/reverse-engineering-models/index.html:774
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"{ph0}The repositories give us a way to test the question.{ph1} I would like "
+"to use that record to build the comparison and see what we learn."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:784
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "Evidence and model attribution"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/reverse-engineering-models/index.html:785
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"{ph0}Detailed evidence notes{ph1} include the recorded comparisons and "
+"experiment context."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:792
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"The examples describe historical function-level comparisons recorded in the "
+"linked commits. Whole-game runtime checks are separate milestones. Source "
+"and matching records were reviewed on 13 October 2026."
+msgstr ""
+
+#. {ph0}: gpt-dots
+#. {ph1}: gpt-web
+#: website/public/blog/reverse-engineering-models/index.html:798
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"The TH09 label {ph0} identifies GPT-6-Astra. {ph1} changed with the model "
+"used at the time, so that label alone does not identify an individual run. "
+"Explicit model names in the other cited commits establish their recorded "
+"attribution; the histories do not contain uniform per-run cost or effort "
+"measurements."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/blog/reverse-engineering-models/index.html:807
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"{ph0}TH09 temporary lifetimes:{ph1} the {ph2}earlier context review{ph3} and"
+" {ph4}complete cold reconstruction{ph5}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#. {ph6}:
+#. {ph7}:
+#: website/public/blog/reverse-engineering-models/index.html:819
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"{ph0}TH09 Front callback:{ph1} {ph2}non-exact diagnostic regions{ph3}, "
+"{ph4}Astra's new graph{ph5} and its {ph6}accepted recompile replay{ph7}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#. {ph6}:
+#. {ph7}:
+#: website/public/blog/reverse-engineering-models/index.html:835
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"{ph0}Compiler knowledge:{ph1} {ph2}TH095 identifier-bucket reuse{ph3}, "
+"{ph4}TH04 player source and linker order{ph5} and {ph6}Luna's TH09 enemy-"
+"spawn closure{ph7}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#. {ph6}:
+#. {ph7}:
+#: website/public/blog/reverse-engineering-models/index.html:851
+#, python-brace-format
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"{ph0}Checks and diagnostics:{ph1} {ph2}TH08 floating-literal audit{ph3}, "
+"{ph4}TH08 numerical investigation{ph5} and {ph6}TH09 replay-save "
+"reconstruction{ph7}."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:868
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"The proposed specialist and RL comparisons are future experiments. The "
+"project histories motivate them; no trained specialist was evaluated for "
+"this essay."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:6
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "Does reverse engineering need a bigger model? | REA"
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:7
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid ""
+"What Touhou reconstruction taught me about general models, specialist models"
+" and learning to propose better hypotheses from compiler feedback."
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:249
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "On this page"
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:262
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "Models and reverse engineering essay"
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:500
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "Selected reconstruction experiments"
+msgstr ""
+
+#: website/public/blog/reverse-engineering-models/index.html:894
+msgctxt "page:blog/reverse-engineering-models/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:113
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/blog/touhou-reconstruction/index.html:203
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:207
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "Essay · Touhou reconstruction"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:208
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "The industrial revolution in reverse engineering."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:209
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "By N0zoM1z0 · 10 October 2026"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:211
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "Takeaway"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:213
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and "
+"acceptance criteria, then let the agent decide what to try next."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:218
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning "
+"with the code. Git checkpoints let the next session continue after the "
+"conversation ends."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:223
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still "
+"needs testing. “Unknown” is a valid answer when the evidence is incomplete."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:228
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a "
+"bug, revisit the earlier results that depended on it."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:233
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}We are in the early days of RE's industrial revolution.{ph1} The "
+"methods are still taking shape. There is plenty left to explore."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:245
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "How experience compounds"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:246
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:334
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "Autonomy"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:335
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "Agent"
+msgstr ""
+
+#. {ph0}: 0.0
+#. {ph1}: 128.0
+#: website/public/blog/touhou-reconstruction/index.html:467
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"In September, a bug reported by a downstream Switch port led back to item "
+"auto-collection. The reconstructed source checked player power against "
+"{ph0}. The original used {ph1}, the maximum-power threshold."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:473
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"Normal power is non-negative, so the reconstructed power check was "
+"effectively always satisfied. Above the collection line, the game could "
+"attract items without requiring maximum power. The other exceptions in the "
+"condition were correct. This one constant changed the behavior."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:480
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:486
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"A rebuild can put a constant at a different address. The comparison tool "
+"accounted for that by adjusting addresses in the compiled instructions "
+"before comparing them with the original. But it never checked the floating-"
+"point value stored at the referenced address."
+msgstr ""
+
+#. {ph0}: 128.0
+#. {ph1}: 0.0
+#: website/public/blog/touhou-reconstruction/index.html:493
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"That left a hole in the check. It could point the reconstructed instruction "
+"at the original's {ph0} while the source still said {ph1}. The instruction "
+"bytes matched. The source meant something different."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/blog/touhou-reconstruction/index.html:499
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"The {ph0}2 September fix{ph1} corrected the source and made the comparison "
+"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then "
+"examined 1,548 floating-literal references. It found another twelve "
+"incorrect references across five accepted functions."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:510
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"The comparison now checks every such floating literal. Its tests include "
+"deliberately wrong values to make sure they are rejected. We also had to "
+"revisit results that had passed the weaker check."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:515
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of "
+"repairing the game."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:519
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"That matters when the team is mostly one person working with agents. I "
+"cannot personally inspect every line they produce, so much of my confidence "
+"rests on their checks. A shared oracle's blind spot can affect many "
+"investigations before I notice it. I have to understand what the checker "
+"actually verifies and test it against cases that ought to fail."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:527
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"As the work continued, those checks became part of the repository. So did "
+"the reasons for source changes and notes that let a later session pick up "
+"where an earlier one stopped. {ph0}The repository was becoming the project's"
+" working memory.{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:536
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}A successful batch gave us both recovered code and a better environment"
+" for the next batch.{ph1}"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:544
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "Two different ideas of reconstruction"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:545
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind"
+" of work explicit. The notice announces that further development will happen"
+" privately until completion. One passage reads:"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:556
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"The rise of grifters (AI decompilations and ports) in this space taking from"
+" our work paints a bad image for future decompilation efforts…"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:562
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"The notice also describes the psychological toll on the maintainers. Their "
+"contribution policy excludes pull requests produced primarily with AI. They "
+"have put their free time into difficult work, and that work helped make my "
+"continuation possible. I respect the effort behind it. The disagreement I "
+"want to discuss is about how reconstruction should proceed and how a "
+"contribution should be judged."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:571
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"In the manual workflow I knew, developing an understanding of a function and"
+" reconstructing it usually fell to the same person. A project relied heavily"
+" on that person's expertise. Trust in the contributor mattered because so "
+"much of the reasoning happened while they worked."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:578
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"Existing projects already preserve knowledge in their source and build "
+"tools. What changed for me was that an agent could use that knowledge to "
+"pursue the next investigation on its own."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:583
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"In my continuation, I decide the objective and the standard for accepting a "
+"result. The agent has broad freedom to investigate. Its proposed "
+"reconstruction then has to survive the relevant checks. I want another "
+"person to be able to examine why we chose an implementation, even if an "
+"agent did most of the work."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:590
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"This can be a difficult transition. Years of careful work may become the "
+"foundation for a continuation that moves much faster. That raises real "
+"questions about credit. It also changes what maintainers need to know before"
+" accepting a contribution."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:596
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"The industrial analogy helps me think about this. In a craft, much of the "
+"process depends on the skill of the person carrying it out. Machinery "
+"changes where that skill is needed. Someone still has to design the process "
+"and recognize when its output is wrong. Different communities can choose how"
+" much of that change they want to take on."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:604
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"My choice is to continue openly, with the inherited work credited and its "
+"history preserved. I want the new work to be reviewable. That gives us a way"
+" to ask how far this approach can go and to learn from what goes wrong along"
+" the way."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/blog/touhou-reconstruction/index.html:610
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, "
+"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt."
+" TH08's {ph4}credits and provenance{ph5} record the continuation boundary."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:628
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "TH095: experience starts compounding"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:629
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much "
+"easier to see. Its repository began on 29 August with zero confirmed game "
+"functions in the ledger. We still had to learn the game. But we already knew"
+" much more about how to begin a reconstruction and how to keep it moving."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:637
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"By 7 September, all 697 identified game functions had source. By 8 "
+"September, 696 had been accepted as exact comparisons. The whole program "
+"linked on 9 September. The Windows i386 reconstruction was marked playable "
+"on 10 September, about twelve days after initialization."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:644
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"I found this more exciting than the first project's speed. A fresh target "
+"could benefit from work done on another game. The experience was already "
+"present in the tools and in the way the project was organized."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:650
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"For example, TH08 had taught us to pay attention to the assembled program "
+"early. If several recovered functions depend on the same state, their "
+"isolated comparisons leave an important question open. We need to see them "
+"working together. That lesson helped shape how we approached TH095's whole-"
+"program build."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:657
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"A lesson that stays in my head is useful while I am there. Once it becomes a"
+" check that another session can run, it can keep helping after I have moved "
+"on. The next agent can use the result without repeating the investigation "
+"that led to it."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:663
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"The floating-literal bug belongs in that memory too. It explains why "
+"checking a reference also requires checking the data behind it. Keeping that"
+" correction with the code helps later projects avoid inheriting the old "
+"check's blind spot."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:669
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}The method becomes part of the starting material for the next "
+"game.{ph1} We can spend more of the next project's effort on what is "
+"actually new about its target."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:677
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"The same benefit is available to people joining later. They can inspect a "
+"decision and rerun its check before continuing the work. They do not have to"
+" reconstruct the entire project's history to find out why the source looks "
+"the way it does."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:685
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "TH04: the workflow survives a different architecture"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/blog/touhou-reconstruction/index.html:686
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The"
+" target was now a 16-bit environment with four cooperating programs. "
+"Understanding its hardware behavior required different evidence from the "
+"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and "
+"source material here too."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:695
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"The DOS reconstruction is now working. In my manual testing, I played "
+"complete Normal routes through their endings and checked saves. The current "
+"work is a native 64-bit port. Establishing a working DOS version first gives"
+" that port a reference."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:701
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"The architecture changed what we needed to investigate. It also changed the "
+"compiler and runtime against which we checked our work. But the agent could "
+"still follow a question through to a result and let that result guide the "
+"next experiment."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:707
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"Consider the transition from gameplay to an ending. We need to know what "
+"state carries across that boundary and which program is responsible for it. "
+"That is something we can investigate against the DOS product. Once the "
+"evidence and checks are available, an agent can work through the question "
+"much as it did on a Windows title."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:715
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"This is why TH04 matters to the argument. A substantial platform change did "
+"not force us to start over with a new way of working. The architecture "
+"defined the problem; the workflow still gave us a way to solve it."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:721
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"For the 64-bit port, we can now examine the new implementation against "
+"behavior already recovered on DOS. The knowledge from reconstruction gives "
+"the port something to build on."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/blog/touhou-reconstruction/index.html:726
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual "
+"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:739
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "From exact code to readable code"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:740
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"Once a reconstruction works, I want someone else to be able to understand "
+"it."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:744
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"To me, assembly and raw offsets can feel like old friends. I realise this is"
+" a slightly unusual definition of “readable.” Most people would prefer to "
+"follow the game's logic without keeping the executable's memory layout in "
+"their head."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:750
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field "
+"may still be known mainly by its offset. We follow how the game uses it "
+"until we can explain its role. Then we can give it a meaningful name and a "
+"type that fits the evidence. We keep the reasoning with the source so the "
+"next person can see where that interpretation came from."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:758
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"This becomes especially important for a port. An absolute address tells me "
+"where something lived in the old executable. It gives a 64-bit "
+"implementation little help in deciding which object should own that state. "
+"To move the behavior safely, we need to recover the relationship behind the "
+"old memory access."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:765
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "The order I now use is:"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:767
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with "
+"the historical compiler. Compare the relevant code and data with the "
+"original executable. Record unresolved differences so the next phase has a "
+"clear starting point."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:774
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}Build and play it on the original platform.{ph1} Link those pieces into"
+" the real program using the original architecture and compiler. Exercise "
+"important gameplay paths. This is where we can find problems with shared "
+"state or initialization that an isolated function comparison missed."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:781
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}Reconstruct the semantics against both references.{ph1} Take one "
+"coherent part of the game at a time and establish what its recovered source "
+"means. Improve its representation while preserving the exact comparisons and"
+" the playable historical build."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:790
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}Make the modern port.{ph1} Move the established behavior into the new "
+"environment, such as a native 64-bit build. The reconstructed original-"
+"platform game remains a reference for comparing how the port behaves."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:797
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"The playable build from the second stage becomes a {ph0}second oracle{ph1} "
+"during the third. The first oracle checks whether our changed source still "
+"reproduces the relevant original code and data. The second checks that the "
+"reconstructed program still builds and behaves correctly along the paths we "
+"exercise."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:805
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"They catch different mistakes. A type change can alter the generated "
+"instructions. An ownership change can leave two parts of the game using "
+"different copies of state. Keeping both checks available gives the agent a "
+"concrete failure to investigate before carrying a refactor further."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:812
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"A name needs evidence of its own. An exact comparison cannot tell us whether"
+" a field really means “invulnerability time.” We have to establish that from"
+" how the game writes and uses it. If the meaning remains uncertain, a "
+"neutral name is more helpful to the next reader than a confident guess."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:819
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"We learned this order through the projects. TH08 already had playable ports "
+"before some of its later historical-platform audits. That made certain "
+"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the "
+"original-platform build first, so semantic work can use it as a reference "
+"before porting begins."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:830
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction "
+"makes the recovered knowledge usable.{ph1} A port can then build on both."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:839
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "What makes this an industrial shift"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:840
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"These projects changed where I spent my attention. Once agents could carry "
+"much of an investigation forward, improving their working environment became"
+" one of the most useful things I could do. A better tool could help with "
+"every later function that needed it."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:847
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"Autonomy matters here. The useful next step often becomes clear only after a"
+" failed experiment. An agent needs enough freedom to follow that result "
+"somewhere unexpected. If it has to wait for me to prescribe each step, much "
+"of the work remains tied to my attention."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:854
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"I expect the agent to make wrong hypotheses. What matters is whether we can "
+"test them and learn from the result. A failed check should help it "
+"understand the mistake well enough to try again. I still have to decide "
+"whether the accumulated evidence supports a project milestone."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:861
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"REA gives the agent access to analysis tools. A question about a function's "
+"caller can lead straight into inspecting that caller. The reconstruction "
+"project supplies the compiler and its own reference checks. The agent can "
+"use those to test the source it proposes and see where its explanation holds"
+" up."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:868
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"The TH08 bug shows why those checks deserve engineering attention of their "
+"own. When the same comparison is used across hundreds of functions, a gap in"
+" it can spread much further than a mistake in one implementation. Testing "
+"the checker improves the feedback available to all that later work."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:875
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"The industrial analogy has a useful historical example here. Boulton and "
+"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust "
+"engine valves. A recording version traced pressure through the piston "
+"stroke. It made the engine's internal behavior available for inspection. Our"
+" comparison tools serve a similar purpose: they let us examine what the "
+"machinery is doing while we improve it."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:888
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the "
+"infrastructure is still immature. Agents can move faster than our checks "
+"were designed to support, so the process has to develop alongside them. When"
+" we find a defect in a shared tool, we have to repair it and revisit the "
+"results it affected. The next project can then inherit a stronger tool."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:898
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"There is also a practical limit to any one conversation. It will end before "
+"a large reconstruction is finished. The repository has to make it possible "
+"for another session to continue without losing the reason for the last "
+"decision."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:904
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives "
+"projects a shared way to carry their checks and lessons forward. Work on one"
+" game can improve the starting conditions for another."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:914
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"That is what makes the industrial analogy meaningful to me. Experience "
+"starts becoming part of tools that others can use. Improving those tools "
+"changes how much the next person—or the next agent—can get done."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:922
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "The projects we can now consider"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:923
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"The pace matters because it changes the decision to begin. A game could be "
+"fascinating to reverse engineer and still demand more of my own attention "
+"than I could realistically give it. Many projects would stay ideas."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:929
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"Now I can see a way to keep such a project moving through repeated "
+"investigations. Getting a working reconstruction makes a port more "
+"practical. Recovering readable semantics makes it easier for someone else to"
+" explore a mod. The effort put into understanding the game can keep paying "
+"off after the first version runs."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/blog/touhou-reconstruction/index.html:936
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"I now look at an unfamiliar program and ask: {ph0}what access, feedback and "
+"accumulated knowledge would let an agent work on this reliably?{ph1}"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:943
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"That question makes me consider projects I would previously have left alone."
+" Each one can improve the way we approach the next. I want to keep exploring"
+" how far that can take us."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:951
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "Project milestones and sources"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:952
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"The dates describe recorded project checkpoints, checked against public "
+"GitHub history on 10 October 2026. Elapsed time is calendar time between "
+"commits. Source presence, exact comparisons, a build and a runtime result "
+"each name a different milestone."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#. {ph6}:
+#. {ph7}:
+#. {ph8}:
+#. {ph9}:
+#. {ph10}:
+#. {ph11}:
+#: website/public/blog/touhou-reconstruction/index.html:960
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source "
+"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web "
+"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#. {ph6}:
+#. {ph7}:
+#. {ph8}:
+#. {ph9}:
+#. {ph10}:
+#. {ph11}:
+#: website/public/blog/touhou-reconstruction/index.html:983
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source"
+" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September "
+"linkage{ph9}, and {ph10}10 September playable-build record{ph11}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/blog/touhou-reconstruction/index.html:1006
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS "
+"reconstruction, the maintainer's complete Normal-route testing and the "
+"current 64-bit phase."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#. {ph6}:
+#. {ph7}:
+#: website/public/blog/touhou-reconstruction/index.html:1015
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection "
+"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full "
+"floating-literal audit{ph7}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/blog/touhou-reconstruction/index.html:1029
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and"
+" {ph4}the Factory's phase order and two validation paths{ph5}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/blog/touhou-reconstruction/index.html:1041
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine "
+"indicator record{ph3} describes the 1796 introduction and the pressure-"
+"recording mechanism."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/blog/touhou-reconstruction/index.html:1050
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game"
+" knowledge{ph5} documents retain the working principles and lessons."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/blog/touhou-reconstruction/index.html:1065
+#, python-brace-format
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:6
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "Reverse Engineering’s Industrial Revolution — REA"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:7
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid ""
+"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with "
+"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04."
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:359
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "Experience carried between projects"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:373
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "On this page"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:388
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "Touhou reconstruction essay"
+msgstr ""
+
+#: website/public/blog/touhou-reconstruction/index.html:1091
+msgctxt "page:blog/touhou-reconstruction/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/contributors/index.html:114
+msgctxt "page:contributors/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/contributors/index.html:204
+#, python-brace-format
+msgctxt "page:contributors/index.html"
+msgid "{ph0}Home{ph1} / Contributors"
+msgstr ""
+
+#: website/public/contributors/index.html:205
+msgctxt "page:contributors/index.html"
+msgid "Built together."
+msgstr ""
+
+#: website/public/contributors/index.html:206
+msgctxt "page:contributors/index.html"
+msgid "Thank you to everyone who helps make REA better."
+msgstr ""
+
+#: website/public/contributors/index.html:207
+msgctxt "page:contributors/index.html"
+msgid ""
+"Code, documentation, tests, translations and ideas — there are many ways to "
+"contribute."
+msgstr ""
+
+#: website/public/contributors/index.html:212
+msgctxt "page:contributors/index.html"
+msgid "How to contribute"
+msgstr ""
+
+#: website/public/contributors/index.html:217
+msgctxt "page:contributors/index.html"
+msgid "Join the conversation →"
+msgstr ""
+
+#: website/public/contributors/index.html:227
+msgctxt "page:contributors/index.html"
+msgid "Contributors"
+msgstr ""
+
+#: website/public/contributors/index.html:229
+msgctxt "page:contributors/index.html"
+msgid "Find a contributor"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#: website/public/contributors/index.html:1116
+#, python-brace-format
+msgctxt "page:contributors/index.html"
+msgid "From {ph0}GitHub’s contributor list{ph1} · Updated {ph2}."
+msgstr ""
+
+#: website/public/contributors/index.html:1121
+msgctxt "page:contributors/index.html"
+msgid "No matching contributors. Try another username."
+msgstr ""
+
+#: website/public/contributors/index.html:6
+msgctxt "page:contributors/index.html"
+msgid "Contributors · REA"
+msgstr ""
+
+#: website/public/contributors/index.html:7
+msgctxt "page:contributors/index.html"
+msgid ""
+"Meet the people who contribute code, documentation, tests and ideas to REA."
+msgstr ""
+
+#: website/public/contributors/index.html:230
+msgctxt "page:contributors/index.html"
+msgid "GitHub username"
+msgstr ""
+
+#: website/public/contributors/index.html:1142
+msgctxt "page:contributors/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:114
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/examples/dino-lab/index.html:204
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:207
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Inspect → rebuild → change"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:208
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Rebuild the dinosaur’s speed rule."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/examples/dino-lab/index.html:209
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid ""
+"To recreate the game’s acceleration, first find the rule that controls its "
+"speed. {ph0}REA returned the running script;{ph1} we used its rule to build "
+"this mini-game with {ph2}adjustable speed.{ph3}"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:218
+#: website/public/examples/dino-lab/index.html:217
+msgctxt "page:examples/dino-lab/index.html"
+msgid "On this page"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/examples/dino-lab/index.html:220
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid "{ph0}Play and change the speed{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/examples/dino-lab/index.html:221
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid "{ph0}Read the recovered rule{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/examples/dino-lab/index.html:222
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid "{ph0}Check the reconstruction{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/examples/dino-lab/index.html:223
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid "{ph0}Try the analysis{ph1}"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:228
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Play and change the speed"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:229
+msgctxt "page:examples/dino-lab/index.html"
+msgid ""
+"Press Play, then jump over the cactus. Move the speed slider to try a slower"
+" or faster game; it switches to a fixed speed. Select the recovered rule to "
+"start at 6 and gradually accelerate again."
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:235
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Play the reconstruction"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:267
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Play"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:270
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Jump ↑"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:271
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Restart"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:274
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Speed"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:284
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Use the recovered acceleration rule"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:288
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Original rule: start at 6, then increase toward 13."
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:291
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Move the slider to set your own speed. Space or Jump clears a cactus."
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:296
+msgctxt "page:examples/dino-lab/index.html"
+msgid ""
+"Enable JavaScript to play the reconstruction. The code and explanation above"
+" remain readable."
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:304
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Read the script REA returned"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: index.js
+#: website/public/examples/dino-lab/index.html:305
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid ""
+"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It"
+" returned the loaded {ph2}, including this branch in the game’s update "
+"function:"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:315
+msgctxt "page:examples/dino-lab/index.html"
+msgid "REA · selected script source"
+msgstr ""
+
+#. {ph0}: SPEED: 6
+#. {ph1}: ACCELERATION: 0.001
+#. {ph2}: MAX_SPEED: 13
+#: website/public/examples/dino-lab/index.html:321
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid ""
+"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an "
+"update without a collision."
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:326
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Use the same rule in the new game"
+msgstr ""
+
+#. {ph0}: dino-speed.js
+#: website/public/examples/dino-lab/index.html:329
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Reconstruction · {ph0}"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:332
+#: website/public/examples/dino-lab/index.html:431
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Copy"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:345
+msgctxt "page:examples/dino-lab/index.html"
+msgid ""
+"The mini-game uses this function for automatic acceleration. Moving the "
+"slider supplies a fixed speed instead. Drawing, jump physics and rectangle "
+"collision checks are new code for this teaching game; its simulation "
+"advances at 60 updates per second."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/examples/dino-lab/index.html:351
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:359
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Check the reconstruction"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:360
+msgctxt "page:examples/dino-lab/index.html"
+msgid ""
+"We called the original game’s update function with obstacles and automatic "
+"scheduling disabled. Compare those recorded speeds with a replay of the "
+"recovered rule."
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:369
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Updates"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:370
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Original game"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:371
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Reconstructed rule"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:398
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Run the speed check"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:401
+msgctxt "page:examples/dino-lab/index.html"
+msgid ""
+"Values rounded to three decimals. The branch checks before adding, so the "
+"final increment can take speed just above 13."
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:407
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Try the analysis yourself"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/examples/dino-lab/index.html:409
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid "{ph0}Set up REA{ph1} with your coding agent."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: https://wayou.github.io/t-rex-runner/
+#: website/public/examples/dino-lab/index.html:413
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid ""
+"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL."
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:420
+msgctxt "page:examples/dino-lab/index.html"
+msgid ""
+"Give your agent the page URL and local debugging endpoint, then copy this "
+"prompt."
+msgstr ""
+
+#. {ph0}:
+#: website/public/examples/dino-lab/index.html:427
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#: website/public/examples/dino-lab/index.html:440
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get "
+"faster? Show the speed rule, then build a small version with an adjustable "
+"speed.{ph3}{ph4}{ph5}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/examples/dino-lab/index.html:449
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid ""
+"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height "
+"control to the new version.”{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/examples/dino-lab/index.html:456
+#, python-brace-format
+msgctxt "page:examples/dino-lab/index.html"
+msgid ""
+"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and"
+" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome "
+"150."
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:6
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:7
+msgctxt "page:examples/dino-lab/index.html"
+msgid ""
+"Read the dinosaur game’s speed rule with REA, rebuild it, then change the "
+"speed and play."
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:226
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Dinosaur speed reconstruction"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:257
+msgctxt "page:examples/dino-lab/index.html"
+msgid ""
+"Dinosaur mini-game. Use the Jump button or press Space while the game is "
+"focused."
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:332
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Copy reconstructed speed rule"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:431
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Copy dinosaur analysis prompt"
+msgstr ""
+
+#: website/public/examples/dino-lab/index.html:486
+msgctxt "page:examples/dino-lab/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/faq/index.html:113
+msgctxt "page:faq/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:203
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid "{ph0}Home{ph1} / FAQ"
+msgstr ""
+
+#: website/public/faq/index.html:204
+msgctxt "page:faq/index.html"
+msgid "REA FAQ."
+msgstr ""
+
+#: website/public/faq/index.html:205
+msgctxt "page:faq/index.html"
+msgid "Setup, updates, analysis and troubleshooting."
+msgstr ""
+
+#: website/public/faq/index.html:209
+msgctxt "page:faq/index.html"
+msgid "Topics"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:211
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid "{ph0}Setup and updates{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:212
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid "{ph0}Analysis{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:213
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid "{ph0}Troubleshooting{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:214
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid "{ph0}Data and sharing{ph1}"
+msgstr ""
+
+#: website/public/faq/index.html:223
+msgctxt "page:faq/index.html"
+msgid "Setup and updates"
+msgstr ""
+
+#: website/public/faq/index.html:226
+msgctxt "page:faq/index.html"
+msgid "How do I install REA?"
+msgstr ""
+
+#. {ph0}: Node.js
+#: website/public/faq/index.html:227
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"With {ph0} and npm available, run setup, choose your coding agent and review"
+" the proposed changes."
+msgstr ""
+
+#: website/public/faq/index.html:234
+msgctxt "page:faq/index.html"
+msgid "Terminal · agent setup"
+msgstr ""
+
+#: website/public/faq/index.html:235 website/public/faq/index.html:276
+#: website/public/faq/index.html:294 website/public/faq/index.html:378
+#: website/public/faq/index.html:425 website/public/faq/index.html:465
+#: website/public/faq/index.html:485
+msgctxt "page:faq/index.html"
+msgid "Copy"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:246
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"Setup registers REA's MCP connection and installs the matching investigation"
+" skill. Restart your agent when it finishes, then give it a target path and "
+"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your "
+"first analysis."
+msgstr ""
+
+#: website/public/faq/index.html:255
+msgctxt "page:faq/index.html"
+msgid "Which coding agents can use REA?"
+msgstr ""
+
+#: website/public/faq/index.html:256
+msgctxt "page:faq/index.html"
+msgid ""
+"Any agent that supports local MCP servers. Setup includes Claude Code, "
+"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, "
+"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code."
+" Grok Bot's connector is added from its chat."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:263
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid "{ph0}Connect your coding agent{ph1}."
+msgstr ""
+
+#: website/public/faq/index.html:268
+msgctxt "page:faq/index.html"
+msgid "How do I update REA?"
+msgstr ""
+
+#: website/public/faq/index.html:269
+msgctxt "page:faq/index.html"
+msgid ""
+"REA releases frequently, including bug fixes. If you installed the CLI with "
+"npm:"
+msgstr ""
+
+#: website/public/faq/index.html:275
+msgctxt "page:faq/index.html"
+msgid "Terminal · installed CLI"
+msgstr ""
+
+#. {ph0}: npx
+#: website/public/faq/index.html:287
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"Follow the setup refresh command printed by the update. If you set up your "
+"agent through {ph0}, run:"
+msgstr ""
+
+#: website/public/faq/index.html:293
+msgctxt "page:faq/index.html"
+msgid "Terminal · refresh agent setup"
+msgstr ""
+
+#. {ph0}: npx -y rea-agents@latest
+#: website/public/faq/index.html:305
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"Review the changes and restart your agent. Its REA connection pins a package"
+" version, so refreshing setup makes it use the new release. For one-off CLI "
+"commands, use {ph0} followed by the command."
+msgstr ""
+
+#: website/public/faq/index.html:313
+msgctxt "page:faq/index.html"
+msgid "Is installing the skill from skills.sh enough?"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:316
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"The skill gives your agent investigation instructions. Run {ph0}REA "
+"setup{ph1} to connect the MCP server and install the matching skill, then "
+"restart your agent so it can call the tools."
+msgstr ""
+
+#: website/public/faq/index.html:327
+msgctxt "page:faq/index.html"
+msgid "Analysis"
+msgstr ""
+
+#: website/public/faq/index.html:330
+msgctxt "page:faq/index.html"
+msgid "What can I analyze with REA?"
+msgstr ""
+
+#: website/public/faq/index.html:331
+msgctxt "page:faq/index.html"
+msgid "Start with the kind of software you have:"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:333
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode "
+"and references."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:338
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source "
+"locations."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:343
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:348
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"REA also has workflows for managed assemblies, Android APKs, firmware and "
+"packaged resources. {ph0}See the case studies{ph1} for worked "
+"investigations."
+msgstr ""
+
+#: website/public/faq/index.html:356
+msgctxt "page:faq/index.html"
+msgid "Do I need Hopper, Ghidra or IDA?"
+msgstr ""
+
+#: website/public/faq/index.html:357
+msgctxt "page:faq/index.html"
+msgid ""
+"Deep native analysis uses one of them. Static JavaScript and .NET inspection"
+" work with the supplied files and do not need a native analysis engine."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:362
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"Connect your existing Ghidra or IDA installation, or let setup detect Hopper"
+" and propose an installation. Your host and target determine which provider "
+"can be used. {ph0}Set up native analysis{ph1}."
+msgstr ""
+
+#: website/public/faq/index.html:370
+msgctxt "page:faq/index.html"
+msgid "Can I use REA without a coding agent?"
+msgstr ""
+
+#: website/public/faq/index.html:371
+msgctxt "page:faq/index.html"
+msgid ""
+"Yes. The CLI uses the same analysis workflows. For a local JavaScript or "
+"Electron app:"
+msgstr ""
+
+#: website/public/faq/index.html:377
+msgctxt "page:faq/index.html"
+msgid "Terminal · static application analysis"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:390
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"Replace the path with an extracted application folder or ASAR file. {ph0}Use"
+" the CLI{ph1} for installation options."
+msgstr ""
+
+#: website/public/faq/index.html:397
+msgctxt "page:faq/index.html"
+msgid "What code does REA return?"
+msgstr ""
+
+#: website/public/faq/index.html:398
+msgctxt "page:faq/index.html"
+msgid ""
+"Native analysis returns assembly and pseudocode, with calls, references and "
+"relevant constants. JavaScript analysis returns modules, their relationships"
+" and source locations."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/faq/index.html:403
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"Your agent uses these findings to explain the behavior or write and test an "
+"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag "
+"checker{ph3} show how that process works."
+msgstr ""
+
+#: website/public/faq/index.html:414
+msgctxt "page:faq/index.html"
+msgid "What should I ask my agent?"
+msgstr ""
+
+#: website/public/faq/index.html:415
+msgctxt "page:faq/index.html"
+msgid ""
+"Give it a local target and one behavior to investigate. For a JavaScript or "
+"Electron app:"
+msgstr ""
+
+#. {ph0}:
+#: website/public/faq/index.html:421
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}: /absolute/path/to/app
+#. {ph4}:
+#. {ph5}:
+#: website/public/faq/index.html:434
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. "
+"Show the relevant code and source locations.{ph4}{ph5}{ph6}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:444
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"Replace the path with your target. The {ph0}guides{ph1} provide prompts for "
+"native, Electron and browser examples."
+msgstr ""
+
+#: website/public/faq/index.html:454
+msgctxt "page:faq/index.html"
+msgid "Troubleshooting"
+msgstr ""
+
+#: website/public/faq/index.html:457
+msgctxt "page:faq/index.html"
+msgid "Why can't my agent see the REA tools?"
+msgstr ""
+
+#. {ph0}: doctor
+#: website/public/faq/index.html:458
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"Restart or reconnect your agent after setup. Check its REA registration with"
+" {ph0}; for Codex:"
+msgstr ""
+
+#: website/public/faq/index.html:464
+msgctxt "page:faq/index.html"
+msgid "Terminal · check one client"
+msgstr ""
+
+#. {ph0}: codex
+#. {ph1}: claude_code
+#. {ph2}: cursor
+#: website/public/faq/index.html:476
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report "
+"shows a missing or stale registration, run setup for that client:"
+msgstr ""
+
+#: website/public/faq/index.html:484
+msgctxt "page:faq/index.html"
+msgid "Terminal · repair one client's setup"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:496
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"Review its plan and restart the client. If registration is healthy but tools"
+" remain absent, check the client's MCP connection error. {ph0}More setup "
+"diagnostics{ph1}."
+msgstr ""
+
+#: website/public/faq/index.html:504
+msgctxt "page:faq/index.html"
+msgid "Do I need to start Hopper first?"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:505
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"REA starts Hopper when an operation needs it. On macOS, complete the first-"
+"run choice of demo mode or license activation before unattended analysis. "
+"{ph0}See native provider setup{ph1}."
+msgstr ""
+
+#: website/public/faq/index.html:514
+msgctxt "page:faq/index.html"
+msgid "What should I do if I hit a bug?"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:515
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent "
+"release may already fix the problem."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:519
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"If it persists, {ph0}open an issue{ph1} with your REA version, operating "
+"system, target type, steps to reproduce and error output. Include the "
+"provider name when the problem involves native analysis."
+msgstr ""
+
+#: website/public/faq/index.html:533
+msgctxt "page:faq/index.html"
+msgid "Data and sharing"
+msgstr ""
+
+#: website/public/faq/index.html:536
+msgctxt "page:faq/index.html"
+msgid "Does REA upload my app?"
+msgstr ""
+
+#: website/public/faq/index.html:537
+msgctxt "page:faq/index.html"
+msgid ""
+"REA analyzes targets on your machine. Your agent receives the results, and "
+"its model provider's data policy applies to those results."
+msgstr ""
+
+#: website/public/faq/index.html:544
+msgctxt "page:faq/index.html"
+msgid "How can I share an example or contribute?"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/faq/index.html:545
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"Have a useful REA example? We'd love to see it. Share the target, your "
+"question, the findings and how you checked them in an {ph0}issue{ph1} or "
+"{ph2}pull request{ph3}. Short code excerpts and figures help others follow "
+"the investigation."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/faq/index.html:557
+#, python-brace-format
+msgctxt "page:faq/index.html"
+msgid ""
+"Bug reports, feature requests, documentation and code improvements are "
+"welcome too. You can also discuss an example in the {ph0}community{ph1}."
+msgstr ""
+
+#: website/public/faq/index.html:6
+msgctxt "page:faq/index.html"
+msgid "REA FAQ: Setup, Updates and Troubleshooting"
+msgstr ""
+
+#: website/public/faq/index.html:7
+msgctxt "page:faq/index.html"
+msgid ""
+"Answers to common REA questions: installation, updates, analysis tools, "
+"coding agents, troubleshooting and sharing examples."
+msgstr ""
+
+#: website/public/faq/index.html:208
+msgctxt "page:faq/index.html"
+msgid "On this page"
+msgstr ""
+
+#: website/public/faq/index.html:217
+msgctxt "page:faq/index.html"
+msgid "Frequently asked questions about REA"
+msgstr ""
+
+#: website/public/faq/index.html:235
+msgctxt "page:faq/index.html"
+msgid "Copy REA setup command"
+msgstr ""
+
+#: website/public/faq/index.html:276
+msgctxt "page:faq/index.html"
+msgid "Copy REA update command"
+msgstr ""
+
+#: website/public/faq/index.html:294
+msgctxt "page:faq/index.html"
+msgid "Copy agent setup refresh command"
+msgstr ""
+
+#: website/public/faq/index.html:378
+msgctxt "page:faq/index.html"
+msgid "Copy REA CLI analysis command"
+msgstr ""
+
+#: website/public/faq/index.html:425
+msgctxt "page:faq/index.html"
+msgid "Copy example analysis prompt"
+msgstr ""
+
+#: website/public/faq/index.html:465
+msgctxt "page:faq/index.html"
+msgid "Copy client diagnosis command"
+msgstr ""
+
+#: website/public/faq/index.html:485
+msgctxt "page:faq/index.html"
+msgid "Copy scoped setup command"
+msgstr ""
+
+#: website/public/faq/index.html:584
+msgctxt "page:faq/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/first-investigation/index.html:113
+msgctxt "page:first-investigation/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/first-investigation/index.html:203
+#, python-brace-format
+msgctxt "page:first-investigation/index.html"
+msgid "{ph0}Home{ph1} / Your first investigation"
+msgstr ""
+
+#. {ph0}: notes-example
+#: website/public/first-investigation/index.html:328
+#, python-brace-format
+msgctxt "page:first-investigation/index.html"
+msgid ""
+"If your agent can’t download files, unzip this archive yourself. Give it the"
+" path to the {ph0} folder and the same export question."
+msgstr ""
+
+#: website/public/first-investigation/index.html:335
+msgctxt "page:first-investigation/index.html"
+msgid "3. Follow the answer back to the code"
+msgstr ""
+
+#: website/public/first-investigation/index.html:336
+msgctxt "page:first-investigation/index.html"
+msgid "Look for a short explanation with file and line references:"
+msgstr ""
+
+#. {ph0}: notes:export
+#. {ph1}: notes.csv
+#. {ph2}: id
+#. {ph3}: title
+#: website/public/first-investigation/index.html:338
+#, python-brace-format
+msgctxt "page:first-investigation/index.html"
+msgid ""
+"The button sends a {ph0} message. The main process formats the notes as CSV "
+"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and "
+"{ph3}."
+msgstr ""
+
+#: website/public/first-investigation/index.html:346
+msgctxt "page:first-investigation/index.html"
+msgid "From the button to the file writer"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}: renderer.js
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#. {ph6}: notes.exportCsv()
+#. {ph7}:
+#: website/public/first-investigation/index.html:348
+#, python-brace-format
+msgctxt "page:first-investigation/index.html"
+msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}: preload.js
+#. {ph2}:
+#. {ph3}:
+#. {ph4}: notes:export
+#. {ph5}:
+#. {ph6}:
+#. {ph7}:
+#: website/public/first-investigation/index.html:356
+#, python-brace-format
+msgctxt "page:first-investigation/index.html"
+msgid ""
+"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the "
+"main process.{ph7}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}: main.js
+#. {ph2}:
+#. {ph3}:
+#. {ph4}: notes.csv
+#. {ph5}:
+#. {ph6}:
+#. {ph7}: csv.js
+#. {ph8}:
+#: website/public/first-investigation/index.html:364
+#, python-brace-format
+msgctxt "page:first-investigation/index.html"
+msgid ""
+"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in "
+"{ph7} and writes the file.{ph8}"
+msgstr ""
+
+#: website/public/first-investigation/index.html:375
+msgctxt "page:first-investigation/index.html"
+msgid ""
+"REA’s static analysis pairs the message with its handler. The destination is"
+" read from code."
+msgstr ""
+
+#. {ph0}: main.js
+#: website/public/first-investigation/index.html:382
+#, python-brace-format
+msgctxt "page:first-investigation/index.html"
+msgid "{ph0} · lines 8–12"
+msgstr ""
+
+#: website/public/first-investigation/index.html:383
+msgctxt "page:first-investigation/index.html"
+msgid "Source"
+msgstr ""
+
+#: website/public/first-investigation/index.html:391
+msgctxt "page:first-investigation/index.html"
+msgid ""
+"The file path, formatter and write call are together in this handler. Ask "
+"your agent to show these lines if its answer leaves them out."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/first-investigation/index.html:396
+#, python-brace-format
+msgctxt "page:first-investigation/index.html"
+msgid "{ph0}See the full code trace and recorded REA result{ph1}."
+msgstr ""
+
+#: website/public/first-investigation/index.html:403
+msgctxt "page:first-investigation/index.html"
+msgid "4. Check a prediction"
+msgstr ""
+
+#: website/public/first-investigation/index.html:404
+msgctxt "page:first-investigation/index.html"
+msgid ""
+"A comma separates CSV columns. What happens when a note title itself "
+"contains a comma or quotation marks?"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}: Hello, "REA"
+#. {ph4}: toCsv
+#. {ph5}: Node.js
+#. {ph6}:
+#. {ph7}:
+#: website/public/first-investigation/index.html:424
+#, python-brace-format
+msgctxt "page:first-investigation/index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then "
+"run the example’s {ph4} formatter with {ph5} to check it. Show the "
+"prediction and actual output.{ph6}{ph7}{ph8}"
+msgstr ""
+
+#: website/public/first-investigation/index.html:437
+msgctxt "page:first-investigation/index.html"
+msgid "Expected formatter output"
+msgstr ""
+
+#. {ph0}: Node.js
+#: website/public/first-investigation/index.html:442
+#, python-brace-format
+msgctxt "page:first-investigation/index.html"
+msgid ""
+"The title stays in one quoted field; each quotation mark is doubled. This "
+"checks the formatter directly with {ph0}."
+msgstr ""
+
+#: website/public/first-investigation/index.html:448
+msgctxt "page:first-investigation/index.html"
+msgid "Run the check yourself"
+msgstr ""
+
+#. {ph0}: notes-example
+#: website/public/first-investigation/index.html:449
+#, python-brace-format
+msgctxt "page:first-investigation/index.html"
+msgid "Open a terminal in the unpacked {ph0} folder:"
+msgstr ""
+
+#: website/public/first-investigation/index.html:490
+msgctxt "page:first-investigation/index.html"
+msgid "5. Ask another question"
+msgstr ""
+
+#: website/public/first-investigation/index.html:491
+msgctxt "page:first-investigation/index.html"
+msgid "Try a follow-up in the same conversation:"
+msgstr ""
+
+#: website/public/first-investigation/index.html:493
+msgctxt "page:first-investigation/index.html"
+msgid ""
+"What happens if the file can’t be written? Follow the error back to the "
+"page."
+msgstr ""
+
+#: website/public/first-investigation/index.html:498
+msgctxt "page:first-investigation/index.html"
+msgid ""
+"Or give your agent an app of your own and ask about one button, file or "
+"behavior."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/first-investigation/index.html:503
+#, python-brace-format
+msgctxt "page:first-investigation/index.html"
+msgid ""
+"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in "
+"a packaged Electron app.{ph3}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/first-investigation/index.html:509
+#, python-brace-format
+msgctxt "page:first-investigation/index.html"
+msgid ""
+"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original "
+"instructions and the reconstruction’s checks.{ph3}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/first-investigation/index.html:517
+#, python-brace-format
+msgctxt "page:first-investigation/index.html"
+msgid ""
+"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the "
+"connection if you get stuck.{ph3}"
+msgstr ""
+
+#: website/public/first-investigation/index.html:6
+msgctxt "page:first-investigation/index.html"
+msgid "Your First Reverse Engineering Investigation — REA"
+msgstr ""
+
+#: website/public/first-investigation/index.html:7
+msgctxt "page:first-investigation/index.html"
+msgid ""
+"Try REA on a small Notes app. Set up your agent, ask where exported notes "
+"go, and check the CSV formatter with a sample title."
+msgstr ""
+
+#: website/public/first-investigation/index.html:217
+msgctxt "page:first-investigation/index.html"
+msgid "On this page"
+msgstr ""
+
+#: website/public/first-investigation/index.html:227
+msgctxt "page:first-investigation/index.html"
+msgid "Your first REA investigation"
+msgstr ""
+
+#: website/public/first-investigation/index.html:243
+msgctxt "page:first-investigation/index.html"
+msgid "Copy REA installation prompt"
+msgstr ""
+
+#: website/public/first-investigation/index.html:265
+msgctxt "page:first-investigation/index.html"
+msgid "Copy setup command"
+msgstr ""
+
+#: website/public/first-investigation/index.html:293
+msgctxt "page:first-investigation/index.html"
+msgid "Copy Notes investigation prompt"
+msgstr ""
+
+#: website/public/first-investigation/index.html:415
+msgctxt "page:first-investigation/index.html"
+msgid "Copy CSV check prompt"
+msgstr ""
+
+#: website/public/first-investigation/index.html:456
+#: website/public/first-investigation/index.html:473
+msgctxt "page:first-investigation/index.html"
+msgid "Copy formatter check command"
+msgstr ""
+
+#: website/public/first-investigation/index.html:545
+msgctxt "page:first-investigation/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/get-started/index.html:113
+msgctxt "page:get-started/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:203
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Home{ph1} / Get started"
+msgstr ""
+
+#: website/public/get-started/index.html:204
+msgctxt "page:get-started/index.html"
+msgid "Set up REA."
+msgstr ""
+
+#: website/public/get-started/index.html:205
+msgctxt "page:get-started/index.html"
+msgid ""
+"Set up your computer and coding agent, connect REA, then investigate a small"
+" app."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:209
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"New to this? Follow the four steps below. Already have an agent? Go straight"
+" to {ph0}Connect REA{ph1}."
+msgstr ""
+
+#: website/public/get-started/index.html:216
+#: website/public/get-started/index.html:215
+msgctxt "page:get-started/index.html"
+msgid "On this page"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:218
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}1. Prepare your computer{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:219
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}2. Choose an agent{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:220
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}3. Connect REA{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:221
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}4. Try an investigation{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:222
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Other targets and providers{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:223
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Use the CLI{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:224
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Getting help{ph1}"
+msgstr ""
+
+#: website/public/get-started/index.html:229
+msgctxt "page:get-started/index.html"
+msgid "1. Prepare your computer"
+msgstr ""
+
+#: website/public/get-started/index.html:230
+msgctxt "page:get-started/index.html"
+msgid ""
+"Use the computer where your target files are stored. A local coding agent "
+"can read those files and run tools for you."
+msgstr ""
+
+#: website/public/get-started/index.html:235
+msgctxt "page:get-started/index.html"
+msgid "How do I open a terminal?"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/get-started/index.html:237
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press "
+"Enter."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: ⌘
+#. {ph3}: Space
+#. {ph4}:
+#. {ph5}:
+#: website/public/get-started/index.html:241
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: Ctrl
+#. {ph3}: Alt
+#. {ph4}: T
+#: website/public/get-started/index.html:245
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops."
+msgstr ""
+
+#. {ph0}: Ctrl
+#. {ph1}: V
+#. {ph2}: ⌘
+#. {ph3}: V
+#. {ph4}: Ctrl
+#. {ph5}: Shift
+#. {ph6}: V
+#: website/public/get-started/index.html:250
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}"
+" {ph5} {ph6}), then press Enter."
+msgstr ""
+
+#: website/public/get-started/index.html:255
+msgctxt "page:get-started/index.html"
+msgid ""
+"Commands go in the terminal. Prompts labeled “Your coding agent” go in the "
+"agent's chat."
+msgstr ""
+
+#. {ph0}: Node.js
+#. {ph1}: Node.js
+#: website/public/get-started/index.html:260
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"You'll need {ph0} 22 (22.23.4+), 24 (24.22.1+) or 26+ (>=26.12.1). npm comes"
+" with {ph1}."
+msgstr ""
+
+#. {ph0}: Node.js
+#: website/public/get-started/index.html:266
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "Don't have {ph0}, or not sure?"
+msgstr ""
+
+#: website/public/get-started/index.html:269
+msgctxt "page:get-started/index.html"
+msgid "Open a terminal and check:"
+msgstr ""
+
+#: website/public/get-started/index.html:272
+msgctxt "page:get-started/index.html"
+msgid "Terminal"
+msgstr ""
+
+#: website/public/get-started/index.html:273
+#: website/public/get-started/index.html:296
+#: website/public/get-started/index.html:326
+#: website/public/get-started/index.html:351
+#: website/public/get-started/index.html:374
+#: website/public/get-started/index.html:389
+#: website/public/get-started/index.html:423
+#: website/public/get-started/index.html:454
+#: website/public/get-started/index.html:468
+#: website/public/get-started/index.html:486
+#: website/public/get-started/index.html:538
+#: website/public/get-started/index.html:552
+#: website/public/get-started/index.html:584
+#: website/public/get-started/index.html:613
+#: website/public/get-started/index.html:779
+#: website/public/get-started/index.html:809
+#: website/public/get-started/index.html:834
+#: website/public/get-started/index.html:849
+#: website/public/get-started/index.html:897
+#: website/public/get-started/index.html:930
+#: website/public/get-started/index.html:1085
+#: website/public/get-started/index.html:1147
+#: website/public/get-started/index.html:1170
+#: website/public/get-started/index.html:1194
+#: website/public/get-started/index.html:1242
+#: website/public/get-started/index.html:1317
+#: website/public/get-started/index.html:1343
+#: website/public/get-started/index.html:1360
+#: website/public/get-started/index.html:1603
+#: website/public/get-started/index.html:1662
+#: website/public/get-started/index.html:1681
+#: website/public/get-started/index.html:1703
+#: website/public/get-started/index.html:1746
+#: website/public/get-started/index.html:1776
+#: website/public/get-started/index.html:1797
+msgctxt "page:get-started/index.html"
+msgid "Copy"
+msgstr ""
+
+#. {ph0}: node -v
+#. {ph1}: Node.js
+#: website/public/get-started/index.html:285
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"If {ph0} prints v22.23.4+, v24.22.1+ or v26.12.1+, you're ready. If it "
+"prints an older version or \"not recognized\" / \"command not found\", "
+"install {ph1} 24 LTS:"
+msgstr ""
+
+#. {ph0}: node -v
+#: website/public/get-started/index.html:307
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Type Y if asked to accept the terms. Close PowerShell, open it again, then "
+"run {ph0}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:311
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Download the Node.js installer{ph1} if winget is unavailable."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: npx
+#. {ph3}: npx.cmd
+#. {ph4}: npm.cmd
+#: website/public/get-started/index.html:317
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"If PowerShell later says {ph0}\"running scripts is disabled on this "
+"system\"{ph1} when you run {ph2}, use {ph3} instead. For npm, use {ph4}:"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:340
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"For a first installation, download the {ph0}Node.js 24 LTS macOS installer "
+"(.pkg){ph1}, open it and follow the installer. Then reopen Terminal."
+msgstr ""
+
+#: website/public/get-started/index.html:347
+msgctxt "page:get-started/index.html"
+msgid "Already use Homebrew?"
+msgstr ""
+
+#. {ph0}: sudo apt install curl unzip
+#: website/public/get-started/index.html:366
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Install curl and unzip first if they are missing. On Debian or Ubuntu, run "
+"{ph0}; on other distributions, use your package manager."
+msgstr ""
+
+#: website/public/get-started/index.html:385
+msgctxt "page:get-started/index.html"
+msgid "Close the terminal, open it again, then:"
+msgstr ""
+
+#. {ph0}: nodejs
+#. {ph1}: node -v
+#: website/public/get-started/index.html:402
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Your distribution's own {ph0} package is often older than 22.23.4, so check "
+"{ph1} if you use it instead."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:408
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Prefer a regular installer? Download the LTS version from "
+"{ph0}nodejs.org{ph1}."
+msgstr ""
+
+#: website/public/get-started/index.html:415
+msgctxt "page:get-started/index.html"
+msgid "Make a working folder for your agent"
+msgstr ""
+
+#: website/public/get-started/index.html:416
+msgctxt "page:get-started/index.html"
+msgid "In your terminal, make a folder for the exercise, then move into it:"
+msgstr ""
+
+#: website/public/get-started/index.html:435
+msgctxt "page:get-started/index.html"
+msgid ""
+"Keep this terminal open for the next step. If you already have a working "
+"folder, open it instead."
+msgstr ""
+
+#: website/public/get-started/index.html:442
+msgctxt "page:get-started/index.html"
+msgid "2. Choose a coding agent"
+msgstr ""
+
+#: website/public/get-started/index.html:443
+msgctxt "page:get-started/index.html"
+msgid ""
+"Your agent is the AI you talk to. REA supplies the inspection tools it uses."
+" Pick one client below; open its instructions if you haven't used it before."
+msgstr ""
+
+#: website/public/get-started/index.html:449
+msgctxt "page:get-started/index.html"
+msgid "Codex · use your ChatGPT account"
+msgstr ""
+
+#: website/public/get-started/index.html:450
+msgctxt "page:get-started/index.html"
+msgid "Install Codex using the command for your operating system:"
+msgstr ""
+
+#: website/public/get-started/index.html:479
+msgctxt "page:get-started/index.html"
+msgid ""
+"After installation, reopen your terminal and return to the working folder. "
+"Then start Codex:"
+msgstr ""
+
+#: website/public/get-started/index.html:497
+msgctxt "page:get-started/index.html"
+msgid ""
+"Choose “Sign in with ChatGPT”, complete the browser sign-in, then return to "
+"the terminal. When the message box appears, continue to step 3."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:502
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Codex installation and sign-in{ph1}"
+msgstr ""
+
+#: website/public/get-started/index.html:509
+msgctxt "page:get-started/index.html"
+msgid "Cursor, Windsurf or VS Code · use an editor"
+msgstr ""
+
+#: website/public/get-started/index.html:511
+msgctxt "page:get-started/index.html"
+msgid "Install the editor for your operating system and sign in."
+msgstr ""
+
+#: website/public/get-started/index.html:514
+msgctxt "page:get-started/index.html"
+msgid "Open the rea-work folder you made in step 1."
+msgstr ""
+
+#: website/public/get-started/index.html:515
+msgctxt "page:get-started/index.html"
+msgid ""
+"Open its AI chat and choose Agent mode. In Windsurf or Devin Desktop, open "
+"the agent chat; in VS Code, set up GitHub Copilot first."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/get-started/index.html:521
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}Cursor setup{ph1} · {ph2}Windsurf / Devin Desktop setup{ph3} · {ph4}VS "
+"Code and Copilot setup{ph5}"
+msgstr ""
+
+#: website/public/get-started/index.html:533
+msgctxt "page:get-started/index.html"
+msgid "Claude Code · use your Claude account"
+msgstr ""
+
+#: website/public/get-started/index.html:534
+msgctxt "page:get-started/index.html"
+msgid "Install using the command for your operating system:"
+msgstr ""
+
+#. {ph0}: claude
+#: website/public/get-started/index.html:563
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Reopen your terminal, return to your working folder and run {ph0}. Follow "
+"the sign-in prompts. Access uses an eligible Claude subscription or a "
+"configured API account."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:568
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Claude Code installation and account options{ph1}"
+msgstr ""
+
+#: website/public/get-started/index.html:575
+msgctxt "page:get-started/index.html"
+msgid "Claude Desktop · use a desktop chat"
+msgstr ""
+
+#: website/public/get-started/index.html:576
+msgctxt "page:get-started/index.html"
+msgid ""
+"Install Claude Desktop on Windows or macOS and sign in. Quit it completely, "
+"then run this command in a terminal you opened outside Claude:"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:595
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Review and approve the plan, reopen Claude, then {ph0}check the connection "
+"in step 3{ph1}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/get-started/index.html:599
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}Download Claude Desktop{ph1} · {ph2}Claude Desktop connection "
+"details{ph3}"
+msgstr ""
+
+#: website/public/get-started/index.html:609
+msgctxt "page:get-started/index.html"
+msgid "OpenCode · choose an AI model"
+msgstr ""
+
+#. {ph0}: opencode
+#. {ph1}: /connect
+#: website/public/get-started/index.html:624
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Run {ph0} in your working folder. Use {ph1} in its chat to connect your "
+"model account, then select a model."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:629
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}OpenCode installation and model setup{ph1}"
+msgstr ""
+
+#: website/public/get-started/index.html:636
+msgctxt "page:get-started/index.html"
+msgid "All supported clients and setup IDs"
+msgstr ""
+
+#. {ph0}: --client
+#: website/public/get-started/index.html:637
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Use the ID with {ph0} when choosing a client explicitly. These clients are "
+"supported in npm 6.8.0 and later."
+msgstr ""
+
+#: website/public/get-started/index.html:645
+msgctxt "page:get-started/index.html"
+msgid "Client"
+msgstr ""
+
+#: website/public/get-started/index.html:646
+msgctxt "page:get-started/index.html"
+msgid "Setup ID"
+msgstr ""
+
+#. {ph0}: droid
+#. {ph1}: dsh
+#. {ph2}: kimi
+#. {ph3}: qoder
+#. {ph4}: trae
+#. {ph5}: workbuddy
+#. {ph6}: zcode
+#. {ph7}: freebuff
+#: website/public/get-started/index.html:753
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}, {ph1}, {ph2}, {ph3}, {ph4}, {ph5} and {ph6} require npm 6.5.0 or "
+"later. {ph7} requires npm 6.8.0 or later."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/get-started/index.html:759
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}Client configuration and troubleshooting{ph1} · {ph2}Release "
+"availability{ph3}"
+msgstr ""
+
+#: website/public/get-started/index.html:771
+msgctxt "page:get-started/index.html"
+msgid "Grok Bot · connect on its hosted computer"
+msgstr ""
+
+#. {ph0}: rea
+#: website/public/get-started/index.html:772
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"In Grok Bot's chat, ask it to add a custom MCP server named {ph0} using this"
+" command on the Bot's computer:"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:790
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Grok Bot connector instructions{ph1}"
+msgstr ""
+
+#: website/public/get-started/index.html:800
+msgctxt "page:get-started/index.html"
+msgid "3. Connect REA"
+msgstr ""
+
+#: website/public/get-started/index.html:801
+msgctxt "page:get-started/index.html"
+msgid "Copy this into your coding agent:"
+msgstr ""
+
+#. {ph0}:
+#: website/public/get-started/index.html:804
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}: npx rea-agents@latest setup
+#. {ph4}:
+#. {ph5}:
+#: website/public/get-started/index.html:818
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}."
+" Show me the setup plan for approval, then verify the "
+"installation.{ph4}{ph5}{ph6}"
+msgstr ""
+
+#: website/public/get-started/index.html:830
+msgctxt "page:get-started/index.html"
+msgid "Or run setup yourself"
+msgstr ""
+
+#: website/public/get-started/index.html:845
+msgctxt "page:get-started/index.html"
+msgid "For one specific client, add its setup ID:"
+msgstr ""
+
+#. {ph0}: y
+#: website/public/get-started/index.html:860
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"If npm asks to download the package, type {ph0} and press Enter. In REA's "
+"client list, use the arrow keys to move, Space to select your client and "
+"Enter to continue."
+msgstr ""
+
+#: website/public/get-started/index.html:866
+msgctxt "page:get-started/index.html"
+msgid ""
+"Choose your client and review the setup plan. REA adds its MCP connection "
+"and the matching investigation skill, keeping a backup of existing "
+"configuration. It asks before applying the changes."
+msgstr ""
+
+#: website/public/get-started/index.html:871
+msgctxt "page:get-started/index.html"
+msgid ""
+"MCP is the connection that lets your agent call REA. The skill gives it a "
+"workflow for investigating software."
+msgstr ""
+
+#: website/public/get-started/index.html:875
+msgctxt "page:get-started/index.html"
+msgid ""
+"For the first exercise, you can skip the optional Hopper installation. "
+"Restart your client when setup finishes."
+msgstr ""
+
+#: website/public/get-started/index.html:880
+msgctxt "page:get-started/index.html"
+msgid "How do I restart my client?"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: ⌘
+#. {ph3}: Q
+#: website/public/get-started/index.html:881
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the"
+" app completely, then open it again. Closing the window isn't enough. On "
+"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there "
+"is one."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:888
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session"
+" and start it again."
+msgstr ""
+
+#. {ph0}: codex
+#. {ph1}: "healthy": true
+#: website/public/get-started/index.html:908
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Replace {ph0} with your client's setup ID. A successful check reports {ph1}."
+" Then ask your agent:"
+msgstr ""
+
+#: website/public/get-started/index.html:914
+msgctxt "page:get-started/index.html"
+msgid "Check that REA is connected and show me which REA tools you can use."
+msgstr ""
+
+#: website/public/get-started/index.html:921
+msgctxt "page:get-started/index.html"
+msgid "4. Try your first investigation"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:922
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"The example is a six-file Electron app with an {ph0}Export notes{ph1} "
+"button. Your agent can inspect its code without installing or launching "
+"Electron."
+msgstr ""
+
+#: website/public/get-started/index.html:929
+msgctxt "page:get-started/index.html"
+msgid "Your coding agent"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}: https://rea.tools/examples/notes-
+#. example.zip
+#. {ph4}: notes.csv
+#. {ph5}:
+#. {ph6}:
+#: website/public/get-started/index.html:939
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use "
+"REA to find what happens when I click Export notes. Show where {ph4} is "
+"written, which fields it contains, and the relevant files and "
+"lines.{ph5}{ph6}{ph7}"
+msgstr ""
+
+#: website/public/get-started/index.html:953
+msgctxt "page:get-started/index.html"
+msgid "Look for a short explanation with file and line references:"
+msgstr ""
+
+#. {ph0}: notes:export
+#. {ph1}: notes.csv
+#. {ph2}: id
+#. {ph3}: title
+#: website/public/get-started/index.html:955
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"The button sends a {ph0} message. The main process formats the notes as CSV "
+"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and "
+"{ph3}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:962
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Check a prediction in the guided exercise →{ph1}"
+msgstr ""
+
+#: website/public/get-started/index.html:968
+msgctxt "page:get-started/index.html"
+msgid "Download the example yourself, or use your own app"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:971
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Download example ZIP{ph1}"
+msgstr ""
+
+#. {ph0}: notes-example
+#: website/public/get-started/index.html:979
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"If your agent can’t download files, unzip this archive yourself. Give it the"
+" path to the {ph0} folder and the same export question."
+msgstr ""
+
+#. {ph0}: /absolute/path/to/app
+#: website/public/get-started/index.html:985
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Use REA to inspect the app at {ph0}. Find how it exports data and show the "
+"relevant files and lines."
+msgstr ""
+
+#: website/public/get-started/index.html:992
+msgctxt "page:get-started/index.html"
+msgid "How do I get a folder's full path?"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/get-started/index.html:994
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose "
+"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/get-started/index.html:999
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose "
+"{ph2}Copy \"…\" as Pathname{ph3}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:1003
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}Any system:{ph1} drag the folder into a terminal window and its path "
+"appears."
+msgstr ""
+
+#: website/public/get-started/index.html:1008
+#: website/public/get-started/index.html:1769
+msgctxt "page:get-started/index.html"
+msgid "In a terminal, put quotes around a path that contains spaces."
+msgstr ""
+
+#: website/public/get-started/index.html:1015
+msgctxt "page:get-started/index.html"
+msgid "Analyze another kind of software"
+msgstr ""
+
+#: website/public/get-started/index.html:1016
+msgctxt "page:get-started/index.html"
+msgid ""
+"Choose the section for your target. A provider is the local analysis tool "
+"REA uses for that kind of software."
+msgstr ""
+
+#: website/public/get-started/index.html:1021
+msgctxt "page:get-started/index.html"
+msgid "Native executables and libraries · Hopper, Ghidra or IDA"
+msgstr ""
+
+#: website/public/get-started/index.html:1024
+msgctxt "page:get-started/index.html"
+msgid ""
+"Install one analysis tool on the computer running REA. The host is your "
+"operating system; the target is the program you want to inspect."
+msgstr ""
+
+#: website/public/get-started/index.html:1033
+msgctxt "page:get-started/index.html"
+msgid "Provider"
+msgstr ""
+
+#: website/public/get-started/index.html:1042
+msgctxt "page:get-started/index.html"
+msgid "Unavailable"
+msgstr ""
+
+#: website/public/get-started/index.html:1044
+msgctxt "page:get-started/index.html"
+msgid "x86_64 installer on supported distributions"
+msgstr ""
+
+#: website/public/get-started/index.html:1048
+msgctxt "page:get-started/index.html"
+msgid "x64 · experimental"
+msgstr ""
+
+#: website/public/get-started/index.html:1054
+msgctxt "page:get-started/index.html"
+msgid "Verified profiles"
+msgstr ""
+
+#: website/public/get-started/index.html:1055
+msgctxt "page:get-started/index.html"
+msgid "Verified headless profile"
+msgstr ""
+
+#: website/public/get-started/index.html:1056
+msgctxt "page:get-started/index.html"
+msgid "See provider guide"
+msgstr ""
+
+#: website/public/get-started/index.html:1062
+msgctxt "page:get-started/index.html"
+msgid "Hopper · let setup install or connect it"
+msgstr ""
+
+#: website/public/get-started/index.html:1063
+msgctxt "page:get-started/index.html"
+msgid ""
+"Connect Hopper on macOS or Linux. Run the setup command above; it detects an"
+" existing installation or offers an installation plan for your approval."
+msgstr ""
+
+#: website/public/get-started/index.html:1068
+msgctxt "page:get-started/index.html"
+msgid ""
+"Choose Hopper in setup and review its separate installation plan. On macOS, "
+"choose demo mode or activate your license when Hopper first opens. On Linux,"
+" setup prepares the supported demo and its private display."
+msgstr ""
+
+#: website/public/get-started/index.html:1074
+msgctxt "page:get-started/index.html"
+msgid ""
+"Automated Linux setup requires an x86_64 host running Ubuntu 24.04+, Fedora "
+"41+, Nobara 44+, Arch Linux, CachyOS or Omarchy. An existing Hopper launcher"
+" can also be configured on other supported Linux distributions. On Linux "
+"arm64, use Ghidra. Hopper is commercial software; its demo has vendor-"
+"defined limits."
+msgstr ""
+
+#: website/public/get-started/index.html:1096
+msgctxt "page:get-started/index.html"
+msgid ""
+"If macOS asks for Automation permission, allow the app that starts REA in "
+"System Settings → Privacy & Security → Automation, then retry."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:1101
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Hopper setup and troubleshooting{ph1}"
+msgstr ""
+
+#: website/public/get-started/index.html:1109
+msgctxt "page:get-started/index.html"
+msgid "Ghidra · install the free analysis tool and Java"
+msgstr ""
+
+#: website/public/get-started/index.html:1113
+msgctxt "page:get-started/index.html"
+msgid ""
+"Install a 64-bit JDK 21 or newer, including the Java compiler. Choose the "
+"package matching your computer's architecture."
+msgstr ""
+
+#. {ph0}: ghidra_…_PUBLIC_….zip
+#: website/public/get-started/index.html:1118
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Download Ghidra 12.1.4 from the release's Assets list and extract the {ph0} "
+"archive. Choose the release archive, not “Source code”."
+msgstr ""
+
+#. {ph0}: ghidraRun
+#. {ph1}: ghidraRun.bat
+#. {ph2}: GHIDRA_INSTALL_DIR
+#: website/public/get-started/index.html:1123
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Find the extracted folder containing {ph0} or {ph1}. Use that folder for "
+"{ph2}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/get-started/index.html:1129
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Download a JDK{ph1} · {ph2}Download Ghidra 12.1.4{ph3}"
+msgstr ""
+
+#. {ph0}: java.home
+#. {ph1}: JAVA_HOME
+#: website/public/get-started/index.html:1139
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Check Java. The first command prints {ph0}; use that folder for {ph1}. The "
+"second confirms the compiler is installed:"
+msgstr ""
+
+#: website/public/get-started/index.html:1160
+msgctxt "page:get-started/index.html"
+msgid "Connect Ghidra on Windows"
+msgstr ""
+
+#: website/public/get-started/index.html:1161
+msgctxt "page:get-started/index.html"
+msgid ""
+"Windows x64 has experimental, read-only support for native x86 and x64 PE "
+"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra "
+"12.1.x installation and a 64-bit JDK 21 or newer:"
+msgstr ""
+
+#: website/public/get-started/index.html:1184
+msgctxt "page:get-started/index.html"
+msgid ""
+"Replace the two paths with your installations, then review setup's plan."
+msgstr ""
+
+#: website/public/get-started/index.html:1190
+msgctxt "page:get-started/index.html"
+msgid "Connect your Ghidra installation"
+msgstr ""
+
+#: website/public/get-started/index.html:1206
+msgctxt "page:get-started/index.html"
+msgid ""
+"Replace both paths with your existing installations. For a fresh macOS or "
+"Linux arm64 installation, build the native decompiler for your computer "
+"before continuing."
+msgstr ""
+
+#: website/public/get-started/index.html:1212
+msgctxt "page:get-started/index.html"
+msgid "Build Ghidra's native decompiler"
+msgstr ""
+
+#: website/public/get-started/index.html:1213
+msgctxt "page:get-started/index.html"
+msgid ""
+"On macOS, the build needs Xcode Command Line Tools, make and bison. Use the "
+"guide for your computer:"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:1218
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}macOS · Intel{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:1224
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}macOS · Apple Silicon{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:1230
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Linux arm64 · native build instructions{ph1}"
+msgstr ""
+
+#: website/public/get-started/index.html:1238
+msgctxt "page:get-started/index.html"
+msgid "Then check Ghidra and save its paths for your client:"
+msgstr ""
+
+#: website/public/get-started/index.html:1255
+msgctxt "page:get-started/index.html"
+msgid ""
+"Keep these commands in the same terminal session. Rerun setup after setting "
+"the paths, approve the updated client configuration, then restart your "
+"agent."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/get-started/index.html:1260
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}Ghidra setup and architecture requirements{ph1} · {ph2}Windows Ghidra "
+"guide{ph3}"
+msgstr ""
+
+#: website/public/get-started/index.html:1273
+msgctxt "page:get-started/index.html"
+msgid "IDA · connect an existing installation"
+msgstr ""
+
+#: website/public/get-started/index.html:1274
+msgctxt "page:get-started/index.html"
+msgid ""
+"Use the IDA provider guide to prepare an upstream MCP registration. Choose "
+"an attached GUI with the original binary open, or a headless supervisor that"
+" opens a private database."
+msgstr ""
+
+#: website/public/get-started/index.html:1279
+msgctxt "page:get-started/index.html"
+msgid ""
+"Verified profiles include the Windows legacy GUI and headless supervisor, "
+"plus a macOS arm64 headless supervisor with IDA Professional 9.1. The "
+"optional native GUI bridge has its own version and platform requirements."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: 6.4.0
+#: website/public/get-started/index.html:1285
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"The macOS headless profile and native GUI bridge require a {ph0}REA source "
+"build{ph1} or a release containing those changes. npm {ph2} does not include"
+" them."
+msgstr ""
+
+#. {ph0}: node scripts/rea.mjs doctor --provider ida --json
+#. {ph1}: node scripts/rea.mjs setup
+#. {ph2}: npx
+#: website/public/get-started/index.html:1294
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"From the built checkout, run {ph0} and {ph1} instead of the {ph2} commands "
+"below."
+msgstr ""
+
+#: website/public/get-started/index.html:1301
+msgctxt "page:get-started/index.html"
+msgid "Prepare the IDA registration file"
+msgstr ""
+
+#. {ph0}: ida-mcp.json
+#. {ph1}: .txt
+#: website/public/get-started/index.html:1302
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Install and configure the upstream server using the IDA guide below. Then "
+"save its working registration as {ph0} in a text editor. On Windows, choose "
+"“All files” when saving in Notepad so it doesn't add {ph1}."
+msgstr ""
+
+#. {ph0}: idb_open
+#. {ph1}: idb_list
+#. {ph2}: idb_close
+#: website/public/get-started/index.html:1309
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"For a headless supervisor providing {ph0}, {ph1} and {ph2}, the file can "
+"look like this:"
+msgstr ""
+
+#. {ph0}: command
+#. {ph1}: args
+#. {ph2}: env
+#: website/public/get-started/index.html:1332
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"For an attached legacy 1.4.0 GUI server, copy its working {ph0}, {ph1} and "
+"optional {ph2} into the file. Open the original binary in IDA and start its "
+"upstream plugin before asking REA to inspect it."
+msgstr ""
+
+#: website/public/get-started/index.html:1374
+msgctxt "page:get-started/index.html"
+msgid ""
+"Use the JSON registration file you prepared with the provider guide, then "
+"rerun setup and restart your agent."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:1378
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}IDA profiles, registration examples and verified platforms{ph1}"
+msgstr ""
+
+#: website/public/get-started/index.html:1386
+msgctxt "page:get-started/index.html"
+msgid ""
+"Once connected, give your agent the original executable's full path and name"
+" your provider:"
+msgstr ""
+
+#. {ph0}: /absolute/path/to/program
+#: website/public/get-started/index.html:1391
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Use REA with my configured provider to inspect {ph0}. List its functions and"
+" strings, then explain the part that handles user input with references to "
+"the code."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:1398
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Follow a native analysis example{ph1}"
+msgstr ""
+
+#: website/public/get-started/index.html:1403
+msgctxt "page:get-started/index.html"
+msgid "Websites, Android, .NET, firmware and other targets"
+msgstr ""
+
+#: website/public/get-started/index.html:1406
+msgctxt "page:get-started/index.html"
+msgid ""
+"Open the guide for the target you have. Each guide gives the additional "
+"tools, supported hosts and first command."
+msgstr ""
+
+#: website/public/get-started/index.html:1414
+msgctxt "page:get-started/index.html"
+msgid "Target"
+msgstr ""
+
+#: website/public/get-started/index.html:1415
+msgctxt "page:get-started/index.html"
+msgid "Tools to prepare"
+msgstr ""
+
+#: website/public/get-started/index.html:1416
+msgctxt "page:get-started/index.html"
+msgid "Guide"
+msgstr ""
+
+#: website/public/get-started/index.html:1421
+msgctxt "page:get-started/index.html"
+msgid "JavaScript / Electron"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:1423
+#: website/public/get-started/index.html:1428
+#: website/public/get-started/index.html:1433
+#: website/public/get-started/index.html:1443
+#: website/public/get-started/index.html:1453
+#: website/public/get-started/index.html:1463
+#: website/public/get-started/index.html:1473
+#: website/public/get-started/index.html:1483
+#: website/public/get-started/index.html:1493
+#: website/public/get-started/index.html:1503
+#: website/public/get-started/index.html:1513
+#: website/public/get-started/index.html:1523
+#: website/public/get-started/index.html:1533
+#: website/public/get-started/index.html:1543
+#: website/public/get-started/index.html:1553
+#: website/public/get-started/index.html:1563
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Open guide{ph1}"
+msgstr ""
+
+#: website/public/get-started/index.html:1426
+msgctxt "page:get-started/index.html"
+msgid "Website"
+msgstr ""
+
+#: website/public/get-started/index.html:1431
+msgctxt "page:get-started/index.html"
+msgid ".NET / Flutter / packages"
+msgstr ""
+
+#: website/public/get-started/index.html:1441
+msgctxt "page:get-started/index.html"
+msgid "Android APK"
+msgstr ""
+
+#: website/public/get-started/index.html:1451
+msgctxt "page:get-started/index.html"
+msgid "Android device"
+msgstr ""
+
+#: website/public/get-started/index.html:1461
+msgctxt "page:get-started/index.html"
+msgid "Android resources"
+msgstr ""
+
+#: website/public/get-started/index.html:1471
+msgctxt "page:get-started/index.html"
+msgid "JEB project"
+msgstr ""
+
+#: website/public/get-started/index.html:1481
+msgctxt "page:get-started/index.html"
+msgid "Firmware"
+msgstr ""
+
+#: website/public/get-started/index.html:1491
+msgctxt "page:get-started/index.html"
+msgid "WASM"
+msgstr ""
+
+#: website/public/get-started/index.html:1501
+msgctxt "page:get-started/index.html"
+msgid "SQLite database"
+msgstr ""
+
+#: website/public/get-started/index.html:1511
+msgctxt "page:get-started/index.html"
+msgid "EVM bytecode"
+msgstr ""
+
+#: website/public/get-started/index.html:1521
+msgctxt "page:get-started/index.html"
+msgid "ELF / Linux crash"
+msgstr ""
+
+#: website/public/get-started/index.html:1531
+msgctxt "page:get-started/index.html"
+msgid "HAR / SAZ / mitmproxy"
+msgstr ""
+
+#: website/public/get-started/index.html:1541
+msgctxt "page:get-started/index.html"
+msgid "PCAP / PCAPNG"
+msgstr ""
+
+#: website/public/get-started/index.html:1551
+msgctxt "page:get-started/index.html"
+msgid "Logic signals"
+msgstr ""
+
+#: website/public/get-started/index.html:1561
+msgctxt "page:get-started/index.html"
+msgid "Process behavior"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#. {ph6}:
+#. {ph7}:
+#: website/public/get-started/index.html:1573
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}Flutter guide{ph1} · {ph2}Packages and resources{ph3} · {ph4}EVM "
+"bytecode{ph5} · {ph6}All investigation guides{ph7}"
+msgstr ""
+
+#: website/public/get-started/index.html:1593
+msgctxt "page:get-started/index.html"
+msgid "Use REA from a terminal"
+msgstr ""
+
+#: website/public/get-started/index.html:1595
+msgctxt "page:get-started/index.html"
+msgid "CLI commands, global installation and curl"
+msgstr ""
+
+#: website/public/get-started/index.html:1596
+msgctxt "page:get-started/index.html"
+msgid ""
+"Analyze a JavaScript or Electron application folder or ASAR archive without "
+"running the app:"
+msgstr ""
+
+#: website/public/get-started/index.html:1602
+msgctxt "page:get-started/index.html"
+msgid "Static application analysis"
+msgstr ""
+
+#. {ph0}: .asar
+#. {ph1}: "D:/apps/example"
+#: website/public/get-started/index.html:1614
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Replace the path with your extracted app directory or {ph0} file. On "
+"Windows, a path such as {ph1} works here."
+msgstr ""
+
+#: website/public/get-started/index.html:1620
+msgctxt "page:get-started/index.html"
+msgid "Where do I find an app's .asar file?"
+msgstr ""
+
+#. {ph0}: resources
+#: website/public/get-started/index.html:1621
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "Electron apps usually keep it in a {ph0} folder:"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar
+#: website/public/get-started/index.html:1626
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Windows:{ph1} {ph2}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar
+#. {ph3}:
+#. {ph4}:
+#: website/public/get-started/index.html:1632
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package "
+"Contents{ph4})"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: /opt/<App>/resources/app.asar
+#: website/public/get-started/index.html:1640
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Linux:{ph1} often {ph2}"
+msgstr ""
+
+#. {ph0}: app.asar
+#: website/public/get-started/index.html:1645
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "Some apps install elsewhere. Search the app's folder for {ph0}."
+msgstr ""
+
+#: website/public/get-started/index.html:1650
+msgctxt "page:get-started/index.html"
+msgid ""
+"The result identifies the app, shows connections between modules and gives "
+"their source locations. Connections REA cannot resolve are marked in the "
+"result."
+msgstr ""
+
+#. {ph0}: rea
+#: website/public/get-started/index.html:1655
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "If you'd like a permanent {ph0} command in your shell:"
+msgstr ""
+
+#: website/public/get-started/index.html:1661
+msgctxt "page:get-started/index.html"
+msgid "Install the CLI"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:1673
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Continue with the JavaScript application guide{ph1}"
+msgstr ""
+
+#. {ph0}: main
+#: website/public/get-started/index.html:1692
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Replace {ph0} with a function name or address from the target's function "
+"list. Ghidra must be configured first."
+msgstr ""
+
+#: website/public/get-started/index.html:1696
+msgctxt "page:get-started/index.html"
+msgid ""
+"On macOS or Linux, you can also use the curl installer after preparing "
+"Node.js:"
+msgstr ""
+
+#. {ph0}: rea setup
+#: website/public/get-started/index.html:1714
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Follow the setup prompts to connect your agent. If they don't appear, run "
+"{ph0}."
+msgstr ""
+
+#. {ph0}: rea
+#. {ph1}: "$HOME/.local/bin/rea" setup
+#: website/public/get-started/index.html:1718
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"If your shell can't find {ph0}, use the executable path printed by the "
+"installer. On Linux, the default setup command is {ph1}."
+msgstr ""
+
+#: website/public/get-started/index.html:1727
+msgctxt "page:get-started/index.html"
+msgid "Getting help"
+msgstr ""
+
+#: website/public/get-started/index.html:1729
+msgctxt "page:get-started/index.html"
+msgid "If your agent doesn't see REA"
+msgstr ""
+
+#. {ph0}: doctor
+#: website/public/get-started/index.html:1730
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"Restart or reconnect the client after setup. Check its REA connection with "
+"{ph0}; for Codex:"
+msgstr ""
+
+#: website/public/get-started/index.html:1734
+msgctxt "page:get-started/index.html"
+msgid ""
+"Use the client check in step 3 with your setup ID. In editor clients, enable"
+" REA in MCP settings and allow its tools in the agent chat."
+msgstr ""
+
+#: website/public/get-started/index.html:1741
+msgctxt "page:get-started/index.html"
+msgid "If a provider needs attention"
+msgstr ""
+
+#: website/public/get-started/index.html:1742
+msgctxt "page:get-started/index.html"
+msgid "Check the provider you're using. For Ghidra:"
+msgstr ""
+
+#: website/public/get-started/index.html:1745
+msgctxt "page:get-started/index.html"
+msgid "Check one provider"
+msgstr ""
+
+#: website/public/get-started/index.html:1757
+msgctxt "page:get-started/index.html"
+msgid "The report gives the failed check and a suggested next step."
+msgstr ""
+
+#: website/public/get-started/index.html:1762
+msgctxt "page:get-started/index.html"
+msgid "Windows, WSL and paths with spaces"
+msgstr ""
+
+#: website/public/get-started/index.html:1763
+msgctxt "page:get-started/index.html"
+msgid ""
+"Use Windows PowerShell for Windows clients and analysis tools. If your agent"
+" runs inside WSL, install Node.js and REA inside that Linux environment and "
+"use Linux paths there. Headless providers run on the same host as REA."
+msgstr ""
+
+#: website/public/get-started/index.html:1772
+msgctxt "page:get-started/index.html"
+msgid "Windows setup command:"
+msgstr ""
+
+#: website/public/get-started/index.html:1789
+msgctxt "page:get-started/index.html"
+msgid "Update or remove REA"
+msgstr ""
+
+#: website/public/get-started/index.html:1790
+msgctxt "page:get-started/index.html"
+msgid ""
+"To refresh your agent connection, run the latest setup command again, review"
+" its plan and restart your client."
+msgstr ""
+
+#. {ph0}: rea update
+#. {ph1}: npx rea-agents@latest uninstall
+#: website/public/get-started/index.html:1808
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"If you installed the global CLI, update it with {ph0}. Use {ph1} to remove "
+"REA's client configuration and skill."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/get-started/index.html:1814
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid "{ph0}Update and uninstall details{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/get-started/index.html:1822
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/get-started/index.html:1826
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an"
+" Electron app and a browser.{ph3}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/get-started/index.html:1833
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and "
+"diagnostics.{ph3}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/get-started/index.html:1837
+#, python-brace-format
+msgctxt "page:get-started/index.html"
+msgid ""
+"{ph0}REA community{ph1}{ph2}Questions, investigations and work in "
+"progress.{ph3}"
+msgstr ""
+
+#: website/public/get-started/index.html:6
+msgctxt "page:get-started/index.html"
+msgid "Install REA and Set Up Your Coding Agent"
+msgstr ""
+
+#: website/public/get-started/index.html:7
+msgctxt "page:get-started/index.html"
+msgid ""
+"Connect REA to your coding agent or inspect a local JavaScript or Electron "
+"app from the terminal. Setup, first questions and native provider guides."
+msgstr ""
+
+#: website/public/get-started/index.html:227
+msgctxt "page:get-started/index.html"
+msgid "REA getting started guide"
+msgstr ""
+
+#: website/public/get-started/index.html:273
+msgctxt "page:get-started/index.html"
+msgid "Copy Node.js version check"
+msgstr ""
+
+#: website/public/get-started/index.html:296
+msgctxt "page:get-started/index.html"
+msgid "Copy Node.js installation command for Windows"
+msgstr ""
+
+#: website/public/get-started/index.html:326
+msgctxt "page:get-started/index.html"
+msgid "Copy Windows REA setup command"
+msgstr ""
+
+#: website/public/get-started/index.html:351
+msgctxt "page:get-started/index.html"
+msgid "Copy Homebrew Node.js installation command"
+msgstr ""
+
+#: website/public/get-started/index.html:374
+msgctxt "page:get-started/index.html"
+msgid "Copy fnm installation command for Linux"
+msgstr ""
+
+#: website/public/get-started/index.html:389
+msgctxt "page:get-started/index.html"
+msgid "Copy Node.js 24 commands for Linux"
+msgstr ""
+
+#: website/public/get-started/index.html:423
+#: website/public/get-started/index.html:454
+#: website/public/get-started/index.html:468
+#: website/public/get-started/index.html:486
+#: website/public/get-started/index.html:538
+#: website/public/get-started/index.html:552
+#: website/public/get-started/index.html:584
+#: website/public/get-started/index.html:613
+#: website/public/get-started/index.html:779
+#: website/public/get-started/index.html:834
+#: website/public/get-started/index.html:849
+#: website/public/get-started/index.html:897
+#: website/public/get-started/index.html:1085
+#: website/public/get-started/index.html:1147
+#: website/public/get-started/index.html:1170
+#: website/public/get-started/index.html:1194
+#: website/public/get-started/index.html:1242
+#: website/public/get-started/index.html:1317
+#: website/public/get-started/index.html:1343
+#: website/public/get-started/index.html:1360
+#: website/public/get-started/index.html:1681
+#: website/public/get-started/index.html:1703
+#: website/public/get-started/index.html:1776
+#: website/public/get-started/index.html:1797
+msgctxt "page:get-started/index.html"
+msgid "Copy command"
+msgstr ""
+
+#: website/public/get-started/index.html:809
+msgctxt "page:get-started/index.html"
+msgid "Copy REA installation prompt"
+msgstr ""
+
+#: website/public/get-started/index.html:930
+msgctxt "page:get-started/index.html"
+msgid "Copy Notes investigation prompt"
+msgstr ""
+
+#: website/public/get-started/index.html:1603
+msgctxt "page:get-started/index.html"
+msgid "Copy JavaScript analysis command"
+msgstr ""
+
+#: website/public/get-started/index.html:1662
+msgctxt "page:get-started/index.html"
+msgid "Copy CLI installation command"
+msgstr ""
+
+#: website/public/get-started/index.html:1746
+msgctxt "page:get-started/index.html"
+msgid "Copy provider diagnosis command"
+msgstr ""
+
+#: website/public/get-started/index.html:1862
+msgctxt "page:get-started/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/guides/browser/index.html:113
+msgctxt "page:guides/browser/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/guides/browser/index.html:203
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation"
+msgstr ""
+
+#. {ph0}: notes.json
+#: website/public/guides/browser/index.html:227
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. "
+"Clicking it loads {ph4}, formats the two notes as CSV, and starts a "
+"download."
+msgstr ""
+
+#: website/public/guides/browser/index.html:235
+msgctxt "page:guides/browser/index.html"
+msgid "From the click to the CSV download"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/guides/browser/index.html:237
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in "
+"your browser while the capture is running.{ph5}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/guides/browser/index.html:245
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, "
+"response status and JSON structure from the selected page.{ph5}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}: fetch("./notes.json")
+#. {ph6}: export.js
+#. {ph7}:
+#: website/public/guides/browser/index.html:253
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the "
+"observed request to {ph5} in {ph6}.{ph7}"
+msgstr ""
+
+#: website/public/guides/browser/index.html:266
+msgctxt "page:guides/browser/index.html"
+msgid "Start the capture before clicking Export notes."
+msgstr ""
+
+#: website/public/guides/browser/index.html:272
+msgctxt "page:guides/browser/index.html"
+msgid "Open Chrome with remote debugging"
+msgstr ""
+
+#: website/public/guides/browser/index.html:273
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"Open the hosted Notes example with a separate browser profile and a local "
+"debugging port. On Linux:"
+msgstr ""
+
+#: website/public/guides/browser/index.html:279
+msgctxt "page:guides/browser/index.html"
+msgid "Start the example browser"
+msgstr ""
+
+#: website/public/guides/browser/index.html:280
+#: website/public/guides/browser/index.html:312
+#: website/public/guides/browser/index.html:346
+#: website/public/guides/browser/index.html:365
+#: website/public/guides/browser/index.html:430
+msgctxt "page:guides/browser/index.html"
+msgid "Copy"
+msgstr ""
+
+#: website/public/guides/browser/index.html:294
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"Use your installed browser's executable path on macOS or Windows. You can "
+"replace the page URL with another page you want to inspect."
+msgstr ""
+
+#: website/public/guides/browser/index.html:299
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"REA connects to this existing browser. You keep control of the page, perform"
+" the action, and close the browser when finished."
+msgstr ""
+
+#: website/public/guides/browser/index.html:305
+msgctxt "page:guides/browser/index.html"
+msgid "Ask your agent to watch one action"
+msgstr ""
+
+#. {ph0}:
+#: website/public/guides/browser/index.html:308
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#: website/public/guides/browser/index.html:321
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. "
+"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}"
+msgstr ""
+
+#. {ph0}: http://127.0.0.1:9222
+#: website/public/guides/browser/index.html:329
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page "
+"URL. Let it start the capture before you click."
+msgstr ""
+
+#: website/public/guides/browser/index.html:334
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"Your agent discovers the page target, starts an observation window, and "
+"reads the resulting evidence. It can then inspect the script behind the "
+"export."
+msgstr ""
+
+#: website/public/guides/browser/index.html:341
+msgctxt "page:guides/browser/index.html"
+msgid "Or capture from the terminal"
+msgstr ""
+
+#: website/public/guides/browser/index.html:342
+msgctxt "page:guides/browser/index.html"
+msgid "Find the page's target ID:"
+msgstr ""
+
+#: website/public/guides/browser/index.html:345
+msgctxt "page:guides/browser/index.html"
+msgid "Find the page"
+msgstr ""
+
+#. {ph0}: TARGET_ID
+#: website/public/guides/browser/index.html:358
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"Choose the target with the Notes example URL. Replace {ph0} below with its "
+"ID, then run:"
+msgstr ""
+
+#: website/public/guides/browser/index.html:364
+msgctxt "page:guides/browser/index.html"
+msgid "Capture the next ten seconds"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/browser/index.html:380
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}"
+" in that browser. The result arrives after the observation window ends."
+msgstr ""
+
+#: website/public/guides/browser/index.html:385
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"The captured result includes the selected page, network activity during that"
+" window, and the shape of the JSON response. Earlier requests are outside "
+"this capture."
+msgstr ""
+
+#: website/public/guides/browser/index.html:392
+msgctxt "page:guides/browser/index.html"
+msgid "Read the request and export script"
+msgstr ""
+
+#: website/public/guides/browser/index.html:395
+msgctxt "page:guides/browser/index.html"
+msgid "Recorded with REA 4.1.0 on the local Notes example"
+msgstr ""
+
+#: website/public/guides/browser/index.html:400
+msgctxt "page:guides/browser/index.html"
+msgid "Captured fact"
+msgstr ""
+
+#: website/public/guides/browser/index.html:401
+msgctxt "page:guides/browser/index.html"
+msgid "Value"
+msgstr ""
+
+#: website/public/guides/browser/index.html:406
+msgctxt "page:guides/browser/index.html"
+msgid "Request"
+msgstr ""
+
+#: website/public/guides/browser/index.html:410
+msgctxt "page:guides/browser/index.html"
+msgid "Response"
+msgstr ""
+
+#: website/public/guides/browser/index.html:414
+msgctxt "page:guides/browser/index.html"
+msgid "Request initiator"
+msgstr ""
+
+#. {ph0}: export.js
+#: website/public/guides/browser/index.html:415
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid "{ph0} · script"
+msgstr ""
+
+#: website/public/guides/browser/index.html:418
+msgctxt "page:guides/browser/index.html"
+msgid "Response structure"
+msgstr ""
+
+#. {ph0}: notes[]
+#. {ph1}: id
+#. {ph2}: title
+#: website/public/guides/browser/index.html:419
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid "{ph0} with {ph1} and {ph2} fields"
+msgstr ""
+
+#: website/public/guides/browser/index.html:429
+msgctxt "page:guides/browser/index.html"
+msgid "Read the loaded scripts"
+msgstr ""
+
+#. {ph0}: export.js
+#: website/public/guides/browser/index.html:443
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"The request identifies the data source, and REA records {ph0} as its "
+"initiator. Read the captured script source to see how the data is used:"
+msgstr ""
+
+#. {ph0}: export.js
+#: website/public/guides/browser/index.html:450
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid "{ph0} · example source excerpt"
+msgstr ""
+
+#. {ph0}: notes.json
+#: website/public/guides/browser/index.html:463
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"The download is constructed in the page using the JSON response. The CSV "
+"formatting step comes from the script; the network capture establishes that "
+"this click requested {ph0}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}: export.js
+#. {ph4}:
+#. {ph5}:
+#. {ph6}: notes.json
+#. {ph7}:
+#: website/public/guides/browser/index.html:468
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download "
+"{ph6}{ph7}"
+msgstr ""
+
+#. {ph0}: notes.json
+#: website/public/guides/browser/index.html:479
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"Find the script that requests {ph0}. How does it escape titles containing "
+"commas or quotation marks?"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/browser/index.html:484
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"For an installed JavaScript or Electron app, continue with the "
+"{ph0}application workflow{ph1} to follow files and process boundaries."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/browser/index.html:489
+#, python-brace-format
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"For HTTP request and response bodies, use {ph0}Fiddler Everywhere: SAZ "
+"captures, MCP and public skills{ph1}. Export SAZ or HAR 1.2 for offline REA "
+"capture Evidence, or connect Everywhere's MCP server to inspect captured "
+"traffic with your agent."
+msgstr ""
+
+#: website/public/guides/browser/index.html:6
+msgctxt "page:guides/browser/index.html"
+msgid "Browser and Network Analysis — REA"
+msgstr ""
+
+#: website/public/guides/browser/index.html:7
+msgctxt "page:guides/browser/index.html"
+msgid ""
+"Observe a Notes export with REA: select a browser page, capture a click, "
+"inspect the request and follow the export script."
+msgstr ""
+
+#: website/public/guides/browser/index.html:214
+msgctxt "page:guides/browser/index.html"
+msgid "On this page"
+msgstr ""
+
+#: website/public/guides/browser/index.html:224
+msgctxt "page:guides/browser/index.html"
+msgid "Browser observation"
+msgstr ""
+
+#: website/public/guides/browser/index.html:280
+msgctxt "page:guides/browser/index.html"
+msgid "Copy start the example browser"
+msgstr ""
+
+#: website/public/guides/browser/index.html:312
+msgctxt "page:guides/browser/index.html"
+msgid "Copy example prompt"
+msgstr ""
+
+#: website/public/guides/browser/index.html:346
+msgctxt "page:guides/browser/index.html"
+msgid "Copy find the page"
+msgstr ""
+
+#: website/public/guides/browser/index.html:365
+msgctxt "page:guides/browser/index.html"
+msgid "Copy capture the next ten seconds"
+msgstr ""
+
+#: website/public/guides/browser/index.html:430
+msgctxt "page:guides/browser/index.html"
+msgid "Copy read the loaded scripts"
+msgstr ""
+
+#: website/public/guides/browser/index.html:518
+msgctxt "page:guides/browser/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/guides/index.html:113
+msgctxt "page:guides/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/index.html:203
+#, python-brace-format
+msgctxt "page:guides/index.html"
+msgid "{ph0}Home{ph1} / Guides"
+msgstr ""
+
+#: website/public/guides/index.html:204
+msgctxt "page:guides/index.html"
+msgid "REA guides."
+msgstr ""
+
+#: website/public/guides/index.html:205
+msgctxt "page:guides/index.html"
+msgid ""
+"Analyze a native function, an Electron export or a browser request. Each "
+"guide includes a prompt, code and results."
+msgstr ""
+
+#: website/public/guides/index.html:212
+msgctxt "page:guides/index.html"
+msgid "First investigation"
+msgstr ""
+
+#: website/public/guides/index.html:214
+msgctxt "page:guides/index.html"
+msgid "Set up REA"
+msgstr ""
+
+#: website/public/guides/index.html:215
+msgctxt "page:guides/index.html"
+msgid "Connect your coding agent or use REA from the terminal."
+msgstr ""
+
+#: website/public/guides/index.html:216
+msgctxt "page:guides/index.html"
+msgid "Get started with REA"
+msgstr ""
+
+#: website/public/guides/index.html:220
+msgctxt "page:guides/index.html"
+msgid "Native binaries"
+msgstr ""
+
+#: website/public/guides/index.html:222
+msgctxt "page:guides/index.html"
+msgid "Recover a sound-pan calculation"
+msgstr ""
+
+#: website/public/guides/index.html:223
+msgctxt "page:guides/index.html"
+msgid ""
+"Start with a Windows game executable. Inspect instructions, follow a caller,"
+" read numeric constants and check the recovered C."
+msgstr ""
+
+#: website/public/guides/index.html:228
+msgctxt "page:guides/index.html"
+msgid "Instructions"
+msgstr ""
+
+#: website/public/guides/index.html:229
+msgctxt "page:guides/index.html"
+msgid "Caller"
+msgstr ""
+
+#: website/public/guides/index.html:230
+msgctxt "page:guides/index.html"
+msgid "Constants"
+msgstr ""
+
+#: website/public/guides/index.html:231
+msgctxt "page:guides/index.html"
+msgid "C function"
+msgstr ""
+
+#: website/public/guides/index.html:233
+msgctxt "page:guides/index.html"
+msgid "Native analysis guide"
+msgstr ""
+
+#: website/public/guides/index.html:237
+msgctxt "page:guides/index.html"
+msgid "JavaScript & Electron"
+msgstr ""
+
+#: website/public/guides/index.html:239
+msgctxt "page:guides/index.html"
+msgid "Follow a CSV export"
+msgstr ""
+
+#: website/public/guides/index.html:240
+msgctxt "page:guides/index.html"
+msgid ""
+"A small Notes app spreads one feature across the renderer, preload and main "
+"process. Use REA to connect the API, IPC channel and file writer."
+msgstr ""
+
+#: website/public/guides/index.html:246
+msgctxt "page:guides/index.html"
+msgid "Button"
+msgstr ""
+
+#: website/public/guides/index.html:247
+msgctxt "page:guides/index.html"
+msgid "Preload API"
+msgstr ""
+
+#: website/public/guides/index.html:248
+msgctxt "page:guides/index.html"
+msgid "IPC"
+msgstr ""
+
+#: website/public/guides/index.html:248
+msgctxt "page:guides/index.html"
+msgid "CSV file"
+msgstr ""
+
+#: website/public/guides/index.html:250
+msgctxt "page:guides/index.html"
+msgid "JavaScript & Electron guide"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/index.html:253
+#, python-brace-format
+msgctxt "page:guides/index.html"
+msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}."
+msgstr ""
+
+#: website/public/guides/index.html:260
+msgctxt "page:guides/index.html"
+msgid "Browser behavior"
+msgstr ""
+
+#: website/public/guides/index.html:262
+msgctxt "page:guides/index.html"
+msgid "Observe a click"
+msgstr ""
+
+#: website/public/guides/index.html:263
+msgctxt "page:guides/index.html"
+msgid ""
+"Open a working Notes example, capture an export request and find the code "
+"that turns its response into a download."
+msgstr ""
+
+#: website/public/guides/index.html:268
+msgctxt "page:guides/index.html"
+msgid "Your click"
+msgstr ""
+
+#: website/public/guides/index.html:269
+msgctxt "page:guides/index.html"
+msgid "Captured request"
+msgstr ""
+
+#: website/public/guides/index.html:270
+msgctxt "page:guides/index.html"
+msgid "Export script"
+msgstr ""
+
+#: website/public/guides/index.html:272
+msgctxt "page:guides/index.html"
+msgid "Browser observation guide"
+msgstr ""
+
+#: website/public/guides/index.html:276
+msgctxt "page:guides/index.html"
+msgid "RL environments"
+msgstr ""
+
+#: website/public/guides/index.html:278
+msgctxt "page:guides/index.html"
+msgid "Build an environment for agents"
+msgstr ""
+
+#: website/public/guides/index.html:279
+msgctxt "page:guides/index.html"
+msgid ""
+"Record a web app session, turn it into tools and local data, then add tasks "
+"and reward checks."
+msgstr ""
+
+#: website/public/guides/index.html:284
+msgctxt "page:guides/index.html"
+msgid "Record"
+msgstr ""
+
+#: website/public/guides/index.html:284
+msgctxt "page:guides/index.html"
+msgid "Build"
+msgstr ""
+
+#: website/public/guides/index.html:285
+msgctxt "page:guides/index.html"
+msgid "Run"
+msgstr ""
+
+#: website/public/guides/index.html:287
+msgctxt "page:guides/index.html"
+msgid "Evaluate"
+msgstr ""
+
+#: website/public/guides/index.html:289
+msgctxt "page:guides/index.html"
+msgid "Build an RL environment"
+msgstr ""
+
+#: website/public/guides/index.html:6
+msgctxt "page:guides/index.html"
+msgid "Reverse Engineering Guides — REA"
+msgstr ""
+
+#: website/public/guides/index.html:7
+msgctxt "page:guides/index.html"
+msgid ""
+"Learn REA through short worked examples: a native calculation, an Electron "
+"CSV export and a browser request."
+msgstr ""
+
+#: website/public/guides/index.html:312
+msgctxt "page:guides/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/guides/javascript/index.html:113
+msgctxt "page:guides/javascript/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/guides/javascript/index.html:203
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron"
+msgstr ""
+
+#. {ph0}: notes.exportCsv()
+#. {ph4}:
+#. {ph5}:
+#. {ph6}: renderer.js
+#. {ph7}: preload.js
+#. {ph8}:
+#: website/public/guides/javascript/index.html:238
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed "
+"by {ph7}.{ph8}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}: notes:export
+#. {ph4}:
+#. {ph5}:
+#. {ph6}:
+#: website/public/guides/javascript/index.html:246
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC "
+"channel: a named message to the main process.{ph6}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}: main.js
+#. {ph6}:
+#: website/public/guides/javascript/index.html:254
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that "
+"channel and calls the CSV writer.{ph6}"
+msgstr ""
+
+#. {ph0}: csv.js
+#. {ph1}: main.js
+#. {ph2}: downloads/notes.csv
+#: website/public/guides/javascript/index.html:263
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid "{ph0} formats the notes → {ph1} writes {ph2}."
+msgstr ""
+
+#: website/public/guides/javascript/index.html:267
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"REA matches the literal IPC call to its handler and identifies the exposed "
+"API. The path is inferred from code; a runtime capture can check what "
+"executes."
+msgstr ""
+
+#: website/public/guides/javascript/index.html:275
+msgctxt "page:guides/javascript/index.html"
+msgid "Ask about the CSV export"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/javascript/index.html:276
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR "
+"file:"
+msgstr ""
+
+#. {ph0}:
+#: website/public/guides/javascript/index.html:282
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
+msgstr ""
+
+#: website/public/guides/javascript/index.html:286
+#: website/public/guides/javascript/index.html:443
+msgctxt "page:guides/javascript/index.html"
+msgid "Copy"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#: website/public/guides/javascript/index.html:295
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this "
+"app. Where is the CSV created?{ph3}{ph4}{ph5}"
+msgstr ""
+
+#. {ph0}: app.asar
+#: website/public/guides/javascript/index.html:303
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"Example prompt. Include the absolute path to the application folder or "
+"{ph0}."
+msgstr ""
+
+#: website/public/guides/javascript/index.html:307
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"REA reads the application files and builds a map of entrypoints, modules and"
+" process boundaries. Your agent uses that map to narrow the investigation to"
+" the export feature."
+msgstr ""
+
+#: website/public/guides/javascript/index.html:314
+msgctxt "page:guides/javascript/index.html"
+msgid "Trace the export code"
+msgstr ""
+
+#: website/public/guides/javascript/index.html:315
+msgctxt "page:guides/javascript/index.html"
+msgid "The page calls a small API"
+msgstr ""
+
+#. {ph0}: renderer.js
+#: website/public/guides/javascript/index.html:318
+#: website/public/guides/javascript/index.html:341
+#: website/public/guides/javascript/index.html:356
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid "{ph0} · example source"
+msgstr ""
+
+#: website/public/guides/javascript/index.html:335
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"The page knows the method name. The implementation lives in the preload, "
+"which exposes it to the renderer."
+msgstr ""
+
+#. {ph0}: notes.exportCsv
+#. {ph1}: notes:export
+#: website/public/guides/javascript/index.html:349
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"REA records {ph0} and the literal channel {ph1}. It pairs that invocation "
+"with the single matching handler in the main process."
+msgstr ""
+
+#. {ph0}: csv.js
+#. {ph1}: notes.csv
+#: website/public/guides/javascript/index.html:366
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"Reading the handler answers the original question: {ph0} formats the notes, "
+"and the main process writes {ph1} into the user's Downloads folder."
+msgstr ""
+
+#: website/public/guides/javascript/index.html:373
+msgctxt "page:guides/javascript/index.html"
+msgid "REA result · summary.ipc excerpt"
+msgstr ""
+
+#: website/public/guides/javascript/index.html:383
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"Recorded by REA 4.1.0 on an earlier version of the example below. The "
+"renderer has since changed; the recorded source locations accompany the API,"
+" channel and handler findings."
+msgstr ""
+
+#: website/public/guides/javascript/index.html:390
+msgctxt "page:guides/javascript/index.html"
+msgid "Analyze the example yourself"
+msgstr ""
+
+#. {ph0}: notes-example
+#. {ph1}: Node.js
+#: website/public/guides/javascript/index.html:391
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"Download the example and unzip it. The archive contains the complete {ph0} "
+"folder. Analyze it with {ph1} and npm; Electron is not needed for this "
+"example."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/javascript/index.html:397
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid "{ph0}Download example ZIP{ph1}"
+msgstr ""
+
+#: website/public/guides/javascript/index.html:406
+msgctxt "page:guides/javascript/index.html"
+msgid "Browse the six source files"
+msgstr ""
+
+#: website/public/guides/javascript/index.html:442
+msgctxt "page:guides/javascript/index.html"
+msgid "Static application analysis"
+msgstr ""
+
+#. {ph0}: normalized_result.summary.ipc
+#. {ph1}: normalized_result.graph
+#: website/public/guides/javascript/index.html:455
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"Replace the path with the folder you unzipped. You should find one IPC "
+"channel and one matching handler in {ph0}. Source locations are in {ph1}."
+msgstr ""
+
+#: website/public/guides/javascript/index.html:461
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"For your own app, use the same command with its directory or ASAR path. An "
+"agent can follow a literal string, API name or IPC channel with REA's "
+"feature tracing tools."
+msgstr ""
+
+#: website/public/guides/javascript/index.html:468
+msgctxt "page:guides/javascript/index.html"
+msgid "Inspect the CSV writer"
+msgstr ""
+
+#. {ph0}: notes:export
+#: website/public/guides/javascript/index.html:470
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what "
+"happens if writing the file fails?"
+msgstr ""
+
+#: website/public/guides/javascript/index.html:476
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"Use the source locations to inspect those details. Computed channel names "
+"and ambiguous handlers can remain unresolved; runtime observations give you "
+"another way to investigate them."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/guides/javascript/index.html:482
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a"
+" packaged Electron app.{ph3}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/guides/javascript/index.html:488
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which "
+"request it makes.{ph3}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/guides/javascript/index.html:494
+#, python-brace-format
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature"
+" depends on native code.{ph3}"
+msgstr ""
+
+#: website/public/guides/javascript/index.html:6
+msgctxt "page:guides/javascript/index.html"
+msgid "JavaScript and Electron Analysis — REA"
+msgstr ""
+
+#: website/public/guides/javascript/index.html:7
+msgctxt "page:guides/javascript/index.html"
+msgid ""
+"Trace a Notes CSV export through a renderer API, preload and IPC handler "
+"with REA. Includes downloadable example files and a verified analysis "
+"result."
+msgstr ""
+
+#: website/public/guides/javascript/index.html:214
+msgctxt "page:guides/javascript/index.html"
+msgid "On this page"
+msgstr ""
+
+#: website/public/guides/javascript/index.html:224
+msgctxt "page:guides/javascript/index.html"
+msgid "JavaScript & Electron"
+msgstr ""
+
+#: website/public/guides/javascript/index.html:286
+msgctxt "page:guides/javascript/index.html"
+msgid "Copy example prompt"
+msgstr ""
+
+#: website/public/guides/javascript/index.html:443
+msgctxt "page:guides/javascript/index.html"
+msgid "Copy static application analysis"
+msgstr ""
+
+#: website/public/guides/javascript/index.html:522
+msgctxt "page:guides/javascript/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/guides/native/index.html:113
+msgctxt "page:guides/native/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/guides/native/index.html:203
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis"
+msgstr ""
+
+#. {ph0}: 0x00406400
+#. {ph1}: __ftol()
+#: website/public/guides/native/index.html:230
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"The starting function, {ph0}, has a short decompiler result: a call to "
+"{ph1}. REA also returns its instructions and callers, which give the agent a"
+" way to investigate the missing arithmetic."
+msgstr ""
+
+#: website/public/guides/native/index.html:237
+msgctxt "page:guides/native/index.html"
+msgid "New to these terms?"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: MOV
+#. {ph3}: ADD
+#: website/public/guides/native/index.html:239
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form"
+" such as {ph2} or {ph3}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/native/index.html:244
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn"
+" instructions back into C-like code. It can miss parts, as in this example."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/native/index.html:249
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}Caller:{ph1} a function that calls this one. It shows which values are "
+"passed in."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: 0x00406400
+#: website/public/guides/native/index.html:253
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such "
+"as {ph2}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/native/index.html:257
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes "
+"and decoded."
+msgstr ""
+
+#: website/public/guides/native/index.html:264
+msgctxt "page:guides/native/index.html"
+msgid "Three pieces of evidence, one calculation"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/guides/native/index.html:268
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read "
+"supplies the value used by the floating-point instructions.{ph5}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}: 20 + 30 × tile_x
+#. {ph6}:
+#: website/public/guides/native/index.html:276
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller "
+"passes {ph5}.{ph6}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}: 1.5625
+#. {ph6}: 500.0
+#. {ph7}:
+#: website/public/guides/native/index.html:284
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced "
+"bytes decode to {ph5}, {ph6} and a scale value.{ph7}"
+msgstr ""
+
+#: website/public/guides/native/index.html:296
+msgctxt "page:guides/native/index.html"
+msgid ""
+"REA supplies the instructions, call relationship and bytes. The agent "
+"interprets them together."
+msgstr ""
+
+#: website/public/guides/native/index.html:303
+msgctxt "page:guides/native/index.html"
+msgid "Ask about the behavior"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/guides/native/index.html:304
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native "
+"analysis tool{ph3}, provide the local executable and a question:"
+msgstr ""
+
+#: website/public/guides/native/index.html:315
+msgctxt "page:guides/native/index.html"
+msgid "Which analysis tool should I use?"
+msgstr ""
+
+#: website/public/guides/native/index.html:316
+msgctxt "page:guides/native/index.html"
+msgid "REA needs one of these to read native programs:"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/native/index.html:318
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to "
+"install it. On macOS, open Hopper once and choose demo mode or activate a "
+"license before your first analysis. Automated Linux setup requires x86_64; "
+"use Ghidra on Linux arm64."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/native/index.html:325
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs "
+"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/native/index.html:330
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}IDA{ph1} (Windows; macOS arm64 headless): use an existing IDA setup "
+"with an MCP registration. The macOS headless profile requires a source build"
+" or a release that includes it."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/native/index.html:337
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid "See {ph0}Set up native analysis{ph1} for the steps."
+msgstr ""
+
+#. {ph0}:
+#: website/public/guides/native/index.html:345
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
+msgstr ""
+
+#: website/public/guides/native/index.html:349
+#: website/public/guides/native/index.html:480
+msgctxt "page:guides/native/index.html"
+msgid "Copy"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#: website/public/guides/native/index.html:358
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. "
+"Explain the calculation and show the code.{ph3}{ph4}{ph5}"
+msgstr ""
+
+#: website/public/guides/native/index.html:366
+msgctxt "page:guides/native/index.html"
+msgid ""
+"Example prompt. Give your agent the path to your local DX-Ball 1.07 "
+"executable. REA doesn't include DX-Ball, so use your own copy, or ask the "
+"same kind of question about another small Windows program you have."
+msgstr ""
+
+#: website/public/guides/native/index.html:373
+msgctxt "page:guides/native/index.html"
+msgid "How do I get a file's full path?"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/guides/native/index.html:375
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose "
+"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/guides/native/index.html:380
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose "
+"{ph2}Copy \"…\" as Pathname{ph3}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/native/index.html:384
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}Any system:{ph1} drag the file into a terminal window and its path "
+"appears."
+msgstr ""
+
+#: website/public/guides/native/index.html:392
+msgctxt "page:guides/native/index.html"
+msgid "Read the REA results"
+msgstr ""
+
+#: website/public/guides/native/index.html:393
+msgctxt "page:guides/native/index.html"
+msgid "Read the input"
+msgstr ""
+
+#: website/public/guides/native/index.html:396
+msgctxt "page:guides/native/index.html"
+msgid "REA instruction excerpt · 0x406409"
+msgstr ""
+
+#: website/public/guides/native/index.html:402
+msgctxt "page:guides/native/index.html"
+msgid ""
+"The instructions load an integer argument and convert it for floating-point "
+"arithmetic. This is the input absent from the first pseudocode view."
+msgstr ""
+
+#: website/public/guides/native/index.html:407
+msgctxt "page:guides/native/index.html"
+msgid "Follow the caller"
+msgstr ""
+
+#: website/public/guides/native/index.html:410
+msgctxt "page:guides/native/index.html"
+msgid "REA caller excerpt · 0x411f5b"
+msgstr ""
+
+#. {ph0}: 0x14
+#: website/public/guides/native/index.html:416
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"REA identifies the brick-hit caller. Its earlier instructions multiply the "
+"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position."
+msgstr ""
+
+#: website/public/guides/native/index.html:421
+msgctxt "page:guides/native/index.html"
+msgid "Read the referenced constants"
+msgstr ""
+
+#: website/public/guides/native/index.html:424
+msgctxt "page:guides/native/index.html"
+msgid "REA byte results · interpreted as little-endian doubles"
+msgstr ""
+
+#: website/public/guides/native/index.html:432
+msgctxt "page:guides/native/index.html"
+msgid ""
+"The arithmetic references these addresses. Reading the bytes supplies the "
+"actual values; the instruction order tells the agent how they are used."
+msgstr ""
+
+#: website/public/guides/native/index.html:439
+msgctxt "page:guides/native/index.html"
+msgid "Write and check the recovered function"
+msgstr ""
+
+#: website/public/guides/native/index.html:441
+msgctxt "page:guides/native/index.html"
+msgid "Recovered C · excerpt"
+msgstr ""
+
+#: website/public/guides/native/index.html:448
+msgctxt "page:guides/native/index.html"
+msgid ""
+"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 "
+"before integer conversion. The calculation puts the center of the screen at "
+"the center of the stereo field."
+msgstr ""
+
+#: website/public/guides/native/index.html:453
+msgctxt "page:guides/native/index.html"
+msgid ""
+"The agent used REA's findings to write the C. Separate checks compared 3,205"
+" inputs against the original x86 function and reproduced all 63 compiled "
+"bytes of the complete function."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/native/index.html:458
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}"
+msgstr ""
+
+#: website/public/guides/native/index.html:465
+msgctxt "page:guides/native/index.html"
+msgid "Try it with your own binary"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/native/index.html:466
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"{ph0}Connect a native analysis provider{ph1}, then give your agent a local "
+"executable or library and a feature to investigate. Useful starting "
+"questions include “How is this file parsed?” or “Which function handles this"
+" menu action?”"
+msgstr ""
+
+#: website/public/guides/native/index.html:473
+msgctxt "page:guides/native/index.html"
+msgid ""
+"If you already know a function name or address, you can query it from the "
+"terminal. For a configured Ghidra installation:"
+msgstr ""
+
+#: website/public/guides/native/index.html:479
+msgctxt "page:guides/native/index.html"
+msgid "Function analysis"
+msgstr ""
+
+#. {ph0}: main
+#: website/public/guides/native/index.html:492
+#, python-brace-format
+msgctxt "page:guides/native/index.html"
+msgid ""
+"Replace the target path and {ph0} with your own function name or address. "
+"Each CLI invocation imports and analyzes the binary, then closes its "
+"session. Your agent's MCP queries reuse the imported binary while that "
+"session is open."
+msgstr ""
+
+#: website/public/guides/native/index.html:498
+msgctxt "page:guides/native/index.html"
+msgid ""
+"Read the pseudocode alongside instructions and references. When a result "
+"leaves a call or value unresolved, use that location as the next question."
+msgstr ""
+
+#: website/public/guides/native/index.html:6
+msgctxt "page:guides/native/index.html"
+msgid "Native Binary Analysis — REA"
+msgstr ""
+
+#: website/public/guides/native/index.html:7
+msgctxt "page:guides/native/index.html"
+msgid ""
+"Recover a native calculation with REA: inspect instructions, follow a "
+"caller, read constants and check reconstructed C."
+msgstr ""
+
+#: website/public/guides/native/index.html:213
+msgctxt "page:guides/native/index.html"
+msgid "On this page"
+msgstr ""
+
+#: website/public/guides/native/index.html:223
+msgctxt "page:guides/native/index.html"
+msgid "Native analysis"
+msgstr ""
+
+#: website/public/guides/native/index.html:349
+msgctxt "page:guides/native/index.html"
+msgid "Copy example prompt"
+msgstr ""
+
+#: website/public/guides/native/index.html:480
+msgctxt "page:guides/native/index.html"
+msgid "Copy function analysis"
+msgstr ""
+
+#: website/public/guides/native/index.html:523
+msgctxt "page:guides/native/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:113
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/guides/rl-environments/index.html:203
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / RL environments"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:206
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Build RL environments."
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:207
+#: website/public/guides/rl-environments/index.html:7
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"Turn a recorded web app session into a runnable environment for training and"
+" testing AI agents."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/rl-environments/index.html:211
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid "{ph0}Watch the announcement video on X{ph1}"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:219
+#: website/public/guides/rl-environments/index.html:218
+msgctxt "page:guides/rl-environments/index.html"
+msgid "On this page"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/rl-environments/index.html:221
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid "{ph0}What REA builds{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/rl-environments/index.html:222
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid "{ph0}Before you start{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/rl-environments/index.html:223
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid "{ph0}Record with your agent{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/rl-environments/index.html:224
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid "{ph0}Use a saved recording{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/rl-environments/index.html:225
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid "{ph0}Run the environment{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/rl-environments/index.html:226
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid "{ph0}Add tasks and rewards{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/rl-environments/index.html:227
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid "{ph0}Check what works{ph1}"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:232
+msgctxt "page:guides/rl-environments/index.html"
+msgid "What REA builds"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:233
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"An agent can practice finding an issue, creating a folder, or editing a "
+"record without running the original app. REA builds the tools the agent "
+"calls, the local data those tools use, and a basic test that checks the "
+"environment starts and responds."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/guides/rl-environments/index.html:241
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"{ph0}01 · Record{ph1}{ph2}Use a test app{ph3}{ph4}Capture requests, "
+"responses, and the results of changes.{ph5}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/guides/rl-environments/index.html:249
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"{ph0}02 · Build with REA{ph1}{ph2}Create tools and local "
+"state{ph3}{ph4}Export a runnable AgentEnv folder with the recording and a "
+"test.{ph5}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/guides/rl-environments/index.html:257
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"{ph0}03 · Run with AgentEnv{ph1}{ph2}Give the environment to an "
+"agent{ph3}{ph4}Add task goals and reward checks for evaluation or RL "
+"training.{ph5}"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:267
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"The recording determines which operations the environment can support. "
+"Changes are supported when the recording confirms their effects."
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:275
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Before you start"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/rl-environments/index.html:276
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"{ph0}Set up REA with your coding agent{ph1}. To record an app, have a "
+"Chrome-family browser and a running test instance where the agent may "
+"create, edit, and delete data. REA records the app you provide; you start it"
+" and prepare its test data."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: 0.9.1334
+#: website/public/guides/rl-environments/index.html:283
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"To run the exported environment, install the {ph0}AgentEnv framework{ph1} "
+"and start Docker. REA's compatibility check uses AgentEnv version {ph2} with"
+" Python 3.12."
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:293
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Record and build with your agent"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:294
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"Tell your agent which app and operations to cover. For an app with folders, "
+"adapt this example:"
+msgstr ""
+
+#. {ph0}:
+#: website/public/guides/rl-environments/index.html:300
+#: website/public/guides/rl-environments/index.html:417
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:304
+#: website/public/guides/rl-environments/index.html:349
+#: website/public/guides/rl-environments/index.html:384
+#: website/public/guides/rl-environments/index.html:421
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Copy"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}: http://127.0.0.1:3000
+#. {ph4}: APP_PASSWORD
+#. {ph5}: /absolute/path/to/chromium
+#. {ph6}: /absolute/path/to/my-env
+#. {ph7}:
+#. {ph8}:
+#: website/public/guides/rl-environments/index.html:313
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Use REA to build an AgentEnv environment from my test web "
+"app at {ph3}. Cover listing, creating, renaming, and deleting folders. You "
+"may create and remove test folders; leave existing data unchanged. Sign in "
+"as admin using the password in {ph4}. Use the browser at {ph5} and export to"
+" {ph6}, which does not exist yet. Check which operations are supported and "
+"report any gaps.{ph7}{ph8}{ph9}"
+msgstr ""
+
+#. {ph0}: APP_PASSWORD
+#: website/public/guides/rl-environments/index.html:328
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"Example prompt. Replace the URL, operations, account, and paths. Set {ph0} "
+"in the environment that starts REA's MCP server so the password stays out of"
+" the prompt."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/rl-environments/index.html:333
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"Your agent inspects the app, records a session, checks the supported "
+"operations, and exports the environment. After export, continue with "
+"{ph0}running the environment{ph1}."
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:340
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Or use a saved recording"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:341
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"A HAR file records a browser's network requests and responses. Export one "
+"with API response bodies from the browser's network panel, then build into a"
+" new or empty folder:"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:348
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Build the environment"
+msgstr ""
+
+#. {ph0}: capture-browser-scenario
+#. {ph1}: --dry-run
+#: website/public/guides/rl-environments/index.html:360
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"You can also pass capture Evidence JSON saved by REA's {ph0} or HAR "
+"inspection. Evidence is the saved recording with its source information. The"
+" build reads local data and writes the folder without contacting the app. "
+"Add {ph1} to review the report without writing files."
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:368
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"The report lists read operations, supported changes, and operations withheld"
+" because the recording did not establish their effects. Each withheld "
+"operation has a reason and a hint about what to record next."
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:376
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Run the environment"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:377
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"Whether your agent exported the folder or you built it from a recording, run"
+" it with AgentEnv:"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:383
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Run the environment test"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:395
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"Use the path your agent reported if it differs. The first run builds the "
+"container image and needs access to its image and package sources."
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:400
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"The included smoke task is a basic test. It checks the tool count and, when "
+"a suitable read tool exists, calls it and checks its response status. "
+"Passing it shows the environment starts and responds in that setup."
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:408
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Add tasks and reward checks"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:409
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"Use the environment with your RL framework to define goals, score results, "
+"and run training. Your coding agent can help write the tasks and checks. "
+"Start with one operation the environment supports:"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#: website/public/guides/rl-environments/index.html:430
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Use this exported environment to add an AgentEnv task that "
+"asks an agent to create a folder named Practice. Check the environment state"
+" to confirm the folder exists with that name, and use that check to score "
+"the result. Reset the environment before each run. Use the AgentEnv task and"
+" verifier formats.{ph3}{ph4}{ph5}"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:442
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"Example prompt for an environment that supports folder creation. A task that"
+" changes data should check the resulting state; a retrieval task can check "
+"an answer against a recorded value."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/guides/rl-environments/index.html:447
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"The export includes the runnable environment and its basic test. Task-"
+"specific grading is added in the evaluation workflow. See the {ph0}AgentEnv "
+"documentation{ph1} for tasks, verifiers, and agent connections."
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:457
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Check what works"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:458
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"For changes to be supported, record the results as well as the action: read "
+"an item, change it, then read the item and its list again before the next "
+"change. Repeat with different values. For deletes, record the missing-item "
+"response and the updated list."
+msgstr ""
+
+#. {ph0}: environment-compare
+#: website/public/guides/rl-environments/index.html:464
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"A passing startup test, an agent completing a task, and matching the "
+"original app are separate checks. For the last one, use {ph0} with a "
+"separate recording of calls made against the app from the same starting "
+"data."
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:470
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"Before sharing the folder, review its retained response bodies and local "
+"paths. Custom headers, query values, and body tokens can remain. Credential-"
+"name warnings identify places to review; they do not remove those values."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/guides/rl-environments/index.html:476
+#, python-brace-format
+msgctxt "page:guides/rl-environments/index.html"
+msgid ""
+"Follow the {ph0}full recording and validation guide{ph1} for coverage "
+"reports and comparison commands. The {ph2}environment reference{ph3} covers "
+"direct MCP serving, state controls, and limits."
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:6
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Build RL environments with REA"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:304
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Copy environment prompt"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:349
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Copy environment build command"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:384
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Copy environment run command"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:421
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Copy task prompt"
+msgstr ""
+
+#: website/public/guides/rl-environments/index.html:509
+msgctxt "page:guides/rl-environments/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/index.html:115
+msgctxt "page:index.html"
+msgid "Skip to content"
+msgstr ""
+
+#: website/public/index.html:207
+msgctxt "page:index.html"
+msgid "Reverse engineering, with your coding agent"
+msgstr ""
+
+#. {ph0}: index.js
+#: website/public/index.html:778
+#, python-brace-format
+msgctxt "page:index.html"
+msgid ""
+"REA inspected the HTTP browser edition through a local debugging connection "
+"and returned the loaded {ph0}, including its source and digest."
+msgstr ""
+
+#: website/public/index.html:785
+msgctxt "page:index.html"
+msgid "Selected settings from the inspected script"
+msgstr ""
+
+#: website/public/index.html:791
+msgctxt "page:index.html"
+msgid ""
+"We called the original game’s update function in a controlled browser check,"
+" with obstacles and automatic scheduling disabled. After 4,000 updates, "
+"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/index.html:797
+#, python-brace-format
+msgctxt "page:index.html"
+msgid ""
+"The new mini-game keeps that speed rule. Its drawing, jumping and collision "
+"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the "
+"new code and run the same speed check."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/index.html:803
+#, python-brace-format
+msgctxt "page:index.html"
+msgid ""
+"To inspect the target yourself, follow the {ph0}browser connection "
+"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL "
+"and your local debugging endpoint, then copy the prompt above."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/index.html:812
+#, python-brace-format
+msgctxt "page:index.html"
+msgid ""
+"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}"
+msgstr ""
+
+#: website/public/index.html:829
+msgctxt "page:index.html"
+msgid "Example 02 · Windows Calculator"
+msgstr ""
+
+#: website/public/index.html:830
+msgctxt "page:index.html"
+msgid "Rebuild Calculator’s % button."
+msgstr ""
+
+#: website/public/index.html:832
+msgctxt "page:index.html"
+msgid ""
+"The % button does different things after + and ×. Let’s find both rules and "
+"try them in a small calculator."
+msgstr ""
+
+#: website/public/index.html:838
+msgctxt "page:index.html"
+msgid "1. Ask about the % button"
+msgstr ""
+
+#. {ph0}:
+#: website/public/index.html:841
+#, python-brace-format
+msgctxt "page:index.html"
+msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example question · Calculator"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#: website/public/index.html:855
+#, python-brace-format
+msgctxt "page:index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover "
+"the rules after + and ×, then build a small calculator that uses "
+"both.{ph3}{ph4}{ph5}"
+msgstr ""
+
+#: website/public/index.html:864
+msgctxt "page:index.html"
+msgid "2. Find both rules"
+msgstr ""
+
+#: website/public/index.html:865
+msgctxt "page:index.html"
+msgid ""
+"REA helps the agent read the code behind the % button. It applies two "
+"different rules:"
+msgstr ""
+
+#: website/public/index.html:871
+msgctxt "page:index.html"
+msgid "With +"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220
+#: website/public/index.html:872
+#, python-brace-format
+msgctxt "page:index.html"
+msgid "{ph0}Take 10% of the first number.{ph1}{ph2}"
+msgstr ""
+
+#: website/public/index.html:878
+msgctxt "page:index.html"
+msgid "With ×"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: 200 × 0.1 = 20
+#: website/public/index.html:879
+#, python-brace-format
+msgctxt "page:index.html"
+msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}"
+msgstr ""
+
+#: website/public/index.html:886
+msgctxt "page:index.html"
+msgid "3. Try the % button"
+msgstr ""
+
+#: website/public/index.html:887
+msgctxt "page:index.html"
+msgid "We recreated both rules below. Choose + or ×, press %, then press =."
+msgstr ""
+
+#: website/public/index.html:935
+msgctxt "page:index.html"
+msgid "Reset"
+msgstr ""
+
+#: website/public/index.html:943
+msgctxt "page:index.html"
+msgid "10% of 200 = 20. Then 200 + 20 = 220."
+msgstr ""
+
+#: website/public/index.html:946
+msgctxt "page:index.html"
+msgid "Interactive illustration of the inspected percentage rule."
+msgstr ""
+
+#: website/public/index.html:953
+msgctxt "page:index.html"
+msgid "See the real code and how the answer was checked"
+msgstr ""
+
+#. {ph0}: previous = 200
+#. {ph1}: current = 10
+#: website/public/index.html:954
+#, python-brace-format
+msgctxt "page:index.html"
+msgid "For this example, {ph0} and {ph1}."
+msgstr ""
+
+#: website/public/index.html:960
+msgctxt "page:index.html"
+msgid "Readable summary of the % handler"
+msgstr ""
+
+#: website/public/index.html:969
+msgctxt "page:index.html"
+msgid "From the installed app to a working % button"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}: calc.exe
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#. {ph6}: ms-calculator:
+#. {ph7}:
+#: website/public/index.html:973
+#, python-brace-format
+msgctxt "page:index.html"
+msgid ""
+"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator "
+"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed "
+"app’s library.{ph7}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}: 100
+#. {ph6}:
+#: website/public/index.html:982
+#, python-brace-format
+msgctxt "page:index.html"
+msgid ""
+"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s "
+"code{ph3}{ph4}The function checks the operator and uses the constant "
+"{ph5}.{ph6}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/index.html:990
+#, python-brace-format
+msgctxt "page:index.html"
+msgid ""
+"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the "
+"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and"
+" × above.{ph5}"
+msgstr ""
+
+#: website/public/index.html:1004
+msgctxt "page:index.html"
+msgid "REA · selected original instructions"
+msgstr ""
+
+#: website/public/index.html:1015
+msgctxt "page:index.html"
+msgid "Operator IDs · Microsoft’s source"
+msgstr ""
+
+#: website/public/index.html:1025
+msgctxt "page:index.html"
+msgid ""
+"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable "
+"summary uses names from Microsoft’s public source to explain the recovered "
+"branch."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/index.html:1030
+#, python-brace-format
+msgctxt "page:index.html"
+msgid ""
+"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · "
+"{ph4}Native setup guide{ph5}"
+msgstr ""
+
+#: website/public/index.html:1050
+msgctxt "page:index.html"
+msgid "REA case studies."
+msgstr ""
+
+#: website/public/index.html:1051
+msgctxt "page:index.html"
+msgid ""
+"Explore a feature in a released app or game, with code and checked results."
+msgstr ""
+
+#: website/public/index.html:1060
+msgctxt "page:index.html"
+msgid "Android · APK analysis"
+msgstr ""
+
+#: website/public/index.html:1061
+msgctxt "page:index.html"
+msgid "How an authenticator generates a login code"
+msgstr ""
+
+#: website/public/index.html:1062
+msgctxt "page:index.html"
+msgid ""
+"Trace Aegis's six-digit login code through its released APK, then move a "
+"demo clock to see why it changes every 30 seconds."
+msgstr ""
+
+#: website/public/index.html:1066
+msgctxt "page:index.html"
+msgid "Read the Android case study"
+msgstr ""
+
+#: website/public/index.html:1071
+msgctxt "page:index.html"
+msgid "Electron · Feature tracing"
+msgstr ""
+
+#: website/public/index.html:1072
+msgctxt "page:index.html"
+msgid "How Notion copies text and HTML"
+msgstr ""
+
+#: website/public/index.html:1073
+msgctxt "page:index.html"
+msgid ""
+"Follow Notion's packaged JavaScript to the system clipboard and see how a "
+"copy preserves rich block data."
+msgstr ""
+
+#: website/public/index.html:1077
+msgctxt "page:index.html"
+msgid "Read the Notion case study"
+msgstr ""
+
+#: website/public/index.html:1082
+msgctxt "page:index.html"
+msgid "Native · Reconstruction"
+msgstr ""
+
+#: website/public/index.html:1083
+msgctxt "page:index.html"
+msgid "DX-Ball's sound-pan calculation"
+msgstr ""
+
+#: website/public/index.html:1084
+msgctxt "page:index.html"
+msgid ""
+"Recover how a ball's position becomes left/right sound in a 1996 Windows "
+"game."
+msgstr ""
+
+#: website/public/index.html:1088
+msgctxt "page:index.html"
+msgid "Read the DX-Ball case study"
+msgstr ""
+
+#: website/public/index.html:1100
+msgctxt "page:index.html"
+msgid "Build RL environments."
+msgstr ""
+
+#: website/public/index.html:1101
+msgctxt "page:index.html"
+msgid ""
+"Turn a recorded web app session into a runnable environment for training and"
+" testing AI agents."
+msgstr ""
+
+#: website/public/index.html:1106
+msgctxt "page:index.html"
+msgid ""
+"Your agent records the browser's requests and the app's responses. REA uses "
+"them to build a local environment where agents can practice tasks without "
+"running the original app."
+msgstr ""
+
+#: website/public/index.html:1111
+msgctxt "page:index.html"
+msgid ""
+"To support folder deletion, the recording must show the folder before "
+"deletion and confirm it is gone afterward."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/index.html:1115
+#, python-brace-format
+msgctxt "page:index.html"
+msgid "{ph0}Build an RL environment{ph1} · {ph2}Watch the demo on X{ph3}"
+msgstr ""
+
+#: website/public/index.html:1126
+msgctxt "page:index.html"
+msgid "With REA set up in your agent, give it a task like this:"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}: http://127.0.0.1:3000
+#. {ph4}: my-env
+#. {ph5}:
+#. {ph6}:
+#: website/public/index.html:1142
+#, python-brace-format
+msgctxt "page:index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Use REA to build an RL environment from my test web app at "
+"{ph3}. Cover listing, creating, renaming, and deleting folders. You may "
+"create and remove test folders. Leave existing data unchanged. Save it in a "
+"folder named {ph4}. Check which operations work and tell me how to run "
+"it.{ph5}{ph6}{ph7}"
+msgstr ""
+
+#: website/public/index.html:1154
+msgctxt "page:index.html"
+msgid "Example prompt. Replace the URL and folder tasks with your own."
+msgstr ""
+
+#: website/public/index.html:1164
+msgctxt "page:index.html"
+msgid "Your first investigation"
+msgstr ""
+
+#: website/public/index.html:1165
+msgctxt "page:index.html"
+msgid "Try REA on a small app."
+msgstr ""
+
+#: website/public/index.html:1166
+msgctxt "page:index.html"
+msgid ""
+"Download our Notes example, trace its CSV export, and check one changed "
+"input."
+msgstr ""
+
+#: website/public/index.html:1171
+msgctxt "page:index.html"
+msgid "Try the guided example"
+msgstr ""
+
+#: website/public/index.html:1180
+msgctxt "page:index.html"
+msgid "Choose your target."
+msgstr ""
+
+#: website/public/index.html:1181
+msgctxt "page:index.html"
+msgid ""
+"These guides cover setup and a first investigation for each kind of "
+"software."
+msgstr ""
+
+#: website/public/index.html:1188
+msgctxt "page:index.html"
+msgid "Native binaries"
+msgstr ""
+
+#: website/public/index.html:1189
+msgctxt "page:index.html"
+msgid ""
+"Inspect functions, strings, references and call relationships in executables"
+" and libraries."
+msgstr ""
+
+#: website/public/index.html:1193
+msgctxt "page:index.html"
+msgid "Native analysis guide"
+msgstr ""
+
+#: website/public/index.html:1196
+msgctxt "page:index.html"
+msgid "JavaScript & Electron"
+msgstr ""
+
+#: website/public/index.html:1197
+msgctxt "page:index.html"
+msgid "Follow the code inside a JavaScript desktop app."
+msgstr ""
+
+#: website/public/index.html:1198
+msgctxt "page:index.html"
+msgid "Application workflows"
+msgstr ""
+
+#: website/public/index.html:1201
+msgctxt "page:index.html"
+msgid "Browser & runtime activity"
+msgstr ""
+
+#: website/public/index.html:1202
+msgctxt "page:index.html"
+msgid ""
+"Capture selected browser or process activity, then compare the results "
+"across runs."
+msgstr ""
+
+#: website/public/index.html:1206
+msgctxt "page:index.html"
+msgid "Browser observation guide"
+msgstr ""
+
+#: website/public/index.html:1210
+msgctxt "page:index.html"
+msgid "Try a larger project"
+msgstr ""
+
+#. {ph0}:
+#: website/public/index.html:1215
+#, python-brace-format
+msgctxt "page:index.html"
+msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}: https://rea.tools/
+#. {ph4}:
+#. {ph5}:
+#: website/public/index.html:1229
+#, python-brace-format
+msgctxt "page:index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for "
+"me.{ph4}{ph5}{ph6}"
+msgstr ""
+
+#: website/public/index.html:1238
+msgctxt "page:index.html"
+msgid "Yes, this one."
+msgstr ""
+
+#. {ph0}:
+#: website/public/index.html:1243
+#, python-brace-format
+msgctxt "page:index.html"
+msgid ""
+"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#: website/public/index.html:1257
+#, python-brace-format
+msgctxt "page:index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. "
+"Recover the gameplay logic in C and test it against the "
+"original.{ph3}{ph4}{ph5}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/index.html:1266
+#, python-brace-format
+msgctxt "page:index.html"
+msgid "{ph0}See the DX-Ball case study →{ph1}"
+msgstr ""
+
+#: website/public/index.html:1277
+msgctxt "page:index.html"
+msgid "Any questions?"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/index.html:1279
+#, python-brace-format
+msgctxt "page:index.html"
+msgid "{ph0}Read the FAQ{ph1} for setup help and common questions."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/index.html:1283
+#, python-brace-format
+msgctxt "page:index.html"
+msgid "{ph0}Join Discord{ph1} to get help and discuss your investigations."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/index.html:1287
+#, python-brace-format
+msgctxt "page:index.html"
+msgid "Report a bug or request a feature in {ph0}GitHub issues{ph1}."
+msgstr ""
+
+#: website/public/index.html:6
+msgctxt "page:index.html"
+msgid "REA: Reverse Engineering for Your Coding Agent"
+msgstr ""
+
+#: website/public/index.html:7
+msgctxt "page:index.html"
+msgid ""
+"Reverse engineer apps, binaries and browser behavior with your coding agent."
+" Follow clear guides and try interactive examples with REA."
+msgstr ""
+
+#: website/public/index.html:229
+msgctxt "page:index.html"
+msgid "Copy REA installation prompt"
+msgstr ""
+
+#: website/public/index.html:253
+msgctxt "page:index.html"
+msgid "Copy setup command"
+msgstr ""
+
+#: website/public/index.html:385
+msgctxt "page:index.html"
+msgid "Follow the manual Calculator analysis"
+msgstr ""
+
+#: website/public/index.html:541
+msgctxt "page:index.html"
+msgid "Copy Calculator percentage question"
+msgstr ""
+
+#: website/public/index.html:622
+msgctxt "page:index.html"
+msgid "Copy dinosaur analysis prompt"
+msgstr ""
+
+#: website/public/index.html:675
+msgctxt "page:index.html"
+msgid ""
+"Dinosaur mini-game. Use the Jump button or press Space while the game is "
+"focused."
+msgstr ""
+
+#: website/public/index.html:846
+msgctxt "page:index.html"
+msgid "Copy Calculator analysis prompt"
+msgstr ""
+
+#: website/public/index.html:892
+msgctxt "page:index.html"
+msgid "Choose the calculation"
+msgstr ""
+
+#: website/public/index.html:1133
+msgctxt "page:index.html"
+msgid "Copy example prompt"
+msgstr ""
+
+#: website/public/index.html:1220
+msgctxt "page:index.html"
+msgid "Copy website project prompt"
+msgstr ""
+
+#: website/public/index.html:1248
+msgctxt "page:index.html"
+msgid "Copy game reconstruction prompt"
+msgstr ""
+
+#: website/public/index.html:1314
+msgctxt "page:index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:114
+msgctxt "page:showcase/aegis/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/aegis/index.html:204
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:207
+msgctxt "page:showcase/aegis/index.html"
+msgid "Case study · Aegis Authenticator"
+msgstr ""
+
+#. {ph0}: floor(59 / 30)
+#. {ph1}: TotpInfo
+#: website/public/showcase/aegis/index.html:430
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"{ph0} is the calculation candidate; the other two concern the progress bar "
+"and imported accounts. TOTP means a time-based one-time password."
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:437
+msgctxt "page:showcase/aegis/index.html"
+msgid "Connect the generator to the app's display"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:454
+msgctxt "page:showcase/aegis/index.html"
+msgid "REA → agent · methods and callers"
+msgstr ""
+
+#. {ph0}: EntryHolder.getOtp
+#. {ph1}: TotpInfo.getOtp(timestamp)
+#: website/public/showcase/aegis/index.html:465
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"REA identifies the timestamp overload and finds the base method's callers. "
+"Inspecting {ph0} then shows the display calling {ph1}."
+msgstr ""
+
+#. {ph0}: com.beemdevelopment.aegis
+#: website/public/showcase/aegis/index.html:473
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"Requests show a shortened input path. Result class names omit the common "
+"{ph0} prefix."
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:480
+msgctxt "page:showcase/aegis/index.html"
+msgid "Read the calculation"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/aegis/index.html:481
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"REA returns {ph0}the clock conversion, default settings and generating "
+"methods.{ph1} The constructors set a 30-second interval and six digits; the "
+"timestamp method turns seconds into a block number."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/aegis/index.html:496
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid "{ph0}01{ph1} Time block"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/aegis/index.html:504
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid "{ph0}02{ph1} Key + block"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/aegis/index.html:512
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid "{ph0}03{ph1} Six digits"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:524
+msgctxt "page:showcase/aegis/index.html"
+msgid "REA · selected decompiled Java"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:554
+msgctxt "page:showcase/aegis/index.html"
+msgid "Readable summary · agent's interpretation"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/aegis/index.html:571
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At"
+" 60 seconds, the block becomes 2."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/aegis/index.html:577
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"{ph0}The key matters too.{ph1} The generator combines the account key with "
+"the block. An account with a different key can show a different code at the "
+"same time."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/aegis/index.html:584
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is "
+"padded with zeroes when needed, so a code can begin with 0."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/aegis/index.html:591
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"Excerpts from several inspected methods, with line wrapping for display. The"
+" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:600
+msgctxt "page:showcase/aegis/index.html"
+msgid "Inside the generator"
+msgstr ""
+
+#. {ph0}: generateOTP
+#. {ph1}: kotlin.ExceptionsKt
+#. {ph2}: TotpInfo
+#. {ph3}: HOTP
+#: website/public/showcase/aegis/index.html:601
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and "
+"returns this body; the original source calls the helper {ph3}."
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:609
+msgctxt "page:showcase/aegis/index.html"
+msgid "REA · generateOTP, complete body"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:623
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"The last hash byte selects a position. Four bytes at that position provide a"
+" positive 31-bit number; formatting reduces it to the requested number of "
+"digits. The constructor's last argument selects the code-formatting branch "
+"introduced by compilation."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/aegis/index.html:630
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid "{ph0}Compare with the matching release source{ph1}."
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:640
+msgctxt "page:showcase/aegis/index.html"
+msgid "Check the reconstruction"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/aegis/index.html:641
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"We assembled the selected REA-returned Java methods in a small test program."
+" Their output matched an independent reconstruction on {ph0}133 test "
+"cases{ph1}, including time-block boundaries and codes beginning with zero."
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:651
+msgctxt "page:showcase/aegis/index.html"
+msgid "Example time"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:653
+msgctxt "page:showcase/aegis/index.html"
+msgid "Six-digit code"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:658
+msgctxt "page:showcase/aegis/index.html"
+msgid "30 seconds"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:673
+msgctxt "page:showcase/aegis/index.html"
+msgid "1,111,111,109 seconds"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/aegis/index.html:680
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"The generator also matches the six published SHA-1 reference cases in "
+"{ph0}RFC 6238{ph1}. Check the browser implementation against them:"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:688
+msgctxt "page:showcase/aegis/index.html"
+msgid "Run reference checks"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:695
+msgctxt "page:showcase/aegis/index.html"
+msgid "Read the demo's calculation"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:699
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"The reference cases use eight digits. The check also verifies their six-"
+"digit results."
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:708
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"Verification runs extracted Java methods and the new demo. The Android APK "
+"was inspected statically."
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:715
+msgctxt "page:showcase/aegis/index.html"
+msgid "Inspect the APK yourself"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/aegis/index.html:716
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"{ph0}Set up REA{ph1}, then download these two files into the same folder. On"
+" Windows x64, use a package with matching Windows native controls and owned "
+"protocol stdin support; see the {ph2}Android provider guide{ph3} for "
+"prerequisites and PowerShell setup. A Linux environment such as WSL is "
+"another option."
+msgstr ""
+
+#. {ph0}: JAVA_HOME
+#. {ph1}: PATH
+#: website/public/showcase/aegis/index.html:728
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"Android analysis needs a full JDK 17 or later. Select it with {ph0} or "
+"{ph1}. This case used JDK 21."
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:734
+msgctxt "page:showcase/aegis/index.html"
+msgid "Download Aegis APK"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:738
+msgctxt "page:showcase/aegis/index.html"
+msgid "Download Android analysis provider"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:744
+msgctxt "page:showcase/aegis/index.html"
+msgid "Point REA at the provider file and inspect the APK:"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:747
+msgctxt "page:showcase/aegis/index.html"
+msgid "macOS / Linux"
+msgstr ""
+
+#. {ph0}: REA_JADX_MCP_JAR
+#: website/public/showcase/aegis/index.html:761
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"Your agent can continue through REA's CLI using the prompt above. For MCP, "
+"add {ph0} to the REA server's environment and reconnect it."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/aegis/index.html:766
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"A next question: {ph0}what happens when an account uses eight digits or a "
+"different time interval?{ph1}"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:776
+msgctxt "page:showcase/aegis/index.html"
+msgid "Sources"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/showcase/aegis/index.html:778
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · "
+"{ph4}GPL-3.0 license{ph5}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/aegis/index.html:794
+#, python-brace-format
+msgctxt "page:showcase/aegis/index.html"
+msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:801
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited"
+" to Aegis; the diagram, readable summary and browser reconstruction are new "
+"teaching material."
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:6
+msgctxt "page:showcase/aegis/index.html"
+msgid "Aegis APK Reverse Engineering: Login Codes — REA"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:7
+msgctxt "page:showcase/aegis/index.html"
+msgid ""
+"Inspect the Aegis Android APK with REA, recover its six-digit login-code "
+"calculation and try a reconstruction with an adjustable clock."
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:254
+msgctxt "page:showcase/aegis/index.html"
+msgid "On this page"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:265
+msgctxt "page:showcase/aegis/index.html"
+msgid "Aegis APK case study"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:278
+msgctxt "page:showcase/aegis/index.html"
+msgid "Copy Aegis example prompt"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:491
+msgctxt "page:showcase/aegis/index.html"
+msgid "Follow the login-code calculation"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:748
+msgctxt "page:showcase/aegis/index.html"
+msgid "Copy APK inspection command"
+msgstr ""
+
+#: website/public/showcase/aegis/index.html:826
+msgctxt "page:showcase/aegis/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:113
+msgctxt "page:showcase/ctf/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/ctf/index.html:203
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:206
+msgctxt "page:showcase/ctf/index.html"
+msgid "Case study · DownUnderCTF 2023"
+msgstr ""
+
+#. {ph0}: Correct!
+#: website/public/showcase/ctf/index.html:208
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"Use REA to inspect a small flag checker, turn its rules into equations and "
+"find an input that makes the original program print {ph0}."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:213
+msgctxt "page:showcase/ctf/index.html"
+msgid "masked squares flag checker · Easy · Linux x86-64"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:216
+msgctxt "page:showcase/ctf/index.html"
+msgid "View the original challenge"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:224
+msgctxt "page:showcase/ctf/index.html"
+msgid "From a binary to a checked answer"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/showcase/ctf/index.html:226
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA "
+"finds the prompt, its references and the code that accepts or rejects an "
+"input.{ph5}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/showcase/ctf/index.html:234
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA "
+"returns the instructions and data behind each check. The agent turns them "
+"into equations.{ph5}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/showcase/ctf/index.html:242
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python"
+" script solves the equations. REA captures the original program accepting "
+"the result.{ph5}"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:251
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"The challenge is by joseph, published in DownUnderCTF's official repository."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:259
+msgctxt "page:showcase/ctf/index.html"
+msgid "In this case study"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/ctf/index.html:261
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid "{ph0}Find the checking code{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/ctf/index.html:262
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid "{ph0}Read one mask{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/ctf/index.html:263
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid "{ph0}Assembly to readable code{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/ctf/index.html:264
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid "{ph0}Solve the equations{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/ctf/index.html:265
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid "{ph0}Check the answer{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/ctf/index.html:266
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid "{ph0}Try it yourself{ph1}"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:271
+msgctxt "page:showcase/ctf/index.html"
+msgid "Find the checking code"
+msgstr ""
+
+#. {ph0}: Correct!
+#. {ph1}: Incorrect!
+#: website/public/showcase/ctf/index.html:272
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or "
+"{ph1}. Start with a simple request to your agent."
+msgstr ""
+
+#. {ph0}:
+#: website/public/showcase/ctf/index.html:279
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:284
+#: website/public/showcase/ctf/index.html:503
+#: website/public/showcase/ctf/index.html:527
+#: website/public/showcase/ctf/index.html:597
+#: website/public/showcase/ctf/index.html:744
+msgctxt "page:showcase/ctf/index.html"
+msgid "Copy"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#: website/public/showcase/ctf/index.html:293
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. "
+"Explain how the checks work, then verify the answer with the original "
+"program.{ph3}{ph4}{ph5}"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:302
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"An example prompt, with the downloaded challenge available locally and a "
+"native analysis provider connected."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:308
+msgctxt "page:showcase/ctf/index.html"
+msgid "Follow the input prompt to its function"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:311
+#: website/public/showcase/ctf/index.html:347
+msgctxt "page:showcase/ctf/index.html"
+msgid "Agent → REA"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:327
+msgctxt "page:showcase/ctf/index.html"
+msgid "REA → agent · selected results"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:337
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"The reference gives the agent a place to investigate, even though the "
+"executable's original function names have been removed."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:344
+msgctxt "page:showcase/ctf/index.html"
+msgid "Read the checker and its two helpers"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:359
+msgctxt "page:showcase/ctf/index.html"
+msgid "REA → agent · selected instructions"
+msgstr ""
+
+#. {ph0}: 0x18
+#. {ph1}: 0x270
+#: website/public/showcase/ctf/index.html:372
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"The first loop copies 36 character codes. The checking loop decodes a mask, "
+"sums the selected codes and compares the result with a stored number. Its "
+"{ph0}-byte steps across {ph1} bytes give 26 masks."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:380
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"These are selected results from a fresh REA analysis. The local target path "
+"is shortened for display; addresses refer to REA's imported image."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:388
+msgctxt "page:showcase/ctf/index.html"
+msgid "One check reveals one character"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:389
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"The checker arranges the input in a 6×6 grid. A mask chooses which cells "
+"contribute to a sum. Its compact encoding uses negative numbers to skip "
+"cells and positive numbers to select them."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/ctf/index.html:409
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid "The seventh check selects just one position. {ph0}Open figure{ph1}."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:416
+msgctxt "page:showcase/ctf/index.html"
+msgid "Read the mask and its target from the binary"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:422
+msgctxt "page:showcase/ctf/index.html"
+msgid "Agent → REA · read_bytes"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:429
+msgctxt "page:showcase/ctf/index.html"
+msgid "REA → agent · seventh entries"
+msgstr ""
+
+#. {ph0}: MOVSX
+#. {ph1}: eb
+#. {ph2}: code[21] = 55
+#. {ph3}: 7
+#: website/public/showcase/ctf/index.html:438
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} "
+"means −21. The target is a little-endian integer. Together, these bytes tell"
+" the agent that {ph2}, so that character is {ph3}."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:447
+msgctxt "page:showcase/ctf/index.html"
+msgid "From instructions to a readable check"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:448
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"Select a step to connect the summing helper and its caller to the same rule "
+"in C."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/ctf/index.html:458
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid "{ph0}01{ph1} Start"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/ctf/index.html:466
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid "{ph0}02{ph1} Select"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/ctf/index.html:474
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid "{ph0}03{ph1} Add"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/ctf/index.html:482
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid "{ph0}04{ph1} Advance"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/ctf/index.html:490
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid "{ph0}05{ph1} Compare"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:502
+msgctxt "page:showcase/ctf/index.html"
+msgid "REA · selected original instructions"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:526
+msgctxt "page:showcase/ctf/index.html"
+msgid "Readable C · one-check summary"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: ECX
+#: website/public/showcase/ctf/index.html:555
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/ctf/index.html:559
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a "
+"nonzero value includes it."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/ctf/index.html:563
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset "
+"is added to the sum."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/ctf/index.html:567
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes "
+"per integer and visits six rows of six cells."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: EAX
+#. {ph3}: Incorrect!
+#: website/public/showcase/ctf/index.html:572
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum "
+"in {ph2}. A mismatch jumps to {ph3}."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:579
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"The instructions come from the summing helper and its caller. The C is an "
+"explanatory summary with descriptive names and a flattened 36-cell loop."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:587
+msgctxt "page:showcase/ctf/index.html"
+msgid "Solve the 26 equations"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:588
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"Most masks select several cells. For example, the first check adds 16 "
+"character codes and requires a total of 1441. The overlapping selections "
+"give equations that a small Python script can solve together."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:596
+msgctxt "page:showcase/ctf/index.html"
+msgid "Python · solver excerpt"
+msgstr ""
+
+#. {ph0}: DUCTF{…}
+#: website/public/showcase/ctf/index.html:624
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"Z3 is a solver that finds values satisfying these equations. This excerpt "
+"uses the extracted checks and assumes a {ph0} flag with letters, digits, "
+"underscores and braces. The complete download includes all 26 masks and "
+"targets."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:630
+msgctxt "page:showcase/ctf/index.html"
+msgid "Download the complete solver"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:636
+msgctxt "page:showcase/ctf/index.html"
+msgid "Check the answer with the original program"
+msgstr ""
+
+#. {ph0}: z
+#. {ph1}: y
+#: website/public/showcase/ctf/index.html:637
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"REA's process capture records the original executable accepting the solved "
+"flag. Changing one selected character from {ph0} to {ph1} makes the first "
+"sum 1440 instead of 1441, and the program rejects it."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:647
+msgctxt "page:showcase/ctf/index.html"
+msgid "Input"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:648
+msgctxt "page:showcase/ctf/index.html"
+msgid "Observed output"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:649
+msgctxt "page:showcase/ctf/index.html"
+msgid "Exit code"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:654
+msgctxt "page:showcase/ctf/index.html"
+msgid "Solver's flag"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:659
+msgctxt "page:showcase/ctf/index.html"
+msgid "One character changed"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:667
+msgctxt "page:showcase/ctf/index.html"
+msgid "Show the recovered flag and captured output"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:670
+msgctxt "page:showcase/ctf/index.html"
+msgid "REA · original program output"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:671
+msgctxt "page:showcase/ctf/index.html"
+msgid "Copy flag"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:683
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"The recovered value also matches the flag in the organizers' published "
+"challenge metadata, checked after solving the binary."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:689
+msgctxt "page:showcase/ctf/index.html"
+msgid "Source, target identity and analysis details"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:690
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 "
+"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248"
+" bytes."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:697
+msgctxt "page:showcase/ctf/index.html"
+msgid "Original executable · SHA-256"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:701
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"The string references, functions and constants were inspected before reading"
+" the organizers' source or solution. The Python solver and the diagram were "
+"built from those REA results."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/showcase/ctf/index.html:706
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and "
+"flag{ph3} · {ph4}REA evidence notes{ph5}"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:726
+msgctxt "page:showcase/ctf/index.html"
+msgid "Try it yourself"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:727
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"Download the original challenge and the solver into one folder. Use the "
+"prompt above to investigate with your agent, or run the included script."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:733
+msgctxt "page:showcase/ctf/index.html"
+msgid "Download the original challenge"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:737
+msgctxt "page:showcase/ctf/index.html"
+msgid "Download solver"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:743
+msgctxt "page:showcase/ctf/index.html"
+msgid "Terminal · solve and run"
+msgstr ""
+
+#. {ph0}: z3-solver
+#: website/public/showcase/ctf/index.html:760
+#, python-brace-format
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"The script prints a candidate flag; paste it at the program's prompt. "
+"Solving needs Python and {ph0}. Running the original executable needs Linux "
+"x86-64."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:765
+msgctxt "page:showcase/ctf/index.html"
+msgid "Set up REA with your coding agent"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:6
+msgctxt "page:showcase/ctf/index.html"
+msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:7
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"Use REA to solve DownUnderCTF's masked squares flag checker. Find the "
+"checking functions, extract the masks and compare a recovered flag with the "
+"original program."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:258
+msgctxt "page:showcase/ctf/index.html"
+msgid "On this page"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:269
+msgctxt "page:showcase/ctf/index.html"
+msgid "CTF flag-checker case study"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:284
+msgctxt "page:showcase/ctf/index.html"
+msgid "Copy CTF example prompt"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:395
+msgctxt "page:showcase/ctf/index.html"
+msgid "CTF mask equation; scroll horizontally on smaller screens"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:401
+msgctxt "page:showcase/ctf/index.html"
+msgid ""
+"The seventh mask skips 21 cells, selects position 21, then skips 14. Only "
+"that cell contributes to the sum. Its required character code is 55, which "
+"means the character is 7."
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:453
+msgctxt "page:showcase/ctf/index.html"
+msgid "Follow the CTF check"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:503
+msgctxt "page:showcase/ctf/index.html"
+msgid "Copy CTF assembly"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:527
+msgctxt "page:showcase/ctf/index.html"
+msgid "Copy readable CTF check"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:597
+msgctxt "page:showcase/ctf/index.html"
+msgid "Copy CTF solver excerpt"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:671
+msgctxt "page:showcase/ctf/index.html"
+msgid "Copy recovered flag"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:744
+msgctxt "page:showcase/ctf/index.html"
+msgid "Copy CTF solver commands"
+msgstr ""
+
+#: website/public/showcase/ctf/index.html:788
+msgctxt "page:showcase/ctf/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:113
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/dx-ball/index.html:203
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:206
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Case study · DX-Ball 1.07"
+msgstr ""
+
+#. {ph0}: 0x406400
+#. {ph1}: FUN_00406400(void)
+#. {ph2}: __ftol()
+#: website/public/showcase/dx-ball/index.html:327
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"The first function result for {ph0} included pseudocode declaring {ph1} and "
+"calling {ph2}. Its instruction view showed a stack input and floating-point "
+"operations. That discrepancy gave the agent a concrete reason to keep "
+"investigating."
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:335
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "The first decompiler view"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:338
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "REA result · pseudocode excerpt"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:348
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"The output shows a conversion call. Reading the instructions below reveals "
+"the input and the calculation feeding that call."
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:354
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Three questions answered through REA"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:357
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Recover the missing input"
+msgstr ""
+
+#. {ph0}: analyze_function
+#: website/public/showcase/dx-ball/index.html:361
+#: website/public/showcase/dx-ball/index.html:385
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Agent → REA · {ph0}"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:367
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "REA → agent · instruction excerpt"
+msgstr ""
+
+#. {ph0}: [EBP+8]
+#: website/public/showcase/dx-ball/index.html:374
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"The function result includes instructions alongside pseudocode and callers. "
+"Here, {ph0} exposes the integer input missing from the decompiler view."
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:381
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Follow the caller to understand the input"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:391
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "REA → agent · caller excerpt"
+msgstr ""
+
+#. {ph0}: tile_x
+#. {ph1}: 20 + 30 × tile_x
+#: website/public/showcase/dx-ball/index.html:398
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"REA identified this caller in the first result. Its preceding instructions "
+"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}."
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:405
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Read the values behind the memory addresses"
+msgstr ""
+
+#. {ph0}: read_bytes
+#: website/public/showcase/dx-ball/index.html:409
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Agent → REA · two {ph0} requests"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:419
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "REA byte results · decoded as doubles"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:426
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"The returned bytes establish the two arithmetic constants and initial pan "
+"scale. The agent now has the values needed for the C expression."
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:434
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "From REA's findings to C"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:435
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"Follow the five steps below. Each selection highlights the original "
+"instructions and the C lines they informed."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/dx-ball/index.html:445
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "{ph0}01{ph1} Input"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/dx-ball/index.html:453
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "{ph0}02{ph1} Multiply"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/dx-ball/index.html:461
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "{ph0}03{ph1} Subtract"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/dx-ball/index.html:469
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "{ph0}04{ph1} Scale"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/dx-ball/index.html:477
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "{ph0}05{ph1} Return"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:489
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Original x86 · excerpt"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:510
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Reconstructed C"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: [EBP+8]
+#. {ph3}: FILD
+#. {ph4}: x
+#: website/public/showcase/dx-ball/index.html:537
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result"
+" reads {ph2} and uses {ph3} to load the integer. Following its caller "
+"through REA establishes the screen-coordinate meaning of the C parameter "
+"{ph4}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: FMUL
+#. {ph3}: 0x420068
+#. {ph4}: read_bytes
+#. {ph5}: 1.5625
+#: website/public/showcase/dx-ball/index.html:544
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The "
+"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: FSUB
+#. {ph3}: 0x420070
+#. {ph4}: 500.0
+#. {ph5}: 320
+#: website/public/showcase/dx-ball/index.html:550
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte "
+"result decodes to {ph4}, shifting the calculation's center to screen "
+"coordinate {ph5}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: FMUL
+#. {ph3}: 0x4210a0
+#. {ph4}: dxball_pan_scale
+#. {ph5}: 1.0
+#: website/public/showcase/dx-ball/index.html:556
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That "
+"global is named {ph4} in the maintained source. REA's second byte read "
+"establishes its initial value of {ph5}."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: 0x406430
+#. {ph3}: __ftol
+#. {ph4}: DxBallInt
+#: website/public/showcase/dx-ball/index.html:563
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, "
+"identified in REA's callee results. The C casts the result to {ph4}; "
+"original-x86 comparisons check the returned value."
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:572
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"The assembly excerpt selects the input, arithmetic and return instructions. "
+"The full listing below also includes the intervening stores and function "
+"setup and cleanup."
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:578
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Full assembly and supporting evidence"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:581
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "REA result · 0x406400–0x40643e"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:615
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "What the caller supplies"
+msgstr ""
+
+#. {ph0}: 0x411f40
+#: website/public/showcase/dx-ball/index.html:616
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, "
+"then pushes it before the call:"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:630
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "What the data reads establish"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:633
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "REA byte reads, decoded as little-endian doubles"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:638
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Address"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:639
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Value"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:640
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Used for"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:647
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "First multiplication"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:652
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Subtraction"
+msgstr ""
+
+#. {ph0}: 1.0
+#: website/public/showcase/dx-ball/index.html:656
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "{ph0} initially"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:657
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Stored pan scale"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:662
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked "
+"investigation notes retain the Evidence IDs."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/dx-ball/index.html:667
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence "
+"references{ph3}"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:681
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Checking the recovered function"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:682
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"The recovered function passes two checks: its return values match the "
+"original, and its compiled bytes match the executable."
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:688
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "3,205 behavior cases"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:689
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"The tests execute the original x86 function and compare its return value "
+"with the maintained C. They cover every integer position from 0 to 640 at "
+"five pan scales: 0, 0.5, 1, 20 and −1."
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:697
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "63 matching bytes"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:698
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay "
+"matches the complete function after applying the reviewed relocations and "
+"checking the referenced constants."
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:706
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 "
+"at the center and 500 at the right edge. The next part of the audio work is "
+"integrating that value with the game's sound backend."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/dx-ball/index.html:712
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "{ph0}Read the compiler replay details{ph1}"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:721
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Continue the investigation"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:722
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"The same approach is being used for particle updates, explosion queues and "
+"bonus generation: inspect the relevant functions, recover their state and "
+"dependencies, then compare the implementation with the original."
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:728
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"To inspect the sound-pan function yourself, follow the DX-Ball project's "
+"setup instructions and supply its matching original target. Then run:"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:735
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "In the DX-Ball checkout"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/dx-ball/index.html:749
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local "
+"setup.{ph3}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/dx-ball/index.html:754
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the "
+"same approach with your own binary.{ph3}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/dx-ball/index.html:761
+#, python-brace-format
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into "
+"state, queues and pixel writes.{ph3}"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:772
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Start with your own target"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:6
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "DX-Ball Reverse Engineering: Sound Panning — REA"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:7
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"Follow a DX-Ball reconstruction from binary analysis through REA to "
+"maintained C, original-x86 tests and matching compiled function bytes."
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:215
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"DX-Ball sound-pan investigation; scroll horizontally on smaller screens"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:221
+msgctxt "page:showcase/dx-ball/index.html"
+msgid ""
+"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller "
+"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, "
+"subtract 500.0, apply pan_scale and return an integer. The maintained C is "
+"checked independently against the original x86 in 3,205 cases and by VC4.0 "
+"compiler replay matching 63 bytes."
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:239
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "On this page"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:248
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "DX-Ball reconstruction case study"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:299
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Copy example prompt"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:440
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Follow the sound-pan calculation"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:490
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Copy original assembly excerpt"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:511
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Copy sound-pan function"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:582
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Copy complete sound-pan assembly"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:736
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Copy DX-Ball analysis command"
+msgstr ""
+
+#: website/public/showcase/dx-ball/index.html:796
+msgctxt "page:showcase/dx-ball/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/showcase/index.html:113
+msgctxt "page:showcase/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/index.html:203
+#, python-brace-format
+msgctxt "page:showcase/index.html"
+msgid "{ph0}Home{ph1} / Showcases"
+msgstr ""
+
+#: website/public/showcase/index.html:204
+msgctxt "page:showcase/index.html"
+msgid "REA case studies."
+msgstr ""
+
+#: website/public/showcase/index.html:205
+msgctxt "page:showcase/index.html"
+msgid ""
+"Android, games, Electron and a CTF challenge, with code, figures and checked"
+" results."
+msgstr ""
+
+#: website/public/showcase/index.html:212
+msgctxt "page:showcase/index.html"
+msgid "Android · APK analysis"
+msgstr ""
+
+#: website/public/showcase/index.html:214
+msgctxt "page:showcase/index.html"
+msgid "How an authenticator generates a login code"
+msgstr ""
+
+#: website/public/showcase/index.html:215
+msgctxt "page:showcase/index.html"
+msgid ""
+"Find Aegis's six-digit code calculation in its released APK. Trace the "
+"generating methods with REA, then move a demo clock to see why the code "
+"changes every 30 seconds."
+msgstr ""
+
+#: website/public/showcase/index.html:221
+msgctxt "page:showcase/index.html"
+msgid "APK"
+msgstr ""
+
+#: website/public/showcase/index.html:222
+msgctxt "page:showcase/index.html"
+msgid "Generating code"
+msgstr ""
+
+#: website/public/showcase/index.html:223
+msgctxt "page:showcase/index.html"
+msgid "Recovered rule"
+msgstr ""
+
+#: website/public/showcase/index.html:224
+msgctxt "page:showcase/index.html"
+msgid "Adjustable clock"
+msgstr ""
+
+#: website/public/showcase/index.html:226
+msgctxt "page:showcase/index.html"
+msgid "Read the Android case study"
+msgstr ""
+
+#: website/public/showcase/index.html:230
+msgctxt "page:showcase/index.html"
+msgid "CTF · Native analysis"
+msgstr ""
+
+#: website/public/showcase/index.html:232
+msgctxt "page:showcase/index.html"
+msgid "Solve a CTF flag checker"
+msgstr ""
+
+#: website/public/showcase/index.html:233
+msgctxt "page:showcase/index.html"
+msgid ""
+"Inspect an easy DownUnderCTF challenge with REA. Find its checking "
+"functions, turn masks and sums into equations, then verify the solved flag "
+"with the original program."
+msgstr ""
+
+#: website/public/showcase/index.html:239
+msgctxt "page:showcase/index.html"
+msgid "Binary"
+msgstr ""
+
+#: website/public/showcase/index.html:240
+msgctxt "page:showcase/index.html"
+msgid "Checking code"
+msgstr ""
+
+#: website/public/showcase/index.html:241
+msgctxt "page:showcase/index.html"
+msgid "Equations"
+msgstr ""
+
+#: website/public/showcase/index.html:242
+msgctxt "page:showcase/index.html"
+msgid "Correct!"
+msgstr ""
+
+#: website/public/showcase/index.html:244
+msgctxt "page:showcase/index.html"
+msgid "Read the CTF case study"
+msgstr ""
+
+#: website/public/showcase/index.html:248
+msgctxt "page:showcase/index.html"
+msgid "Native · Reconstruction"
+msgstr ""
+
+#: website/public/showcase/index.html:250
+msgctxt "page:showcase/index.html"
+msgid "DX-Ball's sound-pan calculation"
+msgstr ""
+
+#: website/public/showcase/index.html:251
+msgctxt "page:showcase/index.html"
+msgid ""
+"Recover a sound-pan calculation from a 1996 Windows game. REA's "
+"instructions, caller references and numeric constants lead to a small C "
+"function, checked against the original behavior and all 63 compiled bytes."
+msgstr ""
+
+#: website/public/showcase/index.html:258
+msgctxt "page:showcase/index.html"
+msgid "Executable"
+msgstr ""
+
+#: website/public/showcase/index.html:259
+msgctxt "page:showcase/index.html"
+msgid "REA findings"
+msgstr ""
+
+#: website/public/showcase/index.html:260
+msgctxt "page:showcase/index.html"
+msgid "Recovered C"
+msgstr ""
+
+#: website/public/showcase/index.html:261
+msgctxt "page:showcase/index.html"
+msgid "Validation"
+msgstr ""
+
+#: website/public/showcase/index.html:263
+msgctxt "page:showcase/index.html"
+msgid "Read the DX-Ball case study"
+msgstr ""
+
+#: website/public/showcase/index.html:267
+msgctxt "page:showcase/index.html"
+msgid "Electron · Feature tracing"
+msgstr ""
+
+#: website/public/showcase/index.html:269
+msgctxt "page:showcase/index.html"
+msgid "How Notion copies text and HTML"
+msgstr ""
+
+#: website/public/showcase/index.html:270
+msgctxt "page:showcase/index.html"
+msgid ""
+"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC"
+" wrappers to the system clipboard, then see how a small HTML marker keeps "
+"rich block data connected to a copy."
+msgstr ""
+
+#: website/public/showcase/index.html:276
+msgctxt "page:showcase/index.html"
+msgid "Packaged app"
+msgstr ""
+
+#: website/public/showcase/index.html:277
+msgctxt "page:showcase/index.html"
+msgid "Exposed API"
+msgstr ""
+
+#: website/public/showcase/index.html:278
+msgctxt "page:showcase/index.html"
+msgid "IPC wrappers"
+msgstr ""
+
+#: website/public/showcase/index.html:279
+msgctxt "page:showcase/index.html"
+msgid "Clipboard"
+msgstr ""
+
+#: website/public/showcase/index.html:281
+msgctxt "page:showcase/index.html"
+msgid "Read the Notion case study"
+msgstr ""
+
+#: website/public/showcase/index.html:285
+msgctxt "page:showcase/index.html"
+msgid "PC-98 DOS · Reconstruction"
+msgstr ""
+
+#: website/public/showcase/index.html:287
+msgctxt "page:showcase/index.html"
+msgid "How TH04 aims a ring of bullets"
+msgstr ""
+
+#: website/public/showcase/index.html:288
+msgctxt "page:showcase/index.html"
+msgid ""
+"Inspect the original 16-bit angle helper with REA. Match its multiply, "
+"divide and coordinate operations to readable C++, then see how they produce "
+"a ring aimed at the player."
+msgstr ""
+
+#: website/public/showcase/index.html:294
+msgctxt "page:showcase/index.html"
+msgid "Original DOS code"
+msgstr ""
+
+#: website/public/showcase/index.html:295
+msgctxt "page:showcase/index.html"
+msgid "REA instructions"
+msgstr ""
+
+#: website/public/showcase/index.html:296
+msgctxt "page:showcase/index.html"
+msgid "Angle calculation"
+msgstr ""
+
+#: website/public/showcase/index.html:297
+msgctxt "page:showcase/index.html"
+msgid "Bullet ring"
+msgstr ""
+
+#: website/public/showcase/index.html:299
+msgctxt "page:showcase/index.html"
+msgid "Read the TH04 case study"
+msgstr ""
+
+#: website/public/showcase/index.html:303
+msgctxt "page:showcase/index.html"
+msgid "RL environments"
+msgstr ""
+
+#: website/public/showcase/index.html:305
+msgctxt "page:showcase/index.html"
+msgid "Build RL environments with REA"
+msgstr ""
+
+#: website/public/showcase/index.html:306
+msgctxt "page:showcase/index.html"
+msgid ""
+"Record a web app session, turn its API into tools, and export an environment"
+" an AI agent can use. Run it with AgentEnv, then add tasks and reward checks"
+" for RL training or evaluation."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/index.html:311
+#, python-brace-format
+msgctxt "page:showcase/index.html"
+msgid "{ph0}Read the guide{ph1} · {ph2}Watch the video{ph3}"
+msgstr ""
+
+#: website/public/showcase/index.html:324
+msgctxt "page:showcase/index.html"
+msgid "Step-by-step guides"
+msgstr ""
+
+#: website/public/showcase/index.html:325
+msgctxt "page:showcase/index.html"
+msgid ""
+"The guides walk through a native calculation, an Electron export and a "
+"browser request. Each starts with a prompt and a concrete target."
+msgstr ""
+
+#: website/public/showcase/index.html:329
+msgctxt "page:showcase/index.html"
+msgid "Read the guides"
+msgstr ""
+
+#: website/public/showcase/index.html:6
+msgctxt "page:showcase/index.html"
+msgid "Reverse Engineering Case Studies — REA"
+msgstr ""
+
+#: website/public/showcase/index.html:7
+msgctxt "page:showcase/index.html"
+msgid ""
+"Follow REA investigations through code, figures and demos: an Android "
+"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker."
+msgstr ""
+
+#: website/public/showcase/index.html:348
+msgctxt "page:showcase/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:113
+msgctxt "page:showcase/notion/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/notion/index.html:203
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:206
+msgctxt "page:showcase/notion/index.html"
+msgid "Case study · Electron"
+msgstr ""
+
+#. {ph0}: clipboard.write(data)
+#. {ph4}:
+#. {ph5}:
+#. {ph6}:
+#: website/public/showcase/notion/index.html:218
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a "
+"callable method.{ph6}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}: ipcRenderer.invoke
+#. {ph4}:
+#. {ph5}:
+#. {ph6}:
+#: website/public/showcase/notion/index.html:225
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the "
+"channel and arguments.{ph6}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}: ipcMain.handle
+#. {ph4}:
+#. {ph5}:
+#. {ph6}:
+#: website/public/showcase/notion/index.html:232
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks"
+" which page sent it.{ph6}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}: clipboard.write(data)
+#. {ph4}:
+#. {ph5}:
+#. {ph6}:
+#: website/public/showcase/notion/index.html:239
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the "
+"supplied text and HTML.{ph6}"
+msgstr ""
+
+#. {ph0}: notion:clipboard:write
+#: website/public/showcase/notion/index.html:247
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid "One channel joins the two sides: {ph0}"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:251
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"The packaged code uses the same channel in the preload and main process. "
+"Resolving the wrappers reveals the Electron calls behind those names."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:260
+msgctxt "page:showcase/notion/index.html"
+msgid "In this case study"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/notion/index.html:262
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid "{ph0}Follow the clipboard bridge{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/notion/index.html:263
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid "{ph0}Keeping a block's structure{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/notion/index.html:264
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid "{ph0}More examples and sources{ph1}"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:269
+msgctxt "page:showcase/notion/index.html"
+msgid "Where does the copy operation go?"
+msgstr ""
+
+#. {ph0}: clipboard.write
+#: website/public/showcase/notion/index.html:270
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"The page sees a method called {ph0}. Its implementation in the preload is a "
+"wrapper. The useful question is what that wrapper sends, and which code "
+"receives it."
+msgstr ""
+
+#. {ph0}:
+#: website/public/showcase/notion/index.html:277
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:281
+#: website/public/showcase/notion/index.html:354
+#: website/public/showcase/notion/index.html:383
+#: website/public/showcase/notion/index.html:414
+#: website/public/showcase/notion/index.html:442
+msgctxt "page:showcase/notion/index.html"
+msgid "Copy"
+msgstr ""
+
+#. {ph0}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#: website/public/showcase/notion/index.html:290
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the "
+"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:298
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"An example prompt with Notion's local application package available to your "
+"coding agent."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:303
+msgctxt "page:showcase/notion/index.html"
+msgid "REA finds where to start reading"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:304
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"Analyzing the tab preload with REA locates the API exposed to the page and "
+"the call that sends an IPC request. Both findings come with source ranges in"
+" the minified bundle:"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:310
+msgctxt "page:showcase/notion/index.html"
+msgid "REA findings → two places to open"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:313
+msgctxt "page:showcase/notion/index.html"
+msgid "Exposed page API"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:319
+msgctxt "page:showcase/notion/index.html"
+msgid "Renderer IPC call"
+msgstr ""
+
+#. {ph0}: analyze_javascript_application
+#: website/public/showcase/notion/index.html:325
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded "
+"with REA 4.1.0. Positions use the original bundle's line and zero-based "
+"column."
+msgstr ""
+
+#. {ph0}: invokerInMain
+#. {ph1}: notion:clipboard:write
+#: website/public/showcase/notion/index.html:332
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"The agent opens those locations, finds the clipboard member in the assembled"
+" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the "
+"agent something precise to look for in the main bundle. The four excerpts "
+"below show the route it connects."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:341
+msgctxt "page:showcase/notion/index.html"
+msgid "Four short pieces of code"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:342
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"Simplified from the packaged JavaScript, with readable variable names. "
+"Unrelated members are omitted."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:348
+msgctxt "page:showcase/notion/index.html"
+msgid "Start at the API exposed to the page"
+msgstr ""
+
+#. {ph0}: preload.js
+#: website/public/showcase/notion/index.html:351
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid "tab_browser_view/{ph0} · API member"
+msgstr ""
+
+#. {ph0}: invokerInMain
+#: website/public/showcase/notion/index.html:370
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"This member supplies the channel name. The implementation of {ph0} tells us "
+"how the request leaves the page's process."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:377
+msgctxt "page:showcase/notion/index.html"
+msgid "Resolve the preload's wrapper"
+msgstr ""
+
+#. {ph0}: preload.js
+#: website/public/showcase/notion/index.html:380
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid "tab_browser_view/{ph0} · IPC helper"
+msgstr ""
+
+#. {ph0}: notion:clipboard:write
+#: website/public/showcase/notion/index.html:400
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"The returned function forwards the arguments through Electron's request-and-"
+"response IPC. We can now look for {ph0} on the main-process side."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:408
+msgctxt "page:showcase/notion/index.html"
+msgid "Check how the receiver is registered"
+msgstr ""
+
+#. {ph0}: index.js
+#: website/public/showcase/notion/index.html:411
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid "main/{ph0} · handler helper"
+msgstr ""
+
+#. {ph0}: addListener
+#. {ph1}: ipcMain.handle
+#: website/public/showcase/notion/index.html:429
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"The main process uses another wrapper. Its {ph0} method registers an {ph1} "
+"receiver for that channel."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:436
+msgctxt "page:showcase/notion/index.html"
+msgid "Find the write and its sender check"
+msgstr ""
+
+#. {ph0}: index.js
+#: website/public/showcase/notion/index.html:439
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid "main/{ph0} · clipboard receiver"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:459
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"This is the destination. After checking the sender, the handler passes the "
+"supplied data to Electron's clipboard API. The channel and the two resolved "
+"wrappers connect the exposed method to this call."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:470
+msgctxt "page:showcase/notion/index.html"
+msgid "How does a copied block keep its structure?"
+msgstr ""
+
+#. {ph0}: electronApi.clipboard.write
+#: website/public/showcase/notion/index.html:471
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"Notion's web editor sends text and HTML through {ph0}. It keeps the block "
+"data locally and puts an ID in the copied HTML to connect them."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:477
+msgctxt "page:showcase/notion/index.html"
+msgid "HTML links to saved block data"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:481
+msgctxt "page:showcase/notion/index.html"
+msgid "Sent to the system clipboard"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:489
+msgctxt "page:showcase/notion/index.html"
+msgid "Saved locally by Notion"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:501
+msgctxt "page:showcase/notion/index.html"
+msgid "Read the HTML ID"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:502
+msgctxt "page:showcase/notion/index.html"
+msgid "Find the same local ID"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:503
+msgctxt "page:showcase/notion/index.html"
+msgid "Restore Notion block data"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:505
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"Illustrative text and ID. The recorded module test restores the block data "
+"when IDs match; a stale entry returns only text and HTML."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:511
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"On paste, Notion looks for the HTML ID and checks it against the saved copy."
+" Matching IDs restore the block data."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:515
+msgctxt "page:showcase/notion/index.html"
+msgid "Clipboard format recorded from web assets cached on July 13, 2026."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:521
+msgctxt "page:showcase/notion/index.html"
+msgid "More examples and sources"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:523
+msgctxt "page:showcase/notion/index.html"
+msgid "Another example: Markdown tables"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:524
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"Notion parses Markdown into block data. This example shows how a table "
+"becomes header and data rows."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:529
+msgctxt "page:showcase/notion/index.html"
+msgid "A table through Notion's Markdown parser"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:534
+msgctxt "page:showcase/notion/index.html"
+msgid "Markdown input"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:541
+msgctxt "page:showcase/notion/index.html"
+msgid "Structured parser output · excerpt"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:550
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"Recorded output from an extracted Markdown parser. The table becomes rows "
+"and cells."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:557
+msgctxt "page:showcase/notion/index.html"
+msgid "Another path: the offline SQLite connection"
+msgstr ""
+
+#. {ph0}: getSqliteMeta
+#: website/public/showcase/notion/index.html:558
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"Notion's renderer requests {ph0} through IPC. The main process creates a "
+"message channel and gives one port to the renderer and the other to a SQLite"
+" utility process. Subsequent statement batches and results travel over that "
+"port."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:564
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"Following this handoff explains where the database work runs, and why "
+"tracing only the initial IPC request misses the later conversation."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:571
+msgctxt "page:showcase/notion/index.html"
+msgid "Sources and how to read the excerpts"
+msgstr ""
+
+#. {ph0}: app.asar
+#. {ph1}: main/index.js
+#. {ph2}: isNotionWebContents
+#: website/public/showcase/notion/index.html:572
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab "
+"preload and {ph1}. The excerpts expand minified variable names and omit "
+"unrelated code; the sender-check helper is shown with its underlying {ph2} "
+"call."
+msgstr ""
+
+#. {ph0}: 747001
+#. {ph1}: 58169
+#. {ph2}: 736810
+#. {ph3}: 422457
+#: website/public/showcase/notion/index.html:580
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"The virtual clipboard and Markdown examples come from web assets cached on "
+"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets"
+" have their own version. Saved probes executed extracted modules and small "
+"harnesses; their outputs describe those probes rather than a captured "
+"desktop UI session."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:588
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"The REA result shown here is a focused analysis of the saved tab preload, "
+"recorded with the published REA 4.1.0 package. It locates the API and invoke"
+" operation. The clipboard member and matching receiver are connected by "
+"reading their wrapper implementations in the package."
+msgstr ""
+
+#. {ph0}: 422457
+#: website/public/showcase/notion/index.html:595
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"The Markdown example uses parser module {ph0}. Saved module tests show that "
+"both page and chat filters preserve this table. The paste/import, structured"
+" Markdown and AI/chat parsers have separate entry points and intermediate "
+"formats."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/notion/index.html:603
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron "
+"application's export feature.{ph3}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/notion/index.html:610
+#, python-brace-format
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked"
+" C function.{ph3}"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:618
+msgctxt "page:showcase/notion/index.html"
+msgid "Analyze your own app"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:6
+msgctxt "page:showcase/notion/index.html"
+msgid "Notion Electron Reverse Engineering: Clipboard — REA"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:7
+msgctxt "page:showcase/notion/index.html"
+msgid ""
+"Follow Notion's clipboard API through Electron's preload, IPC wrappers and "
+"main process, with short code excerpts and a look at its rich clipboard "
+"format."
+msgstr ""
+
+#: website/public/showcase/notion/index.html:259
+msgctxt "page:showcase/notion/index.html"
+msgid "On this page"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:267
+msgctxt "page:showcase/notion/index.html"
+msgid "Notion Electron case study"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:281
+msgctxt "page:showcase/notion/index.html"
+msgid "Copy Notion analysis prompt"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:354
+msgctxt "page:showcase/notion/index.html"
+msgid "Copy Notion preload excerpt"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:383
+msgctxt "page:showcase/notion/index.html"
+msgid "Copy Notion invoke wrapper excerpt"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:414
+msgctxt "page:showcase/notion/index.html"
+msgid "Copy Notion handler wrapper excerpt"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:442
+msgctxt "page:showcase/notion/index.html"
+msgid "Copy Notion clipboard receiver excerpt"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:497
+msgctxt "page:showcase/notion/index.html"
+msgid "Restoring rich clipboard data on paste"
+msgstr ""
+
+#: website/public/showcase/notion/index.html:642
+msgctxt "page:showcase/notion/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:113
+msgctxt "page:showcase/th04/index.html"
+msgid "Skip to content"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/th04/index.html:203
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:206
+msgctxt "page:showcase/th04/index.html"
+msgid "Case study · Touhou 4: Lotus Land Story"
+msgstr ""
+
+#. {ph0}: 0, 16, 32, …, 240
+#: website/public/showcase/th04/index.html:307
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each "
+"index adds 16 units: {ph0}. Adding the player's direction rotates those "
+"positions together."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/th04/index.html:327
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"An illustration of the recovered angle math for count 16, player direction "
+"40 and template rotation 0. {ph0}Open figure{ph1}"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:335
+msgctxt "page:showcase/th04/index.html"
+msgid "The firing template in the recovered source"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:340
+msgctxt "page:showcase/th04/index.html"
+msgid "Elly's ring attack · source excerpt"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/th04/index.html:355
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"These lines select the pattern before difficulty and performance tuning. "
+"{ph0}Read the attack's source{ph1}."
+msgstr ""
+
+#: website/public/showcase/th04/index.html:366
+msgctxt "page:showcase/th04/index.html"
+msgid "What REA returns"
+msgstr ""
+
+#. {ph0}: bullet_velocity_and_angle_set()
+#: website/public/showcase/th04/index.html:367
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"We inspect {ph0}, the function that sets each bullet's velocity and angle. "
+"REA returns its instructions, pseudocode and references. Three parts of that"
+" result explain the pattern."
+msgstr ""
+
+#: website/public/showcase/th04/index.html:375
+msgctxt "page:showcase/th04/index.html"
+msgid "Check the DOS image before reading its code"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:378
+msgctxt "page:showcase/th04/index.html"
+msgid "Agent → REA"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:387
+msgctxt "page:showcase/th04/index.html"
+msgid "REA → agent · selected fields"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:396
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"The check ties the loaded code and relocation records to the supplied "
+"executable. The path above is shortened for display."
+msgstr ""
+
+#: website/public/showcase/th04/index.html:402
+msgctxt "page:showcase/th04/index.html"
+msgid "Read the ring's multiply and divide"
+msgstr ""
+
+#. {ph0}: analyze_function
+#: website/public/showcase/th04/index.html:406
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid "Agent → REA · {ph0}"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:412
+msgctxt "page:showcase/th04/index.html"
+msgid "REA → agent · instruction excerpt"
+msgstr ""
+
+#. {ph0}: SI
+#. {ph1}: DS:53AF
+#. {ph2}: bullet_template.count
+#: website/public/showcase/th04/index.html:420
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"{ph0} holds the bullet index. The shift multiplies it by 256, then the "
+"division uses the count read from {ph1}. The maintained source names that "
+"field {ph2}. The complete sequence appears below."
+msgstr ""
+
+#: website/public/showcase/th04/index.html:429
+msgctxt "page:showcase/th04/index.html"
+msgid "Find where the pattern turns toward the player"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:433
+msgctxt "page:showcase/th04/index.html"
+msgid "Same function result · aim excerpt"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:442
+msgctxt "page:showcase/th04/index.html"
+msgid "Corresponding maintained C++"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:450
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"The instruction operands expose two coordinate differences and a direction "
+"helper. Its return value is added to the relative ring angle. Source names "
+"make those addresses readable; REA lets the agent check the original "
+"operations behind them."
+msgstr ""
+
+#: website/public/showcase/th04/index.html:461
+msgctxt "page:showcase/th04/index.html"
+msgid "From assembly to readable C++"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:462
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"Select a step to match the original instructions with the angle calculation."
+" This summary follows the aimed-ring path; the full source also handles "
+"spreads, stacks and random patterns."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/th04/index.html:473
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid "{ph0}01{ph1} Index"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/th04/index.html:481
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid "{ph0}02{ph1} Space"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/th04/index.html:489
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid "{ph0}03{ph1} Aim"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/th04/index.html:497
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid "{ph0}04{ph1} Rotate"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/th04/index.html:505
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid "{ph0}05{ph1} Store"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:517
+msgctxt "page:showcase/th04/index.html"
+msgid "REA · original 16-bit instructions"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:551
+msgctxt "page:showcase/th04/index.html"
+msgid "Readable C++ · aimed-ring summary"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: SI
+#: website/public/showcase/th04/index.html:580
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into "
+"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: SHL AX,8
+#. {ph3}: IDIV
+#: website/public/showcase/th04/index.html:585
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by "
+"256. The count is zero-extended into a word, then {ph3} divides the product "
+"by that count. For count 16, each index advances 16 angle units."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: AX
+#: website/public/showcase/th04/index.html:592
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-"
+"minus-origin coordinates. The direction helper returns an angle in {ph2}; "
+"adding it turns the whole ring toward the player."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: ADD AL,[0x53ad]
+#: website/public/showcase/th04/index.html:598
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. "
+"Elly's initial template sets it to zero; other patterns can use the same "
+"helper with a rotation."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}: AL
+#: website/public/showcase/th04/index.html:604
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to "
+"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast"
+" does. The surrounding source also converts this angle and speed into "
+"velocity."
+msgstr ""
+
+#: website/public/showcase/th04/index.html:613
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"The assembly selects the aimed-ring branch, aim calculation and final store."
+" The C++ above is a readable summary. Compiler checks below apply to the "
+"maintained source in the linked project."
+msgstr ""
+
+#: website/public/showcase/th04/index.html:619
+msgctxt "page:showcase/th04/index.html"
+msgid "Read the maintained ring and aim source"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:622
+msgctxt "page:showcase/th04/index.html"
+msgid "Ring macro · TH04 branch, excerpt"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:632
+msgctxt "page:showcase/th04/index.html"
+msgid "Angle and velocity · source excerpt"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#. {ph4}:
+#. {ph5}:
+#: website/public/showcase/th04/index.html:648
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle "
+"representation{ph5}"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:668
+msgctxt "page:showcase/th04/index.html"
+msgid "Checking the maintained source"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:669
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"The TH04 project's recorded checks compile the bullet-generation code, "
+"including this helper, with its pinned Turbo C++ 4.0J toolchain."
+msgstr ""
+
+#: website/public/showcase/th04/index.html:676
+msgctxt "page:showcase/th04/index.html"
+msgid "2,139 matching bytes"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:677
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"The compiled bullet-generation code matches a 2,139-byte section of the "
+"original executable."
+msgstr ""
+
+#: website/public/showcase/th04/index.html:683
+msgctxt "page:showcase/th04/index.html"
+msgid "Two clean builds"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:684
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"Two separate builds produce the same matching bytes. The recorded input "
+"hashes match the maintained source shown here."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/th04/index.html:690
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}."
+msgstr ""
+
+#: website/public/showcase/th04/index.html:698
+msgctxt "page:showcase/th04/index.html"
+msgid "Target identity and analysis scope"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:703
+msgctxt "page:showcase/th04/index.html"
+msgid "Original target"
+msgstr ""
+
+#. {ph0}: MAIN.EXE
+#: website/public/showcase/th04/index.html:704
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid "{ph0}, 156,258 bytes, DOS MZ"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:707
+msgctxt "page:showcase/th04/index.html"
+msgid "Helper entry"
+msgstr ""
+
+#. {ph0}: 0x2cfc8
+#: website/public/showcase/th04/index.html:708
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid "{ph0} in REA's loaded image"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:711
+msgctxt "page:showcase/th04/index.html"
+msgid "Original file offset"
+msgstr ""
+
+#. {ph0}: 0x1e7c8
+#. {ph1}: address_to_file_offset
+#: website/public/showcase/th04/index.html:712
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid "{ph0}, returned by {ph1}"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:718
+msgctxt "page:showcase/th04/index.html"
+msgid "Recorded code inspection"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:719
+msgctxt "page:showcase/th04/index.html"
+msgid "REA 4.1.0 · 7 October 2026"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:724
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"Compiler checks cover the complete bullet-add code section, including this "
+"helper. They also compare its MAP contribution and overlapping relocation."
+msgstr ""
+
+#. {ph0}: 0x1000
+#: website/public/showcase/th04/index.html:729
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"REA verified the static DOS load image at load segment {ph0}. Its addresses "
+"describe that analysis image. The function result reports 503 body bytes in "
+"two ranges across a 517-byte span; the selected instructions above lie in "
+"those reported ranges."
+msgstr ""
+
+#. {ph0}: 0d72e980
+#: website/public/showcase/th04/index.html:736
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"The source names and compiler checks come from TH04 checkpoint {ph0}. "
+"Earlier reconstruction observations used the project's own analysis scripts;"
+" this page adds a fresh REA inspection of the same original target. The "
+"supplied game's identity is pinned by its repository manifest, with "
+"independent pristine-dump provenance still open."
+msgstr ""
+
+#: website/public/showcase/th04/index.html:744
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"The figure illustrates the angle calculation. Full-game controls, timing and"
+" PC-98 hardware behavior have separate runtime checks in the reconstruction "
+"project."
+msgstr ""
+
+#: website/public/showcase/th04/index.html:753
+msgctxt "page:showcase/th04/index.html"
+msgid "The full TH04 reconstruction"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:754
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"The project builds the game's four DOS products from maintained C++ and "
+"assembly. Beyond bullet generation, the source covers stages, bosses, "
+"rendering, input, menus, endings and score handling."
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#: website/public/showcase/th04/index.html:760
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid "{ph0}Explore the TH04 repository{ph1}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/th04/index.html:766
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern "
+"types and template tuning.{ph3}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/th04/index.html:775
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the "
+"project's PC-98 emulator workflow.{ph3}"
+msgstr ""
+
+#. {ph0}:
+#. {ph1}:
+#. {ph2}:
+#. {ph3}:
+#: website/public/showcase/th04/index.html:784
+#, python-brace-format
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native"
+" x64 port.{ph3}"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:6
+msgctxt "page:showcase/th04/index.html"
+msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:7
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and "
+"recovered C++ to see how a ring of bullets is spaced and aimed at the "
+"player."
+msgstr ""
+
+#: website/public/showcase/th04/index.html:260
+msgctxt "page:showcase/th04/index.html"
+msgid "On this page"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:270
+msgctxt "page:showcase/th04/index.html"
+msgid "TH04 bullet-pattern case study"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:285
+msgctxt "page:showcase/th04/index.html"
+msgid "Copy TH04 example prompt"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:313
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:319
+msgctxt "page:showcase/th04/index.html"
+msgid ""
+"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. "
+"Adding a player direction of 40 rotates every direction by the same amount; "
+"the highlighted first bullet points toward the player. Both keep a spacing "
+"of 16 angle units, or 22.5 degrees."
+msgstr ""
+
+#: website/public/showcase/th04/index.html:341
+msgctxt "page:showcase/th04/index.html"
+msgid "Copy TH04 firing template"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:468
+msgctxt "page:showcase/th04/index.html"
+msgid "Follow the TH04 aimed-ring calculation"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:518
+msgctxt "page:showcase/th04/index.html"
+msgid "Copy TH04 assembly excerpt"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:552
+msgctxt "page:showcase/th04/index.html"
+msgid "Copy readable aimed-ring calculation"
+msgstr ""
+
+#: website/public/showcase/th04/index.html:811
+msgctxt "page:showcase/th04/index.html"
+msgid "Back to top"
+msgstr ""
+
+#: scripts/website_i18n.py
+msgctxt "runtime"
+msgid "Translation is being updated. Read this page in English for now."
+msgstr "Преводът се обновява. Засега прочетете тази страница на английски."
+
+#: website/public/assets/aegis-demo.js:22
+#, python-brace-format
+msgctxt "runtime"
+msgid "{start}–{end} seconds"
+msgstr ""
+
+#: website/public/assets/aegis-demo.js:29
+#, python-brace-format
+msgctxt "runtime"
+msgid "{seconds} seconds, time block {block}"
+msgstr ""
+
+#: website/public/assets/aegis-demo.js:35
+msgctxt "runtime"
+msgid ""
+"Interactive calculation is unavailable in this browser. The example shows "
+"the code at 59 seconds."
+msgstr ""
+
+#: website/public/assets/aegis-demo.js:62
+msgctxt "runtime"
+msgid "Checking…"
+msgstr ""
+
+#: website/public/assets/aegis-demo.js:76
+#, python-brace-format
+msgctxt "runtime"
+msgid ""
+"{passed} / {total} checks passed (six reference cases, at six and eight "
+"digits)."
+msgstr ""
+
+#: website/public/assets/aegis-demo.js:81
+msgctxt "runtime"
+msgid "Could not run the reference checks. Try again."
+msgstr ""
+
+#: website/public/assets/contributors.js:21
+#, python-brace-format
+msgctxt "runtime"
+msgid "Contributors: {count}"
+msgstr ""
+
+#: website/public/assets/dino-demo.js:77
+#, python-brace-format
+msgctxt "runtime"
+msgid "Distance {distance}"
+msgstr ""
+
+#: website/public/assets/dino-demo.js:87
+msgctxt "runtime"
+msgid "Hit a cactus. Try another speed."
+msgstr ""
+
+#: website/public/assets/dino-demo.js:87
+msgctxt "runtime"
+msgid "Space or Jump ↑"
+msgstr ""
+
+#: website/public/assets/dino-demo.js:97
+msgctxt "runtime"
+msgid "Play again"
+msgstr ""
+
+#: website/public/assets/dino-demo.js:97
+#: website/public/assets/dino-demo.js:111
+msgctxt "runtime"
+msgid "Play"
+msgstr ""
+
+#: website/public/assets/dino-demo.js:112
+msgctxt "runtime"
+msgid "Press Play, then jump over the cactus."
+msgstr ""
+
+#: website/public/assets/dino-demo.js:147
+msgctxt "runtime"
+msgid "Hit a cactus. Press Play again, or change the speed and restart."
+msgstr ""
+
+#: website/public/assets/dino-demo.js:171
+msgctxt "runtime"
+msgid "Pause"
+msgstr ""
+
+#: website/public/assets/dino-demo.js:172
+msgctxt "runtime"
+msgid "Running. Space or Jump clears a cactus."
+msgstr ""
+
+#: website/public/assets/dino-demo.js:183
+#: website/public/assets/dino-demo.js:219
+#: website/public/assets/dino-demo.js:224
+msgctxt "runtime"
+msgid "Paused. Press Play to continue."
+msgstr ""
+
+#: website/public/assets/dino-demo.js:203
+#, python-brace-format
+msgctxt "runtime"
+msgid "Fixed speed: {speed}. Space or Jump clears a cactus."
+msgstr ""
+
+#: website/public/assets/dino-demo.js:206
+#, python-brace-format
+msgctxt "runtime"
+msgid "Fixed speed: {speed}. Press Play to try it."
+msgstr ""
+
+#: website/public/assets/dino-demo.js:215
+msgctxt "runtime"
+msgid "Recovered rule: start at 6, then increase toward 13."
+msgstr ""
+
+#: website/public/assets/dino-demo.js:216
+#, python-brace-format
+msgctxt "runtime"
+msgid "Fixed speed: {speed}."
+msgstr ""
+
+#: website/public/assets/dino-demo.js:249
+msgctxt "runtime"
+msgid ""
+"Replayed the recovered rule. All four values match the controlled original-"
+"game check when rounded to three decimals."
+msgstr ""
+
+#: website/public/assets/dino-demo.js:252
+msgctxt "runtime"
+msgid ""
+"The replay differs from the recorded original-game values. Compare the speed"
+" rule and settings above."
+msgstr ""
+
+#: website/public/assets/home.js:29
+msgctxt "runtime"
+msgid "Press % to see what happens to 10."
+msgstr ""
+
+#: website/public/assets/home.js:32
+msgctxt "runtime"
+msgid "10% of 200 is 20. Press = to add it."
+msgstr ""
+
+#: website/public/assets/home.js:33
+msgctxt "runtime"
+msgid "For multiplication, 10 becomes 0.1. Press = to multiply."
+msgstr ""
+
+#: website/public/assets/main.js:21
+msgctxt "runtime"
+msgid "Copied"
+msgstr ""
+
+#: website/public/assets/main.js:23
+msgctxt "runtime"
+msgid "Code copied to clipboard."
+msgstr ""
+
+#: website/public/assets/main.js:32
+msgctxt "runtime"
+msgid "Selected"
+msgstr ""
+
+#: website/public/assets/main.js:34
+msgctxt "runtime"
+msgid "Code selected. Use your keyboard to copy it."
+msgstr ""
+
+#: website/public/assets/main.js:158
+#, python-brace-format
+msgctxt "runtime"
+msgid "REA on GitHub ({count})"
+msgstr ""
+
+#: website/public/assets/theme.js:52
+msgctxt "runtime"
+msgid "Switch to light mode"
+msgstr ""
+
+#: website/public/assets/theme.js:53
+msgctxt "runtime"
+msgid "Switch to dark mode"
+msgstr ""
+
+#: website/public/assets/figures/analyst-thinking.svg:2
+msgctxt "figure:analyst-thinking.svg"
+msgid "An analyst thinking at a computer"
+msgstr ""
+
+#: website/public/assets/figures/ctf-mask-equation.svg:2
+#: website/public/assets/figures/ctf-mask-equation.svg:24
+msgctxt "figure:ctf-mask-equation.svg"
+msgid "One check reveals one character"
+msgstr ""
+
+#: website/public/assets/figures/ctf-mask-equation.svg:3
+msgctxt "figure:ctf-mask-equation.svg"
+msgid ""
+"The seventh mask selects only position 21 in the six by six input grid. Its "
+"character code must equal 55, so the character is 7. The other masks select "
+"different positions and give further equations."
+msgstr ""
+
+#: website/public/assets/figures/ctf-mask-equation.svg:25
+msgctxt "figure:ctf-mask-equation.svg"
+msgid "The seventh check. Cell labels are input positions, starting at 0."
+msgstr ""
+
+#: website/public/assets/figures/ctf-mask-equation.svg:27
+msgctxt "figure:ctf-mask-equation.svg"
+msgid "Encoded mask: −21, +1, −14, 0"
+msgstr ""
+
+#: website/public/assets/figures/ctf-mask-equation.svg:28
+msgctxt "figure:ctf-mask-equation.svg"
+msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0."
+msgstr ""
+
+#: website/public/assets/figures/ctf-mask-equation.svg:32
+msgctxt "figure:ctf-mask-equation.svg"
+msgid "Only one cell contributes to this sum"
+msgstr ""
+
+#: website/public/assets/figures/ctf-mask-equation.svg:35
+msgctxt "figure:ctf-mask-equation.svg"
+msgid "Position 21 in the flag must contain 7."
+msgstr ""
+
+#: website/public/assets/figures/ctf-mask-equation.svg:37
+msgctxt "figure:ctf-mask-equation.svg"
+msgid "Selected: one cell"
+msgstr ""
+
+#: website/public/assets/figures/ctf-mask-equation.svg:38
+msgctxt "figure:ctf-mask-equation.svg"
+msgid "26 masks give 26 equations."
+msgstr ""
+
+#: website/public/assets/figures/ctf-mask-equation.svg:39
+msgctxt "figure:ctf-mask-equation.svg"
+msgid "Solve them together to find the flag."
+msgstr ""
+
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:20
+msgctxt "figure:dx-ball-sound-pan-investigation.svg"
+msgid "DX-Ball sound-pan investigation"
+msgstr ""
+
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3
+msgctxt "figure:dx-ball-sound-pan-investigation.svg"
+msgid ""
+"REA provides the instruction, caller and byte-read evidence for one DX-Ball "
+"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and "
+"converted to an integer. Maintained C is checked in 3,205 original-x86 cases"
+" and a separate 63-byte compiler replay."
+msgstr ""
+
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39
+msgctxt "figure:dx-ball-sound-pan-investigation.svg"
+msgid "Stack"
+msgstr ""
+
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40
+msgctxt "figure:dx-ball-sound-pan-investigation.svg"
+msgid "input x"
+msgstr ""
+
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44
+msgctxt "figure:dx-ball-sound-pan-investigation.svg"
+msgid "Integer"
+msgstr ""
+
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:45
+msgctxt "figure:dx-ball-sound-pan-investigation.svg"
+msgid "return"
+msgstr ""
+
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:46
+msgctxt "figure:dx-ball-sound-pan-investigation.svg"
+msgid "Reconstructed function"
+msgstr ""
+
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:47
+msgctxt "figure:dx-ball-sound-pan-investigation.svg"
+msgid "Maintained C"
+msgstr ""
+
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:48
+msgctxt "figure:dx-ball-sound-pan-investigation.svg"
+msgid "Brick-hit caller"
+msgstr ""
+
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:49
+msgctxt "figure:dx-ball-sound-pan-investigation.svg"
+msgid "20 + 30 × tile_x"
+msgstr ""
+
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:50
+msgctxt "figure:dx-ball-sound-pan-investigation.svg"
+msgid "Original code"
+msgstr ""
+
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:51
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:54
+msgctxt "figure:dx-ball-sound-pan-investigation.svg"
+msgid "comparison"
+msgstr ""
+
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:52
+msgctxt "figure:dx-ball-sound-pan-investigation.svg"
+msgid "3,205 cases"
+msgstr ""
+
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:53
+msgctxt "figure:dx-ball-sound-pan-investigation.svg"
+msgid "VC4.0 build"
+msgstr ""
+
+#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:55
+msgctxt "figure:dx-ball-sound-pan-investigation.svg"
+msgid "63 matching bytes"
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:2
+#: website/public/assets/figures/rea-investigation-flow.svg:22
+msgctxt "figure:rea-investigation-flow.svg"
+msgid "REA investigation flow"
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:3
+msgctxt "figure:rea-investigation-flow.svg"
+msgid ""
+"Ask a question about a local target. REA inspects and traces through local "
+"analysis adapters, returns evidence, and supports follow-up questions as "
+"your agent explains, implements and tests."
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:31
+msgctxt "figure:rea-investigation-flow.svg"
+msgid "1. Ask"
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:32
+msgctxt "figure:rea-investigation-flow.svg"
+msgid "Your agent + local target"
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:33
+msgctxt "figure:rea-investigation-flow.svg"
+msgid "App / binary / browser"
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:34
+msgctxt "figure:rea-investigation-flow.svg"
+msgid "2. Inspect & trace"
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:36
+msgctxt "figure:rea-investigation-flow.svg"
+msgid "CLI / MCP"
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:37
+msgctxt "figure:rea-investigation-flow.svg"
+msgid "3. Read the evidence"
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:38
+msgctxt "figure:rea-investigation-flow.svg"
+msgid "Code / references /"
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:39
+msgctxt "figure:rea-investigation-flow.svg"
+msgid "unknowns"
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:40
+msgctxt "figure:rea-investigation-flow.svg"
+msgid "4. Use what you learn"
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:41
+msgctxt "figure:rea-investigation-flow.svg"
+msgid "Your agent"
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:42
+msgctxt "figure:rea-investigation-flow.svg"
+msgid "Explain / implement / test"
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:43
+msgctxt "figure:rea-investigation-flow.svg"
+msgid "Analysis tools"
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:44
+msgctxt "figure:rea-investigation-flow.svg"
+msgid "Local analysis adapters"
+msgstr ""
+
+#: website/public/assets/figures/rea-investigation-flow.svg:45
+msgctxt "figure:rea-investigation-flow.svg"
+msgid "Follow-up question"
+msgstr ""
+
+#: website/public/assets/figures/th04-bullet-ring.svg:2
+msgctxt "figure:th04-bullet-ring.svg"
+msgid "TH04: spacing and aiming a ring of bullets"
+msgstr ""
+
+#: website/public/assets/figures/th04-bullet-ring.svg:3
+msgctxt "figure:th04-bullet-ring.svg"
+msgid ""
+"A full clockwise turn has 256 angle units. Sixteen bullets start at angles "
+"zero, sixteen, thirty-two, through 240. Adding an example player direction "
+"of forty turns all sixteen directions together; the first bullet points at "
+"the player. Template rotation is zero."
+msgstr ""
+
+#: website/public/assets/figures/th04-bullet-ring.svg:24
+msgctxt "figure:th04-bullet-ring.svg"
+msgid "Fixed ring"
+msgstr ""
+
+#: website/public/assets/figures/th04-bullet-ring.svg:25
+msgctxt "figure:th04-bullet-ring.svg"
+msgid "First bullet: angle 0"
+msgstr ""
+
+#: website/public/assets/figures/th04-bullet-ring.svg:26
+msgctxt "figure:th04-bullet-ring.svg"
+msgid "Aimed ring"
+msgstr ""
+
+#: website/public/assets/figures/th04-bullet-ring.svg:27
+msgctxt "figure:th04-bullet-ring.svg"
+msgid "First bullet: player direction"
+msgstr ""
+
+#: website/public/assets/figures/th04-bullet-ring.svg:64
+#: website/public/assets/figures/th04-bullet-ring.svg:102
+msgctxt "figure:th04-bullet-ring.svg"
+msgid "Origin"
+msgstr ""
+
+#: website/public/assets/figures/th04-bullet-ring.svg:105
+msgctxt "figure:th04-bullet-ring.svg"
+msgid "Player"
+msgstr ""
+
+#: website/public/assets/figures/th04-bullet-ring.svg:110
+msgctxt "figure:th04-bullet-ring.svg"
+msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°"
+msgstr ""
diff --git a/website/locales/languages.json b/website/locales/languages.json
index 2b396ce398..42cf5066f9 100644
--- a/website/locales/languages.json
+++ b/website/locales/languages.json
@@ -136,5 +136,11 @@
"name": "Română",
"readme": "docs/readme/README_ro.md",
"dir": "ltr"
+ },
+ {
+ "code": "bg",
+ "name": "Български",
+ "readme": "docs/readme/README_bg.md",
+ "dir": "ltr"
}
]
diff --git a/website/locales/messages.pot b/website/locales/messages.pot
index 9bd3f19ce5..04d088f3b9 100644
--- a/website/locales/messages.pot
+++ b/website/locales/messages.pot
@@ -6,51 +6,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: website/public/blog/index.html:111
+#: website/public/blog/index.html:113
msgctxt "page:blog/index.html"
msgid "Skip to content"
msgstr ""
-#: website/public/blog/index.html:121
-#: website/public/blog/reverse-engineering-models/index.html:121
-#: website/public/blog/touhou-reconstruction/index.html:121
-#: website/public/contributors/index.html:122
-#: website/public/examples/dino-lab/index.html:122 website/public/faq/index.html:121
-#: website/public/first-investigation/index.html:121
-#: website/public/get-started/index.html:121
-#: website/public/guides/browser/index.html:121 website/public/guides/index.html:121
-#: website/public/guides/javascript/index.html:121
-#: website/public/guides/native/index.html:121
-#: website/public/guides/rl-environments/index.html:121 website/public/index.html:123
-#: website/public/showcase/aegis/index.html:122
-#: website/public/showcase/ctf/index.html:121
-#: website/public/showcase/dx-ball/index.html:121 website/public/showcase/index.html:121
-#: website/public/showcase/notion/index.html:121
-#: website/public/showcase/th04/index.html:121
-msgctxt "shared"
-msgid "Get started"
-msgstr ""
-
-#: website/public/blog/index.html:122
-#: website/public/blog/reverse-engineering-models/index.html:122
-#: website/public/blog/touhou-reconstruction/index.html:122
-#: website/public/contributors/index.html:123
-#: website/public/examples/dino-lab/index.html:123 website/public/faq/index.html:122
-#: website/public/first-investigation/index.html:122
-#: website/public/get-started/index.html:122
-#: website/public/guides/browser/index.html:122 website/public/guides/index.html:122
-#: website/public/guides/javascript/index.html:122
-#: website/public/guides/native/index.html:122
-#: website/public/guides/rl-environments/index.html:122 website/public/index.html:124
-#: website/public/showcase/aegis/index.html:123
-#: website/public/showcase/ctf/index.html:122
-#: website/public/showcase/dx-ball/index.html:122 website/public/showcase/index.html:122
-#: website/public/showcase/notion/index.html:122
-#: website/public/showcase/th04/index.html:122
-msgctxt "shared"
-msgid "Showcases"
-msgstr ""
-
#: website/public/blog/index.html:123
#: website/public/blog/reverse-engineering-models/index.html:123
#: website/public/blog/touhou-reconstruction/index.html:123
@@ -68,7 +28,7 @@ msgstr ""
#: website/public/showcase/notion/index.html:123
#: website/public/showcase/th04/index.html:123
msgctxt "shared"
-msgid "Blog"
+msgid "Get started"
msgstr ""
#: website/public/blog/index.html:124
@@ -88,120 +48,120 @@ msgstr ""
#: website/public/showcase/notion/index.html:124
#: website/public/showcase/th04/index.html:124
msgctxt "shared"
+msgid "Showcases"
+msgstr ""
+
+#: website/public/blog/index.html:125
+#: website/public/blog/reverse-engineering-models/index.html:125
+#: website/public/blog/touhou-reconstruction/index.html:125
+#: website/public/contributors/index.html:126
+#: website/public/examples/dino-lab/index.html:126 website/public/faq/index.html:125
+#: website/public/first-investigation/index.html:125
+#: website/public/get-started/index.html:125
+#: website/public/guides/browser/index.html:125 website/public/guides/index.html:125
+#: website/public/guides/javascript/index.html:125
+#: website/public/guides/native/index.html:125
+#: website/public/guides/rl-environments/index.html:125 website/public/index.html:127
+#: website/public/showcase/aegis/index.html:126
+#: website/public/showcase/ctf/index.html:125
+#: website/public/showcase/dx-ball/index.html:125 website/public/showcase/index.html:125
+#: website/public/showcase/notion/index.html:125
+#: website/public/showcase/th04/index.html:125
+msgctxt "shared"
+msgid "Blog"
+msgstr ""
+
+#: website/public/blog/index.html:126
+#: website/public/blog/reverse-engineering-models/index.html:126
+#: website/public/blog/touhou-reconstruction/index.html:126
+#: website/public/contributors/index.html:127
+#: website/public/examples/dino-lab/index.html:127 website/public/faq/index.html:126
+#: website/public/first-investigation/index.html:126
+#: website/public/get-started/index.html:126
+#: website/public/guides/browser/index.html:126 website/public/guides/index.html:126
+#: website/public/guides/javascript/index.html:126
+#: website/public/guides/native/index.html:126
+#: website/public/guides/rl-environments/index.html:126 website/public/index.html:128
+#: website/public/showcase/aegis/index.html:127
+#: website/public/showcase/ctf/index.html:126
+#: website/public/showcase/dx-ball/index.html:126 website/public/showcase/index.html:126
+#: website/public/showcase/notion/index.html:126
+#: website/public/showcase/th04/index.html:126
+msgctxt "shared"
msgid "Guides"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/index.html:201
+#: website/public/blog/index.html:203
#, python-brace-format
msgctxt "page:blog/index.html"
msgid "{ph0}Home{ph1} / Blog"
msgstr ""
-#: website/public/blog/index.html:202
+#: website/public/blog/index.html:204
msgctxt "page:blog/index.html"
msgid "Blog."
msgstr ""
-#: website/public/blog/index.html:203
+#: website/public/blog/index.html:205
msgctxt "page:blog/index.html"
msgid "Thoughts on reverse engineering."
msgstr ""
#. {ph0}: Supervisor::LoadDat
#. {ph4}:
-#: website/public/blog/reverse-engineering-models/index.html:389
+#: website/public/blog/reverse-engineering-models/index.html:391
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -775,14 +775,14 @@ msgid ""
"{ph3}{ph4}."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:403
+#: website/public/blog/reverse-engineering-models/index.html:405
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Reusing that pattern for the file-size variable produced the required layout without "
"adding storage. The full function then matched."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:408
+#: website/public/blog/reverse-engineering-models/index.html:410
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"This is the sort of narrow detail a general model may not know when it arrives. A "
@@ -790,7 +790,7 @@ msgid ""
"source variations are worth testing first."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:414
+#: website/public/blog/reverse-engineering-models/index.html:416
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"The opportunity is especially clear in final matching problems where we already "
@@ -804,7 +804,7 @@ msgstr ""
#. href="https://github.com/N0zoM1z0/th04/commit/6dce0a79d5b931f0e2a08475b90e0c33d2321b98"
#. >
#. {ph1}:
-#: website/public/blog/reverse-engineering-models/index.html:422
+#: website/public/blog/reverse-engineering-models/index.html:424
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -816,14 +816,14 @@ msgid ""
" part of what a specialist would need to learn."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:438
+#: website/public/blog/reverse-engineering-models/index.html:440
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Where should that experience live?"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/reverse-engineering-models/index.html:439
+#: website/public/blog/reverse-engineering-models/index.html:441
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -833,7 +833,7 @@ msgid ""
" along with the source and failed experiments that made them useful."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:448
+#: website/public/blog/reverse-engineering-models/index.html:450
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"By retrieving that record, an agent can start with a known result and inspect how we "
@@ -845,7 +845,7 @@ msgstr ""
#. href="https://github.com/N0zoM1z0/th09/commit/1eb843383941d00065622a9e353146c4bb96979e"
#. >
#. {ph1}:
-#: website/public/blog/reverse-engineering-models/index.html:454
+#: website/public/blog/reverse-engineering-models/index.html:456
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -857,7 +857,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/reverse-engineering-models/index.html:465
+#: website/public/blog/reverse-engineering-models/index.html:467
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -868,7 +868,7 @@ msgid ""
"only the beginning of that process."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:475
+#: website/public/blog/reverse-engineering-models/index.html:477
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"For that reason, I would include a smaller general model with good retrieval in any "
@@ -876,12 +876,12 @@ msgid ""
"training adds: better candidate generation, better decisions after feedback, or both."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:483
+#: website/public/blog/reverse-engineering-models/index.html:485
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Learning the next useful experiment"
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:484
+#: website/public/blog/reverse-engineering-models/index.html:486
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Those decisions after feedback are what I would most like to study. In agentic "
@@ -890,7 +890,7 @@ msgid ""
"suggest a more useful next experiment."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:491
+#: website/public/blog/reverse-engineering-models/index.html:493
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Consider the temporary-results example again. Its final source shows the arrangement "
@@ -898,66 +898,66 @@ msgid ""
"following experiments helped identify what still needed to change."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:504
+#: website/public/blog/reverse-engineering-models/index.html:506
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Experiment"
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:505
+#: website/public/blog/reverse-engineering-models/index.html:507
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "What its result taught us"
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:510
+#: website/public/blog/reverse-engineering-models/index.html:512
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Try a different way to copy the results"
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:511
+#: website/public/blog/reverse-engineering-models/index.html:513
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "The copy code changes, but the function still differs."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:516
+#: website/public/blog/reverse-engineering-models/index.html:518
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Use the returned values directly"
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:517
+#: website/public/blog/reverse-engineering-models/index.html:519
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Copying follows the original pattern, but temporary storage still differs."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:523
+#: website/public/blog/reverse-engineering-models/index.html:525
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Keep the temporary results alive together"
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:524
+#: website/public/blog/reverse-engineering-models/index.html:526
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"They get separate storage, but one still overlaps a value used later for collision "
"checks."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:530
+#: website/public/blog/reverse-engineering-models/index.html:532
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Keep the collision-check value separate"
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:531
+#: website/public/blog/reverse-engineering-models/index.html:533
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "A clean rebuild confirms the complete match."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:536
+#: website/public/blog/reverse-engineering-models/index.html:538
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Selected experiments from the attack-function reconstruction above, grouped by what "
"they taught us."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:540
+#: website/public/blog/reverse-engineering-models/index.html:542
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"A training record that keeps this sequence can teach more than the final source alone."
@@ -968,7 +968,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/reverse-engineering-models/index.html:547
+#: website/public/blog/reverse-engineering-models/index.html:549
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -978,7 +978,7 @@ msgid ""
"source representation or inspect the evidence again."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:556
+#: website/public/blog/reverse-engineering-models/index.html:558
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Learning to make those choices requires autonomy. Sometimes the useful next step is "
@@ -987,12 +987,12 @@ msgid ""
"the model to learn."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:565
+#: website/public/blog/reverse-engineering-models/index.html:567
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Why RE is interesting for reinforcement learning"
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:566
+#: website/public/blog/reverse-engineering-models/index.html:568
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Bounded reconstruction gives us a practical environment for studying these choices. "
@@ -1001,7 +1001,7 @@ msgid ""
"that observation to choose its next step."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:573
+#: website/public/blog/reverse-engineering-models/index.html:575
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Reinforcement learning could train that decision-making process through the feedback "
@@ -1013,7 +1013,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/blog/reverse-engineering-models/index.html:579
+#: website/public/blog/reverse-engineering-models/index.html:581
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -1028,7 +1028,7 @@ msgstr ""
#. href="https://github.com/N0zoM1z0/th08/commit/af9cb1d3e839b15a78b47ac1701506083cc82847"
#. >
#. {ph1}:
-#: website/public/blog/reverse-engineering-models/index.html:591
+#: website/public/blog/reverse-engineering-models/index.html:593
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -1039,7 +1039,7 @@ msgid ""
" what to measure."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:602
+#: website/public/blog/reverse-engineering-models/index.html:604
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"This suggests another role for a broadly capable model: helping make the problem "
@@ -1047,12 +1047,12 @@ msgid ""
"learned search policy can get with it."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:610
+#: website/public/blog/reverse-engineering-models/index.html:612
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "When the oracle is wrong"
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:611
+#: website/public/blog/reverse-engineering-models/index.html:613
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Once we train against that check, its coverage becomes part of what the model learns. "
@@ -1060,7 +1060,7 @@ msgid ""
"still need to understand what that answer covers."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:617
+#: website/public/blog/reverse-engineering-models/index.html:619
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"TH08 showed how much can hide outside that coverage. Some reconstructed functions "
@@ -1076,7 +1076,7 @@ msgstr ""
#. {ph1}:
#. {ph2}: 1.0f
#. {ph3}: 32.0f
-#: website/public/blog/reverse-engineering-models/index.html:626
+#: website/public/blog/reverse-engineering-models/index.html:628
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -1087,7 +1087,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/reverse-engineering-models/index.html:636
+#: website/public/blog/reverse-engineering-models/index.html:638
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -1099,7 +1099,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/reverse-engineering-models/index.html:646
+#: website/public/blog/reverse-engineering-models/index.html:648
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -1110,7 +1110,7 @@ msgid ""
"checks."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:656
+#: website/public/blog/reverse-engineering-models/index.html:658
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Before using either kind of check as a reward, I would test it with deliberate "
@@ -1122,7 +1122,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/reverse-engineering-models/index.html:664
+#: website/public/blog/reverse-engineering-models/index.html:666
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -1131,12 +1131,12 @@ msgid ""
"understanding that feedback becomes more important too."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:674
+#: website/public/blog/reverse-engineering-models/index.html:676
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "A comparison worth running"
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:675
+#: website/public/blog/reverse-engineering-models/index.html:677
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"With those checks in place, I would start the comparison on a fixed VC7.1 task family."
@@ -1146,7 +1146,7 @@ msgid ""
"what training adds."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:683
+#: website/public/blog/reverse-engineering-models/index.html:685
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"To make those comparisons informative, each model would receive the same target "
@@ -1155,7 +1155,7 @@ msgid ""
"reliable search strategy from a lucky candidate."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:690
+#: website/public/blog/reverse-engineering-models/index.html:692
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"I would then separate two starting conditions: reconstructing a function from its "
@@ -1164,7 +1164,7 @@ msgid ""
"needed to reach it. Measuring them separately would reveal that division of work."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:698
+#: website/public/blog/reverse-engineering-models/index.html:700
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Both tasks need genuinely held-out examples. Because related Touhou games share engine"
@@ -1173,7 +1173,7 @@ msgid ""
"answers out of both training and retrieval."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:705
+#: website/public/blog/reverse-engineering-models/index.html:707
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"On those examples, the outcome would be complete, independently validated matches. "
@@ -1183,7 +1183,7 @@ msgid ""
"own accounting too."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:713
+#: website/public/blog/reverse-engineering-models/index.html:715
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Both views matter because a cheaper proposal can become an expensive workflow if it "
@@ -1195,7 +1195,7 @@ msgstr ""
#. href="https://github.com/N0zoM1z0/th09/commit/ab72fd77728293fc0beacfc656ca701b0e266016"
#. >
#. {ph1}:
-#: website/public/blog/reverse-engineering-models/index.html:719
+#: website/public/blog/reverse-engineering-models/index.html:721
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -1207,7 +1207,7 @@ msgid ""
"I would validate any reward for \"getting closer\" against the full acceptance check."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:734
+#: website/public/blog/reverse-engineering-models/index.html:736
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"I would be interested in the pattern across these results. If a specialist does well "
@@ -1216,12 +1216,12 @@ msgid ""
"would help us decide where each kind of model is most useful."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:743
+#: website/public/blog/reverse-engineering-models/index.html:745
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "What kind of agent does this suggest?"
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:744
+#: website/public/blog/reverse-engineering-models/index.html:746
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"If the models turn out to help at different stages, a useful arrangement might be a "
@@ -1231,7 +1231,7 @@ msgid ""
"itself."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:752
+#: website/public/blog/reverse-engineering-models/index.html:754
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"In that arrangement, specialization becomes a tool the agent can choose as the "
@@ -1239,7 +1239,7 @@ msgid ""
"earlier breakthroughs possible."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:757
+#: website/public/blog/reverse-engineering-models/index.html:759
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"This follows naturally from the industrial shift I described in the previous essay. "
@@ -1248,7 +1248,7 @@ msgid ""
" repeated experience with a particular craft."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:764
+#: website/public/blog/reverse-engineering-models/index.html:766
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"For now, the strongest general model has earned its place in my workflow by opening "
@@ -1259,7 +1259,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/reverse-engineering-models/index.html:772
+#: website/public/blog/reverse-engineering-models/index.html:774
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -1267,7 +1267,7 @@ msgid ""
"that record to build the comparison and see what we learn."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:782
+#: website/public/blog/reverse-engineering-models/index.html:784
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Evidence and model attribution"
msgstr ""
@@ -1275,7 +1275,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/reverse-engineering-models/index.html:783
+#: website/public/blog/reverse-engineering-models/index.html:785
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -1283,7 +1283,7 @@ msgid ""
"context."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:790
+#: website/public/blog/reverse-engineering-models/index.html:792
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"The examples describe historical function-level comparisons recorded in the linked "
@@ -1293,7 +1293,7 @@ msgstr ""
#. {ph0}: gpt-dots
#. {ph1}: gpt-web
-#: website/public/blog/reverse-engineering-models/index.html:796
+#: website/public/blog/reverse-engineering-models/index.html:798
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -1313,7 +1313,7 @@ msgstr ""
#. href="https://github.com/N0zoM1z0/th09/commit/52929ed7c299f1a5f29cc13964e22510145fd616"
#. >
#. {ph5}:
-#: website/public/blog/reverse-engineering-models/index.html:805
+#: website/public/blog/reverse-engineering-models/index.html:807
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -1335,7 +1335,7 @@ msgstr ""
#. href="https://github.com/N0zoM1z0/th09/commit/5f825b28a862f8e1a6d4aea2f78a42f04c09a1c0"
#. >
#. {ph7}:
-#: website/public/blog/reverse-engineering-models/index.html:817
+#: website/public/blog/reverse-engineering-models/index.html:819
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -1357,7 +1357,7 @@ msgstr ""
#. href="https://github.com/N0zoM1z0/th09/commit/1eb843383941d00065622a9e353146c4bb96979e"
#. >
#. {ph7}:
-#: website/public/blog/reverse-engineering-models/index.html:833
+#: website/public/blog/reverse-engineering-models/index.html:835
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -1379,7 +1379,7 @@ msgstr ""
#. href="https://github.com/N0zoM1z0/th09/commit/ab72fd77728293fc0beacfc656ca701b0e266016"
#. >
#. {ph7}:
-#: website/public/blog/reverse-engineering-models/index.html:849
+#: website/public/blog/reverse-engineering-models/index.html:851
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
@@ -1387,7 +1387,7 @@ msgid ""
"numerical investigation{ph5} and {ph6}TH09 replay-save reconstruction{ph7}."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:866
+#: website/public/blog/reverse-engineering-models/index.html:868
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"The proposed specialist and RL comparisons are future experiments. The project "
@@ -1406,27 +1406,27 @@ msgid ""
"learning to propose better hypotheses from compiler feedback."
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:247
+#: website/public/blog/reverse-engineering-models/index.html:249
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "On this page"
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:260
+#: website/public/blog/reverse-engineering-models/index.html:262
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Models and reverse engineering essay"
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:498
+#: website/public/blog/reverse-engineering-models/index.html:500
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Selected reconstruction experiments"
msgstr ""
-#: website/public/blog/reverse-engineering-models/index.html:892
+#: website/public/blog/reverse-engineering-models/index.html:894
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:111
+#: website/public/blog/touhou-reconstruction/index.html:113
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Skip to content"
msgstr ""
@@ -1435,35 +1435,35 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/blog/touhou-reconstruction/index.html:201
+#: website/public/blog/touhou-reconstruction/index.html:203
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:205
+#: website/public/blog/touhou-reconstruction/index.html:207
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Essay · Touhou reconstruction"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:206
+#: website/public/blog/touhou-reconstruction/index.html:208
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "The industrial revolution in reverse engineering."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:207
+#: website/public/blog/touhou-reconstruction/index.html:209
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "By N0zoM1z0 · 10 October 2026"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:209
+#: website/public/blog/touhou-reconstruction/index.html:211
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Takeaway"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:211
+#: website/public/blog/touhou-reconstruction/index.html:213
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -1473,7 +1473,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:216
+#: website/public/blog/touhou-reconstruction/index.html:218
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -1483,7 +1483,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:221
+#: website/public/blog/touhou-reconstruction/index.html:223
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -1493,7 +1493,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:226
+#: website/public/blog/touhou-reconstruction/index.html:228
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -1503,7 +1503,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:231
+#: website/public/blog/touhou-reconstruction/index.html:233
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -1511,65 +1511,65 @@ msgid ""
"still taking shape. There is plenty left to explore."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:243
+#: website/public/blog/touhou-reconstruction/index.html:245
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "How experience compounds"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:244
+#: website/public/blog/touhou-reconstruction/index.html:246
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:332
+#: website/public/blog/touhou-reconstruction/index.html:334
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Autonomy"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:333
+#: website/public/blog/touhou-reconstruction/index.html:335
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Agent"
msgstr ""
#. {ph0}: 0.0
#. {ph1}: 128.0
-#: website/public/blog/touhou-reconstruction/index.html:465
+#: website/public/blog/touhou-reconstruction/index.html:467
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -1810,7 +1810,7 @@ msgid ""
"used {ph1}, the maximum-power threshold."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:471
+#: website/public/blog/touhou-reconstruction/index.html:473
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Normal power is non-negative, so the reconstructed power check was effectively always "
@@ -1821,13 +1821,13 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:478
+#: website/public/blog/touhou-reconstruction/index.html:480
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:484
+#: website/public/blog/touhou-reconstruction/index.html:486
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"A rebuild can put a constant at a different address. The comparison tool accounted for"
@@ -1838,7 +1838,7 @@ msgstr ""
#. {ph0}: 128.0
#. {ph1}: 0.0
-#: website/public/blog/touhou-reconstruction/index.html:491
+#: website/public/blog/touhou-reconstruction/index.html:493
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -1851,7 +1851,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/blog/touhou-reconstruction/index.html:497
+#: website/public/blog/touhou-reconstruction/index.html:499
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -1861,7 +1861,7 @@ msgid ""
"accepted functions."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:508
+#: website/public/blog/touhou-reconstruction/index.html:510
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The comparison now checks every such floating literal. Its tests include deliberately "
@@ -1871,7 +1871,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:513
+#: website/public/blog/touhou-reconstruction/index.html:515
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -1879,7 +1879,7 @@ msgid ""
" game."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:517
+#: website/public/blog/touhou-reconstruction/index.html:519
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"That matters when the team is mostly one person working with agents. I cannot "
@@ -1891,7 +1891,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:525
+#: website/public/blog/touhou-reconstruction/index.html:527
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -1902,7 +1902,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:534
+#: website/public/blog/touhou-reconstruction/index.html:536
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -1910,7 +1910,7 @@ msgid ""
"next batch.{ph1}"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:542
+#: website/public/blog/touhou-reconstruction/index.html:544
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Two different ideas of reconstruction"
msgstr ""
@@ -1919,7 +1919,7 @@ msgstr ""
#. href="https://web.archive.org/web/20260909051514/https://github.com/GensokyoClub/th08#important-
#. notice" >
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:543
+#: website/public/blog/touhou-reconstruction/index.html:545
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -1928,14 +1928,14 @@ msgid ""
"completion. One passage reads:"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:554
+#: website/public/blog/touhou-reconstruction/index.html:556
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The rise of grifters (AI decompilations and ports) in this space taking from our work "
"paints a bad image for future decompilation efforts…"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:560
+#: website/public/blog/touhou-reconstruction/index.html:562
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The notice also describes the psychological toll on the maintainers. Their "
@@ -1945,7 +1945,7 @@ msgid ""
"how reconstruction should proceed and how a contribution should be judged."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:569
+#: website/public/blog/touhou-reconstruction/index.html:571
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"In the manual workflow I knew, developing an understanding of a function and "
@@ -1954,7 +1954,7 @@ msgid ""
" happened while they worked."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:576
+#: website/public/blog/touhou-reconstruction/index.html:578
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Existing projects already preserve knowledge in their source and build tools. What "
@@ -1962,7 +1962,7 @@ msgid ""
"investigation on its own."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:581
+#: website/public/blog/touhou-reconstruction/index.html:583
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"In my continuation, I decide the objective and the standard for accepting a result. "
@@ -1971,7 +1971,7 @@ msgid ""
"an implementation, even if an agent did most of the work."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:588
+#: website/public/blog/touhou-reconstruction/index.html:590
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"This can be a difficult transition. Years of careful work may become the foundation "
@@ -1979,7 +1979,7 @@ msgid ""
" also changes what maintainers need to know before accepting a contribution."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:594
+#: website/public/blog/touhou-reconstruction/index.html:596
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The industrial analogy helps me think about this. In a craft, much of the process "
@@ -1988,7 +1988,7 @@ msgid ""
"wrong. Different communities can choose how much of that change they want to take on."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:602
+#: website/public/blog/touhou-reconstruction/index.html:604
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"My choice is to continue openly, with the inherited work credited and its history "
@@ -2008,7 +2008,7 @@ msgstr ""
#. href="https://github.com/N0zoM1z0/th08/blob/d2a00f4acb4a13916e07a00bd13f714961714628/README.md#credits-
#. and-provenance" >
#. {ph5}:
-#: website/public/blog/touhou-reconstruction/index.html:608
+#: website/public/blog/touhou-reconstruction/index.html:610
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2017,14 +2017,14 @@ msgid ""
"{ph4}credits and provenance{ph5} record the continuation boundary."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:626
+#: website/public/blog/touhou-reconstruction/index.html:628
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "TH095: experience starts compounding"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:627
+#: website/public/blog/touhou-reconstruction/index.html:629
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2034,7 +2034,7 @@ msgid ""
"begin a reconstruction and how to keep it moving."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:635
+#: website/public/blog/touhou-reconstruction/index.html:637
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"By 7 September, all 697 identified game functions had source. By 8 September, 696 had "
@@ -2043,7 +2043,7 @@ msgid ""
"after initialization."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:642
+#: website/public/blog/touhou-reconstruction/index.html:644
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"I found this more exciting than the first project's speed. A fresh target could "
@@ -2051,7 +2051,7 @@ msgid ""
"tools and in the way the project was organized."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:648
+#: website/public/blog/touhou-reconstruction/index.html:650
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"For example, TH08 had taught us to pay attention to the assembled program early. If "
@@ -2060,7 +2060,7 @@ msgid ""
"shape how we approached TH095's whole-program build."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:655
+#: website/public/blog/touhou-reconstruction/index.html:657
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"A lesson that stays in my head is useful while I am there. Once it becomes a check "
@@ -2068,7 +2068,7 @@ msgid ""
"agent can use the result without repeating the investigation that led to it."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:661
+#: website/public/blog/touhou-reconstruction/index.html:663
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The floating-literal bug belongs in that memory too. It explains why checking a "
@@ -2078,7 +2078,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:667
+#: website/public/blog/touhou-reconstruction/index.html:669
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2086,7 +2086,7 @@ msgid ""
"spend more of the next project's effort on what is actually new about its target."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:675
+#: website/public/blog/touhou-reconstruction/index.html:677
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The same benefit is available to people joining later. They can inspect a decision and"
@@ -2094,7 +2094,7 @@ msgid ""
"entire project's history to find out why the source looks the way it does."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:683
+#: website/public/blog/touhou-reconstruction/index.html:685
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "TH04: the workflow survives a different architecture"
msgstr ""
@@ -2103,7 +2103,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/blog/touhou-reconstruction/index.html:684
+#: website/public/blog/touhou-reconstruction/index.html:686
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2113,7 +2113,7 @@ msgid ""
"{ph2}ReC98 work{ph3} gave us valuable knowledge and source material here too."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:693
+#: website/public/blog/touhou-reconstruction/index.html:695
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The DOS reconstruction is now working. In my manual testing, I played complete Normal "
@@ -2121,7 +2121,7 @@ msgid ""
"port. Establishing a working DOS version first gives that port a reference."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:699
+#: website/public/blog/touhou-reconstruction/index.html:701
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The architecture changed what we needed to investigate. It also changed the compiler "
@@ -2129,7 +2129,7 @@ msgid ""
"question through to a result and let that result guide the next experiment."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:705
+#: website/public/blog/touhou-reconstruction/index.html:707
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Consider the transition from gameplay to an ending. We need to know what state carries"
@@ -2138,7 +2138,7 @@ msgid ""
"an agent can work through the question much as it did on a Windows title."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:713
+#: website/public/blog/touhou-reconstruction/index.html:715
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"This is why TH04 matters to the argument. A substantial platform change did not force "
@@ -2146,7 +2146,7 @@ msgid ""
"workflow still gave us a way to solve it."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:719
+#: website/public/blog/touhou-reconstruction/index.html:721
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"For the 64-bit port, we can now examine the new implementation against behavior "
@@ -2160,7 +2160,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/blog/touhou-reconstruction/index.html:724
+#: website/public/blog/touhou-reconstruction/index.html:726
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2168,17 +2168,17 @@ msgid ""
" {ph2}64-bit port{ph3}. The port remains in development."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:737
+#: website/public/blog/touhou-reconstruction/index.html:739
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "From exact code to readable code"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:738
+#: website/public/blog/touhou-reconstruction/index.html:740
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Once a reconstruction works, I want someone else to be able to understand it."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:742
+#: website/public/blog/touhou-reconstruction/index.html:744
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"To me, assembly and raw offsets can feel like old friends. I realise this is a "
@@ -2188,7 +2188,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:748
+#: website/public/blog/touhou-reconstruction/index.html:750
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2199,7 +2199,7 @@ msgid ""
"interpretation came from."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:756
+#: website/public/blog/touhou-reconstruction/index.html:758
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"This becomes especially important for a port. An absolute address tells me where "
@@ -2208,14 +2208,14 @@ msgid ""
"recover the relationship behind the old memory access."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:763
+#: website/public/blog/touhou-reconstruction/index.html:765
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "The order I now use is:"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:765
+#: website/public/blog/touhou-reconstruction/index.html:767
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2226,7 +2226,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:772
+#: website/public/blog/touhou-reconstruction/index.html:774
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2238,7 +2238,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:779
+#: website/public/blog/touhou-reconstruction/index.html:781
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2250,7 +2250,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:788
+#: website/public/blog/touhou-reconstruction/index.html:790
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2261,7 +2261,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:795
+#: website/public/blog/touhou-reconstruction/index.html:797
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2271,7 +2271,7 @@ msgid ""
"still builds and behaves correctly along the paths we exercise."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:803
+#: website/public/blog/touhou-reconstruction/index.html:805
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"They catch different mistakes. A type change can alter the generated instructions. An "
@@ -2280,7 +2280,7 @@ msgid ""
" carrying a refactor further."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:810
+#: website/public/blog/touhou-reconstruction/index.html:812
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"A name needs evidence of its own. An exact comparison cannot tell us whether a field "
@@ -2293,7 +2293,7 @@ msgstr ""
#. factory/blob/717e1b8560783ed17a39fdf159d30aa16bb307a7/docs/semantic-
#. reconstruction.md" >
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:817
+#: website/public/blog/touhou-reconstruction/index.html:819
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2305,7 +2305,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:828
+#: website/public/blog/touhou-reconstruction/index.html:830
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2313,12 +2313,12 @@ msgid ""
"recovered knowledge usable.{ph1} A port can then build on both."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:837
+#: website/public/blog/touhou-reconstruction/index.html:839
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "What makes this an industrial shift"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:838
+#: website/public/blog/touhou-reconstruction/index.html:840
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"These projects changed where I spent my attention. Once agents could carry much of an "
@@ -2327,7 +2327,7 @@ msgid ""
"needed it."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:845
+#: website/public/blog/touhou-reconstruction/index.html:847
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Autonomy matters here. The useful next step often becomes clear only after a failed "
@@ -2336,7 +2336,7 @@ msgid ""
"attention."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:852
+#: website/public/blog/touhou-reconstruction/index.html:854
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"I expect the agent to make wrong hypotheses. What matters is whether we can test them "
@@ -2345,7 +2345,7 @@ msgid ""
"a project milestone."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:859
+#: website/public/blog/touhou-reconstruction/index.html:861
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"REA gives the agent access to analysis tools. A question about a function's caller can"
@@ -2354,7 +2354,7 @@ msgid ""
"proposes and see where its explanation holds up."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:866
+#: website/public/blog/touhou-reconstruction/index.html:868
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The TH08 bug shows why those checks deserve engineering attention of their own. When "
@@ -2366,7 +2366,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:873
+#: website/public/blog/touhou-reconstruction/index.html:875
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2379,7 +2379,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:886
+#: website/public/blog/touhou-reconstruction/index.html:888
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2390,7 +2390,7 @@ msgid ""
"project can then inherit a stronger tool."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:896
+#: website/public/blog/touhou-reconstruction/index.html:898
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"There is also a practical limit to any one conversation. It will end before a large "
@@ -2400,7 +2400,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:902
+#: website/public/blog/touhou-reconstruction/index.html:904
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2409,7 +2409,7 @@ msgid ""
"the starting conditions for another."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:912
+#: website/public/blog/touhou-reconstruction/index.html:914
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"That is what makes the industrial analogy meaningful to me. Experience starts becoming"
@@ -2417,12 +2417,12 @@ msgid ""
"person—or the next agent—can get done."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:920
+#: website/public/blog/touhou-reconstruction/index.html:922
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "The projects we can now consider"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:921
+#: website/public/blog/touhou-reconstruction/index.html:923
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The pace matters because it changes the decision to begin. A game could be fascinating"
@@ -2430,7 +2430,7 @@ msgid ""
"realistically give it. Many projects would stay ideas."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:927
+#: website/public/blog/touhou-reconstruction/index.html:929
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Now I can see a way to keep such a project moving through repeated investigations. "
@@ -2441,7 +2441,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/blog/touhou-reconstruction/index.html:934
+#: website/public/blog/touhou-reconstruction/index.html:936
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2449,7 +2449,7 @@ msgid ""
"accumulated knowledge would let an agent work on this reliably?{ph1}"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:941
+#: website/public/blog/touhou-reconstruction/index.html:943
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"That question makes me consider projects I would previously have left alone. Each one "
@@ -2457,12 +2457,12 @@ msgid ""
"take us."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:949
+#: website/public/blog/touhou-reconstruction/index.html:951
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Project milestones and sources"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:950
+#: website/public/blog/touhou-reconstruction/index.html:952
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The dates describe recorded project checkpoints, checked against public GitHub history"
@@ -2490,7 +2490,7 @@ msgstr ""
#. {ph9}:
#. {ph10}:
#. {ph11}:
-#: website/public/blog/touhou-reconstruction/index.html:958
+#: website/public/blog/touhou-reconstruction/index.html:960
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2521,7 +2521,7 @@ msgstr ""
#. href="https://github.com/N0zoM1z0/th095/blob/3442dcf29d9e0b5bef384a49bd0c9ad32a711826/docs/WHOLE_BUILD_TODO.md"
#. >
#. {ph11}:
-#: website/public/blog/touhou-reconstruction/index.html:981
+#: website/public/blog/touhou-reconstruction/index.html:983
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2536,7 +2536,7 @@ msgstr ""
#. href="https://github.com/N0zoM1z0/th04/blob/bb9faca54e2eb3c0d6c757c75d59ac29d2cd5e93/docs/RE_HANDOFF.md"
#. >
#. {ph3}:
-#: website/public/blog/touhou-reconstruction/index.html:1004
+#: website/public/blog/touhou-reconstruction/index.html:1006
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2556,7 +2556,7 @@ msgstr ""
#. href="https://github.com/N0zoM1z0/th08/commit/a393f400786e4cc6cbb1000af0dad3276da12c78"
#. >
#. {ph7}:
-#: website/public/blog/touhou-reconstruction/index.html:1013
+#: website/public/blog/touhou-reconstruction/index.html:1015
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2574,7 +2574,7 @@ msgstr ""
#. factory/blob/717e1b8560783ed17a39fdf159d30aa16bb307a7/docs/semantic-
#. reconstruction.md" >
#. {ph5}:
-#: website/public/blog/touhou-reconstruction/index.html:1027
+#: website/public/blog/touhou-reconstruction/index.html:1029
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2587,7 +2587,7 @@ msgstr ""
#. {ph2}:
#. {ph3}:
-#: website/public/blog/touhou-reconstruction/index.html:1039
+#: website/public/blog/touhou-reconstruction/index.html:1041
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2603,7 +2603,7 @@ msgstr ""
#. {ph4}:
#. {ph5}:
-#: website/public/blog/touhou-reconstruction/index.html:1048
+#: website/public/blog/touhou-reconstruction/index.html:1050
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
@@ -2615,7 +2615,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/blog/touhou-reconstruction/index.html:1063
+#: website/public/blog/touhou-reconstruction/index.html:1065
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}"
@@ -2633,72 +2633,72 @@ msgid ""
" and how knowledge compounds across TH08, TH095 and PC-98 TH04."
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:357
+#: website/public/blog/touhou-reconstruction/index.html:359
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Experience carried between projects"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:371
+#: website/public/blog/touhou-reconstruction/index.html:373
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "On this page"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:386
+#: website/public/blog/touhou-reconstruction/index.html:388
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Touhou reconstruction essay"
msgstr ""
-#: website/public/blog/touhou-reconstruction/index.html:1089
+#: website/public/blog/touhou-reconstruction/index.html:1091
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/contributors/index.html:112
+#: website/public/contributors/index.html:114
msgctxt "page:contributors/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/contributors/index.html:202
+#: website/public/contributors/index.html:204
#, python-brace-format
msgctxt "page:contributors/index.html"
msgid "{ph0}Home{ph1} / Contributors"
msgstr ""
-#: website/public/contributors/index.html:203
+#: website/public/contributors/index.html:205
msgctxt "page:contributors/index.html"
msgid "Built together."
msgstr ""
-#: website/public/contributors/index.html:204
+#: website/public/contributors/index.html:206
msgctxt "page:contributors/index.html"
msgid "Thank you to everyone who helps make REA better."
msgstr ""
-#: website/public/contributors/index.html:205
+#: website/public/contributors/index.html:207
msgctxt "page:contributors/index.html"
msgid ""
"Code, documentation, tests, translations and ideas — there are many ways to "
"contribute."
msgstr ""
-#: website/public/contributors/index.html:210
+#: website/public/contributors/index.html:212
msgctxt "page:contributors/index.html"
msgid "How to contribute"
msgstr ""
-#: website/public/contributors/index.html:215
+#: website/public/contributors/index.html:217
msgctxt "page:contributors/index.html"
msgid "Join the conversation →"
msgstr ""
-#: website/public/contributors/index.html:225
+#: website/public/contributors/index.html:227
msgctxt "page:contributors/index.html"
msgid "Contributors"
msgstr ""
-#: website/public/contributors/index.html:227
+#: website/public/contributors/index.html:229
msgctxt "page:contributors/index.html"
msgid "Find a contributor"
msgstr ""
@@ -2706,13 +2706,13 @@ msgstr ""
#. {ph0}:
#. {ph1}:
#. {ph2}:
-#: website/public/contributors/index.html:1114
+#: website/public/contributors/index.html:1116
#, python-brace-format
msgctxt "page:contributors/index.html"
msgid "From {ph0}GitHub’s contributor list{ph1} · Updated {ph2}."
msgstr ""
-#: website/public/contributors/index.html:1119
+#: website/public/contributors/index.html:1121
msgctxt "page:contributors/index.html"
msgid "No matching contributors. Try another username."
msgstr ""
@@ -2727,17 +2727,17 @@ msgctxt "page:contributors/index.html"
msgid "Meet the people who contribute code, documentation, tests and ideas to REA."
msgstr ""
-#: website/public/contributors/index.html:228
+#: website/public/contributors/index.html:230
msgctxt "page:contributors/index.html"
msgid "GitHub username"
msgstr ""
-#: website/public/contributors/index.html:1140
+#: website/public/contributors/index.html:1142
msgctxt "page:contributors/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/examples/dino-lab/index.html:112
+#: website/public/examples/dino-lab/index.html:114
msgctxt "page:examples/dino-lab/index.html"
msgid "Skip to content"
msgstr ""
@@ -2746,18 +2746,18 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/examples/dino-lab/index.html:202
+#: website/public/examples/dino-lab/index.html:204
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab"
msgstr ""
-#: website/public/examples/dino-lab/index.html:205
+#: website/public/examples/dino-lab/index.html:207
msgctxt "page:examples/dino-lab/index.html"
msgid "Inspect → rebuild → change"
msgstr ""
-#: website/public/examples/dino-lab/index.html:206
+#: website/public/examples/dino-lab/index.html:208
msgctxt "page:examples/dino-lab/index.html"
msgid "Rebuild the dinosaur’s speed rule."
msgstr ""
@@ -2766,7 +2766,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/examples/dino-lab/index.html:207
+#: website/public/examples/dino-lab/index.html:209
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
@@ -2775,15 +2775,15 @@ msgid ""
"with {ph2}adjustable speed.{ph3}"
msgstr ""
-#: website/public/examples/dino-lab/index.html:216
-#: website/public/examples/dino-lab/index.html:215
+#: website/public/examples/dino-lab/index.html:218
+#: website/public/examples/dino-lab/index.html:217
msgctxt "page:examples/dino-lab/index.html"
msgid "On this page"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/examples/dino-lab/index.html:218
+#: website/public/examples/dino-lab/index.html:220
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Play and change the speed{ph1}"
@@ -2791,7 +2791,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/examples/dino-lab/index.html:219
+#: website/public/examples/dino-lab/index.html:221
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Read the recovered rule{ph1}"
@@ -2799,7 +2799,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/examples/dino-lab/index.html:220
+#: website/public/examples/dino-lab/index.html:222
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Check the reconstruction{ph1}"
@@ -2807,18 +2807,18 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/examples/dino-lab/index.html:221
+#: website/public/examples/dino-lab/index.html:223
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Try the analysis{ph1}"
msgstr ""
-#: website/public/examples/dino-lab/index.html:226
+#: website/public/examples/dino-lab/index.html:228
msgctxt "page:examples/dino-lab/index.html"
msgid "Play and change the speed"
msgstr ""
-#: website/public/examples/dino-lab/index.html:227
+#: website/public/examples/dino-lab/index.html:229
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Press Play, then jump over the cactus. Move the speed slider to try a slower or faster"
@@ -2826,54 +2826,54 @@ msgid ""
"gradually accelerate again."
msgstr ""
-#: website/public/examples/dino-lab/index.html:233
+#: website/public/examples/dino-lab/index.html:235
msgctxt "page:examples/dino-lab/index.html"
msgid "Play the reconstruction"
msgstr ""
-#: website/public/examples/dino-lab/index.html:265
+#: website/public/examples/dino-lab/index.html:267
msgctxt "page:examples/dino-lab/index.html"
msgid "Play"
msgstr ""
-#: website/public/examples/dino-lab/index.html:268
+#: website/public/examples/dino-lab/index.html:270
msgctxt "page:examples/dino-lab/index.html"
msgid "Jump ↑"
msgstr ""
-#: website/public/examples/dino-lab/index.html:269
+#: website/public/examples/dino-lab/index.html:271
msgctxt "page:examples/dino-lab/index.html"
msgid "Restart"
msgstr ""
-#: website/public/examples/dino-lab/index.html:272
+#: website/public/examples/dino-lab/index.html:274
msgctxt "page:examples/dino-lab/index.html"
msgid "Speed"
msgstr ""
-#: website/public/examples/dino-lab/index.html:282
+#: website/public/examples/dino-lab/index.html:284
msgctxt "page:examples/dino-lab/index.html"
msgid "Use the recovered acceleration rule"
msgstr ""
-#: website/public/examples/dino-lab/index.html:286
+#: website/public/examples/dino-lab/index.html:288
msgctxt "page:examples/dino-lab/index.html"
msgid "Original rule: start at 6, then increase toward 13."
msgstr ""
-#: website/public/examples/dino-lab/index.html:289
+#: website/public/examples/dino-lab/index.html:291
msgctxt "page:examples/dino-lab/index.html"
msgid "Move the slider to set your own speed. Space or Jump clears a cactus."
msgstr ""
-#: website/public/examples/dino-lab/index.html:294
+#: website/public/examples/dino-lab/index.html:296
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Enable JavaScript to play the reconstruction. The code and explanation above remain "
"readable."
msgstr ""
-#: website/public/examples/dino-lab/index.html:302
+#: website/public/examples/dino-lab/index.html:304
msgctxt "page:examples/dino-lab/index.html"
msgid "Read the script REA returned"
msgstr ""
@@ -2881,7 +2881,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
#. {ph2}: index.js
-#: website/public/examples/dino-lab/index.html:303
+#: website/public/examples/dino-lab/index.html:305
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
@@ -2889,7 +2889,7 @@ msgid ""
"the loaded {ph2}, including this branch in the game’s update function:"
msgstr ""
-#: website/public/examples/dino-lab/index.html:313
+#: website/public/examples/dino-lab/index.html:315
msgctxt "page:examples/dino-lab/index.html"
msgid "REA · selected script source"
msgstr ""
@@ -2897,7 +2897,7 @@ msgstr ""
#. {ph0}: SPEED: 6
#. {ph1}: ACCELERATION: 0.001
#. {ph2}: MAX_SPEED: 13
-#: website/public/examples/dino-lab/index.html:319
+#: website/public/examples/dino-lab/index.html:321
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
@@ -2905,25 +2905,25 @@ msgid ""
"without a collision."
msgstr ""
-#: website/public/examples/dino-lab/index.html:324
+#: website/public/examples/dino-lab/index.html:326
msgctxt "page:examples/dino-lab/index.html"
msgid "Use the same rule in the new game"
msgstr ""
#. {ph0}: dino-speed.js
-#: website/public/examples/dino-lab/index.html:327
+#: website/public/examples/dino-lab/index.html:329
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "Reconstruction · {ph0}"
msgstr ""
-#: website/public/examples/dino-lab/index.html:330
-#: website/public/examples/dino-lab/index.html:429
+#: website/public/examples/dino-lab/index.html:332
+#: website/public/examples/dino-lab/index.html:431
msgctxt "page:examples/dino-lab/index.html"
msgid "Copy"
msgstr ""
-#: website/public/examples/dino-lab/index.html:343
+#: website/public/examples/dino-lab/index.html:345
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"The mini-game uses this function for automatic acceleration. Moving the slider "
@@ -2935,59 +2935,59 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/examples/dino-lab/index.html:349
+#: website/public/examples/dino-lab/index.html:351
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}"
msgstr ""
-#: website/public/examples/dino-lab/index.html:357
+#: website/public/examples/dino-lab/index.html:359
msgctxt "page:examples/dino-lab/index.html"
msgid "Check the reconstruction"
msgstr ""
-#: website/public/examples/dino-lab/index.html:358
+#: website/public/examples/dino-lab/index.html:360
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"We called the original game’s update function with obstacles and automatic scheduling "
"disabled. Compare those recorded speeds with a replay of the recovered rule."
msgstr ""
-#: website/public/examples/dino-lab/index.html:367
+#: website/public/examples/dino-lab/index.html:369
msgctxt "page:examples/dino-lab/index.html"
msgid "Updates"
msgstr ""
-#: website/public/examples/dino-lab/index.html:368
+#: website/public/examples/dino-lab/index.html:370
msgctxt "page:examples/dino-lab/index.html"
msgid "Original game"
msgstr ""
-#: website/public/examples/dino-lab/index.html:369
+#: website/public/examples/dino-lab/index.html:371
msgctxt "page:examples/dino-lab/index.html"
msgid "Reconstructed rule"
msgstr ""
-#: website/public/examples/dino-lab/index.html:396
+#: website/public/examples/dino-lab/index.html:398
msgctxt "page:examples/dino-lab/index.html"
msgid "Run the speed check"
msgstr ""
-#: website/public/examples/dino-lab/index.html:399
+#: website/public/examples/dino-lab/index.html:401
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Values rounded to three decimals. The branch checks before adding, so the final "
"increment can take speed just above 13."
msgstr ""
-#: website/public/examples/dino-lab/index.html:405
+#: website/public/examples/dino-lab/index.html:407
msgctxt "page:examples/dino-lab/index.html"
msgid "Try the analysis yourself"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/examples/dino-lab/index.html:407
+#: website/public/examples/dino-lab/index.html:409
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Set up REA{ph1} with your coding agent."
@@ -2996,13 +2996,13 @@ msgstr ""
#. {ph0}:
#. {ph1}:
#. {ph2}: https://wayou.github.io/t-rex-runner/
-#: website/public/examples/dino-lab/index.html:411
+#: website/public/examples/dino-lab/index.html:413
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL."
msgstr ""
-#: website/public/examples/dino-lab/index.html:418
+#: website/public/examples/dino-lab/index.html:420
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Give your agent the page URL and local debugging endpoint, then copy this prompt."
@@ -3016,7 +3016,7 @@ msgstr ""
#. {ph5}:
#. {ph6}:
#. {ph7}:
-#: website/public/examples/dino-lab/index.html:425
+#: website/public/examples/dino-lab/index.html:427
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
@@ -3028,7 +3028,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
-#: website/public/examples/dino-lab/index.html:438
+#: website/public/examples/dino-lab/index.html:440
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
@@ -3038,7 +3038,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/examples/dino-lab/index.html:447
+#: website/public/examples/dino-lab/index.html:449
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
@@ -3051,7 +3051,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/examples/dino-lab/index.html:454
+#: website/public/examples/dino-lab/index.html:456
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
@@ -3071,63 +3071,63 @@ msgid ""
"play."
msgstr ""
-#: website/public/examples/dino-lab/index.html:224
+#: website/public/examples/dino-lab/index.html:226
msgctxt "page:examples/dino-lab/index.html"
msgid "Dinosaur speed reconstruction"
msgstr ""
-#: website/public/examples/dino-lab/index.html:255
+#: website/public/examples/dino-lab/index.html:257
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Dinosaur mini-game. Use the Jump button or press Space while the game is focused."
msgstr ""
-#: website/public/examples/dino-lab/index.html:330
+#: website/public/examples/dino-lab/index.html:332
msgctxt "page:examples/dino-lab/index.html"
msgid "Copy reconstructed speed rule"
msgstr ""
-#: website/public/examples/dino-lab/index.html:429
+#: website/public/examples/dino-lab/index.html:431
msgctxt "page:examples/dino-lab/index.html"
msgid "Copy dinosaur analysis prompt"
msgstr ""
-#: website/public/examples/dino-lab/index.html:484
+#: website/public/examples/dino-lab/index.html:486
msgctxt "page:examples/dino-lab/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/faq/index.html:111
+#: website/public/faq/index.html:113
msgctxt "page:faq/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:201
+#: website/public/faq/index.html:203
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Home{ph1} / FAQ"
msgstr ""
-#: website/public/faq/index.html:202
+#: website/public/faq/index.html:204
msgctxt "page:faq/index.html"
msgid "REA FAQ."
msgstr ""
-#: website/public/faq/index.html:203
+#: website/public/faq/index.html:205
msgctxt "page:faq/index.html"
msgid "Setup, updates, analysis and troubleshooting."
msgstr ""
-#: website/public/faq/index.html:207
+#: website/public/faq/index.html:209
msgctxt "page:faq/index.html"
msgid "Topics"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:209
+#: website/public/faq/index.html:211
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Setup and updates{ph1}"
@@ -3135,7 +3135,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:210
+#: website/public/faq/index.html:212
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Analysis{ph1}"
@@ -3143,7 +3143,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:211
+#: website/public/faq/index.html:213
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Troubleshooting{ph1}"
@@ -3151,24 +3151,24 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:212
+#: website/public/faq/index.html:214
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Data and sharing{ph1}"
msgstr ""
-#: website/public/faq/index.html:221
+#: website/public/faq/index.html:223
msgctxt "page:faq/index.html"
msgid "Setup and updates"
msgstr ""
-#: website/public/faq/index.html:224
+#: website/public/faq/index.html:226
msgctxt "page:faq/index.html"
msgid "How do I install REA?"
msgstr ""
#. {ph0}: Node.js
-#: website/public/faq/index.html:225
+#: website/public/faq/index.html:227
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3176,22 +3176,22 @@ msgid ""
"proposed changes."
msgstr ""
-#: website/public/faq/index.html:232
+#: website/public/faq/index.html:234
msgctxt "page:faq/index.html"
msgid "Terminal · agent setup"
msgstr ""
-#: website/public/faq/index.html:233 website/public/faq/index.html:274
-#: website/public/faq/index.html:292 website/public/faq/index.html:376
-#: website/public/faq/index.html:423 website/public/faq/index.html:463
-#: website/public/faq/index.html:483
+#: website/public/faq/index.html:235 website/public/faq/index.html:276
+#: website/public/faq/index.html:294 website/public/faq/index.html:378
+#: website/public/faq/index.html:425 website/public/faq/index.html:465
+#: website/public/faq/index.html:485
msgctxt "page:faq/index.html"
msgid "Copy"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:244
+#: website/public/faq/index.html:246
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3200,12 +3200,12 @@ msgid ""
"{ph0}Follow the setup guide{ph1} for prerequisites and your first analysis."
msgstr ""
-#: website/public/faq/index.html:253
+#: website/public/faq/index.html:255
msgctxt "page:faq/index.html"
msgid "Which coding agents can use REA?"
msgstr ""
-#: website/public/faq/index.html:254
+#: website/public/faq/index.html:256
msgctxt "page:faq/index.html"
msgid ""
"Any agent that supports local MCP servers. Setup includes Claude Code, Claude Desktop,"
@@ -3216,29 +3216,29 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:261
+#: website/public/faq/index.html:263
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Connect your coding agent{ph1}."
msgstr ""
-#: website/public/faq/index.html:266
+#: website/public/faq/index.html:268
msgctxt "page:faq/index.html"
msgid "How do I update REA?"
msgstr ""
-#: website/public/faq/index.html:267
+#: website/public/faq/index.html:269
msgctxt "page:faq/index.html"
msgid "REA releases frequently, including bug fixes. If you installed the CLI with npm:"
msgstr ""
-#: website/public/faq/index.html:273
+#: website/public/faq/index.html:275
msgctxt "page:faq/index.html"
msgid "Terminal · installed CLI"
msgstr ""
#. {ph0}: npx
-#: website/public/faq/index.html:285
+#: website/public/faq/index.html:287
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3246,13 +3246,13 @@ msgid ""
"through {ph0}, run:"
msgstr ""
-#: website/public/faq/index.html:291
+#: website/public/faq/index.html:293
msgctxt "page:faq/index.html"
msgid "Terminal · refresh agent setup"
msgstr ""
#. {ph0}: npx -y rea-agents@latest
-#: website/public/faq/index.html:303
+#: website/public/faq/index.html:305
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3261,14 +3261,14 @@ msgid ""
"followed by the command."
msgstr ""
-#: website/public/faq/index.html:311
+#: website/public/faq/index.html:313
msgctxt "page:faq/index.html"
msgid "Is installing the skill from skills.sh enough?"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:314
+#: website/public/faq/index.html:316
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3277,24 +3277,24 @@ msgid ""
"can call the tools."
msgstr ""
-#: website/public/faq/index.html:325
+#: website/public/faq/index.html:327
msgctxt "page:faq/index.html"
msgid "Analysis"
msgstr ""
-#: website/public/faq/index.html:328
+#: website/public/faq/index.html:330
msgctxt "page:faq/index.html"
msgid "What can I analyze with REA?"
msgstr ""
-#: website/public/faq/index.html:329
+#: website/public/faq/index.html:331
msgctxt "page:faq/index.html"
msgid "Start with the kind of software you have:"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:331
+#: website/public/faq/index.html:333
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3304,7 +3304,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:336
+#: website/public/faq/index.html:338
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3313,7 +3313,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:341
+#: website/public/faq/index.html:343
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations."
@@ -3321,7 +3321,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:346
+#: website/public/faq/index.html:348
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3329,12 +3329,12 @@ msgid ""
"resources. {ph0}See the case studies{ph1} for worked investigations."
msgstr ""
-#: website/public/faq/index.html:354
+#: website/public/faq/index.html:356
msgctxt "page:faq/index.html"
msgid "Do I need Hopper, Ghidra or IDA?"
msgstr ""
-#: website/public/faq/index.html:355
+#: website/public/faq/index.html:357
msgctxt "page:faq/index.html"
msgid ""
"Deep native analysis uses one of them. Static JavaScript and .NET inspection work with"
@@ -3343,7 +3343,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:360
+#: website/public/faq/index.html:362
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3352,25 +3352,25 @@ msgid ""
"{ph0}Set up native analysis{ph1}."
msgstr ""
-#: website/public/faq/index.html:368
+#: website/public/faq/index.html:370
msgctxt "page:faq/index.html"
msgid "Can I use REA without a coding agent?"
msgstr ""
-#: website/public/faq/index.html:369
+#: website/public/faq/index.html:371
msgctxt "page:faq/index.html"
msgid ""
"Yes. The CLI uses the same analysis workflows. For a local JavaScript or Electron app:"
msgstr ""
-#: website/public/faq/index.html:375
+#: website/public/faq/index.html:377
msgctxt "page:faq/index.html"
msgid "Terminal · static application analysis"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:388
+#: website/public/faq/index.html:390
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3378,12 +3378,12 @@ msgid ""
"CLI{ph1} for installation options."
msgstr ""
-#: website/public/faq/index.html:395
+#: website/public/faq/index.html:397
msgctxt "page:faq/index.html"
msgid "What code does REA return?"
msgstr ""
-#: website/public/faq/index.html:396
+#: website/public/faq/index.html:398
msgctxt "page:faq/index.html"
msgid ""
"Native analysis returns assembly and pseudocode, with calls, references and relevant "
@@ -3395,7 +3395,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/faq/index.html:401
+#: website/public/faq/index.html:403
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3404,12 +3404,12 @@ msgid ""
"how that process works."
msgstr ""
-#: website/public/faq/index.html:412
+#: website/public/faq/index.html:414
msgctxt "page:faq/index.html"
msgid "What should I ask my agent?"
msgstr ""
-#: website/public/faq/index.html:413
+#: website/public/faq/index.html:415
msgctxt "page:faq/index.html"
msgid ""
"Give it a local target and one behavior to investigate. For a JavaScript or Electron "
@@ -3424,7 +3424,7 @@ msgstr ""
#. {ph5}:
#. {ph6}:
#. {ph7}:
-#: website/public/faq/index.html:419
+#: website/public/faq/index.html:421
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
@@ -3437,7 +3437,7 @@ msgstr ""
#. {ph4}:
#. {ph5}:
-#: website/public/faq/index.html:432
+#: website/public/faq/index.html:434
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3447,7 +3447,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:442
+#: website/public/faq/index.html:444
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3455,18 +3455,18 @@ msgid ""
"Electron and browser examples."
msgstr ""
-#: website/public/faq/index.html:452
+#: website/public/faq/index.html:454
msgctxt "page:faq/index.html"
msgid "Troubleshooting"
msgstr ""
-#: website/public/faq/index.html:455
+#: website/public/faq/index.html:457
msgctxt "page:faq/index.html"
msgid "Why can't my agent see the REA tools?"
msgstr ""
#. {ph0}: doctor
-#: website/public/faq/index.html:456
+#: website/public/faq/index.html:458
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3474,7 +3474,7 @@ msgid ""
"for Codex:"
msgstr ""
-#: website/public/faq/index.html:462
+#: website/public/faq/index.html:464
msgctxt "page:faq/index.html"
msgid "Terminal · check one client"
msgstr ""
@@ -3482,7 +3482,7 @@ msgstr ""
#. {ph0}: codex
#. {ph1}: claude_code
#. {ph2}: cursor
-#: website/public/faq/index.html:474
+#: website/public/faq/index.html:476
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3490,14 +3490,14 @@ msgid ""
"missing or stale registration, run setup for that client:"
msgstr ""
-#: website/public/faq/index.html:482
+#: website/public/faq/index.html:484
msgctxt "page:faq/index.html"
msgid "Terminal · repair one client's setup"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:494
+#: website/public/faq/index.html:496
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3505,14 +3505,14 @@ msgid ""
"absent, check the client's MCP connection error. {ph0}More setup diagnostics{ph1}."
msgstr ""
-#: website/public/faq/index.html:502
+#: website/public/faq/index.html:504
msgctxt "page:faq/index.html"
msgid "Do I need to start Hopper first?"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:503
+#: website/public/faq/index.html:505
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3521,14 +3521,14 @@ msgid ""
"provider setup{ph1}."
msgstr ""
-#: website/public/faq/index.html:512
+#: website/public/faq/index.html:514
msgctxt "page:faq/index.html"
msgid "What should I do if I hit a bug?"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:513
+#: website/public/faq/index.html:515
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3538,7 +3538,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:517
+#: website/public/faq/index.html:519
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3547,24 +3547,24 @@ msgid ""
"problem involves native analysis."
msgstr ""
-#: website/public/faq/index.html:531
+#: website/public/faq/index.html:533
msgctxt "page:faq/index.html"
msgid "Data and sharing"
msgstr ""
-#: website/public/faq/index.html:534
+#: website/public/faq/index.html:536
msgctxt "page:faq/index.html"
msgid "Does REA upload my app?"
msgstr ""
-#: website/public/faq/index.html:535
+#: website/public/faq/index.html:537
msgctxt "page:faq/index.html"
msgid ""
"REA analyzes targets on your machine. Your agent receives the results, and its model "
"provider's data policy applies to those results."
msgstr ""
-#: website/public/faq/index.html:542
+#: website/public/faq/index.html:544
msgctxt "page:faq/index.html"
msgid "How can I share an example or contribute?"
msgstr ""
@@ -3573,7 +3573,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/faq/index.html:543
+#: website/public/faq/index.html:545
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3584,7 +3584,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/faq/index.html:555
+#: website/public/faq/index.html:557
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
@@ -3604,77 +3604,77 @@ msgid ""
" troubleshooting and sharing examples."
msgstr ""
-#: website/public/faq/index.html:206
+#: website/public/faq/index.html:208
msgctxt "page:faq/index.html"
msgid "On this page"
msgstr ""
-#: website/public/faq/index.html:215
+#: website/public/faq/index.html:217
msgctxt "page:faq/index.html"
msgid "Frequently asked questions about REA"
msgstr ""
-#: website/public/faq/index.html:233
+#: website/public/faq/index.html:235
msgctxt "page:faq/index.html"
msgid "Copy REA setup command"
msgstr ""
-#: website/public/faq/index.html:274
+#: website/public/faq/index.html:276
msgctxt "page:faq/index.html"
msgid "Copy REA update command"
msgstr ""
-#: website/public/faq/index.html:292
+#: website/public/faq/index.html:294
msgctxt "page:faq/index.html"
msgid "Copy agent setup refresh command"
msgstr ""
-#: website/public/faq/index.html:376
+#: website/public/faq/index.html:378
msgctxt "page:faq/index.html"
msgid "Copy REA CLI analysis command"
msgstr ""
-#: website/public/faq/index.html:423
+#: website/public/faq/index.html:425
msgctxt "page:faq/index.html"
msgid "Copy example analysis prompt"
msgstr ""
-#: website/public/faq/index.html:463
+#: website/public/faq/index.html:465
msgctxt "page:faq/index.html"
msgid "Copy client diagnosis command"
msgstr ""
-#: website/public/faq/index.html:483
+#: website/public/faq/index.html:485
msgctxt "page:faq/index.html"
msgid "Copy scoped setup command"
msgstr ""
-#: website/public/faq/index.html:582
+#: website/public/faq/index.html:584
msgctxt "page:faq/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/first-investigation/index.html:111
+#: website/public/first-investigation/index.html:113
msgctxt "page:first-investigation/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/first-investigation/index.html:201
+#: website/public/first-investigation/index.html:203
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}Home{ph1} / Your first investigation"
msgstr ""
#. {ph0}: notes-example
-#: website/public/first-investigation/index.html:326
+#: website/public/first-investigation/index.html:328
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
@@ -3858,12 +3858,12 @@ msgid ""
"the {ph0} folder and the same export question."
msgstr ""
-#: website/public/first-investigation/index.html:333
+#: website/public/first-investigation/index.html:335
msgctxt "page:first-investigation/index.html"
msgid "3. Follow the answer back to the code"
msgstr ""
-#: website/public/first-investigation/index.html:334
+#: website/public/first-investigation/index.html:336
msgctxt "page:first-investigation/index.html"
msgid "Look for a short explanation with file and line references:"
msgstr ""
@@ -3872,7 +3872,7 @@ msgstr ""
#. {ph1}: notes.csv
#. {ph2}: id
#. {ph3}: title
-#: website/public/first-investigation/index.html:336
+#: website/public/first-investigation/index.html:338
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
@@ -3880,7 +3880,7 @@ msgid ""
" {ph1} in the user’s Downloads folder. The columns are {ph2} and {ph3}."
msgstr ""
-#: website/public/first-investigation/index.html:344
+#: website/public/first-investigation/index.html:346
msgctxt "page:first-investigation/index.html"
msgid "From the button to the file writer"
msgstr ""
@@ -3893,7 +3893,7 @@ msgstr ""
#. {ph5}:
#. {ph6}: notes.exportCsv()
#. {ph7}:
-#: website/public/first-investigation/index.html:346
+#: website/public/first-investigation/index.html:348
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}"
@@ -3907,7 +3907,7 @@ msgstr ""
#. {ph5}:
#. {ph6}:
#. {ph7}:
-#: website/public/first-investigation/index.html:354
+#: website/public/first-investigation/index.html:356
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
@@ -3924,7 +3924,7 @@ msgstr ""
#. {ph6}:
#. {ph7}: csv.js
#. {ph8}:
-#: website/public/first-investigation/index.html:362
+#: website/public/first-investigation/index.html:364
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
@@ -3932,7 +3932,7 @@ msgid ""
"writes the file.{ph8}"
msgstr ""
-#: website/public/first-investigation/index.html:373
+#: website/public/first-investigation/index.html:375
msgctxt "page:first-investigation/index.html"
msgid ""
"REA’s static analysis pairs the message with its handler. The destination is read from"
@@ -3940,18 +3940,18 @@ msgid ""
msgstr ""
#. {ph0}: main.js
-#: website/public/first-investigation/index.html:380
+#: website/public/first-investigation/index.html:382
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0} · lines 8–12"
msgstr ""
-#: website/public/first-investigation/index.html:381
+#: website/public/first-investigation/index.html:383
msgctxt "page:first-investigation/index.html"
msgid "Source"
msgstr ""
-#: website/public/first-investigation/index.html:389
+#: website/public/first-investigation/index.html:391
msgctxt "page:first-investigation/index.html"
msgid ""
"The file path, formatter and write call are together in this handler. Ask your agent "
@@ -3960,18 +3960,18 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/first-investigation/index.html:394
+#: website/public/first-investigation/index.html:396
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}See the full code trace and recorded REA result{ph1}."
msgstr ""
-#: website/public/first-investigation/index.html:401
+#: website/public/first-investigation/index.html:403
msgctxt "page:first-investigation/index.html"
msgid "4. Check a prediction"
msgstr ""
-#: website/public/first-investigation/index.html:402
+#: website/public/first-investigation/index.html:404
msgctxt "page:first-investigation/index.html"
msgid ""
"A comma separates CSV columns. What happens when a note title itself contains a comma "
@@ -3987,7 +3987,7 @@ msgstr ""
#. {ph6}:
#. {ph7}:
-#: website/public/first-investigation/index.html:422
+#: website/public/first-investigation/index.html:424
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
@@ -3996,13 +3996,13 @@ msgid ""
"output.{ph6}{ph7}{ph8}"
msgstr ""
-#: website/public/first-investigation/index.html:435
+#: website/public/first-investigation/index.html:437
msgctxt "page:first-investigation/index.html"
msgid "Expected formatter output"
msgstr ""
#. {ph0}: Node.js
-#: website/public/first-investigation/index.html:440
+#: website/public/first-investigation/index.html:442
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
@@ -4010,34 +4010,34 @@ msgid ""
"formatter directly with {ph0}."
msgstr ""
-#: website/public/first-investigation/index.html:446
+#: website/public/first-investigation/index.html:448
msgctxt "page:first-investigation/index.html"
msgid "Run the check yourself"
msgstr ""
#. {ph0}: notes-example
-#: website/public/first-investigation/index.html:447
+#: website/public/first-investigation/index.html:449
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "Open a terminal in the unpacked {ph0} folder:"
msgstr ""
-#: website/public/first-investigation/index.html:488
+#: website/public/first-investigation/index.html:490
msgctxt "page:first-investigation/index.html"
msgid "5. Ask another question"
msgstr ""
-#: website/public/first-investigation/index.html:489
+#: website/public/first-investigation/index.html:491
msgctxt "page:first-investigation/index.html"
msgid "Try a follow-up in the same conversation:"
msgstr ""
-#: website/public/first-investigation/index.html:491
+#: website/public/first-investigation/index.html:493
msgctxt "page:first-investigation/index.html"
msgid "What happens if the file can’t be written? Follow the error back to the page."
msgstr ""
-#: website/public/first-investigation/index.html:496
+#: website/public/first-investigation/index.html:498
msgctxt "page:first-investigation/index.html"
msgid ""
"Or give your agent an app of your own and ask about one button, file or behavior."
@@ -4047,7 +4047,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/first-investigation/index.html:501
+#: website/public/first-investigation/index.html:503
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
@@ -4059,7 +4059,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/first-investigation/index.html:507
+#: website/public/first-investigation/index.html:509
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
@@ -4071,7 +4071,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/first-investigation/index.html:515
+#: website/public/first-investigation/index.html:517
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
@@ -4091,66 +4091,66 @@ msgid ""
"check the CSV formatter with a sample title."
msgstr ""
-#: website/public/first-investigation/index.html:215
+#: website/public/first-investigation/index.html:217
msgctxt "page:first-investigation/index.html"
msgid "On this page"
msgstr ""
-#: website/public/first-investigation/index.html:225
+#: website/public/first-investigation/index.html:227
msgctxt "page:first-investigation/index.html"
msgid "Your first REA investigation"
msgstr ""
-#: website/public/first-investigation/index.html:241
+#: website/public/first-investigation/index.html:243
msgctxt "page:first-investigation/index.html"
msgid "Copy REA installation prompt"
msgstr ""
-#: website/public/first-investigation/index.html:263
+#: website/public/first-investigation/index.html:265
msgctxt "page:first-investigation/index.html"
msgid "Copy setup command"
msgstr ""
-#: website/public/first-investigation/index.html:291
+#: website/public/first-investigation/index.html:293
msgctxt "page:first-investigation/index.html"
msgid "Copy Notes investigation prompt"
msgstr ""
-#: website/public/first-investigation/index.html:413
+#: website/public/first-investigation/index.html:415
msgctxt "page:first-investigation/index.html"
msgid "Copy CSV check prompt"
msgstr ""
-#: website/public/first-investigation/index.html:454
-#: website/public/first-investigation/index.html:471
+#: website/public/first-investigation/index.html:456
+#: website/public/first-investigation/index.html:473
msgctxt "page:first-investigation/index.html"
msgid "Copy formatter check command"
msgstr ""
-#: website/public/first-investigation/index.html:543
+#: website/public/first-investigation/index.html:545
msgctxt "page:first-investigation/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/get-started/index.html:111
+#: website/public/get-started/index.html:113
msgctxt "page:get-started/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:201
+#: website/public/get-started/index.html:203
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Home{ph1} / Get started"
msgstr ""
-#: website/public/get-started/index.html:202
+#: website/public/get-started/index.html:204
msgctxt "page:get-started/index.html"
msgid "Set up REA."
msgstr ""
-#: website/public/get-started/index.html:203
+#: website/public/get-started/index.html:205
msgctxt "page:get-started/index.html"
msgid ""
"Set up your computer and coding agent, connect REA, then investigate a small app."
@@ -4158,7 +4158,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:207
+#: website/public/get-started/index.html:209
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4166,14 +4166,14 @@ msgid ""
"{ph0}Connect REA{ph1}."
msgstr ""
-#: website/public/get-started/index.html:214 website/public/get-started/index.html:213
+#: website/public/get-started/index.html:216 website/public/get-started/index.html:215
msgctxt "page:get-started/index.html"
msgid "On this page"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:216
+#: website/public/get-started/index.html:218
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}1. Prepare your computer{ph1}"
@@ -4181,7 +4181,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:217
+#: website/public/get-started/index.html:219
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}2. Choose an agent{ph1}"
@@ -4189,7 +4189,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:218
+#: website/public/get-started/index.html:220
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}3. Connect REA{ph1}"
@@ -4197,7 +4197,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:219
+#: website/public/get-started/index.html:221
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}4. Try an investigation{ph1}"
@@ -4205,7 +4205,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:220
+#: website/public/get-started/index.html:222
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Other targets and providers{ph1}"
@@ -4213,7 +4213,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:221
+#: website/public/get-started/index.html:223
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Use the CLI{ph1}"
@@ -4221,25 +4221,25 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:222
+#: website/public/get-started/index.html:224
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Getting help{ph1}"
msgstr ""
-#: website/public/get-started/index.html:227
+#: website/public/get-started/index.html:229
msgctxt "page:get-started/index.html"
msgid "1. Prepare your computer"
msgstr ""
-#: website/public/get-started/index.html:228
+#: website/public/get-started/index.html:230
msgctxt "page:get-started/index.html"
msgid ""
"Use the computer where your target files are stored. A local coding agent can read "
"those files and run tools for you."
msgstr ""
-#: website/public/get-started/index.html:233
+#: website/public/get-started/index.html:235
msgctxt "page:get-started/index.html"
msgid "How do I open a terminal?"
msgstr ""
@@ -4248,7 +4248,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/get-started/index.html:235
+#: website/public/get-started/index.html:237
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4261,7 +4261,7 @@ msgstr ""
#. {ph3}: Space
#. {ph4}:
#. {ph5}:
-#: website/public/get-started/index.html:239
+#: website/public/get-started/index.html:241
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter."
@@ -4272,7 +4272,7 @@ msgstr ""
#. {ph2}: Ctrl
#. {ph3}: Alt
#. {ph4}: T
-#: website/public/get-started/index.html:243
+#: website/public/get-started/index.html:245
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops."
@@ -4285,7 +4285,7 @@ msgstr ""
#. {ph4}: Ctrl
#. {ph5}: Shift
#. {ph6}: V
-#: website/public/get-started/index.html:248
+#: website/public/get-started/index.html:250
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4293,7 +4293,7 @@ msgid ""
"{ph6}), then press Enter."
msgstr ""
-#: website/public/get-started/index.html:253
+#: website/public/get-started/index.html:255
msgctxt "page:get-started/index.html"
msgid ""
"Commands go in the terminal. Prompts labeled “Your coding agent” go in the agent's "
@@ -4302,7 +4302,7 @@ msgstr ""
#. {ph0}: Node.js
#. {ph1}: Node.js
-#: website/public/get-started/index.html:258
+#: website/public/get-started/index.html:260
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4311,47 +4311,47 @@ msgid ""
msgstr ""
#. {ph0}: Node.js
-#: website/public/get-started/index.html:264
+#: website/public/get-started/index.html:266
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Don't have {ph0}, or not sure?"
msgstr ""
-#: website/public/get-started/index.html:267
+#: website/public/get-started/index.html:269
msgctxt "page:get-started/index.html"
msgid "Open a terminal and check:"
msgstr ""
-#: website/public/get-started/index.html:270
+#: website/public/get-started/index.html:272
msgctxt "page:get-started/index.html"
msgid "Terminal"
msgstr ""
-#: website/public/get-started/index.html:271 website/public/get-started/index.html:294
-#: website/public/get-started/index.html:324 website/public/get-started/index.html:349
-#: website/public/get-started/index.html:372 website/public/get-started/index.html:387
-#: website/public/get-started/index.html:421 website/public/get-started/index.html:452
-#: website/public/get-started/index.html:466 website/public/get-started/index.html:484
-#: website/public/get-started/index.html:536 website/public/get-started/index.html:550
-#: website/public/get-started/index.html:582 website/public/get-started/index.html:611
-#: website/public/get-started/index.html:777 website/public/get-started/index.html:807
-#: website/public/get-started/index.html:832 website/public/get-started/index.html:847
-#: website/public/get-started/index.html:895 website/public/get-started/index.html:928
-#: website/public/get-started/index.html:1083 website/public/get-started/index.html:1145
-#: website/public/get-started/index.html:1168 website/public/get-started/index.html:1192
-#: website/public/get-started/index.html:1240 website/public/get-started/index.html:1315
-#: website/public/get-started/index.html:1341 website/public/get-started/index.html:1358
-#: website/public/get-started/index.html:1601 website/public/get-started/index.html:1660
-#: website/public/get-started/index.html:1679 website/public/get-started/index.html:1701
-#: website/public/get-started/index.html:1744 website/public/get-started/index.html:1774
-#: website/public/get-started/index.html:1795
+#: website/public/get-started/index.html:273 website/public/get-started/index.html:296
+#: website/public/get-started/index.html:326 website/public/get-started/index.html:351
+#: website/public/get-started/index.html:374 website/public/get-started/index.html:389
+#: website/public/get-started/index.html:423 website/public/get-started/index.html:454
+#: website/public/get-started/index.html:468 website/public/get-started/index.html:486
+#: website/public/get-started/index.html:538 website/public/get-started/index.html:552
+#: website/public/get-started/index.html:584 website/public/get-started/index.html:613
+#: website/public/get-started/index.html:779 website/public/get-started/index.html:809
+#: website/public/get-started/index.html:834 website/public/get-started/index.html:849
+#: website/public/get-started/index.html:897 website/public/get-started/index.html:930
+#: website/public/get-started/index.html:1085 website/public/get-started/index.html:1147
+#: website/public/get-started/index.html:1170 website/public/get-started/index.html:1194
+#: website/public/get-started/index.html:1242 website/public/get-started/index.html:1317
+#: website/public/get-started/index.html:1343 website/public/get-started/index.html:1360
+#: website/public/get-started/index.html:1603 website/public/get-started/index.html:1662
+#: website/public/get-started/index.html:1681 website/public/get-started/index.html:1703
+#: website/public/get-started/index.html:1746 website/public/get-started/index.html:1776
+#: website/public/get-started/index.html:1797
msgctxt "page:get-started/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: node -v
#. {ph1}: Node.js
-#: website/public/get-started/index.html:283
+#: website/public/get-started/index.html:285
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4360,7 +4360,7 @@ msgid ""
msgstr ""
#. {ph0}: node -v
-#: website/public/get-started/index.html:305
+#: website/public/get-started/index.html:307
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4369,7 +4369,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:309
+#: website/public/get-started/index.html:311
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Download the Node.js installer{ph1} if winget is unavailable."
@@ -4380,7 +4380,7 @@ msgstr ""
#. {ph2}: npx
#. {ph3}: npx.cmd
#. {ph4}: npm.cmd
-#: website/public/get-started/index.html:315
+#: website/public/get-started/index.html:317
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4390,7 +4390,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:338
+#: website/public/get-started/index.html:340
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4398,13 +4398,13 @@ msgid ""
"(.pkg){ph1}, open it and follow the installer. Then reopen Terminal."
msgstr ""
-#: website/public/get-started/index.html:345
+#: website/public/get-started/index.html:347
msgctxt "page:get-started/index.html"
msgid "Already use Homebrew?"
msgstr ""
#. {ph0}: sudo apt install curl unzip
-#: website/public/get-started/index.html:364
+#: website/public/get-started/index.html:366
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4412,14 +4412,14 @@ msgid ""
"other distributions, use your package manager."
msgstr ""
-#: website/public/get-started/index.html:383
+#: website/public/get-started/index.html:385
msgctxt "page:get-started/index.html"
msgid "Close the terminal, open it again, then:"
msgstr ""
#. {ph0}: nodejs
#. {ph1}: node -v
-#: website/public/get-started/index.html:400
+#: website/public/get-started/index.html:402
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4429,59 +4429,59 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:406
+#: website/public/get-started/index.html:408
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Prefer a regular installer? Download the LTS version from {ph0}nodejs.org{ph1}."
msgstr ""
-#: website/public/get-started/index.html:413
+#: website/public/get-started/index.html:415
msgctxt "page:get-started/index.html"
msgid "Make a working folder for your agent"
msgstr ""
-#: website/public/get-started/index.html:414
+#: website/public/get-started/index.html:416
msgctxt "page:get-started/index.html"
msgid "In your terminal, make a folder for the exercise, then move into it:"
msgstr ""
-#: website/public/get-started/index.html:433
+#: website/public/get-started/index.html:435
msgctxt "page:get-started/index.html"
msgid ""
"Keep this terminal open for the next step. If you already have a working folder, open "
"it instead."
msgstr ""
-#: website/public/get-started/index.html:440
+#: website/public/get-started/index.html:442
msgctxt "page:get-started/index.html"
msgid "2. Choose a coding agent"
msgstr ""
-#: website/public/get-started/index.html:441
+#: website/public/get-started/index.html:443
msgctxt "page:get-started/index.html"
msgid ""
"Your agent is the AI you talk to. REA supplies the inspection tools it uses. Pick one "
"client below; open its instructions if you haven't used it before."
msgstr ""
-#: website/public/get-started/index.html:447
+#: website/public/get-started/index.html:449
msgctxt "page:get-started/index.html"
msgid "Codex · use your ChatGPT account"
msgstr ""
-#: website/public/get-started/index.html:448
+#: website/public/get-started/index.html:450
msgctxt "page:get-started/index.html"
msgid "Install Codex using the command for your operating system:"
msgstr ""
-#: website/public/get-started/index.html:477
+#: website/public/get-started/index.html:479
msgctxt "page:get-started/index.html"
msgid ""
"After installation, reopen your terminal and return to the working folder. Then start "
"Codex:"
msgstr ""
-#: website/public/get-started/index.html:495
+#: website/public/get-started/index.html:497
msgctxt "page:get-started/index.html"
msgid ""
"Choose “Sign in with ChatGPT”, complete the browser sign-in, then return to the "
@@ -4490,28 +4490,28 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:500
+#: website/public/get-started/index.html:502
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Codex installation and sign-in{ph1}"
msgstr ""
-#: website/public/get-started/index.html:507
+#: website/public/get-started/index.html:509
msgctxt "page:get-started/index.html"
msgid "Cursor, Windsurf or VS Code · use an editor"
msgstr ""
-#: website/public/get-started/index.html:509
+#: website/public/get-started/index.html:511
msgctxt "page:get-started/index.html"
msgid "Install the editor for your operating system and sign in."
msgstr ""
-#: website/public/get-started/index.html:512
+#: website/public/get-started/index.html:514
msgctxt "page:get-started/index.html"
msgid "Open the rea-work folder you made in step 1."
msgstr ""
-#: website/public/get-started/index.html:513
+#: website/public/get-started/index.html:515
msgctxt "page:get-started/index.html"
msgid ""
"Open its AI chat and choose Agent mode. In Windsurf or Devin Desktop, open the agent "
@@ -4524,7 +4524,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
#. {ph5}:
-#: website/public/get-started/index.html:519
+#: website/public/get-started/index.html:521
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4532,18 +4532,18 @@ msgid ""
"Copilot setup{ph5}"
msgstr ""
-#: website/public/get-started/index.html:531
+#: website/public/get-started/index.html:533
msgctxt "page:get-started/index.html"
msgid "Claude Code · use your Claude account"
msgstr ""
-#: website/public/get-started/index.html:532
+#: website/public/get-started/index.html:534
msgctxt "page:get-started/index.html"
msgid "Install using the command for your operating system:"
msgstr ""
#. {ph0}: claude
-#: website/public/get-started/index.html:561
+#: website/public/get-started/index.html:563
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4553,18 +4553,18 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:566
+#: website/public/get-started/index.html:568
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Claude Code installation and account options{ph1}"
msgstr ""
-#: website/public/get-started/index.html:573
+#: website/public/get-started/index.html:575
msgctxt "page:get-started/index.html"
msgid "Claude Desktop · use a desktop chat"
msgstr ""
-#: website/public/get-started/index.html:574
+#: website/public/get-started/index.html:576
msgctxt "page:get-started/index.html"
msgid ""
"Install Claude Desktop on Windows or macOS and sign in. Quit it completely, then run "
@@ -4573,7 +4573,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:593
+#: website/public/get-started/index.html:595
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4586,20 +4586,20 @@ msgstr ""
#. {ph2}:
#. {ph3}:
-#: website/public/get-started/index.html:597
+#: website/public/get-started/index.html:599
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Download Claude Desktop{ph1} · {ph2}Claude Desktop connection details{ph3}"
msgstr ""
-#: website/public/get-started/index.html:607
+#: website/public/get-started/index.html:609
msgctxt "page:get-started/index.html"
msgid "OpenCode · choose an AI model"
msgstr ""
#. {ph0}: opencode
#. {ph1}: /connect
-#: website/public/get-started/index.html:622
+#: website/public/get-started/index.html:624
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4609,19 +4609,19 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:627
+#: website/public/get-started/index.html:629
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}OpenCode installation and model setup{ph1}"
msgstr ""
-#: website/public/get-started/index.html:634
+#: website/public/get-started/index.html:636
msgctxt "page:get-started/index.html"
msgid "All supported clients and setup IDs"
msgstr ""
#. {ph0}: --client
-#: website/public/get-started/index.html:635
+#: website/public/get-started/index.html:637
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4629,12 +4629,12 @@ msgid ""
"in npm 6.8.0 and later."
msgstr ""
-#: website/public/get-started/index.html:643
+#: website/public/get-started/index.html:645
msgctxt "page:get-started/index.html"
msgid "Client"
msgstr ""
-#: website/public/get-started/index.html:644
+#: website/public/get-started/index.html:646
msgctxt "page:get-started/index.html"
msgid "Setup ID"
msgstr ""
@@ -4647,7 +4647,7 @@ msgstr ""
#. {ph5}: workbuddy
#. {ph6}: zcode
#. {ph7}: freebuff
-#: website/public/get-started/index.html:751
+#: website/public/get-started/index.html:753
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4661,20 +4661,20 @@ msgstr ""
#. {ph2}:
#. {ph3}:
-#: website/public/get-started/index.html:757
+#: website/public/get-started/index.html:759
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Client configuration and troubleshooting{ph1} · {ph2}Release availability{ph3}"
msgstr ""
-#: website/public/get-started/index.html:769
+#: website/public/get-started/index.html:771
msgctxt "page:get-started/index.html"
msgid "Grok Bot · connect on its hosted computer"
msgstr ""
#. {ph0}: rea
-#: website/public/get-started/index.html:770
+#: website/public/get-started/index.html:772
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4685,18 +4685,18 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:788
+#: website/public/get-started/index.html:790
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Grok Bot connector instructions{ph1}"
msgstr ""
-#: website/public/get-started/index.html:798
+#: website/public/get-started/index.html:800
msgctxt "page:get-started/index.html"
msgid "3. Connect REA"
msgstr ""
-#: website/public/get-started/index.html:799
+#: website/public/get-started/index.html:801
msgctxt "page:get-started/index.html"
msgid "Copy this into your coding agent:"
msgstr ""
@@ -4709,7 +4709,7 @@ msgstr ""
#. {ph5}:
#. {ph6}:
#. {ph7}:
-#: website/public/get-started/index.html:802
+#: website/public/get-started/index.html:804
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
@@ -4722,7 +4722,7 @@ msgstr ""
#. {ph4}:
#. {ph5}:
-#: website/public/get-started/index.html:816
+#: website/public/get-started/index.html:818
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4730,18 +4730,18 @@ msgid ""
"the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}"
msgstr ""
-#: website/public/get-started/index.html:828
+#: website/public/get-started/index.html:830
msgctxt "page:get-started/index.html"
msgid "Or run setup yourself"
msgstr ""
-#: website/public/get-started/index.html:843
+#: website/public/get-started/index.html:845
msgctxt "page:get-started/index.html"
msgid "For one specific client, add its setup ID:"
msgstr ""
#. {ph0}: y
-#: website/public/get-started/index.html:858
+#: website/public/get-started/index.html:860
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4749,7 +4749,7 @@ msgid ""
" use the arrow keys to move, Space to select your client and Enter to continue."
msgstr ""
-#: website/public/get-started/index.html:864
+#: website/public/get-started/index.html:866
msgctxt "page:get-started/index.html"
msgid ""
"Choose your client and review the setup plan. REA adds its MCP connection and the "
@@ -4757,21 +4757,21 @@ msgid ""
"before applying the changes."
msgstr ""
-#: website/public/get-started/index.html:869
+#: website/public/get-started/index.html:871
msgctxt "page:get-started/index.html"
msgid ""
"MCP is the connection that lets your agent call REA. The skill gives it a workflow for"
" investigating software."
msgstr ""
-#: website/public/get-started/index.html:873
+#: website/public/get-started/index.html:875
msgctxt "page:get-started/index.html"
msgid ""
"For the first exercise, you can skip the optional Hopper installation. Restart your "
"client when setup finishes."
msgstr ""
-#: website/public/get-started/index.html:878
+#: website/public/get-started/index.html:880
msgctxt "page:get-started/index.html"
msgid "How do I restart my client?"
msgstr ""
@@ -4780,7 +4780,7 @@ msgstr ""
#. {ph1}:
#. {ph2}: ⌘
#. {ph3}: Q
-#: website/public/get-started/index.html:879
+#: website/public/get-started/index.html:881
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4791,7 +4791,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:886
+#: website/public/get-started/index.html:888
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4801,7 +4801,7 @@ msgstr ""
#. {ph0}: codex
#. {ph1}: "healthy": true
-#: website/public/get-started/index.html:906
+#: website/public/get-started/index.html:908
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4809,19 +4809,19 @@ msgid ""
"your agent:"
msgstr ""
-#: website/public/get-started/index.html:912
+#: website/public/get-started/index.html:914
msgctxt "page:get-started/index.html"
msgid "Check that REA is connected and show me which REA tools you can use."
msgstr ""
-#: website/public/get-started/index.html:919
+#: website/public/get-started/index.html:921
msgctxt "page:get-started/index.html"
msgid "4. Try your first investigation"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:920
+#: website/public/get-started/index.html:922
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4829,7 +4829,7 @@ msgid ""
"agent can inspect its code without installing or launching Electron."
msgstr ""
-#: website/public/get-started/index.html:927
+#: website/public/get-started/index.html:929
msgctxt "page:get-started/index.html"
msgid "Your coding agent"
msgstr ""
@@ -4842,7 +4842,7 @@ msgstr ""
#. {ph5}:
#. {ph6}:
-#: website/public/get-started/index.html:937
+#: website/public/get-started/index.html:939
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4851,7 +4851,7 @@ msgid ""
" it contains, and the relevant files and lines.{ph5}{ph6}{ph7}"
msgstr ""
-#: website/public/get-started/index.html:951
+#: website/public/get-started/index.html:953
msgctxt "page:get-started/index.html"
msgid "Look for a short explanation with file and line references:"
msgstr ""
@@ -4860,7 +4860,7 @@ msgstr ""
#. {ph1}: notes.csv
#. {ph2}: id
#. {ph3}: title
-#: website/public/get-started/index.html:953
+#: website/public/get-started/index.html:955
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4870,13 +4870,13 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:960
+#: website/public/get-started/index.html:962
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Check a prediction in the guided exercise →{ph1}"
msgstr ""
-#: website/public/get-started/index.html:966
+#: website/public/get-started/index.html:968
msgctxt "page:get-started/index.html"
msgid "Download the example yourself, or use your own app"
msgstr ""
@@ -4884,14 +4884,14 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:969
+#: website/public/get-started/index.html:971
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Download example ZIP{ph1}"
msgstr ""
#. {ph0}: notes-example
-#: website/public/get-started/index.html:977
+#: website/public/get-started/index.html:979
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4900,7 +4900,7 @@ msgid ""
msgstr ""
#. {ph0}: /absolute/path/to/app
-#: website/public/get-started/index.html:983
+#: website/public/get-started/index.html:985
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4908,7 +4908,7 @@ msgid ""
"files and lines."
msgstr ""
-#: website/public/get-started/index.html:990
+#: website/public/get-started/index.html:992
msgctxt "page:get-started/index.html"
msgid "How do I get a folder's full path?"
msgstr ""
@@ -4917,7 +4917,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/get-started/index.html:992
+#: website/public/get-started/index.html:994
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4929,7 +4929,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/get-started/index.html:997
+#: website/public/get-started/index.html:999
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -4939,90 +4939,90 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:1001
+#: website/public/get-started/index.html:1003
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Any system:{ph1} drag the folder into a terminal window and its path appears."
msgstr ""
-#: website/public/get-started/index.html:1006 website/public/get-started/index.html:1767
+#: website/public/get-started/index.html:1008 website/public/get-started/index.html:1769
msgctxt "page:get-started/index.html"
msgid "In a terminal, put quotes around a path that contains spaces."
msgstr ""
-#: website/public/get-started/index.html:1013
+#: website/public/get-started/index.html:1015
msgctxt "page:get-started/index.html"
msgid "Analyze another kind of software"
msgstr ""
-#: website/public/get-started/index.html:1014
+#: website/public/get-started/index.html:1016
msgctxt "page:get-started/index.html"
msgid ""
"Choose the section for your target. A provider is the local analysis tool REA uses for"
" that kind of software."
msgstr ""
-#: website/public/get-started/index.html:1019
+#: website/public/get-started/index.html:1021
msgctxt "page:get-started/index.html"
msgid "Native executables and libraries · Hopper, Ghidra or IDA"
msgstr ""
-#: website/public/get-started/index.html:1022
+#: website/public/get-started/index.html:1024
msgctxt "page:get-started/index.html"
msgid ""
"Install one analysis tool on the computer running REA. The host is your operating "
"system; the target is the program you want to inspect."
msgstr ""
-#: website/public/get-started/index.html:1031
+#: website/public/get-started/index.html:1033
msgctxt "page:get-started/index.html"
msgid "Provider"
msgstr ""
-#: website/public/get-started/index.html:1040
+#: website/public/get-started/index.html:1042
msgctxt "page:get-started/index.html"
msgid "Unavailable"
msgstr ""
-#: website/public/get-started/index.html:1042
+#: website/public/get-started/index.html:1044
msgctxt "page:get-started/index.html"
msgid "x86_64 installer on supported distributions"
msgstr ""
-#: website/public/get-started/index.html:1046
+#: website/public/get-started/index.html:1048
msgctxt "page:get-started/index.html"
msgid "x64 · experimental"
msgstr ""
-#: website/public/get-started/index.html:1052
+#: website/public/get-started/index.html:1054
msgctxt "page:get-started/index.html"
msgid "Verified profiles"
msgstr ""
-#: website/public/get-started/index.html:1053
+#: website/public/get-started/index.html:1055
msgctxt "page:get-started/index.html"
msgid "Verified headless profile"
msgstr ""
-#: website/public/get-started/index.html:1054
+#: website/public/get-started/index.html:1056
msgctxt "page:get-started/index.html"
msgid "See provider guide"
msgstr ""
-#: website/public/get-started/index.html:1060
+#: website/public/get-started/index.html:1062
msgctxt "page:get-started/index.html"
msgid "Hopper · let setup install or connect it"
msgstr ""
-#: website/public/get-started/index.html:1061
+#: website/public/get-started/index.html:1063
msgctxt "page:get-started/index.html"
msgid ""
"Connect Hopper on macOS or Linux. Run the setup command above; it detects an existing "
"installation or offers an installation plan for your approval."
msgstr ""
-#: website/public/get-started/index.html:1066
+#: website/public/get-started/index.html:1068
msgctxt "page:get-started/index.html"
msgid ""
"Choose Hopper in setup and review its separate installation plan. On macOS, choose "
@@ -5030,7 +5030,7 @@ msgid ""
"the supported demo and its private display."
msgstr ""
-#: website/public/get-started/index.html:1072
+#: website/public/get-started/index.html:1074
msgctxt "page:get-started/index.html"
msgid ""
"Automated Linux setup requires an x86_64 host running Ubuntu 24.04+, Fedora 41+, "
@@ -5039,7 +5039,7 @@ msgid ""
"is commercial software; its demo has vendor-defined limits."
msgstr ""
-#: website/public/get-started/index.html:1094
+#: website/public/get-started/index.html:1096
msgctxt "page:get-started/index.html"
msgid ""
"If macOS asks for Automation permission, allow the app that starts REA in System "
@@ -5049,18 +5049,18 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:1099
+#: website/public/get-started/index.html:1101
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Hopper setup and troubleshooting{ph1}"
msgstr ""
-#: website/public/get-started/index.html:1107
+#: website/public/get-started/index.html:1109
msgctxt "page:get-started/index.html"
msgid "Ghidra · install the free analysis tool and Java"
msgstr ""
-#: website/public/get-started/index.html:1111
+#: website/public/get-started/index.html:1113
msgctxt "page:get-started/index.html"
msgid ""
"Install a 64-bit JDK 21 or newer, including the Java compiler. Choose the package "
@@ -5068,7 +5068,7 @@ msgid ""
msgstr ""
#. {ph0}: ghidra_…_PUBLIC_….zip
-#: website/public/get-started/index.html:1116
+#: website/public/get-started/index.html:1118
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5079,7 +5079,7 @@ msgstr ""
#. {ph0}: ghidraRun
#. {ph1}: ghidraRun.bat
#. {ph2}: GHIDRA_INSTALL_DIR
-#: website/public/get-started/index.html:1121
+#: website/public/get-started/index.html:1123
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Find the extracted folder containing {ph0} or {ph1}. Use that folder for {ph2}."
@@ -5091,7 +5091,7 @@ msgstr ""
#. href="https://github.com/NationalSecurityAgency/ghidra/releases/tag/Ghidra_12.1.4_build"
#. >
#. {ph3}:
-#: website/public/get-started/index.html:1127
+#: website/public/get-started/index.html:1129
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Download a JDK{ph1} · {ph2}Download Ghidra 12.1.4{ph3}"
@@ -5099,7 +5099,7 @@ msgstr ""
#. {ph0}: java.home
#. {ph1}: JAVA_HOME
-#: website/public/get-started/index.html:1137
+#: website/public/get-started/index.html:1139
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5107,12 +5107,12 @@ msgid ""
"confirms the compiler is installed:"
msgstr ""
-#: website/public/get-started/index.html:1158
+#: website/public/get-started/index.html:1160
msgctxt "page:get-started/index.html"
msgid "Connect Ghidra on Windows"
msgstr ""
-#: website/public/get-started/index.html:1159
+#: website/public/get-started/index.html:1161
msgctxt "page:get-started/index.html"
msgid ""
"Windows x64 has experimental, read-only support for native x86 and x64 PE applications"
@@ -5120,29 +5120,29 @@ msgid ""
" 64-bit JDK 21 or newer:"
msgstr ""
-#: website/public/get-started/index.html:1182
+#: website/public/get-started/index.html:1184
msgctxt "page:get-started/index.html"
msgid "Replace the two paths with your installations, then review setup's plan."
msgstr ""
-#: website/public/get-started/index.html:1188
+#: website/public/get-started/index.html:1190
msgctxt "page:get-started/index.html"
msgid "Connect your Ghidra installation"
msgstr ""
-#: website/public/get-started/index.html:1204
+#: website/public/get-started/index.html:1206
msgctxt "page:get-started/index.html"
msgid ""
"Replace both paths with your existing installations. For a fresh macOS or Linux arm64 "
"installation, build the native decompiler for your computer before continuing."
msgstr ""
-#: website/public/get-started/index.html:1210
+#: website/public/get-started/index.html:1212
msgctxt "page:get-started/index.html"
msgid "Build Ghidra's native decompiler"
msgstr ""
-#: website/public/get-started/index.html:1211
+#: website/public/get-started/index.html:1213
msgctxt "page:get-started/index.html"
msgid ""
"On macOS, the build needs Xcode Command Line Tools, make and bison. Use the guide for "
@@ -5152,7 +5152,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:1216
+#: website/public/get-started/index.html:1218
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}macOS · Intel{ph1}"
@@ -5161,7 +5161,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:1222
+#: website/public/get-started/index.html:1224
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}macOS · Apple Silicon{ph1}"
@@ -5171,18 +5171,18 @@ msgstr ""
#. href="https://github.com/NationalSecurityAgency/ghidra/blob/Ghidra_12.1.4_build/GhidraDocs/GettingStarted.md#building-
#. native-components" >
#. {ph1}:
-#: website/public/get-started/index.html:1228
+#: website/public/get-started/index.html:1230
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Linux arm64 · native build instructions{ph1}"
msgstr ""
-#: website/public/get-started/index.html:1236
+#: website/public/get-started/index.html:1238
msgctxt "page:get-started/index.html"
msgid "Then check Ghidra and save its paths for your client:"
msgstr ""
-#: website/public/get-started/index.html:1253
+#: website/public/get-started/index.html:1255
msgctxt "page:get-started/index.html"
msgid ""
"Keep these commands in the same terminal session. Rerun setup after setting the paths,"
@@ -5195,19 +5195,19 @@ msgstr ""
#. {ph2}:
#. {ph3}:
-#: website/public/get-started/index.html:1258
+#: website/public/get-started/index.html:1260
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Ghidra setup and architecture requirements{ph1} · {ph2}Windows Ghidra guide{ph3}"
msgstr ""
-#: website/public/get-started/index.html:1271
+#: website/public/get-started/index.html:1273
msgctxt "page:get-started/index.html"
msgid "IDA · connect an existing installation"
msgstr ""
-#: website/public/get-started/index.html:1272
+#: website/public/get-started/index.html:1274
msgctxt "page:get-started/index.html"
msgid ""
"Use the IDA provider guide to prepare an upstream MCP registration. Choose an attached"
@@ -5215,7 +5215,7 @@ msgid ""
"database."
msgstr ""
-#: website/public/get-started/index.html:1277
+#: website/public/get-started/index.html:1279
msgctxt "page:get-started/index.html"
msgid ""
"Verified profiles include the Windows legacy GUI and headless supervisor, plus a macOS"
@@ -5227,7 +5227,7 @@ msgstr ""
#. setup" >
#. {ph1}:
#. {ph2}: 6.4.0
-#: website/public/get-started/index.html:1283
+#: website/public/get-started/index.html:1285
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5238,21 +5238,21 @@ msgstr ""
#. {ph0}: node scripts/rea.mjs doctor --provider ida --json
#. {ph1}: node scripts/rea.mjs setup
#. {ph2}: npx
-#: website/public/get-started/index.html:1292
+#: website/public/get-started/index.html:1294
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"From the built checkout, run {ph0} and {ph1} instead of the {ph2} commands below."
msgstr ""
-#: website/public/get-started/index.html:1299
+#: website/public/get-started/index.html:1301
msgctxt "page:get-started/index.html"
msgid "Prepare the IDA registration file"
msgstr ""
#. {ph0}: ida-mcp.json
#. {ph1}: .txt
-#: website/public/get-started/index.html:1300
+#: website/public/get-started/index.html:1302
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5264,7 +5264,7 @@ msgstr ""
#. {ph0}: idb_open
#. {ph1}: idb_list
#. {ph2}: idb_close
-#: website/public/get-started/index.html:1307
+#: website/public/get-started/index.html:1309
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5275,7 +5275,7 @@ msgstr ""
#. {ph0}: command
#. {ph1}: args
#. {ph2}: env
-#: website/public/get-started/index.html:1330
+#: website/public/get-started/index.html:1332
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5284,7 +5284,7 @@ msgid ""
"before asking REA to inspect it."
msgstr ""
-#: website/public/get-started/index.html:1372
+#: website/public/get-started/index.html:1374
msgctxt "page:get-started/index.html"
msgid ""
"Use the JSON registration file you prepared with the provider guide, then rerun setup "
@@ -5294,13 +5294,13 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:1376
+#: website/public/get-started/index.html:1378
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}IDA profiles, registration examples and verified platforms{ph1}"
msgstr ""
-#: website/public/get-started/index.html:1384
+#: website/public/get-started/index.html:1386
msgctxt "page:get-started/index.html"
msgid ""
"Once connected, give your agent the original executable's full path and name your "
@@ -5308,7 +5308,7 @@ msgid ""
msgstr ""
#. {ph0}: /absolute/path/to/program
-#: website/public/get-started/index.html:1389
+#: website/public/get-started/index.html:1391
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5318,130 +5318,130 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:1396
+#: website/public/get-started/index.html:1398
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Follow a native analysis example{ph1}"
msgstr ""
-#: website/public/get-started/index.html:1401
+#: website/public/get-started/index.html:1403
msgctxt "page:get-started/index.html"
msgid "Websites, Android, .NET, firmware and other targets"
msgstr ""
-#: website/public/get-started/index.html:1404
+#: website/public/get-started/index.html:1406
msgctxt "page:get-started/index.html"
msgid ""
"Open the guide for the target you have. Each guide gives the additional tools, "
"supported hosts and first command."
msgstr ""
-#: website/public/get-started/index.html:1412
+#: website/public/get-started/index.html:1414
msgctxt "page:get-started/index.html"
msgid "Target"
msgstr ""
-#: website/public/get-started/index.html:1413
+#: website/public/get-started/index.html:1415
msgctxt "page:get-started/index.html"
msgid "Tools to prepare"
msgstr ""
-#: website/public/get-started/index.html:1414
+#: website/public/get-started/index.html:1416
msgctxt "page:get-started/index.html"
msgid "Guide"
msgstr ""
-#: website/public/get-started/index.html:1419
+#: website/public/get-started/index.html:1421
msgctxt "page:get-started/index.html"
msgid "JavaScript / Electron"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:1421 website/public/get-started/index.html:1426
-#: website/public/get-started/index.html:1431 website/public/get-started/index.html:1441
-#: website/public/get-started/index.html:1451 website/public/get-started/index.html:1461
-#: website/public/get-started/index.html:1471 website/public/get-started/index.html:1481
-#: website/public/get-started/index.html:1491 website/public/get-started/index.html:1501
-#: website/public/get-started/index.html:1511 website/public/get-started/index.html:1521
-#: website/public/get-started/index.html:1531 website/public/get-started/index.html:1541
-#: website/public/get-started/index.html:1551 website/public/get-started/index.html:1561
+#: website/public/get-started/index.html:1423 website/public/get-started/index.html:1428
+#: website/public/get-started/index.html:1433 website/public/get-started/index.html:1443
+#: website/public/get-started/index.html:1453 website/public/get-started/index.html:1463
+#: website/public/get-started/index.html:1473 website/public/get-started/index.html:1483
+#: website/public/get-started/index.html:1493 website/public/get-started/index.html:1503
+#: website/public/get-started/index.html:1513 website/public/get-started/index.html:1523
+#: website/public/get-started/index.html:1533 website/public/get-started/index.html:1543
+#: website/public/get-started/index.html:1553 website/public/get-started/index.html:1563
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Open guide{ph1}"
msgstr ""
-#: website/public/get-started/index.html:1424
+#: website/public/get-started/index.html:1426
msgctxt "page:get-started/index.html"
msgid "Website"
msgstr ""
-#: website/public/get-started/index.html:1429
+#: website/public/get-started/index.html:1431
msgctxt "page:get-started/index.html"
msgid ".NET / Flutter / packages"
msgstr ""
-#: website/public/get-started/index.html:1439
+#: website/public/get-started/index.html:1441
msgctxt "page:get-started/index.html"
msgid "Android APK"
msgstr ""
-#: website/public/get-started/index.html:1449
+#: website/public/get-started/index.html:1451
msgctxt "page:get-started/index.html"
msgid "Android device"
msgstr ""
-#: website/public/get-started/index.html:1459
+#: website/public/get-started/index.html:1461
msgctxt "page:get-started/index.html"
msgid "Android resources"
msgstr ""
-#: website/public/get-started/index.html:1469
+#: website/public/get-started/index.html:1471
msgctxt "page:get-started/index.html"
msgid "JEB project"
msgstr ""
-#: website/public/get-started/index.html:1479
+#: website/public/get-started/index.html:1481
msgctxt "page:get-started/index.html"
msgid "Firmware"
msgstr ""
-#: website/public/get-started/index.html:1489
+#: website/public/get-started/index.html:1491
msgctxt "page:get-started/index.html"
msgid "WASM"
msgstr ""
-#: website/public/get-started/index.html:1499
+#: website/public/get-started/index.html:1501
msgctxt "page:get-started/index.html"
msgid "SQLite database"
msgstr ""
-#: website/public/get-started/index.html:1509
+#: website/public/get-started/index.html:1511
msgctxt "page:get-started/index.html"
msgid "EVM bytecode"
msgstr ""
-#: website/public/get-started/index.html:1519
+#: website/public/get-started/index.html:1521
msgctxt "page:get-started/index.html"
msgid "ELF / Linux crash"
msgstr ""
-#: website/public/get-started/index.html:1529
+#: website/public/get-started/index.html:1531
msgctxt "page:get-started/index.html"
msgid "HAR / SAZ / mitmproxy"
msgstr ""
-#: website/public/get-started/index.html:1539
+#: website/public/get-started/index.html:1541
msgctxt "page:get-started/index.html"
msgid "PCAP / PCAPNG"
msgstr ""
-#: website/public/get-started/index.html:1549
+#: website/public/get-started/index.html:1551
msgctxt "page:get-started/index.html"
msgid "Logic signals"
msgstr ""
-#: website/public/get-started/index.html:1559
+#: website/public/get-started/index.html:1561
msgctxt "page:get-started/index.html"
msgid "Process behavior"
msgstr ""
@@ -5458,7 +5458,7 @@ msgstr ""
#. {ph5}:
#. {ph6}:
#. {ph7}:
-#: website/public/get-started/index.html:1571
+#: website/public/get-started/index.html:1573
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5466,31 +5466,31 @@ msgid ""
"{ph6}All investigation guides{ph7}"
msgstr ""
-#: website/public/get-started/index.html:1591
+#: website/public/get-started/index.html:1593
msgctxt "page:get-started/index.html"
msgid "Use REA from a terminal"
msgstr ""
-#: website/public/get-started/index.html:1593
+#: website/public/get-started/index.html:1595
msgctxt "page:get-started/index.html"
msgid "CLI commands, global installation and curl"
msgstr ""
-#: website/public/get-started/index.html:1594
+#: website/public/get-started/index.html:1596
msgctxt "page:get-started/index.html"
msgid ""
"Analyze a JavaScript or Electron application folder or ASAR archive without running "
"the app:"
msgstr ""
-#: website/public/get-started/index.html:1600
+#: website/public/get-started/index.html:1602
msgctxt "page:get-started/index.html"
msgid "Static application analysis"
msgstr ""
#. {ph0}: .asar
#. {ph1}: "D:/apps/example"
-#: website/public/get-started/index.html:1612
+#: website/public/get-started/index.html:1614
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5498,13 +5498,13 @@ msgid ""
"such as {ph1} works here."
msgstr ""
-#: website/public/get-started/index.html:1618
+#: website/public/get-started/index.html:1620
msgctxt "page:get-started/index.html"
msgid "Where do I find an app's .asar file?"
msgstr ""
#. {ph0}: resources
-#: website/public/get-started/index.html:1619
+#: website/public/get-started/index.html:1621
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Electron apps usually keep it in a {ph0} folder:"
@@ -5514,7 +5514,7 @@ msgstr ""
#. {ph1}:
#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar
-#: website/public/get-started/index.html:1624
+#: website/public/get-started/index.html:1626
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Windows:{ph1} {ph2}"
@@ -5525,7 +5525,7 @@ msgstr ""
#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar
#. {ph3}:
#. {ph4}:
-#: website/public/get-started/index.html:1630
+#: website/public/get-started/index.html:1632
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5536,20 +5536,20 @@ msgstr ""
#. {ph0}:
#. {ph1}:
#. {ph2}: /opt/<App>/resources/app.asar
-#: website/public/get-started/index.html:1638
+#: website/public/get-started/index.html:1640
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Linux:{ph1} often {ph2}"
msgstr ""
#. {ph0}: app.asar
-#: website/public/get-started/index.html:1643
+#: website/public/get-started/index.html:1645
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Some apps install elsewhere. Search the app's folder for {ph0}."
msgstr ""
-#: website/public/get-started/index.html:1648
+#: website/public/get-started/index.html:1650
msgctxt "page:get-started/index.html"
msgid ""
"The result identifies the app, shows connections between modules and gives their "
@@ -5557,27 +5557,27 @@ msgid ""
msgstr ""
#. {ph0}: rea
-#: website/public/get-started/index.html:1653
+#: website/public/get-started/index.html:1655
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "If you'd like a permanent {ph0} command in your shell:"
msgstr ""
-#: website/public/get-started/index.html:1659
+#: website/public/get-started/index.html:1661
msgctxt "page:get-started/index.html"
msgid "Install the CLI"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:1671
+#: website/public/get-started/index.html:1673
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Continue with the JavaScript application guide{ph1}"
msgstr ""
#. {ph0}: main
-#: website/public/get-started/index.html:1690
+#: website/public/get-started/index.html:1692
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5585,13 +5585,13 @@ msgid ""
"must be configured first."
msgstr ""
-#: website/public/get-started/index.html:1694
+#: website/public/get-started/index.html:1696
msgctxt "page:get-started/index.html"
msgid "On macOS or Linux, you can also use the curl installer after preparing Node.js:"
msgstr ""
#. {ph0}: rea setup
-#: website/public/get-started/index.html:1712
+#: website/public/get-started/index.html:1714
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Follow the setup prompts to connect your agent. If they don't appear, run {ph0}."
@@ -5599,7 +5599,7 @@ msgstr ""
#. {ph0}: rea
#. {ph1}: "$HOME/.local/bin/rea" setup
-#: website/public/get-started/index.html:1716
+#: website/public/get-started/index.html:1718
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5607,18 +5607,18 @@ msgid ""
"Linux, the default setup command is {ph1}."
msgstr ""
-#: website/public/get-started/index.html:1725
+#: website/public/get-started/index.html:1727
msgctxt "page:get-started/index.html"
msgid "Getting help"
msgstr ""
-#: website/public/get-started/index.html:1727
+#: website/public/get-started/index.html:1729
msgctxt "page:get-started/index.html"
msgid "If your agent doesn't see REA"
msgstr ""
#. {ph0}: doctor
-#: website/public/get-started/index.html:1728
+#: website/public/get-started/index.html:1730
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5626,39 +5626,39 @@ msgid ""
"Codex:"
msgstr ""
-#: website/public/get-started/index.html:1732
+#: website/public/get-started/index.html:1734
msgctxt "page:get-started/index.html"
msgid ""
"Use the client check in step 3 with your setup ID. In editor clients, enable REA in "
"MCP settings and allow its tools in the agent chat."
msgstr ""
-#: website/public/get-started/index.html:1739
+#: website/public/get-started/index.html:1741
msgctxt "page:get-started/index.html"
msgid "If a provider needs attention"
msgstr ""
-#: website/public/get-started/index.html:1740
+#: website/public/get-started/index.html:1742
msgctxt "page:get-started/index.html"
msgid "Check the provider you're using. For Ghidra:"
msgstr ""
-#: website/public/get-started/index.html:1743
+#: website/public/get-started/index.html:1745
msgctxt "page:get-started/index.html"
msgid "Check one provider"
msgstr ""
-#: website/public/get-started/index.html:1755
+#: website/public/get-started/index.html:1757
msgctxt "page:get-started/index.html"
msgid "The report gives the failed check and a suggested next step."
msgstr ""
-#: website/public/get-started/index.html:1760
+#: website/public/get-started/index.html:1762
msgctxt "page:get-started/index.html"
msgid "Windows, WSL and paths with spaces"
msgstr ""
-#: website/public/get-started/index.html:1761
+#: website/public/get-started/index.html:1763
msgctxt "page:get-started/index.html"
msgid ""
"Use Windows PowerShell for Windows clients and analysis tools. If your agent runs "
@@ -5666,17 +5666,17 @@ msgid ""
"there. Headless providers run on the same host as REA."
msgstr ""
-#: website/public/get-started/index.html:1770
+#: website/public/get-started/index.html:1772
msgctxt "page:get-started/index.html"
msgid "Windows setup command:"
msgstr ""
-#: website/public/get-started/index.html:1787
+#: website/public/get-started/index.html:1789
msgctxt "page:get-started/index.html"
msgid "Update or remove REA"
msgstr ""
-#: website/public/get-started/index.html:1788
+#: website/public/get-started/index.html:1790
msgctxt "page:get-started/index.html"
msgid ""
"To refresh your agent connection, run the latest setup command again, review its plan "
@@ -5685,7 +5685,7 @@ msgstr ""
#. {ph0}: rea update
#. {ph1}: npx rea-agents@latest uninstall
-#: website/public/get-started/index.html:1806
+#: website/public/get-started/index.html:1808
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5696,7 +5696,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/get-started/index.html:1812
+#: website/public/get-started/index.html:1814
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Update and uninstall details{ph1}"
@@ -5706,7 +5706,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/get-started/index.html:1820
+#: website/public/get-started/index.html:1822
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}"
@@ -5716,7 +5716,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/get-started/index.html:1824
+#: website/public/get-started/index.html:1826
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5728,7 +5728,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/get-started/index.html:1831
+#: website/public/get-started/index.html:1833
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
@@ -5739,7 +5739,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/get-started/index.html:1835
+#: website/public/get-started/index.html:1837
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}REA community{ph1}{ph2}Questions, investigations and work in progress.{ph3}"
@@ -5757,88 +5757,88 @@ msgid ""
"the terminal. Setup, first questions and native provider guides."
msgstr ""
-#: website/public/get-started/index.html:225
+#: website/public/get-started/index.html:227
msgctxt "page:get-started/index.html"
msgid "REA getting started guide"
msgstr ""
-#: website/public/get-started/index.html:271
+#: website/public/get-started/index.html:273
msgctxt "page:get-started/index.html"
msgid "Copy Node.js version check"
msgstr ""
-#: website/public/get-started/index.html:294
+#: website/public/get-started/index.html:296
msgctxt "page:get-started/index.html"
msgid "Copy Node.js installation command for Windows"
msgstr ""
-#: website/public/get-started/index.html:324
+#: website/public/get-started/index.html:326
msgctxt "page:get-started/index.html"
msgid "Copy Windows REA setup command"
msgstr ""
-#: website/public/get-started/index.html:349
+#: website/public/get-started/index.html:351
msgctxt "page:get-started/index.html"
msgid "Copy Homebrew Node.js installation command"
msgstr ""
-#: website/public/get-started/index.html:372
+#: website/public/get-started/index.html:374
msgctxt "page:get-started/index.html"
msgid "Copy fnm installation command for Linux"
msgstr ""
-#: website/public/get-started/index.html:387
+#: website/public/get-started/index.html:389
msgctxt "page:get-started/index.html"
msgid "Copy Node.js 24 commands for Linux"
msgstr ""
-#: website/public/get-started/index.html:421 website/public/get-started/index.html:452
-#: website/public/get-started/index.html:466 website/public/get-started/index.html:484
-#: website/public/get-started/index.html:536 website/public/get-started/index.html:550
-#: website/public/get-started/index.html:582 website/public/get-started/index.html:611
-#: website/public/get-started/index.html:777 website/public/get-started/index.html:832
-#: website/public/get-started/index.html:847 website/public/get-started/index.html:895
-#: website/public/get-started/index.html:1083 website/public/get-started/index.html:1145
-#: website/public/get-started/index.html:1168 website/public/get-started/index.html:1192
-#: website/public/get-started/index.html:1240 website/public/get-started/index.html:1315
-#: website/public/get-started/index.html:1341 website/public/get-started/index.html:1358
-#: website/public/get-started/index.html:1679 website/public/get-started/index.html:1701
-#: website/public/get-started/index.html:1774 website/public/get-started/index.html:1795
+#: website/public/get-started/index.html:423 website/public/get-started/index.html:454
+#: website/public/get-started/index.html:468 website/public/get-started/index.html:486
+#: website/public/get-started/index.html:538 website/public/get-started/index.html:552
+#: website/public/get-started/index.html:584 website/public/get-started/index.html:613
+#: website/public/get-started/index.html:779 website/public/get-started/index.html:834
+#: website/public/get-started/index.html:849 website/public/get-started/index.html:897
+#: website/public/get-started/index.html:1085 website/public/get-started/index.html:1147
+#: website/public/get-started/index.html:1170 website/public/get-started/index.html:1194
+#: website/public/get-started/index.html:1242 website/public/get-started/index.html:1317
+#: website/public/get-started/index.html:1343 website/public/get-started/index.html:1360
+#: website/public/get-started/index.html:1681 website/public/get-started/index.html:1703
+#: website/public/get-started/index.html:1776 website/public/get-started/index.html:1797
msgctxt "page:get-started/index.html"
msgid "Copy command"
msgstr ""
-#: website/public/get-started/index.html:807
+#: website/public/get-started/index.html:809
msgctxt "page:get-started/index.html"
msgid "Copy REA installation prompt"
msgstr ""
-#: website/public/get-started/index.html:928
+#: website/public/get-started/index.html:930
msgctxt "page:get-started/index.html"
msgid "Copy Notes investigation prompt"
msgstr ""
-#: website/public/get-started/index.html:1601
+#: website/public/get-started/index.html:1603
msgctxt "page:get-started/index.html"
msgid "Copy JavaScript analysis command"
msgstr ""
-#: website/public/get-started/index.html:1660
+#: website/public/get-started/index.html:1662
msgctxt "page:get-started/index.html"
msgid "Copy CLI installation command"
msgstr ""
-#: website/public/get-started/index.html:1744
+#: website/public/get-started/index.html:1746
msgctxt "page:get-started/index.html"
msgid "Copy provider diagnosis command"
msgstr ""
-#: website/public/get-started/index.html:1860
+#: website/public/get-started/index.html:1862
msgctxt "page:get-started/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/guides/browser/index.html:111
+#: website/public/guides/browser/index.html:113
msgctxt "page:guides/browser/index.html"
msgid "Skip to content"
msgstr ""
@@ -5847,34 +5847,34 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/guides/browser/index.html:201
+#: website/public/guides/browser/index.html:203
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation"
msgstr ""
#. {ph0}: notes.json
-#: website/public/guides/browser/index.html:225
+#: website/public/guides/browser/index.html:227
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
@@ -5930,7 +5930,7 @@ msgid ""
"loads {ph4}, formats the two notes as CSV, and starts a download."
msgstr ""
-#: website/public/guides/browser/index.html:233
+#: website/public/guides/browser/index.html:235
msgctxt "page:guides/browser/index.html"
msgid "From the click to the CSV download"
msgstr ""
@@ -5941,7 +5941,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
#. {ph5}:
-#: website/public/guides/browser/index.html:235
+#: website/public/guides/browser/index.html:237
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
@@ -5955,7 +5955,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
#. {ph5}:
-#: website/public/guides/browser/index.html:243
+#: website/public/guides/browser/index.html:245
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
@@ -5971,7 +5971,7 @@ msgstr ""
#. {ph5}: fetch("./notes.json")
#. {ph6}: export.js
#. {ph7}:
-#: website/public/guides/browser/index.html:251
+#: website/public/guides/browser/index.html:253
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
@@ -5979,52 +5979,52 @@ msgid ""
"request to {ph5} in {ph6}.{ph7}"
msgstr ""
-#: website/public/guides/browser/index.html:264
+#: website/public/guides/browser/index.html:266
msgctxt "page:guides/browser/index.html"
msgid "Start the capture before clicking Export notes."
msgstr ""
-#: website/public/guides/browser/index.html:270
+#: website/public/guides/browser/index.html:272
msgctxt "page:guides/browser/index.html"
msgid "Open Chrome with remote debugging"
msgstr ""
-#: website/public/guides/browser/index.html:271
+#: website/public/guides/browser/index.html:273
msgctxt "page:guides/browser/index.html"
msgid ""
"Open the hosted Notes example with a separate browser profile and a local debugging "
"port. On Linux:"
msgstr ""
-#: website/public/guides/browser/index.html:277
+#: website/public/guides/browser/index.html:279
msgctxt "page:guides/browser/index.html"
msgid "Start the example browser"
msgstr ""
-#: website/public/guides/browser/index.html:278
-#: website/public/guides/browser/index.html:310
-#: website/public/guides/browser/index.html:344
-#: website/public/guides/browser/index.html:363
-#: website/public/guides/browser/index.html:428
+#: website/public/guides/browser/index.html:280
+#: website/public/guides/browser/index.html:312
+#: website/public/guides/browser/index.html:346
+#: website/public/guides/browser/index.html:365
+#: website/public/guides/browser/index.html:430
msgctxt "page:guides/browser/index.html"
msgid "Copy"
msgstr ""
-#: website/public/guides/browser/index.html:292
+#: website/public/guides/browser/index.html:294
msgctxt "page:guides/browser/index.html"
msgid ""
"Use your installed browser's executable path on macOS or Windows. You can replace the "
"page URL with another page you want to inspect."
msgstr ""
-#: website/public/guides/browser/index.html:297
+#: website/public/guides/browser/index.html:299
msgctxt "page:guides/browser/index.html"
msgid ""
"REA connects to this existing browser. You keep control of the page, perform the "
"action, and close the browser when finished."
msgstr ""
-#: website/public/guides/browser/index.html:303
+#: website/public/guides/browser/index.html:305
msgctxt "page:guides/browser/index.html"
msgid "Ask your agent to watch one action"
msgstr ""
@@ -6037,7 +6037,7 @@ msgstr ""
#. {ph5}:
#. {ph6}:
#. {ph7}:
-#: website/public/guides/browser/index.html:306
+#: website/public/guides/browser/index.html:308
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
@@ -6049,7 +6049,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
-#: website/public/guides/browser/index.html:319
+#: website/public/guides/browser/index.html:321
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
@@ -6058,7 +6058,7 @@ msgid ""
msgstr ""
#. {ph0}: http://127.0.0.1:9222
-#: website/public/guides/browser/index.html:327
+#: website/public/guides/browser/index.html:329
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
@@ -6066,30 +6066,30 @@ msgid ""
"it start the capture before you click."
msgstr ""
-#: website/public/guides/browser/index.html:332
+#: website/public/guides/browser/index.html:334
msgctxt "page:guides/browser/index.html"
msgid ""
"Your agent discovers the page target, starts an observation window, and reads the "
"resulting evidence. It can then inspect the script behind the export."
msgstr ""
-#: website/public/guides/browser/index.html:339
+#: website/public/guides/browser/index.html:341
msgctxt "page:guides/browser/index.html"
msgid "Or capture from the terminal"
msgstr ""
-#: website/public/guides/browser/index.html:340
+#: website/public/guides/browser/index.html:342
msgctxt "page:guides/browser/index.html"
msgid "Find the page's target ID:"
msgstr ""
-#: website/public/guides/browser/index.html:343
+#: website/public/guides/browser/index.html:345
msgctxt "page:guides/browser/index.html"
msgid "Find the page"
msgstr ""
#. {ph0}: TARGET_ID
-#: website/public/guides/browser/index.html:356
+#: website/public/guides/browser/index.html:358
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
@@ -6097,14 +6097,14 @@ msgid ""
"run:"
msgstr ""
-#: website/public/guides/browser/index.html:362
+#: website/public/guides/browser/index.html:364
msgctxt "page:guides/browser/index.html"
msgid "Capture the next ten seconds"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/browser/index.html:378
+#: website/public/guides/browser/index.html:380
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
@@ -6112,56 +6112,56 @@ msgid ""
"browser. The result arrives after the observation window ends."
msgstr ""
-#: website/public/guides/browser/index.html:383
+#: website/public/guides/browser/index.html:385
msgctxt "page:guides/browser/index.html"
msgid ""
"The captured result includes the selected page, network activity during that window, "
"and the shape of the JSON response. Earlier requests are outside this capture."
msgstr ""
-#: website/public/guides/browser/index.html:390
+#: website/public/guides/browser/index.html:392
msgctxt "page:guides/browser/index.html"
msgid "Read the request and export script"
msgstr ""
-#: website/public/guides/browser/index.html:393
+#: website/public/guides/browser/index.html:395
msgctxt "page:guides/browser/index.html"
msgid "Recorded with REA 4.1.0 on the local Notes example"
msgstr ""
-#: website/public/guides/browser/index.html:398
+#: website/public/guides/browser/index.html:400
msgctxt "page:guides/browser/index.html"
msgid "Captured fact"
msgstr ""
-#: website/public/guides/browser/index.html:399
+#: website/public/guides/browser/index.html:401
msgctxt "page:guides/browser/index.html"
msgid "Value"
msgstr ""
-#: website/public/guides/browser/index.html:404
+#: website/public/guides/browser/index.html:406
msgctxt "page:guides/browser/index.html"
msgid "Request"
msgstr ""
-#: website/public/guides/browser/index.html:408
+#: website/public/guides/browser/index.html:410
msgctxt "page:guides/browser/index.html"
msgid "Response"
msgstr ""
-#: website/public/guides/browser/index.html:412
+#: website/public/guides/browser/index.html:414
msgctxt "page:guides/browser/index.html"
msgid "Request initiator"
msgstr ""
#. {ph0}: export.js
-#: website/public/guides/browser/index.html:413
+#: website/public/guides/browser/index.html:415
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0} · script"
msgstr ""
-#: website/public/guides/browser/index.html:416
+#: website/public/guides/browser/index.html:418
msgctxt "page:guides/browser/index.html"
msgid "Response structure"
msgstr ""
@@ -6169,19 +6169,19 @@ msgstr ""
#. {ph0}: notes[]
#. {ph1}: id
#. {ph2}: title
-#: website/public/guides/browser/index.html:417
+#: website/public/guides/browser/index.html:419
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0} with {ph1} and {ph2} fields"
msgstr ""
-#: website/public/guides/browser/index.html:427
+#: website/public/guides/browser/index.html:429
msgctxt "page:guides/browser/index.html"
msgid "Read the loaded scripts"
msgstr ""
#. {ph0}: export.js
-#: website/public/guides/browser/index.html:441
+#: website/public/guides/browser/index.html:443
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
@@ -6190,14 +6190,14 @@ msgid ""
msgstr ""
#. {ph0}: export.js
-#: website/public/guides/browser/index.html:448
+#: website/public/guides/browser/index.html:450
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0} · example source excerpt"
msgstr ""
#. {ph0}: notes.json
-#: website/public/guides/browser/index.html:461
+#: website/public/guides/browser/index.html:463
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
@@ -6214,14 +6214,14 @@ msgstr ""
#. {ph5}:
#. {ph6}: notes.json
#. {ph7}:
-#: website/public/guides/browser/index.html:466
+#: website/public/guides/browser/index.html:468
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download {ph6}{ph7}"
msgstr ""
#. {ph0}: notes.json
-#: website/public/guides/browser/index.html:477
+#: website/public/guides/browser/index.html:479
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
@@ -6231,7 +6231,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/browser/index.html:482
+#: website/public/guides/browser/index.html:484
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
@@ -6242,7 +6242,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/browser/index.html:487
+#: website/public/guides/browser/index.html:489
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
@@ -6263,258 +6263,258 @@ msgid ""
"request and follow the export script."
msgstr ""
-#: website/public/guides/browser/index.html:212
+#: website/public/guides/browser/index.html:214
msgctxt "page:guides/browser/index.html"
msgid "On this page"
msgstr ""
-#: website/public/guides/browser/index.html:222
+#: website/public/guides/browser/index.html:224
msgctxt "page:guides/browser/index.html"
msgid "Browser observation"
msgstr ""
-#: website/public/guides/browser/index.html:278
+#: website/public/guides/browser/index.html:280
msgctxt "page:guides/browser/index.html"
msgid "Copy start the example browser"
msgstr ""
-#: website/public/guides/browser/index.html:310
+#: website/public/guides/browser/index.html:312
msgctxt "page:guides/browser/index.html"
msgid "Copy example prompt"
msgstr ""
-#: website/public/guides/browser/index.html:344
+#: website/public/guides/browser/index.html:346
msgctxt "page:guides/browser/index.html"
msgid "Copy find the page"
msgstr ""
-#: website/public/guides/browser/index.html:363
+#: website/public/guides/browser/index.html:365
msgctxt "page:guides/browser/index.html"
msgid "Copy capture the next ten seconds"
msgstr ""
-#: website/public/guides/browser/index.html:428
+#: website/public/guides/browser/index.html:430
msgctxt "page:guides/browser/index.html"
msgid "Copy read the loaded scripts"
msgstr ""
-#: website/public/guides/browser/index.html:516
+#: website/public/guides/browser/index.html:518
msgctxt "page:guides/browser/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/guides/index.html:111
+#: website/public/guides/index.html:113
msgctxt "page:guides/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/index.html:201
+#: website/public/guides/index.html:203
#, python-brace-format
msgctxt "page:guides/index.html"
msgid "{ph0}Home{ph1} / Guides"
msgstr ""
-#: website/public/guides/index.html:202
+#: website/public/guides/index.html:204
msgctxt "page:guides/index.html"
msgid "REA guides."
msgstr ""
-#: website/public/guides/index.html:203
+#: website/public/guides/index.html:205
msgctxt "page:guides/index.html"
msgid ""
"Analyze a native function, an Electron export or a browser request. Each guide "
"includes a prompt, code and results."
msgstr ""
-#: website/public/guides/index.html:210
+#: website/public/guides/index.html:212
msgctxt "page:guides/index.html"
msgid "First investigation"
msgstr ""
-#: website/public/guides/index.html:212
+#: website/public/guides/index.html:214
msgctxt "page:guides/index.html"
msgid "Set up REA"
msgstr ""
-#: website/public/guides/index.html:213
+#: website/public/guides/index.html:215
msgctxt "page:guides/index.html"
msgid "Connect your coding agent or use REA from the terminal."
msgstr ""
-#: website/public/guides/index.html:214
+#: website/public/guides/index.html:216
msgctxt "page:guides/index.html"
msgid "Get started with REA"
msgstr ""
-#: website/public/guides/index.html:218
+#: website/public/guides/index.html:220
msgctxt "page:guides/index.html"
msgid "Native binaries"
msgstr ""
-#: website/public/guides/index.html:220
+#: website/public/guides/index.html:222
msgctxt "page:guides/index.html"
msgid "Recover a sound-pan calculation"
msgstr ""
-#: website/public/guides/index.html:221
+#: website/public/guides/index.html:223
msgctxt "page:guides/index.html"
msgid ""
"Start with a Windows game executable. Inspect instructions, follow a caller, read "
"numeric constants and check the recovered C."
msgstr ""
-#: website/public/guides/index.html:226
+#: website/public/guides/index.html:228
msgctxt "page:guides/index.html"
msgid "Instructions"
msgstr ""
-#: website/public/guides/index.html:227
+#: website/public/guides/index.html:229
msgctxt "page:guides/index.html"
msgid "Caller"
msgstr ""
-#: website/public/guides/index.html:228
+#: website/public/guides/index.html:230
msgctxt "page:guides/index.html"
msgid "Constants"
msgstr ""
-#: website/public/guides/index.html:229
+#: website/public/guides/index.html:231
msgctxt "page:guides/index.html"
msgid "C function"
msgstr ""
-#: website/public/guides/index.html:231
+#: website/public/guides/index.html:233
msgctxt "page:guides/index.html"
msgid "Native analysis guide"
msgstr ""
-#: website/public/guides/index.html:235
+#: website/public/guides/index.html:237
msgctxt "page:guides/index.html"
msgid "JavaScript & Electron"
msgstr ""
-#: website/public/guides/index.html:237
+#: website/public/guides/index.html:239
msgctxt "page:guides/index.html"
msgid "Follow a CSV export"
msgstr ""
-#: website/public/guides/index.html:238
+#: website/public/guides/index.html:240
msgctxt "page:guides/index.html"
msgid ""
"A small Notes app spreads one feature across the renderer, preload and main process. "
"Use REA to connect the API, IPC channel and file writer."
msgstr ""
-#: website/public/guides/index.html:244
+#: website/public/guides/index.html:246
msgctxt "page:guides/index.html"
msgid "Button"
msgstr ""
-#: website/public/guides/index.html:245
+#: website/public/guides/index.html:247
msgctxt "page:guides/index.html"
msgid "Preload API"
msgstr ""
-#: website/public/guides/index.html:246
+#: website/public/guides/index.html:248
msgctxt "page:guides/index.html"
msgid "IPC"
msgstr ""
-#: website/public/guides/index.html:246
+#: website/public/guides/index.html:248
msgctxt "page:guides/index.html"
msgid "CSV file"
msgstr ""
-#: website/public/guides/index.html:248
+#: website/public/guides/index.html:250
msgctxt "page:guides/index.html"
msgid "JavaScript & Electron guide"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/index.html:251
+#: website/public/guides/index.html:253
#, python-brace-format
msgctxt "page:guides/index.html"
msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}."
msgstr ""
-#: website/public/guides/index.html:258
+#: website/public/guides/index.html:260
msgctxt "page:guides/index.html"
msgid "Browser behavior"
msgstr ""
-#: website/public/guides/index.html:260
+#: website/public/guides/index.html:262
msgctxt "page:guides/index.html"
msgid "Observe a click"
msgstr ""
-#: website/public/guides/index.html:261
+#: website/public/guides/index.html:263
msgctxt "page:guides/index.html"
msgid ""
"Open a working Notes example, capture an export request and find the code that turns "
"its response into a download."
msgstr ""
-#: website/public/guides/index.html:266
+#: website/public/guides/index.html:268
msgctxt "page:guides/index.html"
msgid "Your click"
msgstr ""
-#: website/public/guides/index.html:267
+#: website/public/guides/index.html:269
msgctxt "page:guides/index.html"
msgid "Captured request"
msgstr ""
-#: website/public/guides/index.html:268
+#: website/public/guides/index.html:270
msgctxt "page:guides/index.html"
msgid "Export script"
msgstr ""
-#: website/public/guides/index.html:270
+#: website/public/guides/index.html:272
msgctxt "page:guides/index.html"
msgid "Browser observation guide"
msgstr ""
-#: website/public/guides/index.html:274
+#: website/public/guides/index.html:276
msgctxt "page:guides/index.html"
msgid "RL environments"
msgstr ""
-#: website/public/guides/index.html:276
+#: website/public/guides/index.html:278
msgctxt "page:guides/index.html"
msgid "Build an environment for agents"
msgstr ""
-#: website/public/guides/index.html:277
+#: website/public/guides/index.html:279
msgctxt "page:guides/index.html"
msgid ""
"Record a web app session, turn it into tools and local data, then add tasks and reward"
" checks."
msgstr ""
-#: website/public/guides/index.html:282
+#: website/public/guides/index.html:284
msgctxt "page:guides/index.html"
msgid "Record"
msgstr ""
-#: website/public/guides/index.html:282
+#: website/public/guides/index.html:284
msgctxt "page:guides/index.html"
msgid "Build"
msgstr ""
-#: website/public/guides/index.html:283
+#: website/public/guides/index.html:285
msgctxt "page:guides/index.html"
msgid "Run"
msgstr ""
-#: website/public/guides/index.html:285
+#: website/public/guides/index.html:287
msgctxt "page:guides/index.html"
msgid "Evaluate"
msgstr ""
-#: website/public/guides/index.html:287
+#: website/public/guides/index.html:289
msgctxt "page:guides/index.html"
msgid "Build an RL environment"
msgstr ""
@@ -6531,12 +6531,12 @@ msgid ""
"and a browser request."
msgstr ""
-#: website/public/guides/index.html:310
+#: website/public/guides/index.html:312
msgctxt "page:guides/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/guides/javascript/index.html:111
+#: website/public/guides/javascript/index.html:113
msgctxt "page:guides/javascript/index.html"
msgid "Skip to content"
msgstr ""
@@ -6545,33 +6545,33 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/guides/javascript/index.html:201
+#: website/public/guides/javascript/index.html:203
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron"
msgstr ""
#. {ph0}: renderer.js
#. {ph7}: preload.js
#. {ph8}:
-#: website/public/guides/javascript/index.html:236
+#: website/public/guides/javascript/index.html:238
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
@@ -6654,7 +6654,7 @@ msgstr ""
#. {ph4}:
#. {ph5}:
#. {ph6}:
-#: website/public/guides/javascript/index.html:244
+#: website/public/guides/javascript/index.html:246
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
@@ -6669,7 +6669,7 @@ msgstr ""
#. {ph4}:
#. {ph5}: main.js
#. {ph6}:
-#: website/public/guides/javascript/index.html:252
+#: website/public/guides/javascript/index.html:254
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
@@ -6680,27 +6680,27 @@ msgstr ""
#. {ph0}: csv.js
#. {ph1}: main.js
#. {ph2}: downloads/notes.csv
-#: website/public/guides/javascript/index.html:261
+#: website/public/guides/javascript/index.html:263
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0} formats the notes → {ph1} writes {ph2}."
msgstr ""
-#: website/public/guides/javascript/index.html:265
+#: website/public/guides/javascript/index.html:267
msgctxt "page:guides/javascript/index.html"
msgid ""
"REA matches the literal IPC call to its handler and identifies the exposed API. The "
"path is inferred from code; a runtime capture can check what executes."
msgstr ""
-#: website/public/guides/javascript/index.html:273
+#: website/public/guides/javascript/index.html:275
msgctxt "page:guides/javascript/index.html"
msgid "Ask about the CSV export"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/javascript/index.html:274
+#: website/public/guides/javascript/index.html:276
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR file:"
@@ -6714,14 +6714,14 @@ msgstr ""
#. {ph5}:
#. {ph6}:
#. {ph7}:
-#: website/public/guides/javascript/index.html:280
+#: website/public/guides/javascript/index.html:282
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
-#: website/public/guides/javascript/index.html:284
-#: website/public/guides/javascript/index.html:441
+#: website/public/guides/javascript/index.html:286
+#: website/public/guides/javascript/index.html:443
msgctxt "page:guides/javascript/index.html"
msgid "Copy"
msgstr ""
@@ -6732,7 +6732,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
-#: website/public/guides/javascript/index.html:293
+#: website/public/guides/javascript/index.html:295
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
@@ -6741,13 +6741,13 @@ msgid ""
msgstr ""
#. {ph0}: app.asar
-#: website/public/guides/javascript/index.html:301
+#: website/public/guides/javascript/index.html:303
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "Example prompt. Include the absolute path to the application folder or {ph0}."
msgstr ""
-#: website/public/guides/javascript/index.html:305
+#: website/public/guides/javascript/index.html:307
msgctxt "page:guides/javascript/index.html"
msgid ""
"REA reads the application files and builds a map of entrypoints, modules and process "
@@ -6755,26 +6755,26 @@ msgid ""
"feature."
msgstr ""
-#: website/public/guides/javascript/index.html:312
+#: website/public/guides/javascript/index.html:314
msgctxt "page:guides/javascript/index.html"
msgid "Trace the export code"
msgstr ""
-#: website/public/guides/javascript/index.html:313
+#: website/public/guides/javascript/index.html:315
msgctxt "page:guides/javascript/index.html"
msgid "The page calls a small API"
msgstr ""
#. {ph0}: renderer.js
-#: website/public/guides/javascript/index.html:316
-#: website/public/guides/javascript/index.html:339
-#: website/public/guides/javascript/index.html:354
+#: website/public/guides/javascript/index.html:318
+#: website/public/guides/javascript/index.html:341
+#: website/public/guides/javascript/index.html:356
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0} · example source"
msgstr ""
-#: website/public/guides/javascript/index.html:333
+#: website/public/guides/javascript/index.html:335
msgctxt "page:guides/javascript/index.html"
msgid ""
"The page knows the method name. The implementation lives in the preload, which exposes"
@@ -6783,7 +6783,7 @@ msgstr ""
#. {ph0}: notes.exportCsv
#. {ph1}: notes:export
-#: website/public/guides/javascript/index.html:347
+#: website/public/guides/javascript/index.html:349
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
@@ -6793,7 +6793,7 @@ msgstr ""
#. {ph0}: csv.js
#. {ph1}: notes.csv
-#: website/public/guides/javascript/index.html:364
+#: website/public/guides/javascript/index.html:366
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
@@ -6801,12 +6801,12 @@ msgid ""
"main process writes {ph1} into the user's Downloads folder."
msgstr ""
-#: website/public/guides/javascript/index.html:371
+#: website/public/guides/javascript/index.html:373
msgctxt "page:guides/javascript/index.html"
msgid "REA result · summary.ipc excerpt"
msgstr ""
-#: website/public/guides/javascript/index.html:381
+#: website/public/guides/javascript/index.html:383
msgctxt "page:guides/javascript/index.html"
msgid ""
"Recorded by REA 4.1.0 on an earlier version of the example below. The renderer has "
@@ -6814,14 +6814,14 @@ msgid ""
"findings."
msgstr ""
-#: website/public/guides/javascript/index.html:388
+#: website/public/guides/javascript/index.html:390
msgctxt "page:guides/javascript/index.html"
msgid "Analyze the example yourself"
msgstr ""
#. {ph0}: notes-example
#. {ph1}: Node.js
-#: website/public/guides/javascript/index.html:389
+#: website/public/guides/javascript/index.html:391
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
@@ -6832,25 +6832,25 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/javascript/index.html:395
+#: website/public/guides/javascript/index.html:397
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Download example ZIP{ph1}"
msgstr ""
-#: website/public/guides/javascript/index.html:404
+#: website/public/guides/javascript/index.html:406
msgctxt "page:guides/javascript/index.html"
msgid "Browse the six source files"
msgstr ""
-#: website/public/guides/javascript/index.html:440
+#: website/public/guides/javascript/index.html:442
msgctxt "page:guides/javascript/index.html"
msgid "Static application analysis"
msgstr ""
#. {ph0}: normalized_result.summary.ipc
#. {ph1}: normalized_result.graph
-#: website/public/guides/javascript/index.html:453
+#: website/public/guides/javascript/index.html:455
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
@@ -6858,20 +6858,20 @@ msgid ""
" matching handler in {ph0}. Source locations are in {ph1}."
msgstr ""
-#: website/public/guides/javascript/index.html:459
+#: website/public/guides/javascript/index.html:461
msgctxt "page:guides/javascript/index.html"
msgid ""
"For your own app, use the same command with its directory or ASAR path. An agent can "
"follow a literal string, API name or IPC channel with REA's feature tracing tools."
msgstr ""
-#: website/public/guides/javascript/index.html:466
+#: website/public/guides/javascript/index.html:468
msgctxt "page:guides/javascript/index.html"
msgid "Inspect the CSV writer"
msgstr ""
#. {ph0}: notes:export
-#: website/public/guides/javascript/index.html:468
+#: website/public/guides/javascript/index.html:470
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
@@ -6879,7 +6879,7 @@ msgid ""
"writing the file fails?"
msgstr ""
-#: website/public/guides/javascript/index.html:474
+#: website/public/guides/javascript/index.html:476
msgctxt "page:guides/javascript/index.html"
msgid ""
"Use the source locations to inspect those details. Computed channel names and "
@@ -6891,7 +6891,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/guides/javascript/index.html:480
+#: website/public/guides/javascript/index.html:482
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
@@ -6903,7 +6903,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/guides/javascript/index.html:486
+#: website/public/guides/javascript/index.html:488
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
@@ -6915,7 +6915,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/guides/javascript/index.html:492
+#: website/public/guides/javascript/index.html:494
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
@@ -6935,32 +6935,32 @@ msgid ""
"Includes downloadable example files and a verified analysis result."
msgstr ""
-#: website/public/guides/javascript/index.html:212
+#: website/public/guides/javascript/index.html:214
msgctxt "page:guides/javascript/index.html"
msgid "On this page"
msgstr ""
-#: website/public/guides/javascript/index.html:222
+#: website/public/guides/javascript/index.html:224
msgctxt "page:guides/javascript/index.html"
msgid "JavaScript & Electron"
msgstr ""
-#: website/public/guides/javascript/index.html:284
+#: website/public/guides/javascript/index.html:286
msgctxt "page:guides/javascript/index.html"
msgid "Copy example prompt"
msgstr ""
-#: website/public/guides/javascript/index.html:441
+#: website/public/guides/javascript/index.html:443
msgctxt "page:guides/javascript/index.html"
msgid "Copy static application analysis"
msgstr ""
-#: website/public/guides/javascript/index.html:520
+#: website/public/guides/javascript/index.html:522
msgctxt "page:guides/javascript/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/guides/native/index.html:111
+#: website/public/guides/native/index.html:113
msgctxt "page:guides/native/index.html"
msgid "Skip to content"
msgstr ""
@@ -6969,34 +6969,34 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/guides/native/index.html:201
+#: website/public/guides/native/index.html:203
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis"
msgstr ""
#. {ph0}: 0x00406400
#. {ph1}: __ftol()
-#: website/public/guides/native/index.html:228
+#: website/public/guides/native/index.html:230
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7057,7 +7057,7 @@ msgid ""
"missing arithmetic."
msgstr ""
-#: website/public/guides/native/index.html:235
+#: website/public/guides/native/index.html:237
msgctxt "page:guides/native/index.html"
msgid "New to these terms?"
msgstr ""
@@ -7066,7 +7066,7 @@ msgstr ""
#. {ph1}:
#. {ph2}: MOV
#. {ph3}: ADD
-#: website/public/guides/native/index.html:237
+#: website/public/guides/native/index.html:239
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7076,7 +7076,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/native/index.html:242
+#: website/public/guides/native/index.html:244
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7086,7 +7086,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/native/index.html:247
+#: website/public/guides/native/index.html:249
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7096,7 +7096,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
#. {ph2}: 0x00406400
-#: website/public/guides/native/index.html:251
+#: website/public/guides/native/index.html:253
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7105,7 +7105,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/native/index.html:255
+#: website/public/guides/native/index.html:257
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7113,7 +7113,7 @@ msgid ""
"decoded."
msgstr ""
-#: website/public/guides/native/index.html:262
+#: website/public/guides/native/index.html:264
msgctxt "page:guides/native/index.html"
msgid "Three pieces of evidence, one calculation"
msgstr ""
@@ -7124,7 +7124,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
#. {ph5}:
-#: website/public/guides/native/index.html:266
+#: website/public/guides/native/index.html:268
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7139,7 +7139,7 @@ msgstr ""
#. {ph4}:
#. {ph5}: 20 + 30 × tile_x
#. {ph6}:
-#: website/public/guides/native/index.html:274
+#: website/public/guides/native/index.html:276
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7155,7 +7155,7 @@ msgstr ""
#. {ph5}: 1.5625
#. {ph6}: 500.0
#. {ph7}:
-#: website/public/guides/native/index.html:282
+#: website/public/guides/native/index.html:284
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7163,14 +7163,14 @@ msgid ""
"to {ph5}, {ph6} and a scale value.{ph7}"
msgstr ""
-#: website/public/guides/native/index.html:294
+#: website/public/guides/native/index.html:296
msgctxt "page:guides/native/index.html"
msgid ""
"REA supplies the instructions, call relationship and bytes. The agent interprets them "
"together."
msgstr ""
-#: website/public/guides/native/index.html:301
+#: website/public/guides/native/index.html:303
msgctxt "page:guides/native/index.html"
msgid "Ask about the behavior"
msgstr ""
@@ -7179,7 +7179,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/guides/native/index.html:302
+#: website/public/guides/native/index.html:304
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7187,19 +7187,19 @@ msgid ""
"tool{ph3}, provide the local executable and a question:"
msgstr ""
-#: website/public/guides/native/index.html:313
+#: website/public/guides/native/index.html:315
msgctxt "page:guides/native/index.html"
msgid "Which analysis tool should I use?"
msgstr ""
-#: website/public/guides/native/index.html:314
+#: website/public/guides/native/index.html:316
msgctxt "page:guides/native/index.html"
msgid "REA needs one of these to read native programs:"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/native/index.html:316
+#: website/public/guides/native/index.html:318
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7210,7 +7210,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/native/index.html:323
+#: website/public/guides/native/index.html:325
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7220,7 +7220,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/native/index.html:328
+#: website/public/guides/native/index.html:330
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7231,7 +7231,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/native/index.html:335
+#: website/public/guides/native/index.html:337
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "See {ph0}Set up native analysis{ph1} for the steps."
@@ -7245,14 +7245,14 @@ msgstr ""
#. {ph5}:
#. {ph6}:
#. {ph7}:
-#: website/public/guides/native/index.html:343
+#: website/public/guides/native/index.html:345
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
-#: website/public/guides/native/index.html:347
-#: website/public/guides/native/index.html:478
+#: website/public/guides/native/index.html:349
+#: website/public/guides/native/index.html:480
msgctxt "page:guides/native/index.html"
msgid "Copy"
msgstr ""
@@ -7263,7 +7263,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
-#: website/public/guides/native/index.html:356
+#: website/public/guides/native/index.html:358
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7271,7 +7271,7 @@ msgid ""
"calculation and show the code.{ph3}{ph4}{ph5}"
msgstr ""
-#: website/public/guides/native/index.html:364
+#: website/public/guides/native/index.html:366
msgctxt "page:guides/native/index.html"
msgid ""
"Example prompt. Give your agent the path to your local DX-Ball 1.07 executable. REA "
@@ -7279,7 +7279,7 @@ msgid ""
"another small Windows program you have."
msgstr ""
-#: website/public/guides/native/index.html:371
+#: website/public/guides/native/index.html:373
msgctxt "page:guides/native/index.html"
msgid "How do I get a file's full path?"
msgstr ""
@@ -7288,7 +7288,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/guides/native/index.html:373
+#: website/public/guides/native/index.html:375
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7300,7 +7300,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/guides/native/index.html:378
+#: website/public/guides/native/index.html:380
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7310,46 +7310,46 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/native/index.html:382
+#: website/public/guides/native/index.html:384
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}Any system:{ph1} drag the file into a terminal window and its path appears."
msgstr ""
-#: website/public/guides/native/index.html:390
+#: website/public/guides/native/index.html:392
msgctxt "page:guides/native/index.html"
msgid "Read the REA results"
msgstr ""
-#: website/public/guides/native/index.html:391
+#: website/public/guides/native/index.html:393
msgctxt "page:guides/native/index.html"
msgid "Read the input"
msgstr ""
-#: website/public/guides/native/index.html:394
+#: website/public/guides/native/index.html:396
msgctxt "page:guides/native/index.html"
msgid "REA instruction excerpt · 0x406409"
msgstr ""
-#: website/public/guides/native/index.html:400
+#: website/public/guides/native/index.html:402
msgctxt "page:guides/native/index.html"
msgid ""
"The instructions load an integer argument and convert it for floating-point "
"arithmetic. This is the input absent from the first pseudocode view."
msgstr ""
-#: website/public/guides/native/index.html:405
+#: website/public/guides/native/index.html:407
msgctxt "page:guides/native/index.html"
msgid "Follow the caller"
msgstr ""
-#: website/public/guides/native/index.html:408
+#: website/public/guides/native/index.html:410
msgctxt "page:guides/native/index.html"
msgid "REA caller excerpt · 0x411f5b"
msgstr ""
#. {ph0}: 0x14
-#: website/public/guides/native/index.html:414
+#: website/public/guides/native/index.html:416
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7357,34 +7357,34 @@ msgid ""
"coordinate by 30; adding {ph0} (20) gives the brick's screen position."
msgstr ""
-#: website/public/guides/native/index.html:419
+#: website/public/guides/native/index.html:421
msgctxt "page:guides/native/index.html"
msgid "Read the referenced constants"
msgstr ""
-#: website/public/guides/native/index.html:422
+#: website/public/guides/native/index.html:424
msgctxt "page:guides/native/index.html"
msgid "REA byte results · interpreted as little-endian doubles"
msgstr ""
-#: website/public/guides/native/index.html:430
+#: website/public/guides/native/index.html:432
msgctxt "page:guides/native/index.html"
msgid ""
"The arithmetic references these addresses. Reading the bytes supplies the actual "
"values; the instruction order tells the agent how they are used."
msgstr ""
-#: website/public/guides/native/index.html:437
+#: website/public/guides/native/index.html:439
msgctxt "page:guides/native/index.html"
msgid "Write and check the recovered function"
msgstr ""
-#: website/public/guides/native/index.html:439
+#: website/public/guides/native/index.html:441
msgctxt "page:guides/native/index.html"
msgid "Recovered C · excerpt"
msgstr ""
-#: website/public/guides/native/index.html:446
+#: website/public/guides/native/index.html:448
msgctxt "page:guides/native/index.html"
msgid ""
"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 before "
@@ -7392,7 +7392,7 @@ msgid ""
" stereo field."
msgstr ""
-#: website/public/guides/native/index.html:451
+#: website/public/guides/native/index.html:453
msgctxt "page:guides/native/index.html"
msgid ""
"The agent used REA's findings to write the C. Separate checks compared 3,205 inputs "
@@ -7402,20 +7402,20 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/native/index.html:456
+#: website/public/guides/native/index.html:458
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}"
msgstr ""
-#: website/public/guides/native/index.html:463
+#: website/public/guides/native/index.html:465
msgctxt "page:guides/native/index.html"
msgid "Try it with your own binary"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/native/index.html:464
+#: website/public/guides/native/index.html:466
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7424,20 +7424,20 @@ msgid ""
"this file parsed?” or “Which function handles this menu action?”"
msgstr ""
-#: website/public/guides/native/index.html:471
+#: website/public/guides/native/index.html:473
msgctxt "page:guides/native/index.html"
msgid ""
"If you already know a function name or address, you can query it from the terminal. "
"For a configured Ghidra installation:"
msgstr ""
-#: website/public/guides/native/index.html:477
+#: website/public/guides/native/index.html:479
msgctxt "page:guides/native/index.html"
msgid "Function analysis"
msgstr ""
#. {ph0}: main
-#: website/public/guides/native/index.html:490
+#: website/public/guides/native/index.html:492
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
@@ -7446,7 +7446,7 @@ msgid ""
"queries reuse the imported binary while that session is open."
msgstr ""
-#: website/public/guides/native/index.html:496
+#: website/public/guides/native/index.html:498
msgctxt "page:guides/native/index.html"
msgid ""
"Read the pseudocode alongside instructions and references. When a result leaves a call"
@@ -7465,32 +7465,32 @@ msgid ""
"constants and check reconstructed C."
msgstr ""
-#: website/public/guides/native/index.html:211
+#: website/public/guides/native/index.html:213
msgctxt "page:guides/native/index.html"
msgid "On this page"
msgstr ""
-#: website/public/guides/native/index.html:221
+#: website/public/guides/native/index.html:223
msgctxt "page:guides/native/index.html"
msgid "Native analysis"
msgstr ""
-#: website/public/guides/native/index.html:347
+#: website/public/guides/native/index.html:349
msgctxt "page:guides/native/index.html"
msgid "Copy example prompt"
msgstr ""
-#: website/public/guides/native/index.html:478
+#: website/public/guides/native/index.html:480
msgctxt "page:guides/native/index.html"
msgid "Copy function analysis"
msgstr ""
-#: website/public/guides/native/index.html:521
+#: website/public/guides/native/index.html:523
msgctxt "page:guides/native/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/guides/rl-environments/index.html:111
+#: website/public/guides/rl-environments/index.html:113
msgctxt "page:guides/rl-environments/index.html"
msgid "Skip to content"
msgstr ""
@@ -7499,18 +7499,18 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/guides/rl-environments/index.html:201
+#: website/public/guides/rl-environments/index.html:203
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / RL environments"
msgstr ""
-#: website/public/guides/rl-environments/index.html:204
+#: website/public/guides/rl-environments/index.html:206
msgctxt "page:guides/rl-environments/index.html"
msgid "Build RL environments."
msgstr ""
-#: website/public/guides/rl-environments/index.html:205
+#: website/public/guides/rl-environments/index.html:207
#: website/public/guides/rl-environments/index.html:7
msgctxt "page:guides/rl-environments/index.html"
msgid ""
@@ -7520,21 +7520,21 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/rl-environments/index.html:209
+#: website/public/guides/rl-environments/index.html:211
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid "{ph0}Watch the announcement video on X{ph1}"
msgstr ""
-#: website/public/guides/rl-environments/index.html:217
-#: website/public/guides/rl-environments/index.html:216
+#: website/public/guides/rl-environments/index.html:219
+#: website/public/guides/rl-environments/index.html:218
msgctxt "page:guides/rl-environments/index.html"
msgid "On this page"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/rl-environments/index.html:219
+#: website/public/guides/rl-environments/index.html:221
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid "{ph0}What REA builds{ph1}"
@@ -7542,7 +7542,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/rl-environments/index.html:220
+#: website/public/guides/rl-environments/index.html:222
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid "{ph0}Before you start{ph1}"
@@ -7550,7 +7550,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/rl-environments/index.html:221
+#: website/public/guides/rl-environments/index.html:223
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid "{ph0}Record with your agent{ph1}"
@@ -7558,7 +7558,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/rl-environments/index.html:222
+#: website/public/guides/rl-environments/index.html:224
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid "{ph0}Use a saved recording{ph1}"
@@ -7566,7 +7566,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/rl-environments/index.html:223
+#: website/public/guides/rl-environments/index.html:225
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid "{ph0}Run the environment{ph1}"
@@ -7574,7 +7574,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/rl-environments/index.html:224
+#: website/public/guides/rl-environments/index.html:226
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid "{ph0}Add tasks and rewards{ph1}"
@@ -7582,18 +7582,18 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/rl-environments/index.html:225
+#: website/public/guides/rl-environments/index.html:227
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid "{ph0}Check what works{ph1}"
msgstr ""
-#: website/public/guides/rl-environments/index.html:230
+#: website/public/guides/rl-environments/index.html:232
msgctxt "page:guides/rl-environments/index.html"
msgid "What REA builds"
msgstr ""
-#: website/public/guides/rl-environments/index.html:231
+#: website/public/guides/rl-environments/index.html:233
msgctxt "page:guides/rl-environments/index.html"
msgid ""
"An agent can practice finding an issue, creating a folder, or editing a record without"
@@ -7607,7 +7607,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
#. {ph5}:
-#: website/public/guides/rl-environments/index.html:239
+#: website/public/guides/rl-environments/index.html:241
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid ""
@@ -7621,7 +7621,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
#. {ph5}:
-#: website/public/guides/rl-environments/index.html:247
+#: website/public/guides/rl-environments/index.html:249
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid ""
@@ -7635,7 +7635,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
#. {ph5}:
-#: website/public/guides/rl-environments/index.html:255
+#: website/public/guides/rl-environments/index.html:257
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid ""
@@ -7643,21 +7643,21 @@ msgid ""
"task goals and reward checks for evaluation or RL training.{ph5}"
msgstr ""
-#: website/public/guides/rl-environments/index.html:265
+#: website/public/guides/rl-environments/index.html:267
msgctxt "page:guides/rl-environments/index.html"
msgid ""
"The recording determines which operations the environment can support. Changes are "
"supported when the recording confirms their effects."
msgstr ""
-#: website/public/guides/rl-environments/index.html:273
+#: website/public/guides/rl-environments/index.html:275
msgctxt "page:guides/rl-environments/index.html"
msgid "Before you start"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/rl-environments/index.html:274
+#: website/public/guides/rl-environments/index.html:276
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid ""
@@ -7669,7 +7669,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
#. {ph2}: 0.9.1334
-#: website/public/guides/rl-environments/index.html:281
+#: website/public/guides/rl-environments/index.html:283
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid ""
@@ -7677,12 +7677,12 @@ msgid ""
"Docker. REA's compatibility check uses AgentEnv version {ph2} with Python 3.12."
msgstr ""
-#: website/public/guides/rl-environments/index.html:291
+#: website/public/guides/rl-environments/index.html:293
msgctxt "page:guides/rl-environments/index.html"
msgid "Record and build with your agent"
msgstr ""
-#: website/public/guides/rl-environments/index.html:292
+#: website/public/guides/rl-environments/index.html:294
msgctxt "page:guides/rl-environments/index.html"
msgid ""
"Tell your agent which app and operations to cover. For an app with folders, adapt this"
@@ -7697,17 +7697,17 @@ msgstr ""
#. {ph5}:
#. {ph6}:
#. {ph7}:
-#: website/public/guides/rl-environments/index.html:298
-#: website/public/guides/rl-environments/index.html:415
+#: website/public/guides/rl-environments/index.html:300
+#: website/public/guides/rl-environments/index.html:417
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
-#: website/public/guides/rl-environments/index.html:302
-#: website/public/guides/rl-environments/index.html:347
-#: website/public/guides/rl-environments/index.html:382
-#: website/public/guides/rl-environments/index.html:419
+#: website/public/guides/rl-environments/index.html:304
+#: website/public/guides/rl-environments/index.html:349
+#: website/public/guides/rl-environments/index.html:384
+#: website/public/guides/rl-environments/index.html:421
msgctxt "page:guides/rl-environments/index.html"
msgid "Copy"
msgstr ""
@@ -7722,7 +7722,7 @@ msgstr ""
#. {ph7}:
#. {ph8}:
-#: website/public/guides/rl-environments/index.html:311
+#: website/public/guides/rl-environments/index.html:313
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid ""
@@ -7734,7 +7734,7 @@ msgid ""
msgstr ""
#. {ph0}: APP_PASSWORD
-#: website/public/guides/rl-environments/index.html:326
+#: website/public/guides/rl-environments/index.html:328
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid ""
@@ -7744,7 +7744,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/rl-environments/index.html:331
+#: website/public/guides/rl-environments/index.html:333
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid ""
@@ -7753,12 +7753,12 @@ msgid ""
"environment{ph1}."
msgstr ""
-#: website/public/guides/rl-environments/index.html:338
+#: website/public/guides/rl-environments/index.html:340
msgctxt "page:guides/rl-environments/index.html"
msgid "Or use a saved recording"
msgstr ""
-#: website/public/guides/rl-environments/index.html:339
+#: website/public/guides/rl-environments/index.html:341
msgctxt "page:guides/rl-environments/index.html"
msgid ""
"A HAR file records a browser's network requests and responses. Export one with API "
@@ -7766,14 +7766,14 @@ msgid ""
"folder:"
msgstr ""
-#: website/public/guides/rl-environments/index.html:346
+#: website/public/guides/rl-environments/index.html:348
msgctxt "page:guides/rl-environments/index.html"
msgid "Build the environment"
msgstr ""
#. {ph0}: capture-browser-scenario
#. {ph1}: --dry-run
-#: website/public/guides/rl-environments/index.html:358
+#: website/public/guides/rl-environments/index.html:360
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid ""
@@ -7783,7 +7783,7 @@ msgid ""
"without writing files."
msgstr ""
-#: website/public/guides/rl-environments/index.html:366
+#: website/public/guides/rl-environments/index.html:368
msgctxt "page:guides/rl-environments/index.html"
msgid ""
"The report lists read operations, supported changes, and operations withheld because "
@@ -7791,31 +7791,31 @@ msgid ""
"and a hint about what to record next."
msgstr ""
-#: website/public/guides/rl-environments/index.html:374
+#: website/public/guides/rl-environments/index.html:376
msgctxt "page:guides/rl-environments/index.html"
msgid "Run the environment"
msgstr ""
-#: website/public/guides/rl-environments/index.html:375
+#: website/public/guides/rl-environments/index.html:377
msgctxt "page:guides/rl-environments/index.html"
msgid ""
"Whether your agent exported the folder or you built it from a recording, run it with "
"AgentEnv:"
msgstr ""
-#: website/public/guides/rl-environments/index.html:381
+#: website/public/guides/rl-environments/index.html:383
msgctxt "page:guides/rl-environments/index.html"
msgid "Run the environment test"
msgstr ""
-#: website/public/guides/rl-environments/index.html:393
+#: website/public/guides/rl-environments/index.html:395
msgctxt "page:guides/rl-environments/index.html"
msgid ""
"Use the path your agent reported if it differs. The first run builds the container "
"image and needs access to its image and package sources."
msgstr ""
-#: website/public/guides/rl-environments/index.html:398
+#: website/public/guides/rl-environments/index.html:400
msgctxt "page:guides/rl-environments/index.html"
msgid ""
"The included smoke task is a basic test. It checks the tool count and, when a suitable"
@@ -7823,12 +7823,12 @@ msgid ""
"environment starts and responds in that setup."
msgstr ""
-#: website/public/guides/rl-environments/index.html:406
+#: website/public/guides/rl-environments/index.html:408
msgctxt "page:guides/rl-environments/index.html"
msgid "Add tasks and reward checks"
msgstr ""
-#: website/public/guides/rl-environments/index.html:407
+#: website/public/guides/rl-environments/index.html:409
msgctxt "page:guides/rl-environments/index.html"
msgid ""
"Use the environment with your RL framework to define goals, score results, and run "
@@ -7842,7 +7842,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
-#: website/public/guides/rl-environments/index.html:428
+#: website/public/guides/rl-environments/index.html:430
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid ""
@@ -7853,7 +7853,7 @@ msgid ""
"formats.{ph3}{ph4}{ph5}"
msgstr ""
-#: website/public/guides/rl-environments/index.html:440
+#: website/public/guides/rl-environments/index.html:442
msgctxt "page:guides/rl-environments/index.html"
msgid ""
"Example prompt for an environment that supports folder creation. A task that changes "
@@ -7863,7 +7863,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/guides/rl-environments/index.html:445
+#: website/public/guides/rl-environments/index.html:447
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid ""
@@ -7872,12 +7872,12 @@ msgid ""
"tasks, verifiers, and agent connections."
msgstr ""
-#: website/public/guides/rl-environments/index.html:455
+#: website/public/guides/rl-environments/index.html:457
msgctxt "page:guides/rl-environments/index.html"
msgid "Check what works"
msgstr ""
-#: website/public/guides/rl-environments/index.html:456
+#: website/public/guides/rl-environments/index.html:458
msgctxt "page:guides/rl-environments/index.html"
msgid ""
"For changes to be supported, record the results as well as the action: read an item, "
@@ -7886,7 +7886,7 @@ msgid ""
msgstr ""
#. {ph0}: environment-compare
-#: website/public/guides/rl-environments/index.html:462
+#: website/public/guides/rl-environments/index.html:464
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid ""
@@ -7895,7 +7895,7 @@ msgid ""
"against the app from the same starting data."
msgstr ""
-#: website/public/guides/rl-environments/index.html:468
+#: website/public/guides/rl-environments/index.html:470
msgctxt "page:guides/rl-environments/index.html"
msgid ""
"Before sharing the folder, review its retained response bodies and local paths. Custom"
@@ -7909,7 +7909,7 @@ msgstr ""
#. {ph2}:
#. {ph3}:
-#: website/public/guides/rl-environments/index.html:474
+#: website/public/guides/rl-environments/index.html:476
#, python-brace-format
msgctxt "page:guides/rl-environments/index.html"
msgid ""
@@ -7923,71 +7923,71 @@ msgctxt "page:guides/rl-environments/index.html"
msgid "Build RL environments with REA"
msgstr ""
-#: website/public/guides/rl-environments/index.html:302
+#: website/public/guides/rl-environments/index.html:304
msgctxt "page:guides/rl-environments/index.html"
msgid "Copy environment prompt"
msgstr ""
-#: website/public/guides/rl-environments/index.html:347
+#: website/public/guides/rl-environments/index.html:349
msgctxt "page:guides/rl-environments/index.html"
msgid "Copy environment build command"
msgstr ""
-#: website/public/guides/rl-environments/index.html:382
+#: website/public/guides/rl-environments/index.html:384
msgctxt "page:guides/rl-environments/index.html"
msgid "Copy environment run command"
msgstr ""
-#: website/public/guides/rl-environments/index.html:419
+#: website/public/guides/rl-environments/index.html:421
msgctxt "page:guides/rl-environments/index.html"
msgid "Copy task prompt"
msgstr ""
-#: website/public/guides/rl-environments/index.html:507
+#: website/public/guides/rl-environments/index.html:509
msgctxt "page:guides/rl-environments/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/index.html:113
+#: website/public/index.html:115
msgctxt "page:index.html"
msgid "Skip to content"
msgstr ""
-#: website/public/index.html:205
+#: website/public/index.html:207
msgctxt "page:index.html"
msgid "Reverse engineering, with your coding agent"
msgstr ""
#. {ph0}: index.js
-#: website/public/index.html:776
+#: website/public/index.html:778
#, python-brace-format
msgctxt "page:index.html"
msgid ""
@@ -8634,12 +8634,12 @@ msgid ""
"returned the loaded {ph0}, including its source and digest."
msgstr ""
-#: website/public/index.html:783
+#: website/public/index.html:785
msgctxt "page:index.html"
msgid "Selected settings from the inspected script"
msgstr ""
-#: website/public/index.html:789
+#: website/public/index.html:791
msgctxt "page:index.html"
msgid ""
"We called the original game’s update function in a controlled browser check, with "
@@ -8649,7 +8649,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/index.html:795
+#: website/public/index.html:797
#, python-brace-format
msgctxt "page:index.html"
msgid ""
@@ -8662,7 +8662,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/index.html:801
+#: website/public/index.html:803
#, python-brace-format
msgctxt "page:index.html"
msgid ""
@@ -8676,30 +8676,30 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/index.html:810
+#: website/public/index.html:812
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}"
msgstr ""
-#: website/public/index.html:827
+#: website/public/index.html:829
msgctxt "page:index.html"
msgid "Example 02 · Windows Calculator"
msgstr ""
-#: website/public/index.html:828
+#: website/public/index.html:830
msgctxt "page:index.html"
msgid "Rebuild Calculator’s % button."
msgstr ""
-#: website/public/index.html:830
+#: website/public/index.html:832
msgctxt "page:index.html"
msgid ""
"The % button does different things after + and ×. Let’s find both rules and try them "
"in a small calculator."
msgstr ""
-#: website/public/index.html:836
+#: website/public/index.html:838
msgctxt "page:index.html"
msgid "1. Ask about the % button"
msgstr ""
@@ -8712,7 +8712,7 @@ msgstr ""
#. {ph5}:
#. {ph6}:
#. {ph7}:
-#: website/public/index.html:839
+#: website/public/index.html:841
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example question · Calculator"
@@ -8724,7 +8724,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
-#: website/public/index.html:853
+#: website/public/index.html:855
#, python-brace-format
msgctxt "page:index.html"
msgid ""
@@ -8732,18 +8732,18 @@ msgid ""
"after + and ×, then build a small calculator that uses both.{ph3}{ph4}{ph5}"
msgstr ""
-#: website/public/index.html:862
+#: website/public/index.html:864
msgctxt "page:index.html"
msgid "2. Find both rules"
msgstr ""
-#: website/public/index.html:863
+#: website/public/index.html:865
msgctxt "page:index.html"
msgid ""
"REA helps the agent read the code behind the % button. It applies two different rules:"
msgstr ""
-#: website/public/index.html:869
+#: website/public/index.html:871
msgctxt "page:index.html"
msgid "With +"
msgstr ""
@@ -8751,13 +8751,13 @@ msgstr ""
#. {ph0}:
#. {ph1}:
#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220
-#: website/public/index.html:870
+#: website/public/index.html:872
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Take 10% of the first number.{ph1}{ph2}"
msgstr ""
-#: website/public/index.html:876
+#: website/public/index.html:878
msgctxt "page:index.html"
msgid "With ×"
msgstr ""
@@ -8765,56 +8765,56 @@ msgstr ""
#. {ph0}:
#. {ph1}:
#. {ph2}: 200 × 0.1 = 20
-#: website/public/index.html:877
+#: website/public/index.html:879
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}"
msgstr ""
-#: website/public/index.html:884
+#: website/public/index.html:886
msgctxt "page:index.html"
msgid "3. Try the % button"
msgstr ""
-#: website/public/index.html:885
+#: website/public/index.html:887
msgctxt "page:index.html"
msgid "We recreated both rules below. Choose + or ×, press %, then press =."
msgstr ""
-#: website/public/index.html:933
+#: website/public/index.html:935
msgctxt "page:index.html"
msgid "Reset"
msgstr ""
-#: website/public/index.html:941
+#: website/public/index.html:943
msgctxt "page:index.html"
msgid "10% of 200 = 20. Then 200 + 20 = 220."
msgstr ""
-#: website/public/index.html:944
+#: website/public/index.html:946
msgctxt "page:index.html"
msgid "Interactive illustration of the inspected percentage rule."
msgstr ""
-#: website/public/index.html:951
+#: website/public/index.html:953
msgctxt "page:index.html"
msgid "See the real code and how the answer was checked"
msgstr ""
#. {ph0}: previous = 200
#. {ph1}: current = 10
-#: website/public/index.html:952
+#: website/public/index.html:954
#, python-brace-format
msgctxt "page:index.html"
msgid "For this example, {ph0} and {ph1}."
msgstr ""
-#: website/public/index.html:958
+#: website/public/index.html:960
msgctxt "page:index.html"
msgid "Readable summary of the % handler"
msgstr ""
-#: website/public/index.html:967
+#: website/public/index.html:969
msgctxt "page:index.html"
msgid "From the installed app to a working % button"
msgstr ""
@@ -8827,7 +8827,7 @@ msgstr ""
#. {ph5}:
#. {ph6}: ms-calculator:
#. {ph7}:
-#: website/public/index.html:971
+#: website/public/index.html:973
#, python-brace-format
msgctxt "page:index.html"
msgid ""
@@ -8842,7 +8842,7 @@ msgstr ""
#. {ph4}:
#. {ph5}: 100
#. {ph6}:
-#: website/public/index.html:980
+#: website/public/index.html:982
#, python-brace-format
msgctxt "page:index.html"
msgid ""
@@ -8856,7 +8856,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
#. {ph5}:
-#: website/public/index.html:988
+#: website/public/index.html:990
#, python-brace-format
msgctxt "page:index.html"
msgid ""
@@ -8865,17 +8865,17 @@ msgid ""
"above.{ph5}"
msgstr ""
-#: website/public/index.html:1002
+#: website/public/index.html:1004
msgctxt "page:index.html"
msgid "REA · selected original instructions"
msgstr ""
-#: website/public/index.html:1013
+#: website/public/index.html:1015
msgctxt "page:index.html"
msgid "Operator IDs · Microsoft’s source"
msgstr ""
-#: website/public/index.html:1023
+#: website/public/index.html:1025
msgctxt "page:index.html"
msgid ""
"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable summary "
@@ -8892,7 +8892,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
#. {ph5}:
-#: website/public/index.html:1028
+#: website/public/index.html:1030
#, python-brace-format
msgctxt "page:index.html"
msgid ""
@@ -8900,93 +8900,93 @@ msgid ""
"setup guide{ph5}"
msgstr ""
-#: website/public/index.html:1048
+#: website/public/index.html:1050
msgctxt "page:index.html"
msgid "REA case studies."
msgstr ""
-#: website/public/index.html:1049
+#: website/public/index.html:1051
msgctxt "page:index.html"
msgid "Explore a feature in a released app or game, with code and checked results."
msgstr ""
-#: website/public/index.html:1058
+#: website/public/index.html:1060
msgctxt "page:index.html"
msgid "Android · APK analysis"
msgstr ""
-#: website/public/index.html:1059
+#: website/public/index.html:1061
msgctxt "page:index.html"
msgid "How an authenticator generates a login code"
msgstr ""
-#: website/public/index.html:1060
+#: website/public/index.html:1062
msgctxt "page:index.html"
msgid ""
"Trace Aegis's six-digit login code through its released APK, then move a demo clock to"
" see why it changes every 30 seconds."
msgstr ""
-#: website/public/index.html:1064
+#: website/public/index.html:1066
msgctxt "page:index.html"
msgid "Read the Android case study"
msgstr ""
-#: website/public/index.html:1069
+#: website/public/index.html:1071
msgctxt "page:index.html"
msgid "Electron · Feature tracing"
msgstr ""
-#: website/public/index.html:1070
+#: website/public/index.html:1072
msgctxt "page:index.html"
msgid "How Notion copies text and HTML"
msgstr ""
-#: website/public/index.html:1071
+#: website/public/index.html:1073
msgctxt "page:index.html"
msgid ""
"Follow Notion's packaged JavaScript to the system clipboard and see how a copy "
"preserves rich block data."
msgstr ""
-#: website/public/index.html:1075
+#: website/public/index.html:1077
msgctxt "page:index.html"
msgid "Read the Notion case study"
msgstr ""
-#: website/public/index.html:1080
+#: website/public/index.html:1082
msgctxt "page:index.html"
msgid "Native · Reconstruction"
msgstr ""
-#: website/public/index.html:1081
+#: website/public/index.html:1083
msgctxt "page:index.html"
msgid "DX-Ball's sound-pan calculation"
msgstr ""
-#: website/public/index.html:1082
+#: website/public/index.html:1084
msgctxt "page:index.html"
msgid "Recover how a ball's position becomes left/right sound in a 1996 Windows game."
msgstr ""
-#: website/public/index.html:1086
+#: website/public/index.html:1088
msgctxt "page:index.html"
msgid "Read the DX-Ball case study"
msgstr ""
-#: website/public/index.html:1098
+#: website/public/index.html:1100
msgctxt "page:index.html"
msgid "Build RL environments."
msgstr ""
-#: website/public/index.html:1099
+#: website/public/index.html:1101
msgctxt "page:index.html"
msgid ""
"Turn a recorded web app session into a runnable environment for training and testing "
"AI agents."
msgstr ""
-#: website/public/index.html:1104
+#: website/public/index.html:1106
msgctxt "page:index.html"
msgid ""
"Your agent records the browser's requests and the app's responses. REA uses them to "
@@ -8994,7 +8994,7 @@ msgid ""
" app."
msgstr ""
-#: website/public/index.html:1109
+#: website/public/index.html:1111
msgctxt "page:index.html"
msgid ""
"To support folder deletion, the recording must show the folder before deletion and "
@@ -9005,13 +9005,13 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/index.html:1113
+#: website/public/index.html:1115
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Build an RL environment{ph1} · {ph2}Watch the demo on X{ph3}"
msgstr ""
-#: website/public/index.html:1124
+#: website/public/index.html:1126
msgctxt "page:index.html"
msgid "With REA set up in your agent, give it a task like this:"
msgstr ""
@@ -9024,7 +9024,7 @@ msgstr ""
#. {ph5}:
#. {ph6}:
-#: website/public/index.html:1140
+#: website/public/index.html:1142
#, python-brace-format
msgctxt "page:index.html"
msgid ""
@@ -9034,90 +9034,90 @@ msgid ""
"which operations work and tell me how to run it.{ph5}{ph6}{ph7}"
msgstr ""
-#: website/public/index.html:1152
+#: website/public/index.html:1154
msgctxt "page:index.html"
msgid "Example prompt. Replace the URL and folder tasks with your own."
msgstr ""
-#: website/public/index.html:1162
+#: website/public/index.html:1164
msgctxt "page:index.html"
msgid "Your first investigation"
msgstr ""
-#: website/public/index.html:1163
+#: website/public/index.html:1165
msgctxt "page:index.html"
msgid "Try REA on a small app."
msgstr ""
-#: website/public/index.html:1164
+#: website/public/index.html:1166
msgctxt "page:index.html"
msgid "Download our Notes example, trace its CSV export, and check one changed input."
msgstr ""
-#: website/public/index.html:1169
+#: website/public/index.html:1171
msgctxt "page:index.html"
msgid "Try the guided example"
msgstr ""
-#: website/public/index.html:1178
+#: website/public/index.html:1180
msgctxt "page:index.html"
msgid "Choose your target."
msgstr ""
-#: website/public/index.html:1179
+#: website/public/index.html:1181
msgctxt "page:index.html"
msgid "These guides cover setup and a first investigation for each kind of software."
msgstr ""
-#: website/public/index.html:1186
+#: website/public/index.html:1188
msgctxt "page:index.html"
msgid "Native binaries"
msgstr ""
-#: website/public/index.html:1187
+#: website/public/index.html:1189
msgctxt "page:index.html"
msgid ""
"Inspect functions, strings, references and call relationships in executables and "
"libraries."
msgstr ""
-#: website/public/index.html:1191
+#: website/public/index.html:1193
msgctxt "page:index.html"
msgid "Native analysis guide"
msgstr ""
-#: website/public/index.html:1194
+#: website/public/index.html:1196
msgctxt "page:index.html"
msgid "JavaScript & Electron"
msgstr ""
-#: website/public/index.html:1195
+#: website/public/index.html:1197
msgctxt "page:index.html"
msgid "Follow the code inside a JavaScript desktop app."
msgstr ""
-#: website/public/index.html:1196
+#: website/public/index.html:1198
msgctxt "page:index.html"
msgid "Application workflows"
msgstr ""
-#: website/public/index.html:1199
+#: website/public/index.html:1201
msgctxt "page:index.html"
msgid "Browser & runtime activity"
msgstr ""
-#: website/public/index.html:1200
+#: website/public/index.html:1202
msgctxt "page:index.html"
msgid ""
"Capture selected browser or process activity, then compare the results across runs."
msgstr ""
-#: website/public/index.html:1204
+#: website/public/index.html:1206
msgctxt "page:index.html"
msgid "Browser observation guide"
msgstr ""
-#: website/public/index.html:1208
+#: website/public/index.html:1210
msgctxt "page:index.html"
msgid "Try a larger project"
msgstr ""
@@ -9130,7 +9130,7 @@ msgstr ""
#. {ph5}:
#. {ph6}:
#. {ph7}:
-#: website/public/index.html:1213
+#: website/public/index.html:1215
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website"
@@ -9143,14 +9143,14 @@ msgstr ""
#. {ph4}:
#. {ph5}:
-#: website/public/index.html:1227
+#: website/public/index.html:1229
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for me.{ph4}{ph5}{ph6}"
msgstr ""
-#: website/public/index.html:1236
+#: website/public/index.html:1238
msgctxt "page:index.html"
msgid "Yes, this one."
msgstr ""
@@ -9163,7 +9163,7 @@ msgstr ""
#. {ph5}:
#. {ph6}:
#. {ph7}:
-#: website/public/index.html:1241
+#: website/public/index.html:1243
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction"
@@ -9175,7 +9175,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
-#: website/public/index.html:1255
+#: website/public/index.html:1257
#, python-brace-format
msgctxt "page:index.html"
msgid ""
@@ -9185,20 +9185,20 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/index.html:1264
+#: website/public/index.html:1266
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}See the DX-Ball case study →{ph1}"
msgstr ""
-#: website/public/index.html:1275
+#: website/public/index.html:1277
msgctxt "page:index.html"
msgid "Any questions?"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/index.html:1277
+#: website/public/index.html:1279
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Read the FAQ{ph1} for setup help and common questions."
@@ -9206,7 +9206,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/index.html:1281
+#: website/public/index.html:1283
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Join Discord{ph1} to get help and discuss your investigations."
@@ -9214,7 +9214,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/index.html:1285
+#: website/public/index.html:1287
#, python-brace-format
msgctxt "page:index.html"
msgid "Report a bug or request a feature in {ph0}GitHub issues{ph1}."
@@ -9232,68 +9232,68 @@ msgid ""
"clear guides and try interactive examples with REA."
msgstr ""
-#: website/public/index.html:227
+#: website/public/index.html:229
msgctxt "page:index.html"
msgid "Copy REA installation prompt"
msgstr ""
-#: website/public/index.html:251
+#: website/public/index.html:253
msgctxt "page:index.html"
msgid "Copy setup command"
msgstr ""
-#: website/public/index.html:383
+#: website/public/index.html:385
msgctxt "page:index.html"
msgid "Follow the manual Calculator analysis"
msgstr ""
-#: website/public/index.html:539
+#: website/public/index.html:541
msgctxt "page:index.html"
msgid "Copy Calculator percentage question"
msgstr ""
-#: website/public/index.html:620
+#: website/public/index.html:622
msgctxt "page:index.html"
msgid "Copy dinosaur analysis prompt"
msgstr ""
-#: website/public/index.html:673
+#: website/public/index.html:675
msgctxt "page:index.html"
msgid ""
"Dinosaur mini-game. Use the Jump button or press Space while the game is focused."
msgstr ""
-#: website/public/index.html:844
+#: website/public/index.html:846
msgctxt "page:index.html"
msgid "Copy Calculator analysis prompt"
msgstr ""
-#: website/public/index.html:890
+#: website/public/index.html:892
msgctxt "page:index.html"
msgid "Choose the calculation"
msgstr ""
-#: website/public/index.html:1131
+#: website/public/index.html:1133
msgctxt "page:index.html"
msgid "Copy example prompt"
msgstr ""
-#: website/public/index.html:1218
+#: website/public/index.html:1220
msgctxt "page:index.html"
msgid "Copy website project prompt"
msgstr ""
-#: website/public/index.html:1246
+#: website/public/index.html:1248
msgctxt "page:index.html"
msgid "Copy game reconstruction prompt"
msgstr ""
-#: website/public/index.html:1312
+#: website/public/index.html:1314
msgctxt "page:index.html"
msgid "Back to top"
msgstr ""
-#: website/public/showcase/aegis/index.html:112
+#: website/public/showcase/aegis/index.html:114
msgctxt "page:showcase/aegis/index.html"
msgid "Skip to content"
msgstr ""
@@ -9302,42 +9302,42 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/aegis/index.html:202
+#: website/public/showcase/aegis/index.html:204
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android"
msgstr ""
-#: website/public/showcase/aegis/index.html:205
+#: website/public/showcase/aegis/index.html:207
msgctxt "page:showcase/aegis/index.html"
msgid "Case study · Aegis Authenticator"
msgstr ""
#. {ph0}: TotpInfo
-#: website/public/showcase/aegis/index.html:428
+#: website/public/showcase/aegis/index.html:430
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
@@ -9639,19 +9639,19 @@ msgid ""
"imported accounts. TOTP means a time-based one-time password."
msgstr ""
-#: website/public/showcase/aegis/index.html:435
+#: website/public/showcase/aegis/index.html:437
msgctxt "page:showcase/aegis/index.html"
msgid "Connect the generator to the app's display"
msgstr ""
-#: website/public/showcase/aegis/index.html:452
+#: website/public/showcase/aegis/index.html:454
msgctxt "page:showcase/aegis/index.html"
msgid "REA → agent · methods and callers"
msgstr ""
#. {ph0}: EntryHolder.getOtp
#. {ph1}: TotpInfo.getOtp(timestamp)
-#: website/public/showcase/aegis/index.html:463
+#: website/public/showcase/aegis/index.html:465
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
@@ -9660,21 +9660,21 @@ msgid ""
msgstr ""
#. {ph0}: com.beemdevelopment.aegis
-#: website/public/showcase/aegis/index.html:471
+#: website/public/showcase/aegis/index.html:473
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Requests show a shortened input path. Result class names omit the common {ph0} prefix."
msgstr ""
-#: website/public/showcase/aegis/index.html:478
+#: website/public/showcase/aegis/index.html:480
msgctxt "page:showcase/aegis/index.html"
msgid "Read the calculation"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/aegis/index.html:479
+#: website/public/showcase/aegis/index.html:481
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
@@ -9685,7 +9685,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/aegis/index.html:494
+#: website/public/showcase/aegis/index.html:496
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}01{ph1} Time block"
@@ -9693,7 +9693,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/aegis/index.html:502
+#: website/public/showcase/aegis/index.html:504
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}02{ph1} Key + block"
@@ -9701,25 +9701,25 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/aegis/index.html:510
+#: website/public/showcase/aegis/index.html:512
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}03{ph1} Six digits"
msgstr ""
-#: website/public/showcase/aegis/index.html:522
+#: website/public/showcase/aegis/index.html:524
msgctxt "page:showcase/aegis/index.html"
msgid "REA · selected decompiled Java"
msgstr ""
-#: website/public/showcase/aegis/index.html:552
+#: website/public/showcase/aegis/index.html:554
msgctxt "page:showcase/aegis/index.html"
msgid "Readable summary · agent's interpretation"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/aegis/index.html:569
+#: website/public/showcase/aegis/index.html:571
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
@@ -9729,7 +9729,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/aegis/index.html:575
+#: website/public/showcase/aegis/index.html:577
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
@@ -9739,7 +9739,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/aegis/index.html:582
+#: website/public/showcase/aegis/index.html:584
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
@@ -9751,7 +9751,7 @@ msgstr ""
#. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/LICENSE"
#. >
#. {ph1}:
-#: website/public/showcase/aegis/index.html:589
+#: website/public/showcase/aegis/index.html:591
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
@@ -9759,7 +9759,7 @@ msgid ""
"panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}"
msgstr ""
-#: website/public/showcase/aegis/index.html:598
+#: website/public/showcase/aegis/index.html:600
msgctxt "page:showcase/aegis/index.html"
msgid "Inside the generator"
msgstr ""
@@ -9768,7 +9768,7 @@ msgstr ""
#. {ph1}: kotlin.ExceptionsKt
#. {ph2}: TotpInfo
#. {ph3}: HOTP
-#: website/public/showcase/aegis/index.html:599
+#: website/public/showcase/aegis/index.html:601
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
@@ -9776,12 +9776,12 @@ msgid ""
" body; the original source calls the helper {ph3}."
msgstr ""
-#: website/public/showcase/aegis/index.html:607
+#: website/public/showcase/aegis/index.html:609
msgctxt "page:showcase/aegis/index.html"
msgid "REA · generateOTP, complete body"
msgstr ""
-#: website/public/showcase/aegis/index.html:621
+#: website/public/showcase/aegis/index.html:623
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The last hash byte selects a position. Four bytes at that position provide a positive "
@@ -9794,20 +9794,20 @@ msgstr ""
#. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/app/src/main/java/com/beemdevelopment/aegis/crypto/otp/HOTP.java"
#. >
#. {ph1}:
-#: website/public/showcase/aegis/index.html:628
+#: website/public/showcase/aegis/index.html:630
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Compare with the matching release source{ph1}."
msgstr ""
-#: website/public/showcase/aegis/index.html:638
+#: website/public/showcase/aegis/index.html:640
msgctxt "page:showcase/aegis/index.html"
msgid "Check the reconstruction"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/aegis/index.html:639
+#: website/public/showcase/aegis/index.html:641
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
@@ -9816,29 +9816,29 @@ msgid ""
"time-block boundaries and codes beginning with zero."
msgstr ""
-#: website/public/showcase/aegis/index.html:649
+#: website/public/showcase/aegis/index.html:651
msgctxt "page:showcase/aegis/index.html"
msgid "Example time"
msgstr ""
-#: website/public/showcase/aegis/index.html:651
+#: website/public/showcase/aegis/index.html:653
msgctxt "page:showcase/aegis/index.html"
msgid "Six-digit code"
msgstr ""
-#: website/public/showcase/aegis/index.html:656
+#: website/public/showcase/aegis/index.html:658
msgctxt "page:showcase/aegis/index.html"
msgid "30 seconds"
msgstr ""
-#: website/public/showcase/aegis/index.html:671
+#: website/public/showcase/aegis/index.html:673
msgctxt "page:showcase/aegis/index.html"
msgid "1,111,111,109 seconds"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/aegis/index.html:678
+#: website/public/showcase/aegis/index.html:680
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
@@ -9846,30 +9846,30 @@ msgid ""
"6238{ph1}. Check the browser implementation against them:"
msgstr ""
-#: website/public/showcase/aegis/index.html:686
+#: website/public/showcase/aegis/index.html:688
msgctxt "page:showcase/aegis/index.html"
msgid "Run reference checks"
msgstr ""
-#: website/public/showcase/aegis/index.html:693
+#: website/public/showcase/aegis/index.html:695
msgctxt "page:showcase/aegis/index.html"
msgid "Read the demo's calculation"
msgstr ""
-#: website/public/showcase/aegis/index.html:697
+#: website/public/showcase/aegis/index.html:699
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The reference cases use eight digits. The check also verifies their six-digit results."
msgstr ""
-#: website/public/showcase/aegis/index.html:706
+#: website/public/showcase/aegis/index.html:708
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Verification runs extracted Java methods and the new demo. The Android APK was "
"inspected statically."
msgstr ""
-#: website/public/showcase/aegis/index.html:713
+#: website/public/showcase/aegis/index.html:715
msgctxt "page:showcase/aegis/index.html"
msgid "Inspect the APK yourself"
msgstr ""
@@ -9879,7 +9879,7 @@ msgstr ""
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/aegis/index.html:714
+#: website/public/showcase/aegis/index.html:716
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
@@ -9891,7 +9891,7 @@ msgstr ""
#. {ph0}: JAVA_HOME
#. {ph1}: PATH
-#: website/public/showcase/aegis/index.html:726
+#: website/public/showcase/aegis/index.html:728
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
@@ -9899,28 +9899,28 @@ msgid ""
"case used JDK 21."
msgstr ""
-#: website/public/showcase/aegis/index.html:732
+#: website/public/showcase/aegis/index.html:734
msgctxt "page:showcase/aegis/index.html"
msgid "Download Aegis APK"
msgstr ""
-#: website/public/showcase/aegis/index.html:736
+#: website/public/showcase/aegis/index.html:738
msgctxt "page:showcase/aegis/index.html"
msgid "Download Android analysis provider"
msgstr ""
-#: website/public/showcase/aegis/index.html:742
+#: website/public/showcase/aegis/index.html:744
msgctxt "page:showcase/aegis/index.html"
msgid "Point REA at the provider file and inspect the APK:"
msgstr ""
-#: website/public/showcase/aegis/index.html:745
+#: website/public/showcase/aegis/index.html:747
msgctxt "page:showcase/aegis/index.html"
msgid "macOS / Linux"
msgstr ""
#. {ph0}: REA_JADX_MCP_JAR
-#: website/public/showcase/aegis/index.html:759
+#: website/public/showcase/aegis/index.html:761
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
@@ -9930,7 +9930,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/aegis/index.html:764
+#: website/public/showcase/aegis/index.html:766
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
@@ -9938,7 +9938,7 @@ msgid ""
"time interval?{ph1}"
msgstr ""
-#: website/public/showcase/aegis/index.html:774
+#: website/public/showcase/aegis/index.html:776
msgctxt "page:showcase/aegis/index.html"
msgid "Sources"
msgstr ""
@@ -9953,7 +9953,7 @@ msgstr ""
#. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/LICENSE"
#. >
#. {ph5}:
-#: website/public/showcase/aegis/index.html:776
+#: website/public/showcase/aegis/index.html:778
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
@@ -9965,13 +9965,13 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/aegis/index.html:792
+#: website/public/showcase/aegis/index.html:794
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}"
msgstr ""
-#: website/public/showcase/aegis/index.html:799
+#: website/public/showcase/aegis/index.html:801
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited to Aegis;"
@@ -9990,37 +9990,37 @@ msgid ""
"and try a reconstruction with an adjustable clock."
msgstr ""
-#: website/public/showcase/aegis/index.html:252
+#: website/public/showcase/aegis/index.html:254
msgctxt "page:showcase/aegis/index.html"
msgid "On this page"
msgstr ""
-#: website/public/showcase/aegis/index.html:263
+#: website/public/showcase/aegis/index.html:265
msgctxt "page:showcase/aegis/index.html"
msgid "Aegis APK case study"
msgstr ""
-#: website/public/showcase/aegis/index.html:276
+#: website/public/showcase/aegis/index.html:278
msgctxt "page:showcase/aegis/index.html"
msgid "Copy Aegis example prompt"
msgstr ""
-#: website/public/showcase/aegis/index.html:489
+#: website/public/showcase/aegis/index.html:491
msgctxt "page:showcase/aegis/index.html"
msgid "Follow the login-code calculation"
msgstr ""
-#: website/public/showcase/aegis/index.html:746
+#: website/public/showcase/aegis/index.html:748
msgctxt "page:showcase/aegis/index.html"
msgid "Copy APK inspection command"
msgstr ""
-#: website/public/showcase/aegis/index.html:824
+#: website/public/showcase/aegis/index.html:826
msgctxt "page:showcase/aegis/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/showcase/ctf/index.html:111
+#: website/public/showcase/ctf/index.html:113
msgctxt "page:showcase/ctf/index.html"
msgid "Skip to content"
msgstr ""
@@ -10029,26 +10029,26 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/ctf/index.html:201
+#: website/public/showcase/ctf/index.html:203
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF"
msgstr ""
-#: website/public/showcase/ctf/index.html:204
+#: website/public/showcase/ctf/index.html:206
msgctxt "page:showcase/ctf/index.html"
msgid "Case study · DownUnderCTF 2023"
msgstr ""
#. {ph0}: Correct!
-#: website/public/showcase/ctf/index.html:206
+#: website/public/showcase/ctf/index.html:208
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10056,17 +10056,17 @@ msgid ""
"input that makes the original program print {ph0}."
msgstr ""
-#: website/public/showcase/ctf/index.html:211
+#: website/public/showcase/ctf/index.html:213
msgctxt "page:showcase/ctf/index.html"
msgid "masked squares flag checker · Easy · Linux x86-64"
msgstr ""
-#: website/public/showcase/ctf/index.html:214
+#: website/public/showcase/ctf/index.html:216
msgctxt "page:showcase/ctf/index.html"
msgid "View the original challenge"
msgstr ""
-#: website/public/showcase/ctf/index.html:222
+#: website/public/showcase/ctf/index.html:224
msgctxt "page:showcase/ctf/index.html"
msgid "From a binary to a checked answer"
msgstr ""
@@ -10077,7 +10077,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
#. {ph5}:
-#: website/public/showcase/ctf/index.html:224
+#: website/public/showcase/ctf/index.html:226
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10091,7 +10091,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
#. {ph5}:
-#: website/public/showcase/ctf/index.html:232
+#: website/public/showcase/ctf/index.html:234
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10105,7 +10105,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
#. {ph5}:
-#: website/public/showcase/ctf/index.html:240
+#: website/public/showcase/ctf/index.html:242
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10113,19 +10113,19 @@ msgid ""
"solves the equations. REA captures the original program accepting the result.{ph5}"
msgstr ""
-#: website/public/showcase/ctf/index.html:249
+#: website/public/showcase/ctf/index.html:251
msgctxt "page:showcase/ctf/index.html"
msgid "The challenge is by joseph, published in DownUnderCTF's official repository."
msgstr ""
-#: website/public/showcase/ctf/index.html:257
+#: website/public/showcase/ctf/index.html:259
msgctxt "page:showcase/ctf/index.html"
msgid "In this case study"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/ctf/index.html:259
+#: website/public/showcase/ctf/index.html:261
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Find the checking code{ph1}"
@@ -10133,7 +10133,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/ctf/index.html:260
+#: website/public/showcase/ctf/index.html:262
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Read one mask{ph1}"
@@ -10141,7 +10141,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/ctf/index.html:261
+#: website/public/showcase/ctf/index.html:263
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Assembly to readable code{ph1}"
@@ -10149,7 +10149,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/ctf/index.html:262
+#: website/public/showcase/ctf/index.html:264
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Solve the equations{ph1}"
@@ -10157,7 +10157,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/ctf/index.html:263
+#: website/public/showcase/ctf/index.html:265
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Check the answer{ph1}"
@@ -10165,20 +10165,20 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/ctf/index.html:264
+#: website/public/showcase/ctf/index.html:266
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Try it yourself{ph1}"
msgstr ""
-#: website/public/showcase/ctf/index.html:269
+#: website/public/showcase/ctf/index.html:271
msgctxt "page:showcase/ctf/index.html"
msgid "Find the checking code"
msgstr ""
#. {ph0}: Correct!
#. {ph1}: Incorrect!
-#: website/public/showcase/ctf/index.html:270
+#: website/public/showcase/ctf/index.html:272
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10194,15 +10194,15 @@ msgstr ""
#. {ph5}:
#. {ph6}:
#. {ph7}:
-#: website/public/showcase/ctf/index.html:277
+#: website/public/showcase/ctf/index.html:279
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
-#: website/public/showcase/ctf/index.html:282 website/public/showcase/ctf/index.html:501
-#: website/public/showcase/ctf/index.html:525 website/public/showcase/ctf/index.html:595
-#: website/public/showcase/ctf/index.html:742
+#: website/public/showcase/ctf/index.html:284 website/public/showcase/ctf/index.html:503
+#: website/public/showcase/ctf/index.html:527 website/public/showcase/ctf/index.html:597
+#: website/public/showcase/ctf/index.html:744
msgctxt "page:showcase/ctf/index.html"
msgid "Copy"
msgstr ""
@@ -10213,7 +10213,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
-#: website/public/showcase/ctf/index.html:291
+#: website/public/showcase/ctf/index.html:293
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10221,48 +10221,48 @@ msgid ""
"checks work, then verify the answer with the original program.{ph3}{ph4}{ph5}"
msgstr ""
-#: website/public/showcase/ctf/index.html:300
+#: website/public/showcase/ctf/index.html:302
msgctxt "page:showcase/ctf/index.html"
msgid ""
"An example prompt, with the downloaded challenge available locally and a native "
"analysis provider connected."
msgstr ""
-#: website/public/showcase/ctf/index.html:306
+#: website/public/showcase/ctf/index.html:308
msgctxt "page:showcase/ctf/index.html"
msgid "Follow the input prompt to its function"
msgstr ""
-#: website/public/showcase/ctf/index.html:309 website/public/showcase/ctf/index.html:345
+#: website/public/showcase/ctf/index.html:311 website/public/showcase/ctf/index.html:347
msgctxt "page:showcase/ctf/index.html"
msgid "Agent → REA"
msgstr ""
-#: website/public/showcase/ctf/index.html:325
+#: website/public/showcase/ctf/index.html:327
msgctxt "page:showcase/ctf/index.html"
msgid "REA → agent · selected results"
msgstr ""
-#: website/public/showcase/ctf/index.html:335
+#: website/public/showcase/ctf/index.html:337
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The reference gives the agent a place to investigate, even though the executable's "
"original function names have been removed."
msgstr ""
-#: website/public/showcase/ctf/index.html:342
+#: website/public/showcase/ctf/index.html:344
msgctxt "page:showcase/ctf/index.html"
msgid "Read the checker and its two helpers"
msgstr ""
-#: website/public/showcase/ctf/index.html:357
+#: website/public/showcase/ctf/index.html:359
msgctxt "page:showcase/ctf/index.html"
msgid "REA → agent · selected instructions"
msgstr ""
#. {ph0}: 0x18
#. {ph1}: 0x270
-#: website/public/showcase/ctf/index.html:370
+#: website/public/showcase/ctf/index.html:372
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10271,19 +10271,19 @@ msgid ""
"across {ph1} bytes give 26 masks."
msgstr ""
-#: website/public/showcase/ctf/index.html:378
+#: website/public/showcase/ctf/index.html:380
msgctxt "page:showcase/ctf/index.html"
msgid ""
"These are selected results from a fresh REA analysis. The local target path is "
"shortened for display; addresses refer to REA's imported image."
msgstr ""
-#: website/public/showcase/ctf/index.html:386
+#: website/public/showcase/ctf/index.html:388
msgctxt "page:showcase/ctf/index.html"
msgid "One check reveals one character"
msgstr ""
-#: website/public/showcase/ctf/index.html:387
+#: website/public/showcase/ctf/index.html:389
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The checker arranges the input in a 6×6 grid. A mask chooses which cells contribute to"
@@ -10293,23 +10293,23 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/ctf/index.html:407
+#: website/public/showcase/ctf/index.html:409
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "The seventh check selects just one position. {ph0}Open figure{ph1}."
msgstr ""
-#: website/public/showcase/ctf/index.html:414
+#: website/public/showcase/ctf/index.html:416
msgctxt "page:showcase/ctf/index.html"
msgid "Read the mask and its target from the binary"
msgstr ""
-#: website/public/showcase/ctf/index.html:420
+#: website/public/showcase/ctf/index.html:422
msgctxt "page:showcase/ctf/index.html"
msgid "Agent → REA · read_bytes"
msgstr ""
-#: website/public/showcase/ctf/index.html:427
+#: website/public/showcase/ctf/index.html:429
msgctxt "page:showcase/ctf/index.html"
msgid "REA → agent · seventh entries"
msgstr ""
@@ -10318,7 +10318,7 @@ msgstr ""
#. {ph1}: eb
#. {ph2}: code[21] = 55
#. {ph3}: 7
-#: website/public/showcase/ctf/index.html:436
+#: website/public/showcase/ctf/index.html:438
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10327,12 +10327,12 @@ msgid ""
"{ph2}, so that character is {ph3}."
msgstr ""
-#: website/public/showcase/ctf/index.html:445
+#: website/public/showcase/ctf/index.html:447
msgctxt "page:showcase/ctf/index.html"
msgid "From instructions to a readable check"
msgstr ""
-#: website/public/showcase/ctf/index.html:446
+#: website/public/showcase/ctf/index.html:448
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Select a step to connect the summing helper and its caller to the same rule in C."
@@ -10340,7 +10340,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/ctf/index.html:456
+#: website/public/showcase/ctf/index.html:458
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}01{ph1} Start"
@@ -10348,7 +10348,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/ctf/index.html:464
+#: website/public/showcase/ctf/index.html:466
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}02{ph1} Select"
@@ -10356,7 +10356,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/ctf/index.html:472
+#: website/public/showcase/ctf/index.html:474
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}03{ph1} Add"
@@ -10364,7 +10364,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/ctf/index.html:480
+#: website/public/showcase/ctf/index.html:482
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}04{ph1} Advance"
@@ -10372,18 +10372,18 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/ctf/index.html:488
+#: website/public/showcase/ctf/index.html:490
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}05{ph1} Compare"
msgstr ""
-#: website/public/showcase/ctf/index.html:500
+#: website/public/showcase/ctf/index.html:502
msgctxt "page:showcase/ctf/index.html"
msgid "REA · selected original instructions"
msgstr ""
-#: website/public/showcase/ctf/index.html:524
+#: website/public/showcase/ctf/index.html:526
msgctxt "page:showcase/ctf/index.html"
msgid "Readable C · one-check summary"
msgstr ""
@@ -10391,7 +10391,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
#. {ph2}: ECX
-#: website/public/showcase/ctf/index.html:553
+#: website/public/showcase/ctf/index.html:555
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum."
@@ -10399,7 +10399,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/ctf/index.html:557
+#: website/public/showcase/ctf/index.html:559
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10409,7 +10409,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/ctf/index.html:561
+#: website/public/showcase/ctf/index.html:563
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10419,7 +10419,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/ctf/index.html:565
+#: website/public/showcase/ctf/index.html:567
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10431,7 +10431,7 @@ msgstr ""
#. {ph1}:
#. {ph2}: EAX
#. {ph3}: Incorrect!
-#: website/public/showcase/ctf/index.html:570
+#: website/public/showcase/ctf/index.html:572
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10439,19 +10439,19 @@ msgid ""
" mismatch jumps to {ph3}."
msgstr ""
-#: website/public/showcase/ctf/index.html:577
+#: website/public/showcase/ctf/index.html:579
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The instructions come from the summing helper and its caller. The C is an explanatory "
"summary with descriptive names and a flattened 36-cell loop."
msgstr ""
-#: website/public/showcase/ctf/index.html:585
+#: website/public/showcase/ctf/index.html:587
msgctxt "page:showcase/ctf/index.html"
msgid "Solve the 26 equations"
msgstr ""
-#: website/public/showcase/ctf/index.html:586
+#: website/public/showcase/ctf/index.html:588
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Most masks select several cells. For example, the first check adds 16 character codes "
@@ -10459,13 +10459,13 @@ msgid ""
"Python script can solve together."
msgstr ""
-#: website/public/showcase/ctf/index.html:594
+#: website/public/showcase/ctf/index.html:596
msgctxt "page:showcase/ctf/index.html"
msgid "Python · solver excerpt"
msgstr ""
#. {ph0}: DUCTF{…}
-#: website/public/showcase/ctf/index.html:622
+#: website/public/showcase/ctf/index.html:624
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10474,19 +10474,19 @@ msgid ""
"braces. The complete download includes all 26 masks and targets."
msgstr ""
-#: website/public/showcase/ctf/index.html:628
+#: website/public/showcase/ctf/index.html:630
msgctxt "page:showcase/ctf/index.html"
msgid "Download the complete solver"
msgstr ""
-#: website/public/showcase/ctf/index.html:634
+#: website/public/showcase/ctf/index.html:636
msgctxt "page:showcase/ctf/index.html"
msgid "Check the answer with the original program"
msgstr ""
#. {ph0}: z
#. {ph1}: y
-#: website/public/showcase/ctf/index.html:635
+#: website/public/showcase/ctf/index.html:637
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10495,71 +10495,71 @@ msgid ""
"of 1441, and the program rejects it."
msgstr ""
-#: website/public/showcase/ctf/index.html:645
+#: website/public/showcase/ctf/index.html:647
msgctxt "page:showcase/ctf/index.html"
msgid "Input"
msgstr ""
-#: website/public/showcase/ctf/index.html:646
+#: website/public/showcase/ctf/index.html:648
msgctxt "page:showcase/ctf/index.html"
msgid "Observed output"
msgstr ""
-#: website/public/showcase/ctf/index.html:647
+#: website/public/showcase/ctf/index.html:649
msgctxt "page:showcase/ctf/index.html"
msgid "Exit code"
msgstr ""
-#: website/public/showcase/ctf/index.html:652
+#: website/public/showcase/ctf/index.html:654
msgctxt "page:showcase/ctf/index.html"
msgid "Solver's flag"
msgstr ""
-#: website/public/showcase/ctf/index.html:657
+#: website/public/showcase/ctf/index.html:659
msgctxt "page:showcase/ctf/index.html"
msgid "One character changed"
msgstr ""
-#: website/public/showcase/ctf/index.html:665
+#: website/public/showcase/ctf/index.html:667
msgctxt "page:showcase/ctf/index.html"
msgid "Show the recovered flag and captured output"
msgstr ""
-#: website/public/showcase/ctf/index.html:668
+#: website/public/showcase/ctf/index.html:670
msgctxt "page:showcase/ctf/index.html"
msgid "REA · original program output"
msgstr ""
-#: website/public/showcase/ctf/index.html:669
+#: website/public/showcase/ctf/index.html:671
msgctxt "page:showcase/ctf/index.html"
msgid "Copy flag"
msgstr ""
-#: website/public/showcase/ctf/index.html:681
+#: website/public/showcase/ctf/index.html:683
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The recovered value also matches the flag in the organizers' published challenge "
"metadata, checked after solving the binary."
msgstr ""
-#: website/public/showcase/ctf/index.html:687
+#: website/public/showcase/ctf/index.html:689
msgctxt "page:showcase/ctf/index.html"
msgid "Source, target identity and analysis details"
msgstr ""
-#: website/public/showcase/ctf/index.html:688
+#: website/public/showcase/ctf/index.html:690
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 with Ghidra"
" 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248 bytes."
msgstr ""
-#: website/public/showcase/ctf/index.html:695
+#: website/public/showcase/ctf/index.html:697
msgctxt "page:showcase/ctf/index.html"
msgid "Original executable · SHA-256"
msgstr ""
-#: website/public/showcase/ctf/index.html:699
+#: website/public/showcase/ctf/index.html:701
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The string references, functions and constants were inspected before reading the "
@@ -10578,7 +10578,7 @@ msgstr ""
#. {ph4}:
#. {ph5}:
-#: website/public/showcase/ctf/index.html:704
+#: website/public/showcase/ctf/index.html:706
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10586,35 +10586,35 @@ msgid ""
"· {ph4}REA evidence notes{ph5}"
msgstr ""
-#: website/public/showcase/ctf/index.html:724
+#: website/public/showcase/ctf/index.html:726
msgctxt "page:showcase/ctf/index.html"
msgid "Try it yourself"
msgstr ""
-#: website/public/showcase/ctf/index.html:725
+#: website/public/showcase/ctf/index.html:727
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Download the original challenge and the solver into one folder. Use the prompt above "
"to investigate with your agent, or run the included script."
msgstr ""
-#: website/public/showcase/ctf/index.html:731
+#: website/public/showcase/ctf/index.html:733
msgctxt "page:showcase/ctf/index.html"
msgid "Download the original challenge"
msgstr ""
-#: website/public/showcase/ctf/index.html:735
+#: website/public/showcase/ctf/index.html:737
msgctxt "page:showcase/ctf/index.html"
msgid "Download solver"
msgstr ""
-#: website/public/showcase/ctf/index.html:741
+#: website/public/showcase/ctf/index.html:743
msgctxt "page:showcase/ctf/index.html"
msgid "Terminal · solve and run"
msgstr ""
#. {ph0}: z3-solver
-#: website/public/showcase/ctf/index.html:758
+#: website/public/showcase/ctf/index.html:760
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
@@ -10622,7 +10622,7 @@ msgid ""
"Python and {ph0}. Running the original executable needs Linux x86-64."
msgstr ""
-#: website/public/showcase/ctf/index.html:763
+#: website/public/showcase/ctf/index.html:765
msgctxt "page:showcase/ctf/index.html"
msgid "Set up REA with your coding agent"
msgstr ""
@@ -10639,27 +10639,27 @@ msgid ""
"functions, extract the masks and compare a recovered flag with the original program."
msgstr ""
-#: website/public/showcase/ctf/index.html:256
+#: website/public/showcase/ctf/index.html:258
msgctxt "page:showcase/ctf/index.html"
msgid "On this page"
msgstr ""
-#: website/public/showcase/ctf/index.html:267
+#: website/public/showcase/ctf/index.html:269
msgctxt "page:showcase/ctf/index.html"
msgid "CTF flag-checker case study"
msgstr ""
-#: website/public/showcase/ctf/index.html:282
+#: website/public/showcase/ctf/index.html:284
msgctxt "page:showcase/ctf/index.html"
msgid "Copy CTF example prompt"
msgstr ""
-#: website/public/showcase/ctf/index.html:393
+#: website/public/showcase/ctf/index.html:395
msgctxt "page:showcase/ctf/index.html"
msgid "CTF mask equation; scroll horizontally on smaller screens"
msgstr ""
-#: website/public/showcase/ctf/index.html:399
+#: website/public/showcase/ctf/index.html:401
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The seventh mask skips 21 cells, selects position 21, then skips 14. Only that cell "
@@ -10667,42 +10667,42 @@ msgid ""
"is 7."
msgstr ""
-#: website/public/showcase/ctf/index.html:451
+#: website/public/showcase/ctf/index.html:453
msgctxt "page:showcase/ctf/index.html"
msgid "Follow the CTF check"
msgstr ""
-#: website/public/showcase/ctf/index.html:501
+#: website/public/showcase/ctf/index.html:503
msgctxt "page:showcase/ctf/index.html"
msgid "Copy CTF assembly"
msgstr ""
-#: website/public/showcase/ctf/index.html:525
+#: website/public/showcase/ctf/index.html:527
msgctxt "page:showcase/ctf/index.html"
msgid "Copy readable CTF check"
msgstr ""
-#: website/public/showcase/ctf/index.html:595
+#: website/public/showcase/ctf/index.html:597
msgctxt "page:showcase/ctf/index.html"
msgid "Copy CTF solver excerpt"
msgstr ""
-#: website/public/showcase/ctf/index.html:669
+#: website/public/showcase/ctf/index.html:671
msgctxt "page:showcase/ctf/index.html"
msgid "Copy recovered flag"
msgstr ""
-#: website/public/showcase/ctf/index.html:742
+#: website/public/showcase/ctf/index.html:744
msgctxt "page:showcase/ctf/index.html"
msgid "Copy CTF solver commands"
msgstr ""
-#: website/public/showcase/ctf/index.html:786
+#: website/public/showcase/ctf/index.html:788
msgctxt "page:showcase/ctf/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:111
+#: website/public/showcase/dx-ball/index.html:113
msgctxt "page:showcase/dx-ball/index.html"
msgid "Skip to content"
msgstr ""
@@ -10711,39 +10711,39 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/dx-ball/index.html:201
+#: website/public/showcase/dx-ball/index.html:203
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:204
+#: website/public/showcase/dx-ball/index.html:206
msgctxt "page:showcase/dx-ball/index.html"
msgid "Case study · DX-Ball 1.07"
msgstr ""
#. {ph0}: 0x406400
#. {ph1}: FUN_00406400(void)
#. {ph2}: __ftol()
-#: website/public/showcase/dx-ball/index.html:325
+#: website/public/showcase/dx-ball/index.html:327
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
@@ -10909,48 +10909,48 @@ msgid ""
"discrepancy gave the agent a concrete reason to keep investigating."
msgstr ""
-#: website/public/showcase/dx-ball/index.html:333
+#: website/public/showcase/dx-ball/index.html:335
msgctxt "page:showcase/dx-ball/index.html"
msgid "The first decompiler view"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:336
+#: website/public/showcase/dx-ball/index.html:338
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA result · pseudocode excerpt"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:346
+#: website/public/showcase/dx-ball/index.html:348
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The output shows a conversion call. Reading the instructions below reveals the input "
"and the calculation feeding that call."
msgstr ""
-#: website/public/showcase/dx-ball/index.html:352
+#: website/public/showcase/dx-ball/index.html:354
msgctxt "page:showcase/dx-ball/index.html"
msgid "Three questions answered through REA"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:355
+#: website/public/showcase/dx-ball/index.html:357
msgctxt "page:showcase/dx-ball/index.html"
msgid "Recover the missing input"
msgstr ""
#. {ph0}: analyze_function
-#: website/public/showcase/dx-ball/index.html:359
-#: website/public/showcase/dx-ball/index.html:383
+#: website/public/showcase/dx-ball/index.html:361
+#: website/public/showcase/dx-ball/index.html:385
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "Agent → REA · {ph0}"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:365
+#: website/public/showcase/dx-ball/index.html:367
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA → agent · instruction excerpt"
msgstr ""
#. {ph0}: [EBP+8]
-#: website/public/showcase/dx-ball/index.html:372
+#: website/public/showcase/dx-ball/index.html:374
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
@@ -10958,19 +10958,19 @@ msgid ""
"{ph0} exposes the integer input missing from the decompiler view."
msgstr ""
-#: website/public/showcase/dx-ball/index.html:379
+#: website/public/showcase/dx-ball/index.html:381
msgctxt "page:showcase/dx-ball/index.html"
msgid "Follow the caller to understand the input"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:389
+#: website/public/showcase/dx-ball/index.html:391
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA → agent · caller excerpt"
msgstr ""
#. {ph0}: tile_x
#. {ph1}: 20 + 30 × tile_x
-#: website/public/showcase/dx-ball/index.html:396
+#: website/public/showcase/dx-ball/index.html:398
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
@@ -10978,36 +10978,36 @@ msgid ""
" by 30; adding 20 gives the brick's screen coordinate, {ph1}."
msgstr ""
-#: website/public/showcase/dx-ball/index.html:403
+#: website/public/showcase/dx-ball/index.html:405
msgctxt "page:showcase/dx-ball/index.html"
msgid "Read the values behind the memory addresses"
msgstr ""
#. {ph0}: read_bytes
-#: website/public/showcase/dx-ball/index.html:407
+#: website/public/showcase/dx-ball/index.html:409
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "Agent → REA · two {ph0} requests"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:417
+#: website/public/showcase/dx-ball/index.html:419
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA byte results · decoded as doubles"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:424
+#: website/public/showcase/dx-ball/index.html:426
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The returned bytes establish the two arithmetic constants and initial pan scale. The "
"agent now has the values needed for the C expression."
msgstr ""
-#: website/public/showcase/dx-ball/index.html:432
+#: website/public/showcase/dx-ball/index.html:434
msgctxt "page:showcase/dx-ball/index.html"
msgid "From REA's findings to C"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:433
+#: website/public/showcase/dx-ball/index.html:435
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"Follow the five steps below. Each selection highlights the original instructions and "
@@ -11016,7 +11016,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/dx-ball/index.html:443
+#: website/public/showcase/dx-ball/index.html:445
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}01{ph1} Input"
@@ -11024,7 +11024,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/dx-ball/index.html:451
+#: website/public/showcase/dx-ball/index.html:453
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}02{ph1} Multiply"
@@ -11032,7 +11032,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/dx-ball/index.html:459
+#: website/public/showcase/dx-ball/index.html:461
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}03{ph1} Subtract"
@@ -11040,7 +11040,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/dx-ball/index.html:467
+#: website/public/showcase/dx-ball/index.html:469
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}04{ph1} Scale"
@@ -11048,18 +11048,18 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/dx-ball/index.html:475
+#: website/public/showcase/dx-ball/index.html:477
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}05{ph1} Return"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:487
+#: website/public/showcase/dx-ball/index.html:489
msgctxt "page:showcase/dx-ball/index.html"
msgid "Original x86 · excerpt"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:508
+#: website/public/showcase/dx-ball/index.html:510
msgctxt "page:showcase/dx-ball/index.html"
msgid "Reconstructed C"
msgstr ""
@@ -11069,7 +11069,7 @@ msgstr ""
#. {ph2}: [EBP+8]
#. {ph3}: FILD
#. {ph4}: x
-#: website/public/showcase/dx-ball/index.html:535
+#: website/public/showcase/dx-ball/index.html:537
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
@@ -11084,7 +11084,7 @@ msgstr ""
#. {ph3}: 0x420068
#. {ph4}: read_bytes
#. {ph5}: 1.5625
-#: website/public/showcase/dx-ball/index.html:542
+#: website/public/showcase/dx-ball/index.html:544
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
@@ -11098,7 +11098,7 @@ msgstr ""
#. {ph3}: 0x420070
#. {ph4}: 500.0
#. {ph5}: 320
-#: website/public/showcase/dx-ball/index.html:548
+#: website/public/showcase/dx-ball/index.html:550
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
@@ -11112,7 +11112,7 @@ msgstr ""
#. {ph3}: 0x4210a0
#. {ph4}: dxball_pan_scale
#. {ph5}: 1.0
-#: website/public/showcase/dx-ball/index.html:554
+#: website/public/showcase/dx-ball/index.html:556
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
@@ -11126,7 +11126,7 @@ msgstr ""
#. {ph2}: 0x406430
#. {ph3}: __ftol
#. {ph4}: DxBallInt
-#: website/public/showcase/dx-ball/index.html:561
+#: website/public/showcase/dx-ball/index.html:563
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
@@ -11135,30 +11135,30 @@ msgid ""
"returned value."
msgstr ""
-#: website/public/showcase/dx-ball/index.html:570
+#: website/public/showcase/dx-ball/index.html:572
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The assembly excerpt selects the input, arithmetic and return instructions. The full "
"listing below also includes the intervening stores and function setup and cleanup."
msgstr ""
-#: website/public/showcase/dx-ball/index.html:576
+#: website/public/showcase/dx-ball/index.html:578
msgctxt "page:showcase/dx-ball/index.html"
msgid "Full assembly and supporting evidence"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:579
+#: website/public/showcase/dx-ball/index.html:581
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA result · 0x406400–0x40643e"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:613
+#: website/public/showcase/dx-ball/index.html:615
msgctxt "page:showcase/dx-ball/index.html"
msgid "What the caller supplies"
msgstr ""
#. {ph0}: 0x411f40
-#: website/public/showcase/dx-ball/index.html:614
+#: website/public/showcase/dx-ball/index.html:616
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
@@ -11166,54 +11166,54 @@ msgid ""
" it before the call:"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:628
+#: website/public/showcase/dx-ball/index.html:630
msgctxt "page:showcase/dx-ball/index.html"
msgid "What the data reads establish"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:631
+#: website/public/showcase/dx-ball/index.html:633
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA byte reads, decoded as little-endian doubles"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:636
+#: website/public/showcase/dx-ball/index.html:638
msgctxt "page:showcase/dx-ball/index.html"
msgid "Address"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:637
+#: website/public/showcase/dx-ball/index.html:639
msgctxt "page:showcase/dx-ball/index.html"
msgid "Value"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:638
+#: website/public/showcase/dx-ball/index.html:640
msgctxt "page:showcase/dx-ball/index.html"
msgid "Used for"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:645
+#: website/public/showcase/dx-ball/index.html:647
msgctxt "page:showcase/dx-ball/index.html"
msgid "First multiplication"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:650
+#: website/public/showcase/dx-ball/index.html:652
msgctxt "page:showcase/dx-ball/index.html"
msgid "Subtraction"
msgstr ""
#. {ph0}: 1.0
-#: website/public/showcase/dx-ball/index.html:654
+#: website/public/showcase/dx-ball/index.html:656
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0} initially"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:655
+#: website/public/showcase/dx-ball/index.html:657
msgctxt "page:showcase/dx-ball/index.html"
msgid "Stored pan scale"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:660
+#: website/public/showcase/dx-ball/index.html:662
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked "
@@ -11226,31 +11226,31 @@ msgstr ""
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/dx-ball/index.html:665
+#: website/public/showcase/dx-ball/index.html:667
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence references{ph3}"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:679
+#: website/public/showcase/dx-ball/index.html:681
msgctxt "page:showcase/dx-ball/index.html"
msgid "Checking the recovered function"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:680
+#: website/public/showcase/dx-ball/index.html:682
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The recovered function passes two checks: its return values match the original, and "
"its compiled bytes match the executable."
msgstr ""
-#: website/public/showcase/dx-ball/index.html:686
+#: website/public/showcase/dx-ball/index.html:688
msgctxt "page:showcase/dx-ball/index.html"
msgid "3,205 behavior cases"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:687
+#: website/public/showcase/dx-ball/index.html:689
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The tests execute the original x86 function and compare its return value with the "
@@ -11258,12 +11258,12 @@ msgid ""
"0.5, 1, 20 and −1."
msgstr ""
-#: website/public/showcase/dx-ball/index.html:695
+#: website/public/showcase/dx-ball/index.html:697
msgctxt "page:showcase/dx-ball/index.html"
msgid "63 matching bytes"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:696
+#: website/public/showcase/dx-ball/index.html:698
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay matches "
@@ -11271,7 +11271,7 @@ msgid ""
"referenced constants."
msgstr ""
-#: website/public/showcase/dx-ball/index.html:704
+#: website/public/showcase/dx-ball/index.html:706
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 at the "
@@ -11282,18 +11282,18 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/dx-ball/index.html:710
+#: website/public/showcase/dx-ball/index.html:712
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}Read the compiler replay details{ph1}"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:719
+#: website/public/showcase/dx-ball/index.html:721
msgctxt "page:showcase/dx-ball/index.html"
msgid "Continue the investigation"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:720
+#: website/public/showcase/dx-ball/index.html:722
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The same approach is being used for particle updates, explosion queues and bonus "
@@ -11301,14 +11301,14 @@ msgid ""
" compare the implementation with the original."
msgstr ""
-#: website/public/showcase/dx-ball/index.html:726
+#: website/public/showcase/dx-ball/index.html:728
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"To inspect the sound-pan function yourself, follow the DX-Ball project's setup "
"instructions and supply its matching original target. Then run:"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:733
+#: website/public/showcase/dx-ball/index.html:735
msgctxt "page:showcase/dx-ball/index.html"
msgid "In the DX-Ball checkout"
msgstr ""
@@ -11317,7 +11317,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/dx-ball/index.html:747
+#: website/public/showcase/dx-ball/index.html:749
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local setup.{ph3}"
@@ -11327,7 +11327,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/dx-ball/index.html:752
+#: website/public/showcase/dx-ball/index.html:754
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
@@ -11340,7 +11340,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/dx-ball/index.html:759
+#: website/public/showcase/dx-ball/index.html:761
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
@@ -11348,7 +11348,7 @@ msgid ""
" and pixel writes.{ph3}"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:770
+#: website/public/showcase/dx-ball/index.html:772
msgctxt "page:showcase/dx-ball/index.html"
msgid "Start with your own target"
msgstr ""
@@ -11365,12 +11365,12 @@ msgid ""
"original-x86 tests and matching compiled function bytes."
msgstr ""
-#: website/public/showcase/dx-ball/index.html:213
+#: website/public/showcase/dx-ball/index.html:215
msgctxt "page:showcase/dx-ball/index.html"
msgid "DX-Ball sound-pan investigation; scroll horizontally on smaller screens"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:219
+#: website/public/showcase/dx-ball/index.html:221
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller supplies 20 "
@@ -11379,170 +11379,170 @@ msgid ""
" original x86 in 3,205 cases and by VC4.0 compiler replay matching 63 bytes."
msgstr ""
-#: website/public/showcase/dx-ball/index.html:237
+#: website/public/showcase/dx-ball/index.html:239
msgctxt "page:showcase/dx-ball/index.html"
msgid "On this page"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:246
+#: website/public/showcase/dx-ball/index.html:248
msgctxt "page:showcase/dx-ball/index.html"
msgid "DX-Ball reconstruction case study"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:297
+#: website/public/showcase/dx-ball/index.html:299
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy example prompt"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:438
+#: website/public/showcase/dx-ball/index.html:440
msgctxt "page:showcase/dx-ball/index.html"
msgid "Follow the sound-pan calculation"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:488
+#: website/public/showcase/dx-ball/index.html:490
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy original assembly excerpt"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:509
+#: website/public/showcase/dx-ball/index.html:511
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy sound-pan function"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:580
+#: website/public/showcase/dx-ball/index.html:582
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy complete sound-pan assembly"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:734
+#: website/public/showcase/dx-ball/index.html:736
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy DX-Ball analysis command"
msgstr ""
-#: website/public/showcase/dx-ball/index.html:794
+#: website/public/showcase/dx-ball/index.html:796
msgctxt "page:showcase/dx-ball/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/showcase/index.html:111
+#: website/public/showcase/index.html:113
msgctxt "page:showcase/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/index.html:201
+#: website/public/showcase/index.html:203
#, python-brace-format
msgctxt "page:showcase/index.html"
msgid "{ph0}Home{ph1} / Showcases"
msgstr ""
-#: website/public/showcase/index.html:202
+#: website/public/showcase/index.html:204
msgctxt "page:showcase/index.html"
msgid "REA case studies."
msgstr ""
-#: website/public/showcase/index.html:203
+#: website/public/showcase/index.html:205
msgctxt "page:showcase/index.html"
msgid ""
"Android, games, Electron and a CTF challenge, with code, figures and checked results."
msgstr ""
-#: website/public/showcase/index.html:210
+#: website/public/showcase/index.html:212
msgctxt "page:showcase/index.html"
msgid "Android · APK analysis"
msgstr ""
-#: website/public/showcase/index.html:212
+#: website/public/showcase/index.html:214
msgctxt "page:showcase/index.html"
msgid "How an authenticator generates a login code"
msgstr ""
-#: website/public/showcase/index.html:213
+#: website/public/showcase/index.html:215
msgctxt "page:showcase/index.html"
msgid ""
"Find Aegis's six-digit code calculation in its released APK. Trace the generating "
"methods with REA, then move a demo clock to see why the code changes every 30 seconds."
msgstr ""
-#: website/public/showcase/index.html:219
+#: website/public/showcase/index.html:221
msgctxt "page:showcase/index.html"
msgid "APK"
msgstr ""
-#: website/public/showcase/index.html:220
+#: website/public/showcase/index.html:222
msgctxt "page:showcase/index.html"
msgid "Generating code"
msgstr ""
-#: website/public/showcase/index.html:221
+#: website/public/showcase/index.html:223
msgctxt "page:showcase/index.html"
msgid "Recovered rule"
msgstr ""
-#: website/public/showcase/index.html:222
+#: website/public/showcase/index.html:224
msgctxt "page:showcase/index.html"
msgid "Adjustable clock"
msgstr ""
-#: website/public/showcase/index.html:224
+#: website/public/showcase/index.html:226
msgctxt "page:showcase/index.html"
msgid "Read the Android case study"
msgstr ""
-#: website/public/showcase/index.html:228
+#: website/public/showcase/index.html:230
msgctxt "page:showcase/index.html"
msgid "CTF · Native analysis"
msgstr ""
-#: website/public/showcase/index.html:230
+#: website/public/showcase/index.html:232
msgctxt "page:showcase/index.html"
msgid "Solve a CTF flag checker"
msgstr ""
-#: website/public/showcase/index.html:231
+#: website/public/showcase/index.html:233
msgctxt "page:showcase/index.html"
msgid ""
"Inspect an easy DownUnderCTF challenge with REA. Find its checking functions, turn "
"masks and sums into equations, then verify the solved flag with the original program."
msgstr ""
-#: website/public/showcase/index.html:237
+#: website/public/showcase/index.html:239
msgctxt "page:showcase/index.html"
msgid "Binary"
msgstr ""
-#: website/public/showcase/index.html:238
+#: website/public/showcase/index.html:240
msgctxt "page:showcase/index.html"
msgid "Checking code"
msgstr ""
-#: website/public/showcase/index.html:239
+#: website/public/showcase/index.html:241
msgctxt "page:showcase/index.html"
msgid "Equations"
msgstr ""
-#: website/public/showcase/index.html:240
+#: website/public/showcase/index.html:242
msgctxt "page:showcase/index.html"
msgid "Correct!"
msgstr ""
-#: website/public/showcase/index.html:242
+#: website/public/showcase/index.html:244
msgctxt "page:showcase/index.html"
msgid "Read the CTF case study"
msgstr ""
-#: website/public/showcase/index.html:246
+#: website/public/showcase/index.html:248
msgctxt "page:showcase/index.html"
msgid "Native · Reconstruction"
msgstr ""
-#: website/public/showcase/index.html:248
+#: website/public/showcase/index.html:250
msgctxt "page:showcase/index.html"
msgid "DX-Ball's sound-pan calculation"
msgstr ""
-#: website/public/showcase/index.html:249
+#: website/public/showcase/index.html:251
msgctxt "page:showcase/index.html"
msgid ""
"Recover a sound-pan calculation from a 1996 Windows game. REA's instructions, caller "
@@ -11550,42 +11550,42 @@ msgid ""
"original behavior and all 63 compiled bytes."
msgstr ""
-#: website/public/showcase/index.html:256
+#: website/public/showcase/index.html:258
msgctxt "page:showcase/index.html"
msgid "Executable"
msgstr ""
-#: website/public/showcase/index.html:257
+#: website/public/showcase/index.html:259
msgctxt "page:showcase/index.html"
msgid "REA findings"
msgstr ""
-#: website/public/showcase/index.html:258
+#: website/public/showcase/index.html:260
msgctxt "page:showcase/index.html"
msgid "Recovered C"
msgstr ""
-#: website/public/showcase/index.html:259
+#: website/public/showcase/index.html:261
msgctxt "page:showcase/index.html"
msgid "Validation"
msgstr ""
-#: website/public/showcase/index.html:261
+#: website/public/showcase/index.html:263
msgctxt "page:showcase/index.html"
msgid "Read the DX-Ball case study"
msgstr ""
-#: website/public/showcase/index.html:265
+#: website/public/showcase/index.html:267
msgctxt "page:showcase/index.html"
msgid "Electron · Feature tracing"
msgstr ""
-#: website/public/showcase/index.html:267
+#: website/public/showcase/index.html:269
msgctxt "page:showcase/index.html"
msgid "How Notion copies text and HTML"
msgstr ""
-#: website/public/showcase/index.html:268
+#: website/public/showcase/index.html:270
msgctxt "page:showcase/index.html"
msgid ""
"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC wrappers "
@@ -11593,42 +11593,42 @@ msgid ""
"connected to a copy."
msgstr ""
-#: website/public/showcase/index.html:274
+#: website/public/showcase/index.html:276
msgctxt "page:showcase/index.html"
msgid "Packaged app"
msgstr ""
-#: website/public/showcase/index.html:275
+#: website/public/showcase/index.html:277
msgctxt "page:showcase/index.html"
msgid "Exposed API"
msgstr ""
-#: website/public/showcase/index.html:276
+#: website/public/showcase/index.html:278
msgctxt "page:showcase/index.html"
msgid "IPC wrappers"
msgstr ""
-#: website/public/showcase/index.html:277
+#: website/public/showcase/index.html:279
msgctxt "page:showcase/index.html"
msgid "Clipboard"
msgstr ""
-#: website/public/showcase/index.html:279
+#: website/public/showcase/index.html:281
msgctxt "page:showcase/index.html"
msgid "Read the Notion case study"
msgstr ""
-#: website/public/showcase/index.html:283
+#: website/public/showcase/index.html:285
msgctxt "page:showcase/index.html"
msgid "PC-98 DOS · Reconstruction"
msgstr ""
-#: website/public/showcase/index.html:285
+#: website/public/showcase/index.html:287
msgctxt "page:showcase/index.html"
msgid "How TH04 aims a ring of bullets"
msgstr ""
-#: website/public/showcase/index.html:286
+#: website/public/showcase/index.html:288
msgctxt "page:showcase/index.html"
msgid ""
"Inspect the original 16-bit angle helper with REA. Match its multiply, divide and "
@@ -11636,42 +11636,42 @@ msgid ""
"player."
msgstr ""
-#: website/public/showcase/index.html:292
+#: website/public/showcase/index.html:294
msgctxt "page:showcase/index.html"
msgid "Original DOS code"
msgstr ""
-#: website/public/showcase/index.html:293
+#: website/public/showcase/index.html:295
msgctxt "page:showcase/index.html"
msgid "REA instructions"
msgstr ""
-#: website/public/showcase/index.html:294
+#: website/public/showcase/index.html:296
msgctxt "page:showcase/index.html"
msgid "Angle calculation"
msgstr ""
-#: website/public/showcase/index.html:295
+#: website/public/showcase/index.html:297
msgctxt "page:showcase/index.html"
msgid "Bullet ring"
msgstr ""
-#: website/public/showcase/index.html:297
+#: website/public/showcase/index.html:299
msgctxt "page:showcase/index.html"
msgid "Read the TH04 case study"
msgstr ""
-#: website/public/showcase/index.html:301
+#: website/public/showcase/index.html:303
msgctxt "page:showcase/index.html"
msgid "RL environments"
msgstr ""
-#: website/public/showcase/index.html:303
+#: website/public/showcase/index.html:305
msgctxt "page:showcase/index.html"
msgid "Build RL environments with REA"
msgstr ""
-#: website/public/showcase/index.html:304
+#: website/public/showcase/index.html:306
msgctxt "page:showcase/index.html"
msgid ""
"Record a web app session, turn its API into tools, and export an environment an AI "
@@ -11683,25 +11683,25 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/index.html:309
+#: website/public/showcase/index.html:311
#, python-brace-format
msgctxt "page:showcase/index.html"
msgid "{ph0}Read the guide{ph1} · {ph2}Watch the video{ph3}"
msgstr ""
-#: website/public/showcase/index.html:322
+#: website/public/showcase/index.html:324
msgctxt "page:showcase/index.html"
msgid "Step-by-step guides"
msgstr ""
-#: website/public/showcase/index.html:323
+#: website/public/showcase/index.html:325
msgctxt "page:showcase/index.html"
msgid ""
"The guides walk through a native calculation, an Electron export and a browser "
"request. Each starts with a prompt and a concrete target."
msgstr ""
-#: website/public/showcase/index.html:327
+#: website/public/showcase/index.html:329
msgctxt "page:showcase/index.html"
msgid "Read the guides"
msgstr ""
@@ -11718,12 +11718,12 @@ msgid ""
"DX-Ball, Notion, TH04 and a DownUnderCTF flag checker."
msgstr ""
-#: website/public/showcase/index.html:346
+#: website/public/showcase/index.html:348
msgctxt "page:showcase/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/showcase/notion/index.html:111
+#: website/public/showcase/notion/index.html:113
msgctxt "page:showcase/notion/index.html"
msgid "Skip to content"
msgstr ""
@@ -11732,37 +11732,37 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/notion/index.html:201
+#: website/public/showcase/notion/index.html:203
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion"
msgstr ""
-#: website/public/showcase/notion/index.html:204
+#: website/public/showcase/notion/index.html:206
msgctxt "page:showcase/notion/index.html"
msgid "Case study · Electron"
msgstr ""
#. {ph0}: notion:clipboard:write
-#: website/public/showcase/notion/index.html:245
+#: website/public/showcase/notion/index.html:247
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "One channel joins the two sides: {ph0}"
msgstr ""
-#: website/public/showcase/notion/index.html:249
+#: website/public/showcase/notion/index.html:251
msgctxt "page:showcase/notion/index.html"
msgid ""
"The packaged code uses the same channel in the preload and main process. Resolving the"
" wrappers reveals the Electron calls behind those names."
msgstr ""
-#: website/public/showcase/notion/index.html:258
+#: website/public/showcase/notion/index.html:260
msgctxt "page:showcase/notion/index.html"
msgid "In this case study"
msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/notion/index.html:260
+#: website/public/showcase/notion/index.html:262
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "{ph0}Follow the clipboard bridge{ph1}"
@@ -11856,7 +11856,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/notion/index.html:261
+#: website/public/showcase/notion/index.html:263
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "{ph0}Keeping a block's structure{ph1}"
@@ -11864,19 +11864,19 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/notion/index.html:262
+#: website/public/showcase/notion/index.html:264
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "{ph0}More examples and sources{ph1}"
msgstr ""
-#: website/public/showcase/notion/index.html:267
+#: website/public/showcase/notion/index.html:269
msgctxt "page:showcase/notion/index.html"
msgid "Where does the copy operation go?"
msgstr ""
#. {ph0}: clipboard.write
-#: website/public/showcase/notion/index.html:268
+#: website/public/showcase/notion/index.html:270
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
@@ -11892,17 +11892,17 @@ msgstr ""
#. {ph5}:
#. {ph6}:
#. {ph7}:
-#: website/public/showcase/notion/index.html:275
+#: website/public/showcase/notion/index.html:277
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
-#: website/public/showcase/notion/index.html:279
-#: website/public/showcase/notion/index.html:352
-#: website/public/showcase/notion/index.html:381
-#: website/public/showcase/notion/index.html:412
-#: website/public/showcase/notion/index.html:440
+#: website/public/showcase/notion/index.html:281
+#: website/public/showcase/notion/index.html:354
+#: website/public/showcase/notion/index.html:383
+#: website/public/showcase/notion/index.html:414
+#: website/public/showcase/notion/index.html:442
msgctxt "page:showcase/notion/index.html"
msgid "Copy"
msgstr ""
@@ -11913,7 +11913,7 @@ msgstr ""
#. {ph3}:
#. {ph4}:
-#: website/public/showcase/notion/index.html:288
+#: website/public/showcase/notion/index.html:290
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
@@ -11921,19 +11921,19 @@ msgid ""
"clipboard. Show the code at each step.{ph3}{ph4}{ph5}"
msgstr ""
-#: website/public/showcase/notion/index.html:296
+#: website/public/showcase/notion/index.html:298
msgctxt "page:showcase/notion/index.html"
msgid ""
"An example prompt with Notion's local application package available to your coding "
"agent."
msgstr ""
-#: website/public/showcase/notion/index.html:301
+#: website/public/showcase/notion/index.html:303
msgctxt "page:showcase/notion/index.html"
msgid "REA finds where to start reading"
msgstr ""
-#: website/public/showcase/notion/index.html:302
+#: website/public/showcase/notion/index.html:304
msgctxt "page:showcase/notion/index.html"
msgid ""
"Analyzing the tab preload with REA locates the API exposed to the page and the call "
@@ -11941,23 +11941,23 @@ msgid ""
"bundle:"
msgstr ""
-#: website/public/showcase/notion/index.html:308
+#: website/public/showcase/notion/index.html:310
msgctxt "page:showcase/notion/index.html"
msgid "REA findings → two places to open"
msgstr ""
-#: website/public/showcase/notion/index.html:311
+#: website/public/showcase/notion/index.html:313
msgctxt "page:showcase/notion/index.html"
msgid "Exposed page API"
msgstr ""
-#: website/public/showcase/notion/index.html:317
+#: website/public/showcase/notion/index.html:319
msgctxt "page:showcase/notion/index.html"
msgid "Renderer IPC call"
msgstr ""
#. {ph0}: analyze_javascript_application
-#: website/public/showcase/notion/index.html:323
+#: website/public/showcase/notion/index.html:325
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
@@ -11967,7 +11967,7 @@ msgstr ""
#. {ph0}: invokerInMain
#. {ph1}: notion:clipboard:write
-#: website/public/showcase/notion/index.html:330
+#: website/public/showcase/notion/index.html:332
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
@@ -11976,32 +11976,32 @@ msgid ""
" to look for in the main bundle. The four excerpts below show the route it connects."
msgstr ""
-#: website/public/showcase/notion/index.html:339
+#: website/public/showcase/notion/index.html:341
msgctxt "page:showcase/notion/index.html"
msgid "Four short pieces of code"
msgstr ""
-#: website/public/showcase/notion/index.html:340
+#: website/public/showcase/notion/index.html:342
msgctxt "page:showcase/notion/index.html"
msgid ""
"Simplified from the packaged JavaScript, with readable variable names. Unrelated "
"members are omitted."
msgstr ""
-#: website/public/showcase/notion/index.html:346
+#: website/public/showcase/notion/index.html:348
msgctxt "page:showcase/notion/index.html"
msgid "Start at the API exposed to the page"
msgstr ""
#. {ph0}: preload.js
-#: website/public/showcase/notion/index.html:349
+#: website/public/showcase/notion/index.html:351
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "tab_browser_view/{ph0} · API member"
msgstr ""
#. {ph0}: invokerInMain
-#: website/public/showcase/notion/index.html:368
+#: website/public/showcase/notion/index.html:370
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
@@ -12009,20 +12009,20 @@ msgid ""
"request leaves the page's process."
msgstr ""
-#: website/public/showcase/notion/index.html:375
+#: website/public/showcase/notion/index.html:377
msgctxt "page:showcase/notion/index.html"
msgid "Resolve the preload's wrapper"
msgstr ""
#. {ph0}: preload.js
-#: website/public/showcase/notion/index.html:378
+#: website/public/showcase/notion/index.html:380
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "tab_browser_view/{ph0} · IPC helper"
msgstr ""
#. {ph0}: notion:clipboard:write
-#: website/public/showcase/notion/index.html:398
+#: website/public/showcase/notion/index.html:400
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
@@ -12030,13 +12030,13 @@ msgid ""
"IPC. We can now look for {ph0} on the main-process side."
msgstr ""
-#: website/public/showcase/notion/index.html:406
+#: website/public/showcase/notion/index.html:408
msgctxt "page:showcase/notion/index.html"
msgid "Check how the receiver is registered"
msgstr ""
#. {ph0}: index.js
-#: website/public/showcase/notion/index.html:409
+#: website/public/showcase/notion/index.html:411
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "main/{ph0} · handler helper"
@@ -12044,7 +12044,7 @@ msgstr ""
#. {ph0}: addListener
#. {ph1}: ipcMain.handle
-#: website/public/showcase/notion/index.html:427
+#: website/public/showcase/notion/index.html:429
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
@@ -12052,19 +12052,19 @@ msgid ""
"for that channel."
msgstr ""
-#: website/public/showcase/notion/index.html:434
+#: website/public/showcase/notion/index.html:436
msgctxt "page:showcase/notion/index.html"
msgid "Find the write and its sender check"
msgstr ""
#. {ph0}: index.js
-#: website/public/showcase/notion/index.html:437
+#: website/public/showcase/notion/index.html:439
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "main/{ph0} · clipboard receiver"
msgstr ""
-#: website/public/showcase/notion/index.html:457
+#: website/public/showcase/notion/index.html:459
msgctxt "page:showcase/notion/index.html"
msgid ""
"This is the destination. After checking the sender, the handler passes the supplied "
@@ -12072,13 +12072,13 @@ msgid ""
"the exposed method to this call."
msgstr ""
-#: website/public/showcase/notion/index.html:468
+#: website/public/showcase/notion/index.html:470
msgctxt "page:showcase/notion/index.html"
msgid "How does a copied block keep its structure?"
msgstr ""
#. {ph0}: electronApi.clipboard.write
-#: website/public/showcase/notion/index.html:469
+#: website/public/showcase/notion/index.html:471
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
@@ -12086,100 +12086,100 @@ msgid ""
" and puts an ID in the copied HTML to connect them."
msgstr ""
-#: website/public/showcase/notion/index.html:475
+#: website/public/showcase/notion/index.html:477
msgctxt "page:showcase/notion/index.html"
msgid "HTML links to saved block data"
msgstr ""
-#: website/public/showcase/notion/index.html:479
+#: website/public/showcase/notion/index.html:481
msgctxt "page:showcase/notion/index.html"
msgid "Sent to the system clipboard"
msgstr ""
-#: website/public/showcase/notion/index.html:487
+#: website/public/showcase/notion/index.html:489
msgctxt "page:showcase/notion/index.html"
msgid "Saved locally by Notion"
msgstr ""
-#: website/public/showcase/notion/index.html:499
+#: website/public/showcase/notion/index.html:501
msgctxt "page:showcase/notion/index.html"
msgid "Read the HTML ID"
msgstr ""
-#: website/public/showcase/notion/index.html:500
+#: website/public/showcase/notion/index.html:502
msgctxt "page:showcase/notion/index.html"
msgid "Find the same local ID"
msgstr ""
-#: website/public/showcase/notion/index.html:501
+#: website/public/showcase/notion/index.html:503
msgctxt "page:showcase/notion/index.html"
msgid "Restore Notion block data"
msgstr ""
-#: website/public/showcase/notion/index.html:503
+#: website/public/showcase/notion/index.html:505
msgctxt "page:showcase/notion/index.html"
msgid ""
"Illustrative text and ID. The recorded module test restores the block data when IDs "
"match; a stale entry returns only text and HTML."
msgstr ""
-#: website/public/showcase/notion/index.html:509
+#: website/public/showcase/notion/index.html:511
msgctxt "page:showcase/notion/index.html"
msgid ""
"On paste, Notion looks for the HTML ID and checks it against the saved copy. Matching "
"IDs restore the block data."
msgstr ""
-#: website/public/showcase/notion/index.html:513
+#: website/public/showcase/notion/index.html:515
msgctxt "page:showcase/notion/index.html"
msgid "Clipboard format recorded from web assets cached on July 13, 2026."
msgstr ""
-#: website/public/showcase/notion/index.html:519
+#: website/public/showcase/notion/index.html:521
msgctxt "page:showcase/notion/index.html"
msgid "More examples and sources"
msgstr ""
-#: website/public/showcase/notion/index.html:521
+#: website/public/showcase/notion/index.html:523
msgctxt "page:showcase/notion/index.html"
msgid "Another example: Markdown tables"
msgstr ""
-#: website/public/showcase/notion/index.html:522
+#: website/public/showcase/notion/index.html:524
msgctxt "page:showcase/notion/index.html"
msgid ""
"Notion parses Markdown into block data. This example shows how a table becomes header "
"and data rows."
msgstr ""
-#: website/public/showcase/notion/index.html:527
+#: website/public/showcase/notion/index.html:529
msgctxt "page:showcase/notion/index.html"
msgid "A table through Notion's Markdown parser"
msgstr ""
-#: website/public/showcase/notion/index.html:532
+#: website/public/showcase/notion/index.html:534
msgctxt "page:showcase/notion/index.html"
msgid "Markdown input"
msgstr ""
-#: website/public/showcase/notion/index.html:539
+#: website/public/showcase/notion/index.html:541
msgctxt "page:showcase/notion/index.html"
msgid "Structured parser output · excerpt"
msgstr ""
-#: website/public/showcase/notion/index.html:548
+#: website/public/showcase/notion/index.html:550
msgctxt "page:showcase/notion/index.html"
msgid ""
"Recorded output from an extracted Markdown parser. The table becomes rows and cells."
msgstr ""
-#: website/public/showcase/notion/index.html:555
+#: website/public/showcase/notion/index.html:557
msgctxt "page:showcase/notion/index.html"
msgid "Another path: the offline SQLite connection"
msgstr ""
#. {ph0}: getSqliteMeta
-#: website/public/showcase/notion/index.html:556
+#: website/public/showcase/notion/index.html:558
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
@@ -12188,14 +12188,14 @@ msgid ""
"Subsequent statement batches and results travel over that port."
msgstr ""
-#: website/public/showcase/notion/index.html:562
+#: website/public/showcase/notion/index.html:564
msgctxt "page:showcase/notion/index.html"
msgid ""
"Following this handoff explains where the database work runs, and why tracing only the"
" initial IPC request misses the later conversation."
msgstr ""
-#: website/public/showcase/notion/index.html:569
+#: website/public/showcase/notion/index.html:571
msgctxt "page:showcase/notion/index.html"
msgid "Sources and how to read the excerpts"
msgstr ""
@@ -12203,7 +12203,7 @@ msgstr ""
#. {ph0}: app.asar
#. {ph1}: main/index.js
#. {ph2}: isNotionWebContents
-#: website/public/showcase/notion/index.html:570
+#: website/public/showcase/notion/index.html:572
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
@@ -12216,7 +12216,7 @@ msgstr ""
#. {ph1}: 58169
#. {ph2}: 736810
#. {ph3}: 422457
-#: website/public/showcase/notion/index.html:578
+#: website/public/showcase/notion/index.html:580
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
@@ -12226,7 +12226,7 @@ msgid ""
"describe those probes rather than a captured desktop UI session."
msgstr ""
-#: website/public/showcase/notion/index.html:586
+#: website/public/showcase/notion/index.html:588
msgctxt "page:showcase/notion/index.html"
msgid ""
"The REA result shown here is a focused analysis of the saved tab preload, recorded "
@@ -12236,7 +12236,7 @@ msgid ""
msgstr ""
#. {ph0}: 422457
-#: website/public/showcase/notion/index.html:593
+#: website/public/showcase/notion/index.html:595
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
@@ -12249,7 +12249,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/notion/index.html:601
+#: website/public/showcase/notion/index.html:603
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
@@ -12261,7 +12261,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/notion/index.html:608
+#: website/public/showcase/notion/index.html:610
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
@@ -12269,7 +12269,7 @@ msgid ""
"function.{ph3}"
msgstr ""
-#: website/public/showcase/notion/index.html:616
+#: website/public/showcase/notion/index.html:618
msgctxt "page:showcase/notion/index.html"
msgid "Analyze your own app"
msgstr ""
@@ -12286,52 +12286,52 @@ msgid ""
"process, with short code excerpts and a look at its rich clipboard format."
msgstr ""
-#: website/public/showcase/notion/index.html:257
+#: website/public/showcase/notion/index.html:259
msgctxt "page:showcase/notion/index.html"
msgid "On this page"
msgstr ""
-#: website/public/showcase/notion/index.html:265
+#: website/public/showcase/notion/index.html:267
msgctxt "page:showcase/notion/index.html"
msgid "Notion Electron case study"
msgstr ""
-#: website/public/showcase/notion/index.html:279
+#: website/public/showcase/notion/index.html:281
msgctxt "page:showcase/notion/index.html"
msgid "Copy Notion analysis prompt"
msgstr ""
-#: website/public/showcase/notion/index.html:352
+#: website/public/showcase/notion/index.html:354
msgctxt "page:showcase/notion/index.html"
msgid "Copy Notion preload excerpt"
msgstr ""
-#: website/public/showcase/notion/index.html:381
+#: website/public/showcase/notion/index.html:383
msgctxt "page:showcase/notion/index.html"
msgid "Copy Notion invoke wrapper excerpt"
msgstr ""
-#: website/public/showcase/notion/index.html:412
+#: website/public/showcase/notion/index.html:414
msgctxt "page:showcase/notion/index.html"
msgid "Copy Notion handler wrapper excerpt"
msgstr ""
-#: website/public/showcase/notion/index.html:440
+#: website/public/showcase/notion/index.html:442
msgctxt "page:showcase/notion/index.html"
msgid "Copy Notion clipboard receiver excerpt"
msgstr ""
-#: website/public/showcase/notion/index.html:495
+#: website/public/showcase/notion/index.html:497
msgctxt "page:showcase/notion/index.html"
msgid "Restoring rich clipboard data on paste"
msgstr ""
-#: website/public/showcase/notion/index.html:640
+#: website/public/showcase/notion/index.html:642
msgctxt "page:showcase/notion/index.html"
msgid "Back to top"
msgstr ""
-#: website/public/showcase/th04/index.html:111
+#: website/public/showcase/th04/index.html:113
msgctxt "page:showcase/th04/index.html"
msgid "Skip to content"
msgstr ""
@@ -12340,42 +12340,42 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/th04/index.html:201
+#: website/public/showcase/th04/index.html:203
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04"
msgstr ""
-#: website/public/showcase/th04/index.html:204
+#: website/public/showcase/th04/index.html:206
msgctxt "page:showcase/th04/index.html"
msgid "Case study · Touhou 4: Lotus Land Story"
msgstr ""
#. {ph0}: 0, 16, 32, …, 240
-#: website/public/showcase/th04/index.html:305
+#: website/public/showcase/th04/index.html:307
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -12555,7 +12555,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/th04/index.html:325
+#: website/public/showcase/th04/index.html:327
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -12563,12 +12563,12 @@ msgid ""
"template rotation 0. {ph0}Open figure{ph1}"
msgstr ""
-#: website/public/showcase/th04/index.html:333
+#: website/public/showcase/th04/index.html:335
msgctxt "page:showcase/th04/index.html"
msgid "The firing template in the recovered source"
msgstr ""
-#: website/public/showcase/th04/index.html:338
+#: website/public/showcase/th04/index.html:340
msgctxt "page:showcase/th04/index.html"
msgid "Elly's ring attack · source excerpt"
msgstr ""
@@ -12577,7 +12577,7 @@ msgstr ""
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/boss/elly_phase_ring16.cpp#L26"
#. >
#. {ph1}:
-#: website/public/showcase/th04/index.html:353
+#: website/public/showcase/th04/index.html:355
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -12585,13 +12585,13 @@ msgid ""
" attack's source{ph1}."
msgstr ""
-#: website/public/showcase/th04/index.html:364
+#: website/public/showcase/th04/index.html:366
msgctxt "page:showcase/th04/index.html"
msgid "What REA returns"
msgstr ""
#. {ph0}: bullet_velocity_and_angle_set()
-#: website/public/showcase/th04/index.html:365
+#: website/public/showcase/th04/index.html:367
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -12600,41 +12600,41 @@ msgid ""
"pattern."
msgstr ""
-#: website/public/showcase/th04/index.html:373
+#: website/public/showcase/th04/index.html:375
msgctxt "page:showcase/th04/index.html"
msgid "Check the DOS image before reading its code"
msgstr ""
-#: website/public/showcase/th04/index.html:376
+#: website/public/showcase/th04/index.html:378
msgctxt "page:showcase/th04/index.html"
msgid "Agent → REA"
msgstr ""
-#: website/public/showcase/th04/index.html:385
+#: website/public/showcase/th04/index.html:387
msgctxt "page:showcase/th04/index.html"
msgid "REA → agent · selected fields"
msgstr ""
-#: website/public/showcase/th04/index.html:394
+#: website/public/showcase/th04/index.html:396
msgctxt "page:showcase/th04/index.html"
msgid ""
"The check ties the loaded code and relocation records to the supplied executable. The "
"path above is shortened for display."
msgstr ""
-#: website/public/showcase/th04/index.html:400
+#: website/public/showcase/th04/index.html:402
msgctxt "page:showcase/th04/index.html"
msgid "Read the ring's multiply and divide"
msgstr ""
#. {ph0}: analyze_function
-#: website/public/showcase/th04/index.html:404
+#: website/public/showcase/th04/index.html:406
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "Agent → REA · {ph0}"
msgstr ""
-#: website/public/showcase/th04/index.html:410
+#: website/public/showcase/th04/index.html:412
msgctxt "page:showcase/th04/index.html"
msgid "REA → agent · instruction excerpt"
msgstr ""
@@ -12642,7 +12642,7 @@ msgstr ""
#. {ph0}: SI
#. {ph1}: DS:53AF
#. {ph2}: bullet_template.count
-#: website/public/showcase/th04/index.html:418
+#: website/public/showcase/th04/index.html:420
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -12651,22 +12651,22 @@ msgid ""
"sequence appears below."
msgstr ""
-#: website/public/showcase/th04/index.html:427
+#: website/public/showcase/th04/index.html:429
msgctxt "page:showcase/th04/index.html"
msgid "Find where the pattern turns toward the player"
msgstr ""
-#: website/public/showcase/th04/index.html:431
+#: website/public/showcase/th04/index.html:433
msgctxt "page:showcase/th04/index.html"
msgid "Same function result · aim excerpt"
msgstr ""
-#: website/public/showcase/th04/index.html:440
+#: website/public/showcase/th04/index.html:442
msgctxt "page:showcase/th04/index.html"
msgid "Corresponding maintained C++"
msgstr ""
-#: website/public/showcase/th04/index.html:448
+#: website/public/showcase/th04/index.html:450
msgctxt "page:showcase/th04/index.html"
msgid ""
"The instruction operands expose two coordinate differences and a direction helper. Its"
@@ -12674,12 +12674,12 @@ msgid ""
"readable; REA lets the agent check the original operations behind them."
msgstr ""
-#: website/public/showcase/th04/index.html:459
+#: website/public/showcase/th04/index.html:461
msgctxt "page:showcase/th04/index.html"
msgid "From assembly to readable C++"
msgstr ""
-#: website/public/showcase/th04/index.html:460
+#: website/public/showcase/th04/index.html:462
msgctxt "page:showcase/th04/index.html"
msgid ""
"Select a step to match the original instructions with the angle calculation. This "
@@ -12689,7 +12689,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/th04/index.html:471
+#: website/public/showcase/th04/index.html:473
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}01{ph1} Index"
@@ -12697,7 +12697,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/th04/index.html:479
+#: website/public/showcase/th04/index.html:481
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}02{ph1} Space"
@@ -12705,7 +12705,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/th04/index.html:487
+#: website/public/showcase/th04/index.html:489
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}03{ph1} Aim"
@@ -12713,7 +12713,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/th04/index.html:495
+#: website/public/showcase/th04/index.html:497
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}04{ph1} Rotate"
@@ -12721,18 +12721,18 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/th04/index.html:503
+#: website/public/showcase/th04/index.html:505
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}05{ph1} Store"
msgstr ""
-#: website/public/showcase/th04/index.html:515
+#: website/public/showcase/th04/index.html:517
msgctxt "page:showcase/th04/index.html"
msgid "REA · original 16-bit instructions"
msgstr ""
-#: website/public/showcase/th04/index.html:549
+#: website/public/showcase/th04/index.html:551
msgctxt "page:showcase/th04/index.html"
msgid "Readable C++ · aimed-ring summary"
msgstr ""
@@ -12740,7 +12740,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
#. {ph2}: SI
-#: website/public/showcase/th04/index.html:578
+#: website/public/showcase/th04/index.html:580
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -12752,7 +12752,7 @@ msgstr ""
#. {ph1}:
#. {ph2}: SHL AX,8
#. {ph3}: IDIV
-#: website/public/showcase/th04/index.html:583
+#: website/public/showcase/th04/index.html:585
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -12764,7 +12764,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
#. {ph2}: AX
-#: website/public/showcase/th04/index.html:590
+#: website/public/showcase/th04/index.html:592
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -12776,7 +12776,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
#. {ph2}: ADD AL,[0x53ad]
-#: website/public/showcase/th04/index.html:596
+#: website/public/showcase/th04/index.html:598
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -12788,7 +12788,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
#. {ph2}: AL
-#: website/public/showcase/th04/index.html:602
+#: website/public/showcase/th04/index.html:604
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -12797,7 +12797,7 @@ msgid ""
"surrounding source also converts this angle and speed into velocity."
msgstr ""
-#: website/public/showcase/th04/index.html:611
+#: website/public/showcase/th04/index.html:613
msgctxt "page:showcase/th04/index.html"
msgid ""
"The assembly selects the aimed-ring branch, aim calculation and final store. The C++ "
@@ -12805,17 +12805,17 @@ msgid ""
"the linked project."
msgstr ""
-#: website/public/showcase/th04/index.html:617
+#: website/public/showcase/th04/index.html:619
msgctxt "page:showcase/th04/index.html"
msgid "Read the maintained ring and aim source"
msgstr ""
-#: website/public/showcase/th04/index.html:620
+#: website/public/showcase/th04/index.html:622
msgctxt "page:showcase/th04/index.html"
msgid "Ring macro · TH04 branch, excerpt"
msgstr ""
-#: website/public/showcase/th04/index.html:630
+#: website/public/showcase/th04/index.html:632
msgctxt "page:showcase/th04/index.html"
msgid "Angle and velocity · source excerpt"
msgstr ""
@@ -12832,7 +12832,7 @@ msgstr ""
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/bullet/types.hpp#L6"
#. >
#. {ph5}:
-#: website/public/showcase/th04/index.html:646
+#: website/public/showcase/th04/index.html:648
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -12840,36 +12840,36 @@ msgid ""
"representation{ph5}"
msgstr ""
-#: website/public/showcase/th04/index.html:666
+#: website/public/showcase/th04/index.html:668
msgctxt "page:showcase/th04/index.html"
msgid "Checking the maintained source"
msgstr ""
-#: website/public/showcase/th04/index.html:667
+#: website/public/showcase/th04/index.html:669
msgctxt "page:showcase/th04/index.html"
msgid ""
"The TH04 project's recorded checks compile the bullet-generation code, including this "
"helper, with its pinned Turbo C++ 4.0J toolchain."
msgstr ""
-#: website/public/showcase/th04/index.html:674
+#: website/public/showcase/th04/index.html:676
msgctxt "page:showcase/th04/index.html"
msgid "2,139 matching bytes"
msgstr ""
-#: website/public/showcase/th04/index.html:675
+#: website/public/showcase/th04/index.html:677
msgctxt "page:showcase/th04/index.html"
msgid ""
"The compiled bullet-generation code matches a 2,139-byte section of the original "
"executable."
msgstr ""
-#: website/public/showcase/th04/index.html:681
+#: website/public/showcase/th04/index.html:683
msgctxt "page:showcase/th04/index.html"
msgid "Two clean builds"
msgstr ""
-#: website/public/showcase/th04/index.html:682
+#: website/public/showcase/th04/index.html:684
msgctxt "page:showcase/th04/index.html"
msgid ""
"Two separate builds produce the same matching bytes. The recorded input hashes match "
@@ -12880,65 +12880,65 @@ msgstr ""
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/docs/reconstruction/product/TH04_SEMANTIC_BULLET_GENERATION_V1236.md#validation"
#. >
#. {ph1}:
-#: website/public/showcase/th04/index.html:688
+#: website/public/showcase/th04/index.html:690
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}."
msgstr ""
-#: website/public/showcase/th04/index.html:696
+#: website/public/showcase/th04/index.html:698
msgctxt "page:showcase/th04/index.html"
msgid "Target identity and analysis scope"
msgstr ""
-#: website/public/showcase/th04/index.html:701
+#: website/public/showcase/th04/index.html:703
msgctxt "page:showcase/th04/index.html"
msgid "Original target"
msgstr ""
#. {ph0}: MAIN.EXE
-#: website/public/showcase/th04/index.html:702
+#: website/public/showcase/th04/index.html:704
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}, 156,258 bytes, DOS MZ"
msgstr ""
-#: website/public/showcase/th04/index.html:705
+#: website/public/showcase/th04/index.html:707
msgctxt "page:showcase/th04/index.html"
msgid "Helper entry"
msgstr ""
#. {ph0}: 0x2cfc8
-#: website/public/showcase/th04/index.html:706
+#: website/public/showcase/th04/index.html:708
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0} in REA's loaded image"
msgstr ""
-#: website/public/showcase/th04/index.html:709
+#: website/public/showcase/th04/index.html:711
msgctxt "page:showcase/th04/index.html"
msgid "Original file offset"
msgstr ""
#. {ph0}: 0x1e7c8
#. {ph1}: address_to_file_offset
-#: website/public/showcase/th04/index.html:710
+#: website/public/showcase/th04/index.html:712
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}, returned by {ph1}"
msgstr ""
-#: website/public/showcase/th04/index.html:716
+#: website/public/showcase/th04/index.html:718
msgctxt "page:showcase/th04/index.html"
msgid "Recorded code inspection"
msgstr ""
-#: website/public/showcase/th04/index.html:717
+#: website/public/showcase/th04/index.html:719
msgctxt "page:showcase/th04/index.html"
msgid "REA 4.1.0 · 7 October 2026"
msgstr ""
-#: website/public/showcase/th04/index.html:722
+#: website/public/showcase/th04/index.html:724
msgctxt "page:showcase/th04/index.html"
msgid ""
"Compiler checks cover the complete bullet-add code section, including this helper. "
@@ -12946,7 +12946,7 @@ msgid ""
msgstr ""
#. {ph0}: 0x1000
-#: website/public/showcase/th04/index.html:727
+#: website/public/showcase/th04/index.html:729
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -12956,7 +12956,7 @@ msgid ""
msgstr ""
#. {ph0}: 0d72e980
-#: website/public/showcase/th04/index.html:734
+#: website/public/showcase/th04/index.html:736
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -12967,19 +12967,19 @@ msgid ""
"open."
msgstr ""
-#: website/public/showcase/th04/index.html:742
+#: website/public/showcase/th04/index.html:744
msgctxt "page:showcase/th04/index.html"
msgid ""
"The figure illustrates the angle calculation. Full-game controls, timing and PC-98 "
"hardware behavior have separate runtime checks in the reconstruction project."
msgstr ""
-#: website/public/showcase/th04/index.html:751
+#: website/public/showcase/th04/index.html:753
msgctxt "page:showcase/th04/index.html"
msgid "The full TH04 reconstruction"
msgstr ""
-#: website/public/showcase/th04/index.html:752
+#: website/public/showcase/th04/index.html:754
msgctxt "page:showcase/th04/index.html"
msgid ""
"The project builds the game's four DOS products from maintained C++ and assembly. "
@@ -12989,7 +12989,7 @@ msgstr ""
#. {ph0}:
#. {ph1}:
-#: website/public/showcase/th04/index.html:758
+#: website/public/showcase/th04/index.html:760
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}Explore the TH04 repository{ph1}"
@@ -13001,7 +13001,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/th04/index.html:764
+#: website/public/showcase/th04/index.html:766
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -13015,7 +13015,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/th04/index.html:773
+#: website/public/showcase/th04/index.html:775
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -13029,7 +13029,7 @@ msgstr ""
#. {ph1}:
#. {ph2}:
#. {ph3}:
-#: website/public/showcase/th04/index.html:782
+#: website/public/showcase/th04/index.html:784
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
@@ -13049,27 +13049,27 @@ msgid ""
"C++ to see how a ring of bullets is spaced and aimed at the player."
msgstr ""
-#: website/public/showcase/th04/index.html:258
+#: website/public/showcase/th04/index.html:260
msgctxt "page:showcase/th04/index.html"
msgid "On this page"
msgstr ""
-#: website/public/showcase/th04/index.html:268
+#: website/public/showcase/th04/index.html:270
msgctxt "page:showcase/th04/index.html"
msgid "TH04 bullet-pattern case study"
msgstr ""
-#: website/public/showcase/th04/index.html:283
+#: website/public/showcase/th04/index.html:285
msgctxt "page:showcase/th04/index.html"
msgid "Copy TH04 example prompt"
msgstr ""
-#: website/public/showcase/th04/index.html:311
+#: website/public/showcase/th04/index.html:313
msgctxt "page:showcase/th04/index.html"
msgid "TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens"
msgstr ""
-#: website/public/showcase/th04/index.html:317
+#: website/public/showcase/th04/index.html:319
msgctxt "page:showcase/th04/index.html"
msgid ""
"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. Adding a player"
@@ -13078,27 +13078,27 @@ msgid ""
"degrees."
msgstr ""
-#: website/public/showcase/th04/index.html:339
+#: website/public/showcase/th04/index.html:341
msgctxt "page:showcase/th04/index.html"
msgid "Copy TH04 firing template"
msgstr ""
-#: website/public/showcase/th04/index.html:466
+#: website/public/showcase/th04/index.html:468
msgctxt "page:showcase/th04/index.html"
msgid "Follow the TH04 aimed-ring calculation"
msgstr ""
-#: website/public/showcase/th04/index.html:516
+#: website/public/showcase/th04/index.html:518
msgctxt "page:showcase/th04/index.html"
msgid "Copy TH04 assembly excerpt"
msgstr ""
-#: website/public/showcase/th04/index.html:550
+#: website/public/showcase/th04/index.html:552
msgctxt "page:showcase/th04/index.html"
msgid "Copy readable aimed-ring calculation"
msgstr ""
-#: website/public/showcase/th04/index.html:809
+#: website/public/showcase/th04/index.html:811
msgctxt "page:showcase/th04/index.html"
msgid "Back to top"
msgstr ""
diff --git a/website/public/blog/index.html b/website/public/blog/index.html
index ca8dc00fd8..ba5c58b758 100644
--- a/website/public/blog/index.html
+++ b/website/public/blog/index.html
@@ -59,6 +59,8 @@
+
+
@@ -124,7 +126,7 @@
Guides