<?xml version="1.0" encoding="UTF-8"?><rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Hex-Rays Blog</title><link>https://hex-rays.com/blog/</link><atom:link href="http://rss.144-124-237-35.sslip.io/hex-rays/news" rel="self" type="application/rss+xml"></atom:link><description>Hex-Rays Blog - Powered by AtomRSS</description><generator>AtomRSS</generator><webMaster>contact@atomgroup.dev (AtomRSS)</webMaster><language>en</language><image><url>https://hex-rays.com/hubfs/Ico-logo.png</url><title>Hex-Rays Blog</title><link>https://hex-rays.com/blog/</link></image><lastBuildDate>Sat, 08 Aug 2026 15:15:05 GMT</lastBuildDate><ttl>5</ttl><item><title>IDA 9.4 Release: A New Dyld Shared Cache, Swift Analysis, New Teams add-on, and more ...</title><description>&lt;span id=&quot;hs_cos_wrapper_post_body&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_rich_text&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;meta_field&quot; data-hs-cos-type=&quot;rich_text&quot;&gt;&lt;div class=&quot;hr-post&quot;&gt;
&lt;p&gt;After weeks of feedback and refinement from our beta testers, we are excited to introduce &lt;strong&gt;IDA 9.4&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Building on 9.3, this release reworks how IDA handles Apple&#39;s Dyld Shared Cache, teaches the decompiler to speak Swift, adds two brand-new processor modules, and reshapes everyday navigation with the new Pathfinder widget and a redesigned Xrefs Graph. There is also a change we are especially happy about for hobbyists: idalib, our headless automation library, now ships with IDA Home.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;Below is an overview of the key features and improvements in IDA 9.4. For the complete technical details, be sure to check out the official &lt;a href=&quot;https://docs.hex-rays.com/release-notes/9_4&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Apple Dyld Shared Cache, Reimagined&lt;/h2&gt;
&lt;p&gt;IDA 9.4 completely overhauls how it loads and analyzes Apple&#39;s Dyld Shared Caches, the bundles that pack the system frameworks on modern macOS and iOS.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dedicated widgets and specialized workflows make it far easier to work inside a shared cache, with seamless navigation between its components.&lt;/li&gt;
&lt;li&gt;Analysis is more accurate and more correct, and the loader keeps up with the latest formats, including the dyld shared caches introduced with iOS 27.&lt;/li&gt;
&lt;li&gt;Objective-C reversers benefit from recovered method prototypes and correct handling of the newer libobjcMsgSend selector stubs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Apple-ecosystem reversers should have a much easier time with the new system. See the &lt;a href=&quot;https://docs.hex-rays.com/9.4/core/disassembler/concepts/dsc-workflow&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;DSC workflow documentation&lt;/a&gt; for the concepts and workflows.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/image.png?width=688&amp;amp;height=586&amp;amp;name=image.png&quot; width=&quot;688&quot; height=&quot;586&quot; loading=&quot;lazy&quot; alt=&quot;image&quot; style=&quot;height: auto; max-width: 100%; width: 688px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/image.png?width=344&amp;amp;height=293&amp;amp;name=image.png 344w, https://hex-rays.com/hs-fs/hubfs/image.png?width=688&amp;amp;height=586&amp;amp;name=image.png 688w, https://hex-rays.com/hs-fs/hubfs/image.png?width=1032&amp;amp;height=879&amp;amp;name=image.png 1032w, https://hex-rays.com/hs-fs/hubfs/image.png?width=1376&amp;amp;height=1172&amp;amp;name=image.png 1376w, https://hex-rays.com/hs-fs/hubfs/image.png?width=1720&amp;amp;height=1465&amp;amp;name=image.png 1720w, https://hex-rays.com/hs-fs/hubfs/image.png?width=2064&amp;amp;height=1758&amp;amp;name=image.png 2064w&quot; sizes=&quot;(max-width: 688px) 100vw, 688px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;Swift, Rust, and Go: Deeper High-Level Language Support&lt;/h2&gt;
&lt;p&gt;The decompiler continues to close the gap between stripped native binaries and the languages they were written in.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The decompiler and type system now understand the Swift calling convention. New keywords let you declare the self register (&lt;code&gt;__swiftself&lt;/code&gt;), the async context (&lt;code&gt;__swiftasync&lt;/code&gt;), and the error path (&lt;code&gt;__swiftthrows&lt;/code&gt;), so the pseudocode reads the way the original Swift did, with the confusing register plumbing rewritten as clear intrinsics. On stripped binaries, IDA can now also recover &lt;code&gt;__swiftcall&lt;/code&gt;, throwing calls, and spilled arguments on its own.&lt;/li&gt;
&lt;li&gt;Rust analysis gains detection of the rustc version and crate list (shown in the header), typed panic locations, and a dedicated Rust calling convention.&lt;/li&gt;
&lt;li&gt;Go analysis improves across the board, with better pclntab discovery for PIE binaries, buildinfo dependency parsing for Go 1.18 and later, cleaner struct types, and more reliable argument and return-type detection.&lt;/li&gt;
&lt;li&gt;Objective-C ARC helpers (the retain and release stubs) are now recognized and can be shown or hidden on demand.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Decompiler Improvements&lt;/h2&gt;
&lt;p&gt;Beyond the language work, the decompiler gains a batch of output-quality and workflow upgrades.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New interactive actions: edit a type straight from the pseudocode with &lt;code&gt;e&lt;/code&gt;, add a cast to an expression, collapse code blocks using the chevrons in the margin, and invert an if/else with a single command.&lt;/li&gt;
&lt;li&gt;Argument name hints render parameter names right at the call site, so you no longer have to open a prototype to remember what an argument means.&lt;/li&gt;
&lt;li&gt;Strings recovered during decompilation now appear automatically in the Strings list.&lt;/li&gt;
&lt;li&gt;Many readability refinements, including &lt;code&gt;memcpy&lt;/code&gt; calls folded into simple assignments where possible, if-then-else reconstructed from phi merges instead of gotos, &lt;code&gt;fabs&lt;/code&gt; and negation recognized from IEEE 754 bit manipulation, &lt;code&gt;true&lt;/code&gt;/&lt;code&gt;false&lt;/code&gt; and &lt;code&gt;nullptr&lt;/code&gt; used in the right contexts, and a long list of internal-error fixes across architectures.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Expanded Processor and Platform Support&lt;/h2&gt;
&lt;p&gt;IDA 9.4 widens hardware coverage with two new processor modules and substantial work on existing ones.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A brand-new Qualcomm Hexagon (QDSP6) module brings Qualcomm DSP firmware into reach, paired with a Qualcomm MBN boot-image loader (SBL and XBL containers, multi-ELF, hash validation). See the &lt;a href=&quot;https://docs.hex-rays.com/9.4/core/disassembler/concepts/hexagon&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Hexagon reference&lt;/a&gt; for packet-based execution and ISA coverage.&lt;/li&gt;
&lt;li&gt;A new MCore (CSky V1) module adds stack-pointer tracking, automatic stack-variable creation, and higher-quality disassembly.&lt;/li&gt;
&lt;li&gt;ARM gains full SVE2 and SME disassembly, along with recognition of more switch constructs seen in modern console SDKs.&lt;/li&gt;
&lt;li&gt;TriCore receives full type-system support, a new register finder, better switch-table recognition, and relocation support. RISC-V adds RP2350 (hazard3) extensions, the compressed Zcmp, Zcmt, and Zclsd instructions, and Soteria support. V850 recognizes more switch patterns.&lt;/li&gt;
&lt;li&gt;IDA is now available as a native ARM64 build for Windows-on-ARM.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/hexagon-example.png?width=897&amp;amp;height=607&amp;amp;name=hexagon-example.png&quot; width=&quot;897&quot; height=&quot;607&quot; loading=&quot;lazy&quot; alt=&quot;hexagon-example&quot; style=&quot;height: auto; max-width: 100%; width: 897px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/hexagon-example.png?width=449&amp;amp;height=304&amp;amp;name=hexagon-example.png 449w, https://hex-rays.com/hs-fs/hubfs/hexagon-example.png?width=897&amp;amp;height=607&amp;amp;name=hexagon-example.png 897w, https://hex-rays.com/hs-fs/hubfs/hexagon-example.png?width=1346&amp;amp;height=911&amp;amp;name=hexagon-example.png 1346w, https://hex-rays.com/hs-fs/hubfs/hexagon-example.png?width=1794&amp;amp;height=1214&amp;amp;name=hexagon-example.png 1794w, https://hex-rays.com/hs-fs/hubfs/hexagon-example.png?width=2243&amp;amp;height=1518&amp;amp;name=hexagon-example.png 2243w, https://hex-rays.com/hs-fs/hubfs/hexagon-example.png?width=2691&amp;amp;height=1821&amp;amp;name=hexagon-example.png 2691w&quot; sizes=&quot;(max-width: 897px) 100vw, 897px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/p&gt;
&lt;h2&gt;Loaders and Program Structure&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Functions can now be grouped in the Functions list by the compilation unit they came from, reconstructed from COFF, PSX, OMF, TDS, DWARF, PDB, and Go, mirroring the binary&#39;s original source-file layout.&lt;/li&gt;
&lt;li&gt;ELF loading adds compact relative relocations (&lt;code&gt;DT_RELR&lt;/code&gt;) and recognizes Linux kernel modules, adding modinfo to the listing header. Mach-O handling keeps entry-point segments visible when they have no sections and decrypts Apple-protected segments located past the header.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Navigation and UI: Pathfinder, Jump Anywhere, and a Redesigned Xrefs Graph&lt;/h2&gt;
&lt;p&gt;Navigating a large database gets meaningfully faster in 9.4.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The new &lt;strong&gt;Pathfinder&lt;/strong&gt; widget (View &amp;gt; Open subviews &amp;gt; Pathfinder, &lt;code&gt;Shift-F9&lt;/code&gt;) &lt;span&gt;gives an answer which every RE wants to know&lt;/span&gt;: how does execution get from here to there? It finds call paths between two or more waypoints. Add the function under your cursor with &lt;code&gt;Ctrl-Shift-F9&lt;/code&gt;, exclude known noise, tune the search, and view the result as a cross-references tree or a path-highlighted Xrefs Graph. Find out &lt;a href=&quot;https://docs.hex-rays.com/9.4/core/disassembler/concepts/pathfinder&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;what Pathfinder can answer&lt;/a&gt; about your binary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jump Anywhere&lt;/strong&gt; is now the default action for the &lt;code&gt;g&lt;/code&gt; shortcut, replacing the classic jump-to-address dialog with a unified, type-ahead navigator: names, expressions like &lt;code&gt;cpu.EIP&lt;/code&gt;, function comments, live disassembly, pseudocode, and hex previews, and a jump history.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Xrefs Graph&lt;/strong&gt; has been significantly redesigned, with a new graph manager, informative node headers (comments, bookmarks, breakpoints, and missing references), a cleaner layout, and reorganized settings. It can also display and highlight the paths found by Pathfinder.&lt;/li&gt;
&lt;li&gt;A unified &lt;strong&gt;Scripts&lt;/strong&gt; window replaces the old Execute script and Snippets dialogs, with tabs for IDB snippets, recent external scripts, the shipped IDAPython examples, and a search across all three.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IDB deep links&lt;/strong&gt; let you share a pointer to an exact location in a database and open it in an already-running IDA, without shipping files around.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/jumpanywhere_search.png?width=864&amp;amp;height=528&amp;amp;name=jumpanywhere_search.png&quot; width=&quot;864&quot; height=&quot;528&quot; loading=&quot;lazy&quot; alt=&quot;jumpanywhere_search&quot; style=&quot;height: auto; max-width: 100%; width: 864px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/jumpanywhere_search.png?width=432&amp;amp;height=264&amp;amp;name=jumpanywhere_search.png 432w, https://hex-rays.com/hs-fs/hubfs/jumpanywhere_search.png?width=864&amp;amp;height=528&amp;amp;name=jumpanywhere_search.png 864w, https://hex-rays.com/hs-fs/hubfs/jumpanywhere_search.png?width=1296&amp;amp;height=792&amp;amp;name=jumpanywhere_search.png 1296w, https://hex-rays.com/hs-fs/hubfs/jumpanywhere_search.png?width=1728&amp;amp;height=1056&amp;amp;name=jumpanywhere_search.png 1728w, https://hex-rays.com/hs-fs/hubfs/jumpanywhere_search.png?width=2160&amp;amp;height=1320&amp;amp;name=jumpanywhere_search.png 2160w, https://hex-rays.com/hs-fs/hubfs/jumpanywhere_search.png?width=2592&amp;amp;height=1584&amp;amp;name=jumpanywhere_search.png 2592w&quot; sizes=&quot;(max-width: 864px) 100vw, 864px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/p&gt;
&lt;h2&gt;Teams, Now on Git&lt;/h2&gt;
&lt;p&gt;The Teams add-on for IDA Pro can now run on top of a Git server.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Share IDB files using the Git provider you already use, whether GitHub, GitLab, Bitbucket, or self-hosted, with no server to deploy and no new credentials to issue. Just clone, analyze, commit, and push.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git ida&lt;/code&gt; works in the terminal through an automatically managed global Git configuration, and migration guides are available for teams moving over from Vault. See the &lt;a href=&quot;https://docs.hex-rays.com/9.4/add-ons/teams/getting-started/getting-started-git&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Git getting-started guide&lt;/a&gt; to set things up.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Debugger Advancements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The GDB remote backend has been broadly modernized, with more reliable stepping, better handling of misbehaving stubs, library and module discovery on startup, and image-base detection from the TIB.&lt;/li&gt;
&lt;li&gt;RISC-V debugging is now supported through the GDB backend.&lt;/li&gt;
&lt;li&gt;Win32 and WinDbg fixes correct TEB segment labeling and add a PEB segment.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Automation: idalib Comes to IDA Home&lt;/h2&gt;
&lt;p&gt;Headless automation is no longer a Pro-only capability.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;idalib&lt;/strong&gt;, the library that lets you drive IDA&#39;s full analysis engine from a standalone script with no GUI, now ships with &lt;strong&gt;IDA Home&lt;/strong&gt; and is activated automatically during installation. Home users also get analysis.idc bundled, which enables the &lt;code&gt;-B&lt;/code&gt; batch switch. You can see idalib in action &lt;a href=&quot;https://hex-rays.com/blog/4-powerful-applications-of-idalib-headless-ida-in-action&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; or check out our recent Plugin Contest winner using it &lt;a href=&quot;https://hex-rays.com/blog/announcing-the-2025-plugin-contest-winners&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A new release of the &lt;strong&gt;IDA Domain API&lt;/strong&gt; (v0.5.0) adds microcode and pseudocode access along with object store and retrieve APIs. See &lt;a href=&quot;https://hex-rays.com/blog/whats-new-in-the-ida-domain-api&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;What&#39;s new in the IDA Domain API&lt;/a&gt; for the details.&lt;/li&gt;
&lt;li&gt;IDAPython now detects Python environments managed by uv, Anaconda, and Homebrew, warns on version mismatches, and exposes the new database indexer that powers Jump Anywhere.&lt;/li&gt;
&lt;li&gt;The SDK gains a large set of new EA-based APIs (covered in the porting guide) and a new &lt;code&gt;dscu.h&lt;/code&gt; header for programmatic access to the new Dyld Shared Cache infrastructure.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Performance&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Loading large DWARF files is faster and uses less memory.&lt;/li&gt;
&lt;li&gt;Files that add a large number of names, such as Dyld Shared Caches, load faster, and frame analysis has been sped up.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;And more ...&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;For the complete technical details, be sure to check out the official &lt;a href=&quot;https://docs.hex-rays.com/release-notes/9_4&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Keep us in the loop!&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;If you see something, say something. You can report bugs here: &lt;a href=&quot;https://get.support.hex-rays.com/servicedesk/customer/portals&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;https://support.hex-rays.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Have ideas on how we can improve IDA? We want to know! Send your feedback directly to &lt;a href=&quot;mailto:product@hex-rays.com&quot;&gt;product@hex-rays.com&lt;/a&gt;, or post it on &lt;a href=&quot;https://community.hex-rays.com/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Discourse&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Getting IDA 9.4&lt;/h2&gt;
&lt;p&gt;If you have an active IDA&amp;nbsp;license, you will see IDA 9.4 in the &lt;strong&gt;Download Center&lt;/strong&gt; of the My Hex-Rays &lt;a href=&quot;https://my.hex-rays.com/login&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;customer portal&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;
        </description><link>https://hex-rays.com/blog/ida-9.4-release-a-new-dyld-shared-cache-swift-analysis-new-teams-add-on-and-more-</link><guid isPermaLink="false">https://hex-rays.com/blog/ida-9.4-release-a-new-dyld-shared-cache-swift-analysis-new-teams-add-on-and-more-</guid><pubDate>Sat, 08 Aug 2026 15:15:04 GMT</pubDate></item><item><title>IDA 9.4: Improved analysis of compiled Swift binaries</title><description>&lt;span id=&quot;hs_cos_wrapper_post_body&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_rich_text&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;meta_field&quot; data-hs-cos-type=&quot;rich_text&quot;&gt;&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;IDA 9.4 constitutes the first step towards better handling of Swift binaries. Perhaps unsurprisingly, our focus is on &lt;a href=&quot;https://hex-rays.com/blog/ida-9.4-apple-dyld-shared-cache-workflow-improvements&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Swift for ARM64 Mach-O&lt;/a&gt; files, but we generally aim to improve Swift support also in the more unusual settings across different architectures &lt;span style=&quot;color: #1d1d1f;&quot;&gt;and file formats&lt;/span&gt; like x86-64 and ELF. For 9.4, we want to highlight two different improvements: proper modelling of the Swift ABI, and proper typing of Swift runtime functions.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2 style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;Proper Modelling of the Swift ABI&lt;/h2&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;With IDA 9.4, we introduce three new keywords for function prototypes:&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swiftself&lt;/code&gt;,&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swiftthrows&lt;/code&gt;, and&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swiftasync&lt;/code&gt;.&lt;/p&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;Those three keywords all are preconditioned on the function being declared as&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swiftcall&lt;/code&gt;.&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swiftcall&lt;/code&gt;&lt;span&gt; &lt;/span&gt;has existed for many IDA releases already, but it now acts as a strong discriminator for any Swift-related logic inside IDA. For Objective-C/Swift mixed binaries,&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swiftcall&lt;/code&gt;&lt;span&gt; &lt;/span&gt;is your way to tell IDA that a function should be handled by the Swift machinery.&lt;/p&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: #1d1d1f;&quot;&gt;Let&#39;s go over the three new keywords one by one: since each of them is strongly linked to a Swift-specific ABI register, they are best presented by understanding the corresponding part of the Swift ABI.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #b30000; background-color: #ffffff; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;The Self Register&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;Probably the most relevant one, because it made Swift reversing terribly annoying. The following very small snippet of ARM64 assembly code highlights the problem rather clearly:&lt;/p&gt;
&lt;div id=&quot;hs_cos_wrapper_widget_4f9bbe14-7577-4384-951f-b9751a01ff58&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;widget&quot; data-hs-cos-type=&quot;module&quot;&gt;











&lt;style&gt;
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 {
  --ba-module-bg: rgba(255, 255, 255, 0.0);
  --ba-before-bg: rgba(26, 27, 33, 1.0);
  --ba-after-bg: rgba(16, 17, 22, 1.0);
  --ba-chrome-bg: rgba(29, 30, 37, 1.0);
  --ba-before-text: rgba(206, 209, 217, 1.0);
  --ba-after-text: rgba(206, 209, 217, 1.0);
  --ba-border: rgba(255, 255, 255, 0.1);
  --ba-label-bg: rgba(255, 255, 255, 0.06);
  --ba-label-text: rgba(147, 150, 161, 1.0);
  --ba-linenum: rgba(255, 255, 255, 0.22);
  --ba-tok-keyword: rgba(122, 162, 247, 1.0);
  --ba-tok-func: rgba(224, 175, 104, 1.0);
  --ba-tok-type: rgba(125, 207, 255, 1.0);
  --ba-tok-number: rgba(255, 158, 100, 1.0);
  --ba-tok-comment: rgba(86, 95, 137, 1.0);
  --ba-tok-mark: rgba(122, 162, 247, 0.2);
  --ba-divider: rgba(255, 255, 255, 0.16);
  --ba-grip-bg: rgba(244, 244, 245, 1.0);
  --ba-grip-icon: rgba(27, 27, 31, 1.0);
  --ba-divider-w: 2px;
  --ba-grip-size: 42px;
  --ba-radius: 14px;
  --ba-border-w: 1px;
  --ba-pad: 24px;
  --ba-min-h: 200px;
  --ba-code-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;
  --ba-code-size: 15px;
  --ba-label-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ba-label-size: 11px;
  --ba-lh: 1.7;
  display: block;
  background: var(--ba-module-bg);
}

/* ---- hard reset: every selector is (1,1,0)+, beating the theme&#39;s (1,0,1)
       #hs_cos_wrapper_post_body div/pre/code rules without !important ---- */
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__shell,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__intro,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__heading,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__desc,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__frame,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__chrome,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__viewport,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__panel,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__body,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__pre,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__code,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__gutter,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__label,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__files,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__file,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__arrow,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__dots,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__divider,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__handle {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  max-width: none;
  min-width: 0;
  overflow: visible;
  font-family: inherit;
  color: inherit;
  text-transform: none;
  letter-spacing: normal;
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__gutter i,
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__dots i {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  font-style: normal;
}

/* ---- shell ---- */
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__shell { margin: 0 auto; }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__intro {
  max-width: 640px;
  margin: 0 auto 18px;
  text-align: center;
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__heading {
  color: var(--ba-after-text);
  font-size: clamp(1.3rem, 1rem + 1.2vw, 1.85rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__desc {
  margin-top: 7px;
  color: var(--ba-after-text);
  opacity: 0.6;
  font-size: 1rem;
  line-height: 1.55;
}

/* ---- frame: the code box ---- */
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__frame {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 100%;
  
  margin-inline: auto;
  border: var(--ba-border-w) solid var(--ba-border);
  border-radius: var(--ba-radius);
  background: var(--ba-after-bg);
  box-shadow: 0 26px 64px -34px rgba(0, 0, 0, 0.75);
  animation: ba-rise-bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

/* ---- window chrome ---- */
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 16px;
  min-height: 44px;
  background: var(--ba-chrome-bg);
  border-bottom: 1px solid var(--ba-border);
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__dots { display: inline-flex; gap: 7px; flex: none; }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__dots i {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--ba-border);
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__files {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__file { color: var(--ba-linenum); overflow: hidden; text-overflow: ellipsis; }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__file--after { color: var(--ba-label-text); }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__arrow { flex: none; color: var(--ba-linenum); }

/* ---- panels ---- */
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__viewport {
  position: relative;
  display: flex;
  align-items: stretch;
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__panel {
  position: relative;
  min-width: 0;
  min-height: var(--ba-min-h);
  overflow: hidden;
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__panel--before {
  flex: 0 0 var(--ba-split, 50%);
  background-color: var(--ba-before-bg);
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__panel--after {
  flex: 1 1 0;
  background-color: var(--ba-after-bg);
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__panel--single { flex: 1 1 auto; }

/* ---- resize divider + handle (split mode only) ---- */
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__divider {
  position: relative;
  flex: 0 0 var(--ba-divider-w);
  background: var(--ba-divider);
  z-index: 4;
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--ba-grip-size);
  height: var(--ba-grip-size);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ba-grip-bg);
  color: var(--ba-grip-icon);
  cursor: ew-resize;
  touch-action: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.06);
  transition: transform 0.14s ease;
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__handle:hover { transform: translate(-50%, -50%) scale(1.08); }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__handle:focus-visible {
  outline: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 3px var(--ba-after-bg), 0 0 0 5px var(--ba-divider);
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__chev { display: block; pointer-events: none; }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58.is-dragging { user-select: none; -webkit-user-select: none; }

/* ---- code body ---- */
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__body {
  display: flex;
  align-items: flex-start;
  /* no left padding: the sticky gutter (or the pre) owns the left inset so code
     can&#39;t scroll into a dead strip to the left of the line numbers */
  padding: var(--ba-pad) var(--ba-pad) var(--ba-pad) 0;
  overflow-x: auto;
  overflow-y: hidden;
  /* only capture horizontal pans; let vertical swipes scroll the page (mobile) */
  touch-action: pan-x;
  scrollbar-width: thin;
  scrollbar-color: var(--ba-border) transparent;
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  -webkit-font-smoothing: antialiased;
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__body::-webkit-scrollbar { height: 9px; }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__body::-webkit-scrollbar-thumb {
  background: var(--ba-border);
  border-radius: 9px;
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 28px); }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__gutter {
  position: sticky;
  left: 0;
  display: flex;
  flex-direction: column;
  flex: none;
  margin-right: 16px;
  padding-left: var(--ba-pad);
  padding-right: 16px;
  border-right: 1px solid var(--ba-border);
  text-align: right;
  color: var(--ba-linenum);
  font-variant-numeric: tabular-nums;
  user-select: none;
  z-index: 1;
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__panel--before .ba-code__gutter { background: var(--ba-before-bg); }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__panel--after .ba-code__gutter { background: var(--ba-after-bg); }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__gutter i { display: block; line-height: var(--ba-lh); }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__pre {
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  white-space: pre;
  font-variant-ligatures: none;
  tab-size: 4;
  -moz-tab-size: 4;
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__panel--before .ba-code__pre { color: var(--ba-before-text); }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__panel--after .ba-code__pre { color: var(--ba-after-text); }
/* when line numbers are hidden, the pre is first child and owns the left inset */
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__body &gt; .ba-code__pre:first-child { padding-left: var(--ba-pad); }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__code { font-family: var(--ba-code-font); font-size: var(--ba-code-size); }

/* ---- before / after badges ---- */
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__label {
  position: absolute;
  top: var(--ba-pad);
  z-index: 3;
  display: inline-flex;
  padding: 5px 11px;
  border-radius: 6px;
  background: var(--ba-label-bg);
  color: var(--ba-label-text);
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
}
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__label--before { left: var(--ba-pad); }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__label--after { right: var(--ba-pad); }

/* ---- syntax helper classes (used inside the pasted code) ---- */
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .tok-keyword { color: var(--ba-tok-keyword); }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .tok-func { color: var(--ba-tok-func); }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .tok-type { color: var(--ba-tok-type); }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .tok-number { color: var(--ba-tok-number); }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .tok-comment { color: var(--ba-tok-comment); }
#bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .tok-mark {
  background: var(--ba-tok-mark);
  border-radius: 4px;
  padding: 0.05em 0.32em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

@keyframes ba-rise-bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  #bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__frame { animation: none; }
  #bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__handle { transition: none; }
}

/* ---- stack on small screens ---- */
@media (max-width: 720px) {
  #bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__viewport { flex-direction: column; }
  /* when stacked, each panel sizes to its OWN content: no forced min-height
     (which left a big empty void on short panels) and no equal-height collapse
     (which clipped the taller panel&#39;s extra lines) */
  #bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__panel { min-height: 0; overflow: visible; }
  #bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__panel--before,
  #bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__panel--after { flex: 0 0 auto; }
  #bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__divider { flex: 0 0 var(--ba-divider-w); }
  #bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__handle { display: none; }
  /* panels are full-width when stacked: keep both badges left-aligned so the
     &quot;after&quot; label doesn&#39;t float off to the right edge */
  #bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__label--after { right: auto; left: var(--ba-pad); }
}

/* ---- scale the code down on phones so more fits + line numbers hug the edge ---- */
@media (max-width: 600px) {
  #bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 {
    --ba-code-size: 12.5px;
    --ba-label-size: 9.5px;
    --ba-pad: 12px;
    --ba-lh: 1.55;
  }
  #bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__gutter { margin-right: 10px; padding-right: 10px; }
  #bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__chrome { gap: 10px; padding: 0 12px; min-height: 40px; }
  #bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 24px); }
  #bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58 .ba-code__label { padding: 4px 9px; letter-spacing: 0.08em; }
}
&lt;/style&gt;



&lt;div id=&quot;bac-widget_4f9bbe14-7577-4384-951f-b9751a01ff58&quot; class=&quot;ba-code ba-has-labels&quot;&gt;
  &lt;div class=&quot;ba-code__shell&quot;&gt;

    

    &lt;div class=&quot;ba-code__frame&quot;&gt;

      
      &lt;div class=&quot;ba-code__chrome&quot;&gt;
        &lt;span class=&quot;ba-code__dots&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;
        &lt;span class=&quot;ba-code__files&quot;&gt;
          
            
            &lt;span class=&quot;ba-code__file ba-code__file--after&quot;&gt;&lt;/span&gt;
            
          
        &lt;/span&gt;
      &lt;/div&gt;
      

      
      &lt;div class=&quot;ba-code__viewport&quot;&gt;
        
        
&lt;div class=&quot;ba-code__panel ba-code__panel--before ba-code__panel--single&quot;&gt;
  &lt;span class=&quot;ba-code__label ba-code__label--before&quot;&gt;Disassembly&lt;/span&gt;
  &lt;div class=&quot;ba-code__body&quot;&gt;
    &lt;span class=&quot;ba-code__gutter&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;1&lt;/i&gt;&lt;i&gt;2&lt;/i&gt;&lt;i&gt;3&lt;/i&gt;&lt;i&gt;4&lt;/i&gt;&lt;/span&gt;
    &lt;pre class=&quot;ba-code__pre&quot;&gt;&lt;code class=&quot;ba-code__code&quot;&gt;&lt;span style=&quot;color:#5b6370&quot;&gt;__text:000000010000530C&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;ADD&lt;/span&gt;     &lt;span style=&quot;color:#56b6c2&quot;&gt;X20&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x70&lt;/span&gt;&lt;span style=&quot;color:#abb2bf&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;stack_str&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;; self&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100005310&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;MOV&lt;/span&gt;     &lt;span style=&quot;color:#56b6c2&quot;&gt;X0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;X27&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;; other&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100005314&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;MOV&lt;/span&gt;     &lt;span style=&quot;color:#56b6c2&quot;&gt;X1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;X28&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;; other&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100005318&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;BL&lt;/span&gt;      &lt;span style=&quot;color:#e5c07b&quot;&gt;_$sSS6appendyySSF&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;; String.append(_:)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

        
      &lt;/div&gt;
      

    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;The code just concatenates two Swift strings: the&lt;span&gt; &lt;/span&gt;&lt;em&gt;existing&lt;/em&gt;&lt;span&gt; &lt;/span&gt;string is a temporary placed on the stack (&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;#0x70+stack_str&lt;/code&gt;), and the string that is to be appended, the compiler stored in register pair&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X27&lt;/code&gt;&lt;span&gt; &lt;/span&gt;and&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X28&lt;/code&gt;. We&#39;ll get to the peculiarities of Swift string internals at a later point in time; the annoyance we are trying to solve here is&lt;span&gt; &lt;/span&gt;&lt;em&gt;how&lt;/em&gt;&lt;span&gt; &lt;/span&gt;the compiler passes both the existing and the to-be-appended strings to the&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;String.append&lt;/code&gt;&lt;span&gt; &lt;/span&gt;function. We see that the to-be-appended string is passed by value in registers&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X0&lt;/code&gt;&lt;span&gt; &lt;/span&gt;and&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X1&lt;/code&gt;, but the&lt;span&gt; &lt;/span&gt;&lt;em&gt;existing&lt;/em&gt;&lt;span&gt; &lt;/span&gt;string is passed via a pointer in&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X20&lt;/code&gt;.&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X0&lt;/code&gt;&lt;span&gt; &lt;/span&gt;and&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X1&lt;/code&gt;&lt;span&gt; &lt;/span&gt;are standard argument registers under the regular ARM64 calling convention, but&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X20&lt;/code&gt;&lt;span&gt; &lt;/span&gt;is callee-saved under&lt;span&gt; &lt;/span&gt;&lt;a href=&quot;https://github.com/ARM-software/abi-aa/blob/main/aapcs64/aapcs64.rst#general-purpose-registers&quot;&gt;standard AAPCS64&lt;/a&gt;. Pre-9.4 IDA knew that a&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;Swift::String&lt;/code&gt;&lt;span&gt; &lt;/span&gt;occupied two 8-byte registers, but it had no concept of the Swift ABI specialties, so the decompiler would (wrongly) render this as follows:&lt;/p&gt;
&lt;div id=&quot;hs_cos_wrapper_widget_c6b0f719-655c-4697-b8d1-14025e7553f8&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;widget&quot; data-hs-cos-type=&quot;module&quot;&gt;











&lt;style&gt;
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 {
  --ba-module-bg: rgba(255, 255, 255, 0.0);
  --ba-before-bg: rgba(26, 27, 33, 1.0);
  --ba-after-bg: rgba(16, 17, 22, 1.0);
  --ba-chrome-bg: rgba(29, 30, 37, 1.0);
  --ba-before-text: rgba(206, 209, 217, 1.0);
  --ba-after-text: rgba(206, 209, 217, 1.0);
  --ba-border: rgba(255, 255, 255, 0.1);
  --ba-label-bg: rgba(255, 255, 255, 0.06);
  --ba-label-text: rgba(147, 150, 161, 1.0);
  --ba-linenum: rgba(255, 255, 255, 0.22);
  --ba-tok-keyword: rgba(122, 162, 247, 1.0);
  --ba-tok-func: rgba(224, 175, 104, 1.0);
  --ba-tok-type: rgba(125, 207, 255, 1.0);
  --ba-tok-number: rgba(255, 158, 100, 1.0);
  --ba-tok-comment: rgba(86, 95, 137, 1.0);
  --ba-tok-mark: rgba(122, 162, 247, 0.2);
  --ba-divider: rgba(255, 255, 255, 0.16);
  --ba-grip-bg: rgba(244, 244, 245, 1.0);
  --ba-grip-icon: rgba(27, 27, 31, 1.0);
  --ba-divider-w: 2px;
  --ba-grip-size: 42px;
  --ba-radius: 14px;
  --ba-border-w: 1px;
  --ba-pad: 24px;
  --ba-min-h: 200px;
  --ba-code-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;
  --ba-code-size: 15px;
  --ba-label-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ba-label-size: 11px;
  --ba-lh: 1.7;
  display: block;
  background: var(--ba-module-bg);
}

/* ---- hard reset: every selector is (1,1,0)+, beating the theme&#39;s (1,0,1)
       #hs_cos_wrapper_post_body div/pre/code rules without !important ---- */
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__shell,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__intro,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__heading,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__desc,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__frame,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__chrome,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__viewport,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__panel,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__body,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__pre,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__code,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__gutter,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__label,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__files,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__file,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__arrow,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__dots,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__divider,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__handle {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  max-width: none;
  min-width: 0;
  overflow: visible;
  font-family: inherit;
  color: inherit;
  text-transform: none;
  letter-spacing: normal;
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__gutter i,
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__dots i {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  font-style: normal;
}

/* ---- shell ---- */
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__shell { margin: 0 auto; }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__intro {
  max-width: 640px;
  margin: 0 auto 18px;
  text-align: center;
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__heading {
  color: var(--ba-after-text);
  font-size: clamp(1.3rem, 1rem + 1.2vw, 1.85rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__desc {
  margin-top: 7px;
  color: var(--ba-after-text);
  opacity: 0.6;
  font-size: 1rem;
  line-height: 1.55;
}

/* ---- frame: the code box ---- */
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__frame {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 100%;
  
  margin-inline: auto;
  border: var(--ba-border-w) solid var(--ba-border);
  border-radius: var(--ba-radius);
  background: var(--ba-after-bg);
  box-shadow: 0 26px 64px -34px rgba(0, 0, 0, 0.75);
  animation: ba-rise-bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

/* ---- window chrome ---- */
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 16px;
  min-height: 44px;
  background: var(--ba-chrome-bg);
  border-bottom: 1px solid var(--ba-border);
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__dots { display: inline-flex; gap: 7px; flex: none; }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__dots i {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--ba-border);
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__files {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__file { color: var(--ba-linenum); overflow: hidden; text-overflow: ellipsis; }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__file--after { color: var(--ba-label-text); }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__arrow { flex: none; color: var(--ba-linenum); }

/* ---- panels ---- */
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__viewport {
  position: relative;
  display: flex;
  align-items: stretch;
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__panel {
  position: relative;
  min-width: 0;
  min-height: var(--ba-min-h);
  overflow: hidden;
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__panel--before {
  flex: 0 0 var(--ba-split, 50%);
  background-color: var(--ba-before-bg);
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__panel--after {
  flex: 1 1 0;
  background-color: var(--ba-after-bg);
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__panel--single { flex: 1 1 auto; }

/* ---- resize divider + handle (split mode only) ---- */
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__divider {
  position: relative;
  flex: 0 0 var(--ba-divider-w);
  background: var(--ba-divider);
  z-index: 4;
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--ba-grip-size);
  height: var(--ba-grip-size);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ba-grip-bg);
  color: var(--ba-grip-icon);
  cursor: ew-resize;
  touch-action: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.06);
  transition: transform 0.14s ease;
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__handle:hover { transform: translate(-50%, -50%) scale(1.08); }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__handle:focus-visible {
  outline: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 3px var(--ba-after-bg), 0 0 0 5px var(--ba-divider);
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__chev { display: block; pointer-events: none; }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8.is-dragging { user-select: none; -webkit-user-select: none; }

/* ---- code body ---- */
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__body {
  display: flex;
  align-items: flex-start;
  /* no left padding: the sticky gutter (or the pre) owns the left inset so code
     can&#39;t scroll into a dead strip to the left of the line numbers */
  padding: var(--ba-pad) var(--ba-pad) var(--ba-pad) 0;
  overflow-x: auto;
  overflow-y: hidden;
  /* only capture horizontal pans; let vertical swipes scroll the page (mobile) */
  touch-action: pan-x;
  scrollbar-width: thin;
  scrollbar-color: var(--ba-border) transparent;
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  -webkit-font-smoothing: antialiased;
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__body::-webkit-scrollbar { height: 9px; }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__body::-webkit-scrollbar-thumb {
  background: var(--ba-border);
  border-radius: 9px;
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 28px); }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__gutter {
  position: sticky;
  left: 0;
  display: flex;
  flex-direction: column;
  flex: none;
  margin-right: 16px;
  padding-left: var(--ba-pad);
  padding-right: 16px;
  border-right: 1px solid var(--ba-border);
  text-align: right;
  color: var(--ba-linenum);
  font-variant-numeric: tabular-nums;
  user-select: none;
  z-index: 1;
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__panel--before .ba-code__gutter { background: var(--ba-before-bg); }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__panel--after .ba-code__gutter { background: var(--ba-after-bg); }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__gutter i { display: block; line-height: var(--ba-lh); }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__pre {
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  white-space: pre;
  font-variant-ligatures: none;
  tab-size: 4;
  -moz-tab-size: 4;
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__panel--before .ba-code__pre { color: var(--ba-before-text); }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__panel--after .ba-code__pre { color: var(--ba-after-text); }
/* when line numbers are hidden, the pre is first child and owns the left inset */
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__body &gt; .ba-code__pre:first-child { padding-left: var(--ba-pad); }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__code { font-family: var(--ba-code-font); font-size: var(--ba-code-size); }

/* ---- before / after badges ---- */
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__label {
  position: absolute;
  top: var(--ba-pad);
  z-index: 3;
  display: inline-flex;
  padding: 5px 11px;
  border-radius: 6px;
  background: var(--ba-label-bg);
  color: var(--ba-label-text);
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
}
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__label--before { left: var(--ba-pad); }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__label--after { right: var(--ba-pad); }

/* ---- syntax helper classes (used inside the pasted code) ---- */
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .tok-keyword { color: var(--ba-tok-keyword); }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .tok-func { color: var(--ba-tok-func); }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .tok-type { color: var(--ba-tok-type); }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .tok-number { color: var(--ba-tok-number); }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .tok-comment { color: var(--ba-tok-comment); }
#bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .tok-mark {
  background: var(--ba-tok-mark);
  border-radius: 4px;
  padding: 0.05em 0.32em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

@keyframes ba-rise-bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  #bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__frame { animation: none; }
  #bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__handle { transition: none; }
}

/* ---- stack on small screens ---- */
@media (max-width: 720px) {
  #bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__viewport { flex-direction: column; }
  /* when stacked, each panel sizes to its OWN content: no forced min-height
     (which left a big empty void on short panels) and no equal-height collapse
     (which clipped the taller panel&#39;s extra lines) */
  #bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__panel { min-height: 0; overflow: visible; }
  #bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__panel--before,
  #bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__panel--after { flex: 0 0 auto; }
  #bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__divider { flex: 0 0 var(--ba-divider-w); }
  #bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__handle { display: none; }
  /* panels are full-width when stacked: keep both badges left-aligned so the
     &quot;after&quot; label doesn&#39;t float off to the right edge */
  #bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__label--after { right: auto; left: var(--ba-pad); }
}

/* ---- scale the code down on phones so more fits + line numbers hug the edge ---- */
@media (max-width: 600px) {
  #bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 {
    --ba-code-size: 12.5px;
    --ba-label-size: 9.5px;
    --ba-pad: 12px;
    --ba-lh: 1.55;
  }
  #bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__gutter { margin-right: 10px; padding-right: 10px; }
  #bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__chrome { gap: 10px; padding: 0 12px; min-height: 40px; }
  #bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 24px); }
  #bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8 .ba-code__label { padding: 4px 9px; letter-spacing: 0.08em; }
}
&lt;/style&gt;



&lt;div id=&quot;bac-widget_c6b0f719-655c-4697-b8d1-14025e7553f8&quot; class=&quot;ba-code ba-has-labels&quot;&gt;
  &lt;div class=&quot;ba-code__shell&quot;&gt;

    

    &lt;div class=&quot;ba-code__frame&quot;&gt;

      
      &lt;div class=&quot;ba-code__chrome&quot;&gt;
        &lt;span class=&quot;ba-code__dots&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;
        &lt;span class=&quot;ba-code__files&quot;&gt;
          
            
            &lt;span class=&quot;ba-code__file ba-code__file--after&quot;&gt;&lt;/span&gt;
            
          
        &lt;/span&gt;
      &lt;/div&gt;
      

      
      &lt;div class=&quot;ba-code__viewport&quot;&gt;
        
        
&lt;div class=&quot;ba-code__panel ba-code__panel--before ba-code__panel--single&quot;&gt;
  &lt;span class=&quot;ba-code__label ba-code__label--before&quot;&gt;Pseudocode&lt;/span&gt;
  &lt;div class=&quot;ba-code__body&quot;&gt;
    &lt;span class=&quot;ba-code__gutter&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;1&lt;/i&gt;&lt;i&gt;2&lt;/i&gt;&lt;i&gt;3&lt;/i&gt;&lt;i&gt;4&lt;/i&gt;&lt;i&gt;5&lt;/i&gt;&lt;/span&gt;
    &lt;pre class=&quot;ba-code__pre&quot;&gt;&lt;code class=&quot;ba-code__code&quot;&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;Swift::String&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;v14&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;// x0&lt;/span&gt;
&lt;span style=&quot;color:#7d8590&quot;&gt;// ---------------------------------------------------&lt;/span&gt;
&lt;span style=&quot;color:#e0e2e6&quot;&gt;v14&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;_countAndFlagsBits&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;v11&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color:#e0e2e6&quot;&gt;v14&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;_object&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;v13&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color:#56b6c2&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#e5c07b&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;v14&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

        
      &lt;/div&gt;
      

    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;The attentive reverser will immediately spot that&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;String.append&lt;/code&gt;&lt;span&gt; &lt;/span&gt;wrongly receives just one argument: the string that is to be appended. Crucially, we have no clue about the&lt;span&gt; &lt;/span&gt;&lt;em&gt;target&lt;/em&gt;&lt;span&gt; &lt;/span&gt;of the string append operation. This might be recoverable/guessable from context in this isolated example, but since the Swift compiler actually relies&lt;span&gt; &lt;/span&gt;&lt;em&gt;a lot&lt;/em&gt;&lt;span&gt; &lt;/span&gt;on passing pointers to objects in&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X20&lt;/code&gt;, the overall decompiler output becomes almost unintelligible, because the relationship between entities is difficult to track.&lt;/p&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;For this purpose, IDA 9.4 introduces the&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swiftself&lt;/code&gt;&lt;span&gt; &lt;/span&gt;annotation for arguments in function prototypes. With this new keyword, the&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;String.append&lt;/code&gt;&lt;span&gt; &lt;/span&gt;function looks as follows:&lt;/p&gt;
&lt;div id=&quot;hs_cos_wrapper_widget_6f4fb681-f126-4b6a-8fc1-604861d7363e&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;widget&quot; data-hs-cos-type=&quot;module&quot;&gt;











&lt;style&gt;
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e {
  --ba-module-bg: rgba(255, 255, 255, 0.0);
  --ba-before-bg: rgba(26, 27, 33, 1.0);
  --ba-after-bg: rgba(16, 17, 22, 1.0);
  --ba-chrome-bg: rgba(29, 30, 37, 1.0);
  --ba-before-text: rgba(206, 209, 217, 1.0);
  --ba-after-text: rgba(206, 209, 217, 1.0);
  --ba-border: rgba(255, 255, 255, 0.1);
  --ba-label-bg: rgba(255, 255, 255, 0.06);
  --ba-label-text: rgba(147, 150, 161, 1.0);
  --ba-linenum: rgba(255, 255, 255, 0.22);
  --ba-tok-keyword: rgba(122, 162, 247, 1.0);
  --ba-tok-func: rgba(224, 175, 104, 1.0);
  --ba-tok-type: rgba(125, 207, 255, 1.0);
  --ba-tok-number: rgba(255, 158, 100, 1.0);
  --ba-tok-comment: rgba(86, 95, 137, 1.0);
  --ba-tok-mark: rgba(122, 162, 247, 0.2);
  --ba-divider: rgba(255, 255, 255, 0.16);
  --ba-grip-bg: rgba(244, 244, 245, 1.0);
  --ba-grip-icon: rgba(27, 27, 31, 1.0);
  --ba-divider-w: 2px;
  --ba-grip-size: 42px;
  --ba-radius: 14px;
  --ba-border-w: 1px;
  --ba-pad: 24px;
  --ba-min-h: 200px;
  --ba-code-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;
  --ba-code-size: 15px;
  --ba-label-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ba-label-size: 11px;
  --ba-lh: 1.7;
  display: block;
  background: var(--ba-module-bg);
}

/* ---- hard reset: every selector is (1,1,0)+, beating the theme&#39;s (1,0,1)
       #hs_cos_wrapper_post_body div/pre/code rules without !important ---- */
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__shell,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__intro,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__heading,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__desc,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__frame,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__chrome,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__viewport,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__panel,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__body,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__pre,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__code,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__gutter,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__label,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__files,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__file,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__arrow,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__dots,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__divider,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__handle {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  max-width: none;
  min-width: 0;
  overflow: visible;
  font-family: inherit;
  color: inherit;
  text-transform: none;
  letter-spacing: normal;
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__gutter i,
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__dots i {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  font-style: normal;
}

/* ---- shell ---- */
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__shell { margin: 0 auto; }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__intro {
  max-width: 640px;
  margin: 0 auto 18px;
  text-align: center;
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__heading {
  color: var(--ba-after-text);
  font-size: clamp(1.3rem, 1rem + 1.2vw, 1.85rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__desc {
  margin-top: 7px;
  color: var(--ba-after-text);
  opacity: 0.6;
  font-size: 1rem;
  line-height: 1.55;
}

/* ---- frame: the code box ---- */
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__frame {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 100%;
  
  margin-inline: auto;
  border: var(--ba-border-w) solid var(--ba-border);
  border-radius: var(--ba-radius);
  background: var(--ba-after-bg);
  box-shadow: 0 26px 64px -34px rgba(0, 0, 0, 0.75);
  animation: ba-rise-bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

/* ---- window chrome ---- */
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 16px;
  min-height: 44px;
  background: var(--ba-chrome-bg);
  border-bottom: 1px solid var(--ba-border);
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__dots { display: inline-flex; gap: 7px; flex: none; }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__dots i {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--ba-border);
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__files {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__file { color: var(--ba-linenum); overflow: hidden; text-overflow: ellipsis; }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__file--after { color: var(--ba-label-text); }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__arrow { flex: none; color: var(--ba-linenum); }

/* ---- panels ---- */
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__viewport {
  position: relative;
  display: flex;
  align-items: stretch;
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__panel {
  position: relative;
  min-width: 0;
  min-height: var(--ba-min-h);
  overflow: hidden;
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__panel--before {
  flex: 0 0 var(--ba-split, 50%);
  background-color: var(--ba-before-bg);
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__panel--after {
  flex: 1 1 0;
  background-color: var(--ba-after-bg);
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__panel--single { flex: 1 1 auto; }

/* ---- resize divider + handle (split mode only) ---- */
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__divider {
  position: relative;
  flex: 0 0 var(--ba-divider-w);
  background: var(--ba-divider);
  z-index: 4;
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--ba-grip-size);
  height: var(--ba-grip-size);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ba-grip-bg);
  color: var(--ba-grip-icon);
  cursor: ew-resize;
  touch-action: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.06);
  transition: transform 0.14s ease;
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__handle:hover { transform: translate(-50%, -50%) scale(1.08); }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__handle:focus-visible {
  outline: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 3px var(--ba-after-bg), 0 0 0 5px var(--ba-divider);
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__chev { display: block; pointer-events: none; }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e.is-dragging { user-select: none; -webkit-user-select: none; }

/* ---- code body ---- */
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__body {
  display: flex;
  align-items: flex-start;
  /* no left padding: the sticky gutter (or the pre) owns the left inset so code
     can&#39;t scroll into a dead strip to the left of the line numbers */
  padding: var(--ba-pad) var(--ba-pad) var(--ba-pad) 0;
  overflow-x: auto;
  overflow-y: hidden;
  /* only capture horizontal pans; let vertical swipes scroll the page (mobile) */
  touch-action: pan-x;
  scrollbar-width: thin;
  scrollbar-color: var(--ba-border) transparent;
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  -webkit-font-smoothing: antialiased;
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__body::-webkit-scrollbar { height: 9px; }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__body::-webkit-scrollbar-thumb {
  background: var(--ba-border);
  border-radius: 9px;
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 28px); }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__gutter {
  position: sticky;
  left: 0;
  display: flex;
  flex-direction: column;
  flex: none;
  margin-right: 16px;
  padding-left: var(--ba-pad);
  padding-right: 16px;
  border-right: 1px solid var(--ba-border);
  text-align: right;
  color: var(--ba-linenum);
  font-variant-numeric: tabular-nums;
  user-select: none;
  z-index: 1;
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__panel--before .ba-code__gutter { background: var(--ba-before-bg); }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__panel--after .ba-code__gutter { background: var(--ba-after-bg); }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__gutter i { display: block; line-height: var(--ba-lh); }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__pre {
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  white-space: pre;
  font-variant-ligatures: none;
  tab-size: 4;
  -moz-tab-size: 4;
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__panel--before .ba-code__pre { color: var(--ba-before-text); }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__panel--after .ba-code__pre { color: var(--ba-after-text); }
/* when line numbers are hidden, the pre is first child and owns the left inset */
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__body &gt; .ba-code__pre:first-child { padding-left: var(--ba-pad); }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__code { font-family: var(--ba-code-font); font-size: var(--ba-code-size); }

/* ---- before / after badges ---- */
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__label {
  position: absolute;
  top: var(--ba-pad);
  z-index: 3;
  display: inline-flex;
  padding: 5px 11px;
  border-radius: 6px;
  background: var(--ba-label-bg);
  color: var(--ba-label-text);
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
}
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__label--before { left: var(--ba-pad); }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__label--after { right: var(--ba-pad); }

/* ---- syntax helper classes (used inside the pasted code) ---- */
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .tok-keyword { color: var(--ba-tok-keyword); }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .tok-func { color: var(--ba-tok-func); }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .tok-type { color: var(--ba-tok-type); }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .tok-number { color: var(--ba-tok-number); }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .tok-comment { color: var(--ba-tok-comment); }
#bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .tok-mark {
  background: var(--ba-tok-mark);
  border-radius: 4px;
  padding: 0.05em 0.32em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

@keyframes ba-rise-bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  #bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__frame { animation: none; }
  #bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__handle { transition: none; }
}

/* ---- stack on small screens ---- */
@media (max-width: 720px) {
  #bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__viewport { flex-direction: column; }
  /* when stacked, each panel sizes to its OWN content: no forced min-height
     (which left a big empty void on short panels) and no equal-height collapse
     (which clipped the taller panel&#39;s extra lines) */
  #bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__panel { min-height: 0; overflow: visible; }
  #bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__panel--before,
  #bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__panel--after { flex: 0 0 auto; }
  #bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__divider { flex: 0 0 var(--ba-divider-w); }
  #bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__handle { display: none; }
  /* panels are full-width when stacked: keep both badges left-aligned so the
     &quot;after&quot; label doesn&#39;t float off to the right edge */
  #bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__label--after { right: auto; left: var(--ba-pad); }
}

/* ---- scale the code down on phones so more fits + line numbers hug the edge ---- */
@media (max-width: 600px) {
  #bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e {
    --ba-code-size: 12.5px;
    --ba-label-size: 9.5px;
    --ba-pad: 12px;
    --ba-lh: 1.55;
  }
  #bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__gutter { margin-right: 10px; padding-right: 10px; }
  #bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__chrome { gap: 10px; padding: 0 12px; min-height: 40px; }
  #bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 24px); }
  #bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e .ba-code__label { padding: 4px 9px; letter-spacing: 0.08em; }
}
&lt;/style&gt;



&lt;div id=&quot;bac-widget_6f4fb681-f126-4b6a-8fc1-604861d7363e&quot; class=&quot;ba-code ba-has-labels&quot;&gt;
  &lt;div class=&quot;ba-code__shell&quot;&gt;

    

    &lt;div class=&quot;ba-code__frame&quot;&gt;

      
      &lt;div class=&quot;ba-code__chrome&quot;&gt;
        &lt;span class=&quot;ba-code__dots&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;
        &lt;span class=&quot;ba-code__files&quot;&gt;
          
            
            &lt;span class=&quot;ba-code__file ba-code__file--after&quot;&gt;&lt;/span&gt;
            
          
        &lt;/span&gt;
      &lt;/div&gt;
      

      
      &lt;div class=&quot;ba-code__viewport&quot;&gt;
        
        
&lt;div class=&quot;ba-code__panel ba-code__panel--before ba-code__panel--single&quot;&gt;
  &lt;span class=&quot;ba-code__label ba-code__label--before&quot;&gt;Pseudocode&lt;/span&gt;
  &lt;div class=&quot;ba-code__body&quot;&gt;
    &lt;span class=&quot;ba-code__gutter&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;1&lt;/i&gt;&lt;i&gt;2&lt;/i&gt;&lt;/span&gt;
    &lt;pre class=&quot;ba-code__pre&quot;&gt;&lt;code class=&quot;ba-code__code&quot;&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:#c678dd&quot;&gt;__swiftcall&lt;/span&gt; &lt;span style=&quot;color:#61afef&quot;&gt;String_append&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;Swift::String&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#c678dd&quot;&gt;__swiftself&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;Swift::String&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;other&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;);&lt;/span&gt;
                                              &lt;span style=&quot;color:#98c379&quot;&gt;^~~~~~~~~~~ new keyword&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

        
      &lt;/div&gt;
      

    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;With the updated function signature, the call site in the decompiler renders exactly as we would expect, with an explicit pointer to the object being manipulated passed as the first argument.&lt;/p&gt;
&lt;div id=&quot;hs_cos_wrapper_widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;widget&quot; data-hs-cos-type=&quot;module&quot;&gt;











&lt;style&gt;
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac {
  --ba-module-bg: rgba(255, 255, 255, 0.0);
  --ba-before-bg: rgba(26, 27, 33, 1.0);
  --ba-after-bg: rgba(16, 17, 22, 1.0);
  --ba-chrome-bg: rgba(29, 30, 37, 1.0);
  --ba-before-text: rgba(206, 209, 217, 1.0);
  --ba-after-text: rgba(206, 209, 217, 1.0);
  --ba-border: rgba(255, 255, 255, 0.1);
  --ba-label-bg: rgba(255, 255, 255, 0.06);
  --ba-label-text: rgba(147, 150, 161, 1.0);
  --ba-linenum: rgba(255, 255, 255, 0.22);
  --ba-tok-keyword: rgba(122, 162, 247, 1.0);
  --ba-tok-func: rgba(224, 175, 104, 1.0);
  --ba-tok-type: rgba(125, 207, 255, 1.0);
  --ba-tok-number: rgba(255, 158, 100, 1.0);
  --ba-tok-comment: rgba(86, 95, 137, 1.0);
  --ba-tok-mark: rgba(122, 162, 247, 0.2);
  --ba-divider: rgba(255, 255, 255, 0.16);
  --ba-grip-bg: rgba(244, 244, 245, 1.0);
  --ba-grip-icon: rgba(27, 27, 31, 1.0);
  --ba-divider-w: 2px;
  --ba-grip-size: 42px;
  --ba-radius: 14px;
  --ba-border-w: 1px;
  --ba-pad: 24px;
  --ba-min-h: 200px;
  --ba-code-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;
  --ba-code-size: 15px;
  --ba-label-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ba-label-size: 11px;
  --ba-lh: 1.7;
  display: block;
  background: var(--ba-module-bg);
}

/* ---- hard reset: every selector is (1,1,0)+, beating the theme&#39;s (1,0,1)
       #hs_cos_wrapper_post_body div/pre/code rules without !important ---- */
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__shell,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__intro,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__heading,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__desc,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__frame,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__chrome,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__viewport,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__panel,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__body,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__pre,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__code,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__gutter,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__label,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__files,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__file,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__arrow,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__dots,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__divider,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__handle {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  max-width: none;
  min-width: 0;
  overflow: visible;
  font-family: inherit;
  color: inherit;
  text-transform: none;
  letter-spacing: normal;
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__gutter i,
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__dots i {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  font-style: normal;
}

/* ---- shell ---- */
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__shell { margin: 0 auto; }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__intro {
  max-width: 640px;
  margin: 0 auto 18px;
  text-align: center;
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__heading {
  color: var(--ba-after-text);
  font-size: clamp(1.3rem, 1rem + 1.2vw, 1.85rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__desc {
  margin-top: 7px;
  color: var(--ba-after-text);
  opacity: 0.6;
  font-size: 1rem;
  line-height: 1.55;
}

/* ---- frame: the code box ---- */
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__frame {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 100%;
  
  margin-inline: auto;
  border: var(--ba-border-w) solid var(--ba-border);
  border-radius: var(--ba-radius);
  background: var(--ba-after-bg);
  box-shadow: 0 26px 64px -34px rgba(0, 0, 0, 0.75);
  animation: ba-rise-bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

/* ---- window chrome ---- */
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 16px;
  min-height: 44px;
  background: var(--ba-chrome-bg);
  border-bottom: 1px solid var(--ba-border);
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__dots { display: inline-flex; gap: 7px; flex: none; }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__dots i {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--ba-border);
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__files {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__file { color: var(--ba-linenum); overflow: hidden; text-overflow: ellipsis; }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__file--after { color: var(--ba-label-text); }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__arrow { flex: none; color: var(--ba-linenum); }

/* ---- panels ---- */
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__viewport {
  position: relative;
  display: flex;
  align-items: stretch;
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__panel {
  position: relative;
  min-width: 0;
  min-height: var(--ba-min-h);
  overflow: hidden;
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__panel--before {
  flex: 0 0 var(--ba-split, 50%);
  background-color: var(--ba-before-bg);
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__panel--after {
  flex: 1 1 0;
  background-color: var(--ba-after-bg);
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__panel--single { flex: 1 1 auto; }

/* ---- resize divider + handle (split mode only) ---- */
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__divider {
  position: relative;
  flex: 0 0 var(--ba-divider-w);
  background: var(--ba-divider);
  z-index: 4;
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--ba-grip-size);
  height: var(--ba-grip-size);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ba-grip-bg);
  color: var(--ba-grip-icon);
  cursor: ew-resize;
  touch-action: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.06);
  transition: transform 0.14s ease;
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__handle:hover { transform: translate(-50%, -50%) scale(1.08); }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__handle:focus-visible {
  outline: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 3px var(--ba-after-bg), 0 0 0 5px var(--ba-divider);
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__chev { display: block; pointer-events: none; }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac.is-dragging { user-select: none; -webkit-user-select: none; }

/* ---- code body ---- */
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__body {
  display: flex;
  align-items: flex-start;
  /* no left padding: the sticky gutter (or the pre) owns the left inset so code
     can&#39;t scroll into a dead strip to the left of the line numbers */
  padding: var(--ba-pad) var(--ba-pad) var(--ba-pad) 0;
  overflow-x: auto;
  overflow-y: hidden;
  /* only capture horizontal pans; let vertical swipes scroll the page (mobile) */
  touch-action: pan-x;
  scrollbar-width: thin;
  scrollbar-color: var(--ba-border) transparent;
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  -webkit-font-smoothing: antialiased;
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__body::-webkit-scrollbar { height: 9px; }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__body::-webkit-scrollbar-thumb {
  background: var(--ba-border);
  border-radius: 9px;
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 28px); }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__gutter {
  position: sticky;
  left: 0;
  display: flex;
  flex-direction: column;
  flex: none;
  margin-right: 16px;
  padding-left: var(--ba-pad);
  padding-right: 16px;
  border-right: 1px solid var(--ba-border);
  text-align: right;
  color: var(--ba-linenum);
  font-variant-numeric: tabular-nums;
  user-select: none;
  z-index: 1;
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__panel--before .ba-code__gutter { background: var(--ba-before-bg); }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__panel--after .ba-code__gutter { background: var(--ba-after-bg); }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__gutter i { display: block; line-height: var(--ba-lh); }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__pre {
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  white-space: pre;
  font-variant-ligatures: none;
  tab-size: 4;
  -moz-tab-size: 4;
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__panel--before .ba-code__pre { color: var(--ba-before-text); }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__panel--after .ba-code__pre { color: var(--ba-after-text); }
/* when line numbers are hidden, the pre is first child and owns the left inset */
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__body &gt; .ba-code__pre:first-child { padding-left: var(--ba-pad); }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__code { font-family: var(--ba-code-font); font-size: var(--ba-code-size); }

/* ---- before / after badges ---- */
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__label {
  position: absolute;
  top: var(--ba-pad);
  z-index: 3;
  display: inline-flex;
  padding: 5px 11px;
  border-radius: 6px;
  background: var(--ba-label-bg);
  color: var(--ba-label-text);
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
}
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__label--before { left: var(--ba-pad); }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__label--after { right: var(--ba-pad); }

/* ---- syntax helper classes (used inside the pasted code) ---- */
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .tok-keyword { color: var(--ba-tok-keyword); }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .tok-func { color: var(--ba-tok-func); }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .tok-type { color: var(--ba-tok-type); }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .tok-number { color: var(--ba-tok-number); }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .tok-comment { color: var(--ba-tok-comment); }
#bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .tok-mark {
  background: var(--ba-tok-mark);
  border-radius: 4px;
  padding: 0.05em 0.32em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

@keyframes ba-rise-bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  #bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__frame { animation: none; }
  #bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__handle { transition: none; }
}

/* ---- stack on small screens ---- */
@media (max-width: 720px) {
  #bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__viewport { flex-direction: column; }
  /* when stacked, each panel sizes to its OWN content: no forced min-height
     (which left a big empty void on short panels) and no equal-height collapse
     (which clipped the taller panel&#39;s extra lines) */
  #bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__panel { min-height: 0; overflow: visible; }
  #bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__panel--before,
  #bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__panel--after { flex: 0 0 auto; }
  #bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__divider { flex: 0 0 var(--ba-divider-w); }
  #bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__handle { display: none; }
  /* panels are full-width when stacked: keep both badges left-aligned so the
     &quot;after&quot; label doesn&#39;t float off to the right edge */
  #bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__label--after { right: auto; left: var(--ba-pad); }
}

/* ---- scale the code down on phones so more fits + line numbers hug the edge ---- */
@media (max-width: 600px) {
  #bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac {
    --ba-code-size: 12.5px;
    --ba-label-size: 9.5px;
    --ba-pad: 12px;
    --ba-lh: 1.55;
  }
  #bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__gutter { margin-right: 10px; padding-right: 10px; }
  #bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__chrome { gap: 10px; padding: 0 12px; min-height: 40px; }
  #bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 24px); }
  #bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac .ba-code__label { padding: 4px 9px; letter-spacing: 0.08em; }
}
&lt;/style&gt;



&lt;div id=&quot;bac-widget_3b5acc7a-78b0-4d79-903a-7624fb2c2fac&quot; class=&quot;ba-code ba-has-labels&quot;&gt;
  &lt;div class=&quot;ba-code__shell&quot;&gt;

    

    &lt;div class=&quot;ba-code__frame&quot;&gt;

      
      &lt;div class=&quot;ba-code__chrome&quot;&gt;
        &lt;span class=&quot;ba-code__dots&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;
        &lt;span class=&quot;ba-code__files&quot;&gt;
          
            
            &lt;span class=&quot;ba-code__file ba-code__file--after&quot;&gt;&lt;/span&gt;
            
          
        &lt;/span&gt;
      &lt;/div&gt;
      

      
      &lt;div class=&quot;ba-code__viewport&quot;&gt;
        
        
&lt;div class=&quot;ba-code__panel ba-code__panel--before ba-code__panel--single&quot;&gt;
  &lt;span class=&quot;ba-code__label ba-code__label--before&quot;&gt;Pseudocode&lt;/span&gt;
  &lt;div class=&quot;ba-code__body&quot;&gt;
    &lt;span class=&quot;ba-code__gutter&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;1&lt;/i&gt;&lt;i&gt;2&lt;/i&gt;&lt;i&gt;3&lt;/i&gt;&lt;i&gt;4&lt;/i&gt;&lt;i&gt;5&lt;/i&gt;&lt;i&gt;6&lt;/i&gt;&lt;/span&gt;
    &lt;pre class=&quot;ba-code__pre&quot;&gt;&lt;code class=&quot;ba-code__code&quot;&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;Swift::String&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;v14&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;// x0&lt;/span&gt;
&lt;span style=&quot;color:#56b6c2&quot;&gt;Swift::String&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;stack_str&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;// [xsp+8h] [xbp-68h] BYREF&lt;/span&gt;
&lt;span style=&quot;color:#7d8590&quot;&gt;// ---------------------------------------------------&lt;/span&gt;
&lt;span style=&quot;color:#e0e2e6&quot;&gt;v14&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;_countAndFlagsBits&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;v11&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color:#e0e2e6&quot;&gt;v14&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;_object&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;v13&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color:#56b6c2&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#e5c07b&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;self:&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;stack_str&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;other:&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;v14&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

        
      &lt;/div&gt;
      

    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: #1d1d1f;&quot;&gt;Only functions carrying the &lt;/span&gt;&lt;span style=&quot;color: #1d1d1f; background-color: #f6f7f9;&quot;&gt;__swiftcall&lt;/span&gt;&lt;span style=&quot;color: #1d1d1f;&quot;&gt; keyword can contain exactly one &lt;/span&gt;&lt;span style=&quot;color: #1d1d1f; background-color: #f6f7f9;&quot;&gt;__swiftself&lt;/span&gt;&lt;span style=&quot;color: #1d1d1f;&quot;&gt;-tagged argument. On x86-64 Swift binaries, the same logic is applied to &lt;/span&gt;&lt;span style=&quot;color: #1d1d1f; background-color: #f6f7f9;&quot;&gt;r13&lt;/span&gt;&lt;span style=&quot;color: #1d1d1f;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #b30000; background-color: #ffffff; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;The Async Context Register&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;A similar problem arises if we study the following snippet:&lt;/p&gt;
&lt;div id=&quot;hs_cos_wrapper_widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;widget&quot; data-hs-cos-type=&quot;module&quot;&gt;











&lt;style&gt;
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b {
  --ba-module-bg: rgba(255, 255, 255, 0.0);
  --ba-before-bg: rgba(26, 27, 33, 1.0);
  --ba-after-bg: rgba(16, 17, 22, 1.0);
  --ba-chrome-bg: rgba(29, 30, 37, 1.0);
  --ba-before-text: rgba(206, 209, 217, 1.0);
  --ba-after-text: rgba(206, 209, 217, 1.0);
  --ba-border: rgba(255, 255, 255, 0.1);
  --ba-label-bg: rgba(255, 255, 255, 0.06);
  --ba-label-text: rgba(147, 150, 161, 1.0);
  --ba-linenum: rgba(255, 255, 255, 0.22);
  --ba-tok-keyword: rgba(122, 162, 247, 1.0);
  --ba-tok-func: rgba(224, 175, 104, 1.0);
  --ba-tok-type: rgba(125, 207, 255, 1.0);
  --ba-tok-number: rgba(255, 158, 100, 1.0);
  --ba-tok-comment: rgba(86, 95, 137, 1.0);
  --ba-tok-mark: rgba(122, 162, 247, 0.2);
  --ba-divider: rgba(255, 255, 255, 0.16);
  --ba-grip-bg: rgba(244, 244, 245, 1.0);
  --ba-grip-icon: rgba(27, 27, 31, 1.0);
  --ba-divider-w: 2px;
  --ba-grip-size: 42px;
  --ba-radius: 14px;
  --ba-border-w: 1px;
  --ba-pad: 24px;
  --ba-min-h: 200px;
  --ba-code-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;
  --ba-code-size: 15px;
  --ba-label-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ba-label-size: 11px;
  --ba-lh: 1.7;
  display: block;
  background: var(--ba-module-bg);
}

/* ---- hard reset: every selector is (1,1,0)+, beating the theme&#39;s (1,0,1)
       #hs_cos_wrapper_post_body div/pre/code rules without !important ---- */
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__shell,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__intro,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__heading,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__desc,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__frame,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__chrome,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__viewport,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__panel,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__body,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__pre,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__code,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__gutter,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__label,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__files,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__file,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__arrow,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__dots,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__divider,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__handle {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  max-width: none;
  min-width: 0;
  overflow: visible;
  font-family: inherit;
  color: inherit;
  text-transform: none;
  letter-spacing: normal;
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__gutter i,
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__dots i {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  font-style: normal;
}

/* ---- shell ---- */
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__shell { margin: 0 auto; }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__intro {
  max-width: 640px;
  margin: 0 auto 18px;
  text-align: center;
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__heading {
  color: var(--ba-after-text);
  font-size: clamp(1.3rem, 1rem + 1.2vw, 1.85rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__desc {
  margin-top: 7px;
  color: var(--ba-after-text);
  opacity: 0.6;
  font-size: 1rem;
  line-height: 1.55;
}

/* ---- frame: the code box ---- */
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__frame {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 100%;
  
  margin-inline: auto;
  border: var(--ba-border-w) solid var(--ba-border);
  border-radius: var(--ba-radius);
  background: var(--ba-after-bg);
  box-shadow: 0 26px 64px -34px rgba(0, 0, 0, 0.75);
  animation: ba-rise-bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

/* ---- window chrome ---- */
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 16px;
  min-height: 44px;
  background: var(--ba-chrome-bg);
  border-bottom: 1px solid var(--ba-border);
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__dots { display: inline-flex; gap: 7px; flex: none; }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__dots i {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--ba-border);
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__files {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__file { color: var(--ba-linenum); overflow: hidden; text-overflow: ellipsis; }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__file--after { color: var(--ba-label-text); }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__arrow { flex: none; color: var(--ba-linenum); }

/* ---- panels ---- */
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__viewport {
  position: relative;
  display: flex;
  align-items: stretch;
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__panel {
  position: relative;
  min-width: 0;
  min-height: var(--ba-min-h);
  overflow: hidden;
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__panel--before {
  flex: 0 0 var(--ba-split, 50%);
  background-color: var(--ba-before-bg);
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__panel--after {
  flex: 1 1 0;
  background-color: var(--ba-after-bg);
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__panel--single { flex: 1 1 auto; }

/* ---- resize divider + handle (split mode only) ---- */
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__divider {
  position: relative;
  flex: 0 0 var(--ba-divider-w);
  background: var(--ba-divider);
  z-index: 4;
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--ba-grip-size);
  height: var(--ba-grip-size);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ba-grip-bg);
  color: var(--ba-grip-icon);
  cursor: ew-resize;
  touch-action: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.06);
  transition: transform 0.14s ease;
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__handle:hover { transform: translate(-50%, -50%) scale(1.08); }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__handle:focus-visible {
  outline: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 3px var(--ba-after-bg), 0 0 0 5px var(--ba-divider);
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__chev { display: block; pointer-events: none; }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b.is-dragging { user-select: none; -webkit-user-select: none; }

/* ---- code body ---- */
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__body {
  display: flex;
  align-items: flex-start;
  /* no left padding: the sticky gutter (or the pre) owns the left inset so code
     can&#39;t scroll into a dead strip to the left of the line numbers */
  padding: var(--ba-pad) var(--ba-pad) var(--ba-pad) 0;
  overflow-x: auto;
  overflow-y: hidden;
  /* only capture horizontal pans; let vertical swipes scroll the page (mobile) */
  touch-action: pan-x;
  scrollbar-width: thin;
  scrollbar-color: var(--ba-border) transparent;
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  -webkit-font-smoothing: antialiased;
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__body::-webkit-scrollbar { height: 9px; }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__body::-webkit-scrollbar-thumb {
  background: var(--ba-border);
  border-radius: 9px;
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 28px); }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__gutter {
  position: sticky;
  left: 0;
  display: flex;
  flex-direction: column;
  flex: none;
  margin-right: 16px;
  padding-left: var(--ba-pad);
  padding-right: 16px;
  border-right: 1px solid var(--ba-border);
  text-align: right;
  color: var(--ba-linenum);
  font-variant-numeric: tabular-nums;
  user-select: none;
  z-index: 1;
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__panel--before .ba-code__gutter { background: var(--ba-before-bg); }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__panel--after .ba-code__gutter { background: var(--ba-after-bg); }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__gutter i { display: block; line-height: var(--ba-lh); }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__pre {
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  white-space: pre;
  font-variant-ligatures: none;
  tab-size: 4;
  -moz-tab-size: 4;
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__panel--before .ba-code__pre { color: var(--ba-before-text); }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__panel--after .ba-code__pre { color: var(--ba-after-text); }
/* when line numbers are hidden, the pre is first child and owns the left inset */
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__body &gt; .ba-code__pre:first-child { padding-left: var(--ba-pad); }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__code { font-family: var(--ba-code-font); font-size: var(--ba-code-size); }

/* ---- before / after badges ---- */
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__label {
  position: absolute;
  top: var(--ba-pad);
  z-index: 3;
  display: inline-flex;
  padding: 5px 11px;
  border-radius: 6px;
  background: var(--ba-label-bg);
  color: var(--ba-label-text);
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
}
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__label--before { left: var(--ba-pad); }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__label--after { right: var(--ba-pad); }

/* ---- syntax helper classes (used inside the pasted code) ---- */
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .tok-keyword { color: var(--ba-tok-keyword); }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .tok-func { color: var(--ba-tok-func); }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .tok-type { color: var(--ba-tok-type); }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .tok-number { color: var(--ba-tok-number); }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .tok-comment { color: var(--ba-tok-comment); }
#bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .tok-mark {
  background: var(--ba-tok-mark);
  border-radius: 4px;
  padding: 0.05em 0.32em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

@keyframes ba-rise-bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  #bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__frame { animation: none; }
  #bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__handle { transition: none; }
}

/* ---- stack on small screens ---- */
@media (max-width: 720px) {
  #bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__viewport { flex-direction: column; }
  /* when stacked, each panel sizes to its OWN content: no forced min-height
     (which left a big empty void on short panels) and no equal-height collapse
     (which clipped the taller panel&#39;s extra lines) */
  #bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__panel { min-height: 0; overflow: visible; }
  #bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__panel--before,
  #bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__panel--after { flex: 0 0 auto; }
  #bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__divider { flex: 0 0 var(--ba-divider-w); }
  #bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__handle { display: none; }
  /* panels are full-width when stacked: keep both badges left-aligned so the
     &quot;after&quot; label doesn&#39;t float off to the right edge */
  #bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__label--after { right: auto; left: var(--ba-pad); }
}

/* ---- scale the code down on phones so more fits + line numbers hug the edge ---- */
@media (max-width: 600px) {
  #bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b {
    --ba-code-size: 12.5px;
    --ba-label-size: 9.5px;
    --ba-pad: 12px;
    --ba-lh: 1.55;
  }
  #bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__gutter { margin-right: 10px; padding-right: 10px; }
  #bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__chrome { gap: 10px; padding: 0 12px; min-height: 40px; }
  #bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 24px); }
  #bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b .ba-code__label { padding: 4px 9px; letter-spacing: 0.08em; }
}
&lt;/style&gt;



&lt;div id=&quot;bac-widget_e5b95cfc-dc2b-4673-bf93-d33b2700fc8b&quot; class=&quot;ba-code ba-has-labels&quot;&gt;
  &lt;div class=&quot;ba-code__shell&quot;&gt;

    

    &lt;div class=&quot;ba-code__frame&quot;&gt;

      
      &lt;div class=&quot;ba-code__chrome&quot;&gt;
        &lt;span class=&quot;ba-code__dots&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;
        &lt;span class=&quot;ba-code__files&quot;&gt;
          
            
            &lt;span class=&quot;ba-code__file ba-code__file--after&quot;&gt;&lt;/span&gt;
            
          
        &lt;/span&gt;
      &lt;/div&gt;
      

      
      &lt;div class=&quot;ba-code__viewport&quot;&gt;
        
        
&lt;div class=&quot;ba-code__panel ba-code__panel--before ba-code__panel--single&quot;&gt;
  &lt;span class=&quot;ba-code__label ba-code__label--before&quot;&gt;Disassembly &lt;/span&gt;
  &lt;div class=&quot;ba-code__body&quot;&gt;
    &lt;span class=&quot;ba-code__gutter&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;1&lt;/i&gt;&lt;i&gt;2&lt;/i&gt;&lt;i&gt;3&lt;/i&gt;&lt;i&gt;4&lt;/i&gt;&lt;i&gt;5&lt;/i&gt;&lt;i&gt;6&lt;/i&gt;&lt;i&gt;7&lt;/i&gt;&lt;i&gt;8&lt;/i&gt;&lt;i&gt;9&lt;/i&gt;&lt;i&gt;10&lt;/i&gt;&lt;i&gt;11&lt;/i&gt;&lt;i&gt;12&lt;/i&gt;&lt;i&gt;13&lt;/i&gt;&lt;i&gt;14&lt;/i&gt;&lt;i&gt;15&lt;/i&gt;&lt;i&gt;16&lt;/i&gt;&lt;i&gt;17&lt;/i&gt;&lt;i&gt;18&lt;/i&gt;&lt;i&gt;19&lt;/i&gt;&lt;i&gt;20&lt;/i&gt;&lt;i&gt;21&lt;/i&gt;&lt;i&gt;22&lt;/i&gt;&lt;i&gt;23&lt;/i&gt;&lt;i&gt;24&lt;/i&gt;&lt;i&gt;25&lt;/i&gt;&lt;i&gt;26&lt;/i&gt;&lt;/span&gt;
    &lt;pre class=&quot;ba-code__pre&quot;&gt;&lt;code class=&quot;ba-code__code&quot;&gt;&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EA4&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;; void __swiftcall specialized thunk for @escaping @convention(thin) @async () -&amp;gt; ()()&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EA4&lt;/span&gt; &lt;span style=&quot;color:#e5c07b&quot;&gt;_$sIetH_yts5Error_pIegHrzo_TR10async_MainTf3npf_n&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EA4&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EA4&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;var_20&lt;/span&gt;  &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;-0x20&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EA4&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;var_18&lt;/span&gt;  &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;-0x18&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EA4&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;var_10&lt;/span&gt;  &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;-0x10&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EA4&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EA4&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;PACIBSP&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EA8&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;ORR&lt;/span&gt;         &lt;span style=&quot;color:#56b6c2&quot;&gt;X29&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;X29&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x1000000000000000&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EAC&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;SUB&lt;/span&gt;         &lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x20&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EB0&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;STP&lt;/span&gt;         &lt;span style=&quot;color:#56b6c2&quot;&gt;X29&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;X30&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x20&lt;/span&gt;&lt;span style=&quot;color:#abb2bf&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;var_10&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EB4&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;ADD&lt;/span&gt;         &lt;span style=&quot;color:#56b6c2&quot;&gt;X16&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x20&lt;/span&gt;&lt;span style=&quot;color:#abb2bf&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;var_18&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EB8&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;MOVK&lt;/span&gt;        &lt;span style=&quot;color:#56b6c2&quot;&gt;X16&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0xC31A&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt;LSL&lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;48&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EBC&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;MOV&lt;/span&gt;         &lt;span style=&quot;color:#56b6c2&quot;&gt;X17&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;X22&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EC0&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;PACDB&lt;/span&gt;       &lt;span style=&quot;color:#56b6c2&quot;&gt;X17&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;X16&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EC4&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;STR&lt;/span&gt;         &lt;span style=&quot;color:#56b6c2&quot;&gt;X17&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x20&lt;/span&gt;&lt;span style=&quot;color:#abb2bf&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;var_18&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EC8&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;ADD&lt;/span&gt;         &lt;span style=&quot;color:#56b6c2&quot;&gt;X29&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x20&lt;/span&gt;&lt;span style=&quot;color:#abb2bf&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;var_10&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003ECC&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;MOV&lt;/span&gt;         &lt;span style=&quot;color:#56b6c2&quot;&gt;X0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0&lt;/span&gt;  &lt;span style=&quot;color:#7d8590&quot;&gt;; request&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003ED0&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;BL&lt;/span&gt;          &lt;span style=&quot;color:#e5c07b&quot;&gt;_$sScMMa&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;; type metadata accessor for MainActor&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003ED4&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;STR&lt;/span&gt;         &lt;span style=&quot;color:#56b6c2&quot;&gt;X0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;X22&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x10&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;; (A)&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003ED8&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;MOV&lt;/span&gt;         &lt;span style=&quot;color:#56b6c2&quot;&gt;X20&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;X0&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EDC&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;BL&lt;/span&gt;          &lt;span style=&quot;color:#e5c07b&quot;&gt;_$sScM6sharedScMvgZ&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;; static MainActor.shared.getter&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EE0&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;STR&lt;/span&gt;         &lt;span style=&quot;color:#56b6c2&quot;&gt;X0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;X22&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x18&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;; (B)&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EE4&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;ADRL&lt;/span&gt;        &lt;span style=&quot;color:#56b6c2&quot;&gt;X8&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#e5c07b&quot;&gt;_$s14sampler_arm64e3AppV4mainyyYaFZTf4d_nTu&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;; async function pointer to specialized static App.main()&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100003EEC&lt;/span&gt;         &lt;span style=&quot;color:#c678dd&quot;&gt;LDP&lt;/span&gt;         &lt;span style=&quot;color:#56b6c2&quot;&gt;W9&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;W0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;X8&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;; size&lt;/span&gt;
&lt;span style=&quot;color:#7d8590&quot;&gt;; ---------------------------- snip ---------------------------------&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

        
      &lt;/div&gt;
      

    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;Despite the PAC-aware prologue, what draws our attention here are the&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X22&lt;/code&gt;-based memory accesses without an obvious preceding sequence that would make&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X22&lt;/code&gt;&lt;span&gt; &lt;/span&gt;point to anything sensible. Again, that would be fair confusion on compiler-generated AAPCS64 code, but the Swift compiler reserves&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X22&lt;/code&gt;&lt;span&gt; &lt;/span&gt;(and its x86-64 counterpart&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;r14&lt;/code&gt;) as the&lt;span&gt; &lt;/span&gt;&lt;em&gt;async context register&lt;/em&gt;.&lt;/p&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;The async context stores state needed to suspend and resume an&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;async&lt;/code&gt;&lt;span&gt; &lt;/span&gt;function, such as continuation/resume information, but most notably async frame data, which can often span entire Swift objects. Keeping it in a dedicated callee-saved register lets Swift async code access that state cheaply across calls without repeatedly passing it as a normal argument.&lt;/p&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;This deviation from the regular ABI used to confuse pre-9.4 IDAs once again. Here&#39;s the corresponding pseudocode in IDA 9.3 (ignore the terrible whitespacing induced by the Swift demangler for a second):&lt;/p&gt;
&lt;div id=&quot;hs_cos_wrapper_widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;widget&quot; data-hs-cos-type=&quot;module&quot;&gt;











&lt;style&gt;
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 {
  --ba-module-bg: rgba(255, 255, 255, 0.0);
  --ba-before-bg: rgba(26, 27, 33, 1.0);
  --ba-after-bg: rgba(16, 17, 22, 1.0);
  --ba-chrome-bg: rgba(29, 30, 37, 1.0);
  --ba-before-text: rgba(206, 209, 217, 1.0);
  --ba-after-text: rgba(206, 209, 217, 1.0);
  --ba-border: rgba(255, 255, 255, 0.1);
  --ba-label-bg: rgba(255, 255, 255, 0.06);
  --ba-label-text: rgba(147, 150, 161, 1.0);
  --ba-linenum: rgba(255, 255, 255, 0.22);
  --ba-tok-keyword: rgba(122, 162, 247, 1.0);
  --ba-tok-func: rgba(224, 175, 104, 1.0);
  --ba-tok-type: rgba(125, 207, 255, 1.0);
  --ba-tok-number: rgba(255, 158, 100, 1.0);
  --ba-tok-comment: rgba(86, 95, 137, 1.0);
  --ba-tok-mark: rgba(122, 162, 247, 0.2);
  --ba-divider: rgba(255, 255, 255, 0.16);
  --ba-grip-bg: rgba(244, 244, 245, 1.0);
  --ba-grip-icon: rgba(27, 27, 31, 1.0);
  --ba-divider-w: 2px;
  --ba-grip-size: 42px;
  --ba-radius: 14px;
  --ba-border-w: 1px;
  --ba-pad: 24px;
  --ba-min-h: 200px;
  --ba-code-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;
  --ba-code-size: 15px;
  --ba-label-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ba-label-size: 11px;
  --ba-lh: 1.7;
  display: block;
  background: var(--ba-module-bg);
}

/* ---- hard reset: every selector is (1,1,0)+, beating the theme&#39;s (1,0,1)
       #hs_cos_wrapper_post_body div/pre/code rules without !important ---- */
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__shell,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__intro,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__heading,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__desc,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__frame,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__chrome,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__viewport,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__panel,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__body,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__pre,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__code,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__gutter,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__label,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__files,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__file,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__arrow,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__dots,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__divider,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__handle {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  max-width: none;
  min-width: 0;
  overflow: visible;
  font-family: inherit;
  color: inherit;
  text-transform: none;
  letter-spacing: normal;
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__gutter i,
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__dots i {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  font-style: normal;
}

/* ---- shell ---- */
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__shell { margin: 0 auto; }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__intro {
  max-width: 640px;
  margin: 0 auto 18px;
  text-align: center;
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__heading {
  color: var(--ba-after-text);
  font-size: clamp(1.3rem, 1rem + 1.2vw, 1.85rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__desc {
  margin-top: 7px;
  color: var(--ba-after-text);
  opacity: 0.6;
  font-size: 1rem;
  line-height: 1.55;
}

/* ---- frame: the code box ---- */
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__frame {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 100%;
  
  margin-inline: auto;
  border: var(--ba-border-w) solid var(--ba-border);
  border-radius: var(--ba-radius);
  background: var(--ba-after-bg);
  box-shadow: 0 26px 64px -34px rgba(0, 0, 0, 0.75);
  animation: ba-rise-bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

/* ---- window chrome ---- */
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 16px;
  min-height: 44px;
  background: var(--ba-chrome-bg);
  border-bottom: 1px solid var(--ba-border);
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__dots { display: inline-flex; gap: 7px; flex: none; }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__dots i {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--ba-border);
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__files {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__file { color: var(--ba-linenum); overflow: hidden; text-overflow: ellipsis; }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__file--after { color: var(--ba-label-text); }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__arrow { flex: none; color: var(--ba-linenum); }

/* ---- panels ---- */
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__viewport {
  position: relative;
  display: flex;
  align-items: stretch;
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__panel {
  position: relative;
  min-width: 0;
  min-height: var(--ba-min-h);
  overflow: hidden;
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__panel--before {
  flex: 0 0 var(--ba-split, 50%);
  background-color: var(--ba-before-bg);
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__panel--after {
  flex: 1 1 0;
  background-color: var(--ba-after-bg);
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__panel--single { flex: 1 1 auto; }

/* ---- resize divider + handle (split mode only) ---- */
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__divider {
  position: relative;
  flex: 0 0 var(--ba-divider-w);
  background: var(--ba-divider);
  z-index: 4;
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--ba-grip-size);
  height: var(--ba-grip-size);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ba-grip-bg);
  color: var(--ba-grip-icon);
  cursor: ew-resize;
  touch-action: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.06);
  transition: transform 0.14s ease;
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__handle:hover { transform: translate(-50%, -50%) scale(1.08); }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__handle:focus-visible {
  outline: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 3px var(--ba-after-bg), 0 0 0 5px var(--ba-divider);
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__chev { display: block; pointer-events: none; }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9.is-dragging { user-select: none; -webkit-user-select: none; }

/* ---- code body ---- */
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__body {
  display: flex;
  align-items: flex-start;
  /* no left padding: the sticky gutter (or the pre) owns the left inset so code
     can&#39;t scroll into a dead strip to the left of the line numbers */
  padding: var(--ba-pad) var(--ba-pad) var(--ba-pad) 0;
  overflow-x: auto;
  overflow-y: hidden;
  /* only capture horizontal pans; let vertical swipes scroll the page (mobile) */
  touch-action: pan-x;
  scrollbar-width: thin;
  scrollbar-color: var(--ba-border) transparent;
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  -webkit-font-smoothing: antialiased;
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__body::-webkit-scrollbar { height: 9px; }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__body::-webkit-scrollbar-thumb {
  background: var(--ba-border);
  border-radius: 9px;
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 28px); }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__gutter {
  position: sticky;
  left: 0;
  display: flex;
  flex-direction: column;
  flex: none;
  margin-right: 16px;
  padding-left: var(--ba-pad);
  padding-right: 16px;
  border-right: 1px solid var(--ba-border);
  text-align: right;
  color: var(--ba-linenum);
  font-variant-numeric: tabular-nums;
  user-select: none;
  z-index: 1;
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__panel--before .ba-code__gutter { background: var(--ba-before-bg); }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__panel--after .ba-code__gutter { background: var(--ba-after-bg); }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__gutter i { display: block; line-height: var(--ba-lh); }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__pre {
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  white-space: pre;
  font-variant-ligatures: none;
  tab-size: 4;
  -moz-tab-size: 4;
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__panel--before .ba-code__pre { color: var(--ba-before-text); }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__panel--after .ba-code__pre { color: var(--ba-after-text); }
/* when line numbers are hidden, the pre is first child and owns the left inset */
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__body &gt; .ba-code__pre:first-child { padding-left: var(--ba-pad); }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__code { font-family: var(--ba-code-font); font-size: var(--ba-code-size); }

/* ---- before / after badges ---- */
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__label {
  position: absolute;
  top: var(--ba-pad);
  z-index: 3;
  display: inline-flex;
  padding: 5px 11px;
  border-radius: 6px;
  background: var(--ba-label-bg);
  color: var(--ba-label-text);
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
}
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__label--before { left: var(--ba-pad); }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__label--after { right: var(--ba-pad); }

/* ---- syntax helper classes (used inside the pasted code) ---- */
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .tok-keyword { color: var(--ba-tok-keyword); }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .tok-func { color: var(--ba-tok-func); }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .tok-type { color: var(--ba-tok-type); }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .tok-number { color: var(--ba-tok-number); }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .tok-comment { color: var(--ba-tok-comment); }
#bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .tok-mark {
  background: var(--ba-tok-mark);
  border-radius: 4px;
  padding: 0.05em 0.32em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

@keyframes ba-rise-bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  #bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__frame { animation: none; }
  #bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__handle { transition: none; }
}

/* ---- stack on small screens ---- */
@media (max-width: 720px) {
  #bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__viewport { flex-direction: column; }
  /* when stacked, each panel sizes to its OWN content: no forced min-height
     (which left a big empty void on short panels) and no equal-height collapse
     (which clipped the taller panel&#39;s extra lines) */
  #bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__panel { min-height: 0; overflow: visible; }
  #bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__panel--before,
  #bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__panel--after { flex: 0 0 auto; }
  #bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__divider { flex: 0 0 var(--ba-divider-w); }
  #bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__handle { display: none; }
  /* panels are full-width when stacked: keep both badges left-aligned so the
     &quot;after&quot; label doesn&#39;t float off to the right edge */
  #bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__label--after { right: auto; left: var(--ba-pad); }
}

/* ---- scale the code down on phones so more fits + line numbers hug the edge ---- */
@media (max-width: 600px) {
  #bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 {
    --ba-code-size: 12.5px;
    --ba-label-size: 9.5px;
    --ba-pad: 12px;
    --ba-lh: 1.55;
  }
  #bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__gutter { margin-right: 10px; padding-right: 10px; }
  #bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__chrome { gap: 10px; padding: 0 12px; min-height: 40px; }
  #bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 24px); }
  #bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9 .ba-code__label { padding: 4px 9px; letter-spacing: 0.08em; }
}
&lt;/style&gt;



&lt;div id=&quot;bac-widget_fa66c3d4-d642-47ba-9e2e-7038d575ebf9&quot; class=&quot;ba-code ba-has-labels&quot;&gt;
  &lt;div class=&quot;ba-code__shell&quot;&gt;

    

    &lt;div class=&quot;ba-code__frame&quot;&gt;

      
      &lt;div class=&quot;ba-code__chrome&quot;&gt;
        &lt;span class=&quot;ba-code__dots&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;
        &lt;span class=&quot;ba-code__files&quot;&gt;
          
            
            &lt;span class=&quot;ba-code__file ba-code__file--after&quot;&gt;&lt;/span&gt;
            
          
        &lt;/span&gt;
      &lt;/div&gt;
      

      
      &lt;div class=&quot;ba-code__viewport&quot;&gt;
        
        
&lt;div class=&quot;ba-code__panel ba-code__panel--before ba-code__panel--single&quot;&gt;
  &lt;span class=&quot;ba-code__label ba-code__label--before&quot;&gt;&lt;/span&gt;
  &lt;div class=&quot;ba-code__body&quot;&gt;
    &lt;span class=&quot;ba-code__gutter&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;1&lt;/i&gt;&lt;i&gt;2&lt;/i&gt;&lt;i&gt;3&lt;/i&gt;&lt;i&gt;4&lt;/i&gt;&lt;i&gt;5&lt;/i&gt;&lt;i&gt;6&lt;/i&gt;&lt;i&gt;7&lt;/i&gt;&lt;i&gt;8&lt;/i&gt;&lt;i&gt;9&lt;/i&gt;&lt;i&gt;10&lt;/i&gt;&lt;i&gt;11&lt;/i&gt;&lt;i&gt;12&lt;/i&gt;&lt;i&gt;13&lt;/i&gt;&lt;i&gt;14&lt;/i&gt;&lt;i&gt;15&lt;/i&gt;&lt;i&gt;16&lt;/i&gt;&lt;i&gt;17&lt;/i&gt;&lt;i&gt;18&lt;/i&gt;&lt;/span&gt;
    &lt;pre class=&quot;ba-code__pre&quot;&gt;&lt;code class=&quot;ba-code__code&quot;&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:#c678dd&quot;&gt;__swiftcall&lt;/span&gt; specialized thunk for @escaping @convention(thin) @async () -&amp;gt; ()()
&lt;span style=&quot;color:#7f8696&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color:#56b6c2&quot;&gt;_QWORD&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;v0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;// x22&lt;/span&gt;
  &lt;span style=&quot;color:#56b6c2&quot;&gt;_QWORD&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;v1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;// x0&lt;/span&gt;
  &lt;span style=&quot;color:#56b6c2&quot;&gt;__int64&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;v2&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;// [xsp+18h] [xbp-8h]&lt;/span&gt;

  &lt;span style=&quot;color:#e0e2e6&quot;&gt;v0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; type metadata accessor for &lt;span style=&quot;color:#56b6c2&quot;&gt;MainActor&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;.&lt;/span&gt;value&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#e0e2e6&quot;&gt;v0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#c678dd&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;MainActor&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;.&lt;/span&gt;shared&lt;span style=&quot;color:#7f8696&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#e5c07b&quot;&gt;getter&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#e0e2e6&quot;&gt;v1&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e5c07b&quot;&gt;swift_task_alloc&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x160u&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#e0e2e6&quot;&gt;v0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;v1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#abb2bf&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;v1&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;v0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#e0e2e6&quot;&gt;v1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; specialized thunk for @escaping @convention(thin) @async () -&amp;gt; ()&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#c678dd&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;v2&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;^&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;v2&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;0x4000000000000000LL&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color:#e5c07b&quot;&gt;__break&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0xC471u&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  specialized &lt;span style=&quot;color:#c678dd&quot;&gt;static&lt;/span&gt; App&lt;span style=&quot;color:#7f8696&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#e5c07b&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color:#7f8696&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color:#7d8590&quot;&gt;// 100003ED4: variable &#39;v0&#39; is possibly undefined&lt;/span&gt;
&lt;span style=&quot;color:#7d8590&quot;&gt;// 100003F4C: variable &#39;v2&#39; is possibly undefined&lt;/span&gt;
&lt;span style=&quot;color:#7d8590&quot;&gt;// 100006964: using guessed type __int64 __swiftcall static MainActor.shared.getter();&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

        
      &lt;/div&gt;
      

    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;The key is the line saying&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;// 100003ED4: variable &#39;v0&#39; is possibly undefined&lt;/code&gt;: in GUI IDA,&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;v0&lt;/code&gt;&lt;span&gt; &lt;/span&gt;would render in red, indicating that the underlying register was read from before it was written to. (Such red markers serve as a great indicator that something is wrong with the current pseudocode.)&lt;/p&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;In IDA 9.4, we can mark this function as&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swiftasync&lt;/code&gt;&lt;span&gt; &lt;/span&gt;to tell the decompiler that&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X22&lt;/code&gt;&lt;span&gt; &lt;/span&gt;carries a pointer to a meaningful async context:&lt;/p&gt;
&lt;div id=&quot;hs_cos_wrapper_widget_2a3e3d26-b843-4655-a3d6-7ea99618707d&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;widget&quot; data-hs-cos-type=&quot;module&quot;&gt;











&lt;style&gt;
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d {
  --ba-module-bg: rgba(255, 255, 255, 0.0);
  --ba-before-bg: rgba(26, 27, 33, 1.0);
  --ba-after-bg: rgba(16, 17, 22, 1.0);
  --ba-chrome-bg: rgba(29, 30, 37, 1.0);
  --ba-before-text: rgba(206, 209, 217, 1.0);
  --ba-after-text: rgba(206, 209, 217, 1.0);
  --ba-border: rgba(255, 255, 255, 0.1);
  --ba-label-bg: rgba(255, 255, 255, 0.06);
  --ba-label-text: rgba(147, 150, 161, 1.0);
  --ba-linenum: rgba(255, 255, 255, 0.22);
  --ba-tok-keyword: rgba(122, 162, 247, 1.0);
  --ba-tok-func: rgba(224, 175, 104, 1.0);
  --ba-tok-type: rgba(125, 207, 255, 1.0);
  --ba-tok-number: rgba(255, 158, 100, 1.0);
  --ba-tok-comment: rgba(86, 95, 137, 1.0);
  --ba-tok-mark: rgba(122, 162, 247, 0.2);
  --ba-divider: rgba(255, 255, 255, 0.16);
  --ba-grip-bg: rgba(244, 244, 245, 1.0);
  --ba-grip-icon: rgba(27, 27, 31, 1.0);
  --ba-divider-w: 2px;
  --ba-grip-size: 42px;
  --ba-radius: 14px;
  --ba-border-w: 1px;
  --ba-pad: 24px;
  --ba-min-h: 200px;
  --ba-code-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;
  --ba-code-size: 15px;
  --ba-label-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ba-label-size: 11px;
  --ba-lh: 1.7;
  display: block;
  background: var(--ba-module-bg);
}

/* ---- hard reset: every selector is (1,1,0)+, beating the theme&#39;s (1,0,1)
       #hs_cos_wrapper_post_body div/pre/code rules without !important ---- */
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__shell,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__intro,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__heading,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__desc,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__frame,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__chrome,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__viewport,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__panel,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__body,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__pre,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__code,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__gutter,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__label,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__files,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__file,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__arrow,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__dots,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__divider,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__handle {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  max-width: none;
  min-width: 0;
  overflow: visible;
  font-family: inherit;
  color: inherit;
  text-transform: none;
  letter-spacing: normal;
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__gutter i,
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__dots i {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  font-style: normal;
}

/* ---- shell ---- */
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__shell { margin: 0 auto; }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__intro {
  max-width: 640px;
  margin: 0 auto 18px;
  text-align: center;
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__heading {
  color: var(--ba-after-text);
  font-size: clamp(1.3rem, 1rem + 1.2vw, 1.85rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__desc {
  margin-top: 7px;
  color: var(--ba-after-text);
  opacity: 0.6;
  font-size: 1rem;
  line-height: 1.55;
}

/* ---- frame: the code box ---- */
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__frame {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 100%;
  
  margin-inline: auto;
  border: var(--ba-border-w) solid var(--ba-border);
  border-radius: var(--ba-radius);
  background: var(--ba-after-bg);
  box-shadow: 0 26px 64px -34px rgba(0, 0, 0, 0.75);
  animation: ba-rise-bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

/* ---- window chrome ---- */
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 16px;
  min-height: 44px;
  background: var(--ba-chrome-bg);
  border-bottom: 1px solid var(--ba-border);
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__dots { display: inline-flex; gap: 7px; flex: none; }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__dots i {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--ba-border);
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__files {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__file { color: var(--ba-linenum); overflow: hidden; text-overflow: ellipsis; }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__file--after { color: var(--ba-label-text); }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__arrow { flex: none; color: var(--ba-linenum); }

/* ---- panels ---- */
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__viewport {
  position: relative;
  display: flex;
  align-items: stretch;
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__panel {
  position: relative;
  min-width: 0;
  min-height: var(--ba-min-h);
  overflow: hidden;
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__panel--before {
  flex: 0 0 var(--ba-split, 50%);
  background-color: var(--ba-before-bg);
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__panel--after {
  flex: 1 1 0;
  background-color: var(--ba-after-bg);
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__panel--single { flex: 1 1 auto; }

/* ---- resize divider + handle (split mode only) ---- */
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__divider {
  position: relative;
  flex: 0 0 var(--ba-divider-w);
  background: var(--ba-divider);
  z-index: 4;
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--ba-grip-size);
  height: var(--ba-grip-size);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ba-grip-bg);
  color: var(--ba-grip-icon);
  cursor: ew-resize;
  touch-action: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.06);
  transition: transform 0.14s ease;
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__handle:hover { transform: translate(-50%, -50%) scale(1.08); }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__handle:focus-visible {
  outline: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 3px var(--ba-after-bg), 0 0 0 5px var(--ba-divider);
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__chev { display: block; pointer-events: none; }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d.is-dragging { user-select: none; -webkit-user-select: none; }

/* ---- code body ---- */
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__body {
  display: flex;
  align-items: flex-start;
  /* no left padding: the sticky gutter (or the pre) owns the left inset so code
     can&#39;t scroll into a dead strip to the left of the line numbers */
  padding: var(--ba-pad) var(--ba-pad) var(--ba-pad) 0;
  overflow-x: auto;
  overflow-y: hidden;
  /* only capture horizontal pans; let vertical swipes scroll the page (mobile) */
  touch-action: pan-x;
  scrollbar-width: thin;
  scrollbar-color: var(--ba-border) transparent;
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  -webkit-font-smoothing: antialiased;
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__body::-webkit-scrollbar { height: 9px; }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__body::-webkit-scrollbar-thumb {
  background: var(--ba-border);
  border-radius: 9px;
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 28px); }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__gutter {
  position: sticky;
  left: 0;
  display: flex;
  flex-direction: column;
  flex: none;
  margin-right: 16px;
  padding-left: var(--ba-pad);
  padding-right: 16px;
  border-right: 1px solid var(--ba-border);
  text-align: right;
  color: var(--ba-linenum);
  font-variant-numeric: tabular-nums;
  user-select: none;
  z-index: 1;
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__panel--before .ba-code__gutter { background: var(--ba-before-bg); }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__panel--after .ba-code__gutter { background: var(--ba-after-bg); }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__gutter i { display: block; line-height: var(--ba-lh); }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__pre {
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  white-space: pre;
  font-variant-ligatures: none;
  tab-size: 4;
  -moz-tab-size: 4;
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__panel--before .ba-code__pre { color: var(--ba-before-text); }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__panel--after .ba-code__pre { color: var(--ba-after-text); }
/* when line numbers are hidden, the pre is first child and owns the left inset */
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__body &gt; .ba-code__pre:first-child { padding-left: var(--ba-pad); }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__code { font-family: var(--ba-code-font); font-size: var(--ba-code-size); }

/* ---- before / after badges ---- */
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__label {
  position: absolute;
  top: var(--ba-pad);
  z-index: 3;
  display: inline-flex;
  padding: 5px 11px;
  border-radius: 6px;
  background: var(--ba-label-bg);
  color: var(--ba-label-text);
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
}
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__label--before { left: var(--ba-pad); }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__label--after { right: var(--ba-pad); }

/* ---- syntax helper classes (used inside the pasted code) ---- */
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .tok-keyword { color: var(--ba-tok-keyword); }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .tok-func { color: var(--ba-tok-func); }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .tok-type { color: var(--ba-tok-type); }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .tok-number { color: var(--ba-tok-number); }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .tok-comment { color: var(--ba-tok-comment); }
#bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .tok-mark {
  background: var(--ba-tok-mark);
  border-radius: 4px;
  padding: 0.05em 0.32em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

@keyframes ba-rise-bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  #bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__frame { animation: none; }
  #bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__handle { transition: none; }
}

/* ---- stack on small screens ---- */
@media (max-width: 720px) {
  #bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__viewport { flex-direction: column; }
  /* when stacked, each panel sizes to its OWN content: no forced min-height
     (which left a big empty void on short panels) and no equal-height collapse
     (which clipped the taller panel&#39;s extra lines) */
  #bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__panel { min-height: 0; overflow: visible; }
  #bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__panel--before,
  #bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__panel--after { flex: 0 0 auto; }
  #bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__divider { flex: 0 0 var(--ba-divider-w); }
  #bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__handle { display: none; }
  /* panels are full-width when stacked: keep both badges left-aligned so the
     &quot;after&quot; label doesn&#39;t float off to the right edge */
  #bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__label--after { right: auto; left: var(--ba-pad); }
}

/* ---- scale the code down on phones so more fits + line numbers hug the edge ---- */
@media (max-width: 600px) {
  #bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d {
    --ba-code-size: 12.5px;
    --ba-label-size: 9.5px;
    --ba-pad: 12px;
    --ba-lh: 1.55;
  }
  #bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__gutter { margin-right: 10px; padding-right: 10px; }
  #bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__chrome { gap: 10px; padding: 0 12px; min-height: 40px; }
  #bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 24px); }
  #bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d .ba-code__label { padding: 4px 9px; letter-spacing: 0.08em; }
}
&lt;/style&gt;



&lt;div id=&quot;bac-widget_2a3e3d26-b843-4655-a3d6-7ea99618707d&quot; class=&quot;ba-code ba-has-labels&quot;&gt;
  &lt;div class=&quot;ba-code__shell&quot;&gt;

    

    &lt;div class=&quot;ba-code__frame&quot;&gt;

      
      &lt;div class=&quot;ba-code__chrome&quot;&gt;
        &lt;span class=&quot;ba-code__dots&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;
        &lt;span class=&quot;ba-code__files&quot;&gt;
          
            
            &lt;span class=&quot;ba-code__file ba-code__file--after&quot;&gt;&lt;/span&gt;
            
          
        &lt;/span&gt;
      &lt;/div&gt;
      

      
      &lt;div class=&quot;ba-code__viewport&quot;&gt;
        
        
&lt;div class=&quot;ba-code__panel ba-code__panel--before ba-code__panel--single&quot;&gt;
  &lt;span class=&quot;ba-code__label ba-code__label--before&quot;&gt;pseudocode&lt;/span&gt;
  &lt;div class=&quot;ba-code__body&quot;&gt;
    &lt;span class=&quot;ba-code__gutter&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;1&lt;/i&gt;&lt;i&gt;2&lt;/i&gt;&lt;i&gt;3&lt;/i&gt;&lt;i&gt;4&lt;/i&gt;&lt;i&gt;5&lt;/i&gt;&lt;i&gt;6&lt;/i&gt;&lt;i&gt;7&lt;/i&gt;&lt;i&gt;8&lt;/i&gt;&lt;i&gt;9&lt;/i&gt;&lt;i&gt;10&lt;/i&gt;&lt;i&gt;11&lt;/i&gt;&lt;i&gt;12&lt;/i&gt;&lt;i&gt;13&lt;/i&gt;&lt;i&gt;14&lt;/i&gt;&lt;i&gt;15&lt;/i&gt;&lt;i&gt;16&lt;/i&gt;&lt;/span&gt;
    &lt;pre class=&quot;ba-code__pre&quot;&gt;&lt;code class=&quot;ba-code__code&quot;&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:#c678dd&quot;&gt;__swiftcall&lt;/span&gt; &lt;span style=&quot;color:#c678dd&quot;&gt;__swiftasync&lt;/span&gt; specialized thunk for @escaping @convention(thin) @async () -&amp;gt; ()()
&lt;span style=&quot;color:#7f8696&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color:#56b6c2&quot;&gt;_QWORD&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;async_context&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;// x22&lt;/span&gt;
  &lt;span style=&quot;color:#56b6c2&quot;&gt;_QWORD&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;v1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;// x0&lt;/span&gt;
  &lt;span style=&quot;color:#56b6c2&quot;&gt;__int64&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;v2&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;// [xsp+18h] [xbp-8h]&lt;/span&gt;

  &lt;span style=&quot;color:#e0e2e6&quot;&gt;async_context&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e5c07b&quot;&gt;__swift_get_async_context&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#e0e2e6&quot;&gt;async_context&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; type metadata accessor for &lt;span style=&quot;color:#56b6c2&quot;&gt;MainActor&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;request:&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;.&lt;/span&gt;value&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#e0e2e6&quot;&gt;async_context&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#c678dd&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;MainActor&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;.&lt;/span&gt;shared&lt;span style=&quot;color:#7f8696&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#e5c07b&quot;&gt;getter&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#e0e2e6&quot;&gt;v1&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e5c07b&quot;&gt;swift_task_alloc&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;size:&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;0x160u&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#e0e2e6&quot;&gt;async_context&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;v1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#abb2bf&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;v1&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;async_context&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#e0e2e6&quot;&gt;v1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; specialized thunk for @escaping @convention(thin) @async () -&amp;gt; ()&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#c678dd&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;v2&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;^&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;v2&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;0x4000000000000000LL&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color:#e5c07b&quot;&gt;__break&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0xC471u&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  specialized &lt;span style=&quot;color:#c678dd&quot;&gt;static&lt;/span&gt; App&lt;span style=&quot;color:#7f8696&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#e5c07b&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color:#7f8696&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

        
      &lt;/div&gt;
      

    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;As you&#39;ll notice, we decided against modelling the async context as an explicit parameter, and rather fall back to a custom intrinsic,&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swift_get_async_context&lt;/code&gt;. This intrinsic is internally marked as non-propagating, so that it always results in an explicit local variable that can be explicitly typed by the user. This way, we can define a new struct type&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;my_async_ctxt&lt;/code&gt;, then incrementally build up information about the currently executing async context and edit the underlying type as we go.&lt;/p&gt;
&lt;h3 style=&quot;color: #b30000; background-color: #ffffff; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;The Error Return Register&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;Which brings us to our last contender for the top spot in the bizarre ABI zoo: the error return register (ARM64&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X21&lt;/code&gt;&lt;span&gt; &lt;/span&gt;/ x86-64&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;r12&lt;/code&gt;). Here is the third snippet for you to study:&lt;/p&gt;
&lt;div id=&quot;hs_cos_wrapper_widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;widget&quot; data-hs-cos-type=&quot;module&quot;&gt;











&lt;style&gt;
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b {
  --ba-module-bg: rgba(255, 255, 255, 0.0);
  --ba-before-bg: rgba(26, 27, 33, 1.0);
  --ba-after-bg: rgba(16, 17, 22, 1.0);
  --ba-chrome-bg: rgba(29, 30, 37, 1.0);
  --ba-before-text: rgba(206, 209, 217, 1.0);
  --ba-after-text: rgba(206, 209, 217, 1.0);
  --ba-border: rgba(255, 255, 255, 0.1);
  --ba-label-bg: rgba(255, 255, 255, 0.06);
  --ba-label-text: rgba(147, 150, 161, 1.0);
  --ba-linenum: rgba(255, 255, 255, 0.22);
  --ba-tok-keyword: rgba(122, 162, 247, 1.0);
  --ba-tok-func: rgba(224, 175, 104, 1.0);
  --ba-tok-type: rgba(125, 207, 255, 1.0);
  --ba-tok-number: rgba(255, 158, 100, 1.0);
  --ba-tok-comment: rgba(86, 95, 137, 1.0);
  --ba-tok-mark: rgba(122, 162, 247, 0.2);
  --ba-divider: rgba(255, 255, 255, 0.16);
  --ba-grip-bg: rgba(244, 244, 245, 1.0);
  --ba-grip-icon: rgba(27, 27, 31, 1.0);
  --ba-divider-w: 2px;
  --ba-grip-size: 42px;
  --ba-radius: 14px;
  --ba-border-w: 1px;
  --ba-pad: 24px;
  --ba-min-h: 200px;
  --ba-code-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;
  --ba-code-size: 15px;
  --ba-label-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ba-label-size: 11px;
  --ba-lh: 1.7;
  display: block;
  background: var(--ba-module-bg);
}

/* ---- hard reset: every selector is (1,1,0)+, beating the theme&#39;s (1,0,1)
       #hs_cos_wrapper_post_body div/pre/code rules without !important ---- */
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__shell,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__intro,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__heading,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__desc,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__frame,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__chrome,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__viewport,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__panel,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__body,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__pre,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__code,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__gutter,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__label,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__files,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__file,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__arrow,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__dots,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__divider,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__handle {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  max-width: none;
  min-width: 0;
  overflow: visible;
  font-family: inherit;
  color: inherit;
  text-transform: none;
  letter-spacing: normal;
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__gutter i,
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__dots i {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  font-style: normal;
}

/* ---- shell ---- */
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__shell { margin: 0 auto; }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__intro {
  max-width: 640px;
  margin: 0 auto 18px;
  text-align: center;
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__heading {
  color: var(--ba-after-text);
  font-size: clamp(1.3rem, 1rem + 1.2vw, 1.85rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__desc {
  margin-top: 7px;
  color: var(--ba-after-text);
  opacity: 0.6;
  font-size: 1rem;
  line-height: 1.55;
}

/* ---- frame: the code box ---- */
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__frame {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 100%;
  
  margin-inline: auto;
  border: var(--ba-border-w) solid var(--ba-border);
  border-radius: var(--ba-radius);
  background: var(--ba-after-bg);
  box-shadow: 0 26px 64px -34px rgba(0, 0, 0, 0.75);
  animation: ba-rise-bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

/* ---- window chrome ---- */
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 16px;
  min-height: 44px;
  background: var(--ba-chrome-bg);
  border-bottom: 1px solid var(--ba-border);
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__dots { display: inline-flex; gap: 7px; flex: none; }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__dots i {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--ba-border);
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__files {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__file { color: var(--ba-linenum); overflow: hidden; text-overflow: ellipsis; }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__file--after { color: var(--ba-label-text); }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__arrow { flex: none; color: var(--ba-linenum); }

/* ---- panels ---- */
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__viewport {
  position: relative;
  display: flex;
  align-items: stretch;
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__panel {
  position: relative;
  min-width: 0;
  min-height: var(--ba-min-h);
  overflow: hidden;
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__panel--before {
  flex: 0 0 var(--ba-split, 50%);
  background-color: var(--ba-before-bg);
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__panel--after {
  flex: 1 1 0;
  background-color: var(--ba-after-bg);
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__panel--single { flex: 1 1 auto; }

/* ---- resize divider + handle (split mode only) ---- */
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__divider {
  position: relative;
  flex: 0 0 var(--ba-divider-w);
  background: var(--ba-divider);
  z-index: 4;
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--ba-grip-size);
  height: var(--ba-grip-size);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ba-grip-bg);
  color: var(--ba-grip-icon);
  cursor: ew-resize;
  touch-action: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.06);
  transition: transform 0.14s ease;
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__handle:hover { transform: translate(-50%, -50%) scale(1.08); }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__handle:focus-visible {
  outline: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 3px var(--ba-after-bg), 0 0 0 5px var(--ba-divider);
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__chev { display: block; pointer-events: none; }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b.is-dragging { user-select: none; -webkit-user-select: none; }

/* ---- code body ---- */
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__body {
  display: flex;
  align-items: flex-start;
  /* no left padding: the sticky gutter (or the pre) owns the left inset so code
     can&#39;t scroll into a dead strip to the left of the line numbers */
  padding: var(--ba-pad) var(--ba-pad) var(--ba-pad) 0;
  overflow-x: auto;
  overflow-y: hidden;
  /* only capture horizontal pans; let vertical swipes scroll the page (mobile) */
  touch-action: pan-x;
  scrollbar-width: thin;
  scrollbar-color: var(--ba-border) transparent;
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  -webkit-font-smoothing: antialiased;
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__body::-webkit-scrollbar { height: 9px; }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__body::-webkit-scrollbar-thumb {
  background: var(--ba-border);
  border-radius: 9px;
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 28px); }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__gutter {
  position: sticky;
  left: 0;
  display: flex;
  flex-direction: column;
  flex: none;
  margin-right: 16px;
  padding-left: var(--ba-pad);
  padding-right: 16px;
  border-right: 1px solid var(--ba-border);
  text-align: right;
  color: var(--ba-linenum);
  font-variant-numeric: tabular-nums;
  user-select: none;
  z-index: 1;
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__panel--before .ba-code__gutter { background: var(--ba-before-bg); }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__panel--after .ba-code__gutter { background: var(--ba-after-bg); }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__gutter i { display: block; line-height: var(--ba-lh); }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__pre {
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  white-space: pre;
  font-variant-ligatures: none;
  tab-size: 4;
  -moz-tab-size: 4;
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__panel--before .ba-code__pre { color: var(--ba-before-text); }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__panel--after .ba-code__pre { color: var(--ba-after-text); }
/* when line numbers are hidden, the pre is first child and owns the left inset */
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__body &gt; .ba-code__pre:first-child { padding-left: var(--ba-pad); }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__code { font-family: var(--ba-code-font); font-size: var(--ba-code-size); }

/* ---- before / after badges ---- */
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__label {
  position: absolute;
  top: var(--ba-pad);
  z-index: 3;
  display: inline-flex;
  padding: 5px 11px;
  border-radius: 6px;
  background: var(--ba-label-bg);
  color: var(--ba-label-text);
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
}
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__label--before { left: var(--ba-pad); }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__label--after { right: var(--ba-pad); }

/* ---- syntax helper classes (used inside the pasted code) ---- */
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .tok-keyword { color: var(--ba-tok-keyword); }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .tok-func { color: var(--ba-tok-func); }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .tok-type { color: var(--ba-tok-type); }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .tok-number { color: var(--ba-tok-number); }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .tok-comment { color: var(--ba-tok-comment); }
#bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .tok-mark {
  background: var(--ba-tok-mark);
  border-radius: 4px;
  padding: 0.05em 0.32em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

@keyframes ba-rise-bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  #bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__frame { animation: none; }
  #bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__handle { transition: none; }
}

/* ---- stack on small screens ---- */
@media (max-width: 720px) {
  #bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__viewport { flex-direction: column; }
  /* when stacked, each panel sizes to its OWN content: no forced min-height
     (which left a big empty void on short panels) and no equal-height collapse
     (which clipped the taller panel&#39;s extra lines) */
  #bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__panel { min-height: 0; overflow: visible; }
  #bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__panel--before,
  #bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__panel--after { flex: 0 0 auto; }
  #bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__divider { flex: 0 0 var(--ba-divider-w); }
  #bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__handle { display: none; }
  /* panels are full-width when stacked: keep both badges left-aligned so the
     &quot;after&quot; label doesn&#39;t float off to the right edge */
  #bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__label--after { right: auto; left: var(--ba-pad); }
}

/* ---- scale the code down on phones so more fits + line numbers hug the edge ---- */
@media (max-width: 600px) {
  #bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b {
    --ba-code-size: 12.5px;
    --ba-label-size: 9.5px;
    --ba-pad: 12px;
    --ba-lh: 1.55;
  }
  #bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__gutter { margin-right: 10px; padding-right: 10px; }
  #bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__chrome { gap: 10px; padding: 0 12px; min-height: 40px; }
  #bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 24px); }
  #bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b .ba-code__label { padding: 4px 9px; letter-spacing: 0.08em; }
}
&lt;/style&gt;



&lt;div id=&quot;bac-widget_98d5d24a-ff3e-4e99-a9f5-852bb0581f1b&quot; class=&quot;ba-code ba-has-labels&quot;&gt;
  &lt;div class=&quot;ba-code__shell&quot;&gt;

    

    &lt;div class=&quot;ba-code__frame&quot;&gt;

      
      &lt;div class=&quot;ba-code__chrome&quot;&gt;
        &lt;span class=&quot;ba-code__dots&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;
        &lt;span class=&quot;ba-code__files&quot;&gt;
          
            
            &lt;span class=&quot;ba-code__file ba-code__file--after&quot;&gt;&lt;/span&gt;
            
          
        &lt;/span&gt;
      &lt;/div&gt;
      

      
      &lt;div class=&quot;ba-code__viewport&quot;&gt;
        
        
&lt;div class=&quot;ba-code__panel ba-code__panel--before ba-code__panel--single&quot;&gt;
  &lt;span class=&quot;ba-code__label ba-code__label--before&quot;&gt;disassembly&lt;/span&gt;
  &lt;div class=&quot;ba-code__body&quot;&gt;
    &lt;span class=&quot;ba-code__gutter&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;1&lt;/i&gt;&lt;i&gt;2&lt;/i&gt;&lt;i&gt;3&lt;/i&gt;&lt;i&gt;4&lt;/i&gt;&lt;i&gt;5&lt;/i&gt;&lt;i&gt;6&lt;/i&gt;&lt;i&gt;7&lt;/i&gt;&lt;i&gt;8&lt;/i&gt;&lt;i&gt;9&lt;/i&gt;&lt;i&gt;10&lt;/i&gt;&lt;i&gt;11&lt;/i&gt;&lt;i&gt;12&lt;/i&gt;&lt;i&gt;13&lt;/i&gt;&lt;i&gt;14&lt;/i&gt;&lt;i&gt;15&lt;/i&gt;&lt;i&gt;16&lt;/i&gt;&lt;i&gt;17&lt;/i&gt;&lt;i&gt;18&lt;/i&gt;&lt;i&gt;19&lt;/i&gt;&lt;i&gt;20&lt;/i&gt;&lt;/span&gt;
    &lt;pre class=&quot;ba-code__pre&quot;&gt;&lt;code class=&quot;ba-code__code&quot;&gt;&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EC0&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;; Swift::Int __swiftcall callTyped(_:)(Swift::Int)&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EC0&lt;/span&gt; &lt;span style=&quot;color:#e5c07b&quot;&gt;_$s10swift_errs9callTypedyS2iF&lt;/span&gt;          &lt;span style=&quot;color:#7d8590&quot;&gt;; CODE XREF: _main+100↑p&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EC0&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EC0&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;var_10&lt;/span&gt;          &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;-0x10&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EC0&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;var_s0&lt;/span&gt;          &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color:#d19a66&quot;&gt;0&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EC0&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EC0&lt;/span&gt;                 &lt;span style=&quot;color:#c678dd&quot;&gt;SUB&lt;/span&gt;             &lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x30&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EC4&lt;/span&gt;                 &lt;span style=&quot;color:#c678dd&quot;&gt;STP&lt;/span&gt;             &lt;span style=&quot;color:#56b6c2&quot;&gt;X22&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;X21&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x20&lt;/span&gt;&lt;span style=&quot;color:#abb2bf&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;var_10&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EC8&lt;/span&gt;                 &lt;span style=&quot;color:#c678dd&quot;&gt;STP&lt;/span&gt;             &lt;span style=&quot;color:#56b6c2&quot;&gt;X29&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;X30&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x20&lt;/span&gt;&lt;span style=&quot;color:#abb2bf&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;var_s0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000ECC&lt;/span&gt;                 &lt;span style=&quot;color:#c678dd&quot;&gt;ADD&lt;/span&gt;             &lt;span style=&quot;color:#56b6c2&quot;&gt;X29&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x20&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000ED0&lt;/span&gt;                 &lt;span style=&quot;color:#c678dd&quot;&gt;MOV&lt;/span&gt;             &lt;span style=&quot;color:#56b6c2&quot;&gt;X21&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000ED4&lt;/span&gt;                 &lt;span style=&quot;color:#c678dd&quot;&gt;BL&lt;/span&gt;              &lt;span style=&quot;color:#e5c07b&quot;&gt;_$s10swift_errs11typedThrowsyS2iAA7MyErrorOYKF&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000ED8&lt;/span&gt;                 &lt;span style=&quot;color:#c678dd&quot;&gt;CMP&lt;/span&gt;             &lt;span style=&quot;color:#56b6c2&quot;&gt;X21&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EDC&lt;/span&gt;                 &lt;span style=&quot;color:#c678dd&quot;&gt;MOV&lt;/span&gt;             &lt;span style=&quot;color:#56b6c2&quot;&gt;X8&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0xFFFFFFFFFFFFFFFD&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EE0&lt;/span&gt;                 &lt;span style=&quot;color:#c678dd&quot;&gt;CSEL&lt;/span&gt;            &lt;span style=&quot;color:#56b6c2&quot;&gt;X0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;X0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;X8&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; EQ
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EE4&lt;/span&gt;                 &lt;span style=&quot;color:#c678dd&quot;&gt;LDP&lt;/span&gt;             &lt;span style=&quot;color:#56b6c2&quot;&gt;X29&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;X30&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x20&lt;/span&gt;&lt;span style=&quot;color:#abb2bf&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;var_s0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EE8&lt;/span&gt;                 &lt;span style=&quot;color:#c678dd&quot;&gt;LDP&lt;/span&gt;             &lt;span style=&quot;color:#56b6c2&quot;&gt;X22&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;X21&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x20&lt;/span&gt;&lt;span style=&quot;color:#abb2bf&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;var_10&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;]&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EEC&lt;/span&gt;                 &lt;span style=&quot;color:#c678dd&quot;&gt;ADD&lt;/span&gt;             &lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;0x30&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;; &#39;0&#39;&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EF0&lt;/span&gt;                 &lt;span style=&quot;color:#c678dd&quot;&gt;RET&lt;/span&gt;
&lt;span style=&quot;color:#5b6370&quot;&gt;__text:0000000100000EF0&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;; End of function callTyped(_:)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

        
      &lt;/div&gt;
      

    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;The most interesting part is how this function treats&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X21&lt;/code&gt;: the&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;MOV&lt;/code&gt;&lt;span&gt; &lt;/span&gt;at&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;0x100000ED0&lt;/code&gt;&lt;span&gt; &lt;/span&gt;initializes it to zero, followed by a call at&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;0x100000ED4&lt;/code&gt;, which is in turn followed by a check for zero at&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;0x100000ED8&lt;/code&gt;.&lt;/p&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;Maybe a bit surprisingly, pre-9.4 IDAs would decompile this function as follows:&lt;/p&gt;
&lt;div id=&quot;hs_cos_wrapper_widget_69f8e5de-193c-4489-84f0-1254d4e39221&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;widget&quot; data-hs-cos-type=&quot;module&quot;&gt;











&lt;style&gt;
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 {
  --ba-module-bg: rgba(255, 255, 255, 0.0);
  --ba-before-bg: rgba(26, 27, 33, 1.0);
  --ba-after-bg: rgba(16, 17, 22, 1.0);
  --ba-chrome-bg: rgba(29, 30, 37, 1.0);
  --ba-before-text: rgba(206, 209, 217, 1.0);
  --ba-after-text: rgba(206, 209, 217, 1.0);
  --ba-border: rgba(255, 255, 255, 0.1);
  --ba-label-bg: rgba(255, 255, 255, 0.06);
  --ba-label-text: rgba(147, 150, 161, 1.0);
  --ba-linenum: rgba(255, 255, 255, 0.22);
  --ba-tok-keyword: rgba(122, 162, 247, 1.0);
  --ba-tok-func: rgba(224, 175, 104, 1.0);
  --ba-tok-type: rgba(125, 207, 255, 1.0);
  --ba-tok-number: rgba(255, 158, 100, 1.0);
  --ba-tok-comment: rgba(86, 95, 137, 1.0);
  --ba-tok-mark: rgba(122, 162, 247, 0.2);
  --ba-divider: rgba(255, 255, 255, 0.16);
  --ba-grip-bg: rgba(244, 244, 245, 1.0);
  --ba-grip-icon: rgba(27, 27, 31, 1.0);
  --ba-divider-w: 2px;
  --ba-grip-size: 42px;
  --ba-radius: 14px;
  --ba-border-w: 1px;
  --ba-pad: 24px;
  --ba-min-h: 200px;
  --ba-code-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;
  --ba-code-size: 15px;
  --ba-label-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ba-label-size: 11px;
  --ba-lh: 1.7;
  display: block;
  background: var(--ba-module-bg);
}

/* ---- hard reset: every selector is (1,1,0)+, beating the theme&#39;s (1,0,1)
       #hs_cos_wrapper_post_body div/pre/code rules without !important ---- */
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__shell,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__intro,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__heading,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__desc,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__frame,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__chrome,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__viewport,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__panel,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__body,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__pre,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__code,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__gutter,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__label,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__files,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__file,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__arrow,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__dots,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__divider,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__handle {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  max-width: none;
  min-width: 0;
  overflow: visible;
  font-family: inherit;
  color: inherit;
  text-transform: none;
  letter-spacing: normal;
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__gutter i,
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__dots i {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  font-style: normal;
}

/* ---- shell ---- */
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__shell { margin: 0 auto; }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__intro {
  max-width: 640px;
  margin: 0 auto 18px;
  text-align: center;
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__heading {
  color: var(--ba-after-text);
  font-size: clamp(1.3rem, 1rem + 1.2vw, 1.85rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__desc {
  margin-top: 7px;
  color: var(--ba-after-text);
  opacity: 0.6;
  font-size: 1rem;
  line-height: 1.55;
}

/* ---- frame: the code box ---- */
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__frame {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 100%;
  
  margin-inline: auto;
  border: var(--ba-border-w) solid var(--ba-border);
  border-radius: var(--ba-radius);
  background: var(--ba-after-bg);
  box-shadow: 0 26px 64px -34px rgba(0, 0, 0, 0.75);
  animation: ba-rise-bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

/* ---- window chrome ---- */
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 16px;
  min-height: 44px;
  background: var(--ba-chrome-bg);
  border-bottom: 1px solid var(--ba-border);
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__dots { display: inline-flex; gap: 7px; flex: none; }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__dots i {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--ba-border);
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__files {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__file { color: var(--ba-linenum); overflow: hidden; text-overflow: ellipsis; }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__file--after { color: var(--ba-label-text); }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__arrow { flex: none; color: var(--ba-linenum); }

/* ---- panels ---- */
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__viewport {
  position: relative;
  display: flex;
  align-items: stretch;
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__panel {
  position: relative;
  min-width: 0;
  min-height: var(--ba-min-h);
  overflow: hidden;
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__panel--before {
  flex: 0 0 var(--ba-split, 50%);
  background-color: var(--ba-before-bg);
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__panel--after {
  flex: 1 1 0;
  background-color: var(--ba-after-bg);
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__panel--single { flex: 1 1 auto; }

/* ---- resize divider + handle (split mode only) ---- */
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__divider {
  position: relative;
  flex: 0 0 var(--ba-divider-w);
  background: var(--ba-divider);
  z-index: 4;
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--ba-grip-size);
  height: var(--ba-grip-size);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ba-grip-bg);
  color: var(--ba-grip-icon);
  cursor: ew-resize;
  touch-action: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.06);
  transition: transform 0.14s ease;
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__handle:hover { transform: translate(-50%, -50%) scale(1.08); }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__handle:focus-visible {
  outline: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 3px var(--ba-after-bg), 0 0 0 5px var(--ba-divider);
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__chev { display: block; pointer-events: none; }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221.is-dragging { user-select: none; -webkit-user-select: none; }

/* ---- code body ---- */
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__body {
  display: flex;
  align-items: flex-start;
  /* no left padding: the sticky gutter (or the pre) owns the left inset so code
     can&#39;t scroll into a dead strip to the left of the line numbers */
  padding: var(--ba-pad) var(--ba-pad) var(--ba-pad) 0;
  overflow-x: auto;
  overflow-y: hidden;
  /* only capture horizontal pans; let vertical swipes scroll the page (mobile) */
  touch-action: pan-x;
  scrollbar-width: thin;
  scrollbar-color: var(--ba-border) transparent;
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  -webkit-font-smoothing: antialiased;
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__body::-webkit-scrollbar { height: 9px; }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__body::-webkit-scrollbar-thumb {
  background: var(--ba-border);
  border-radius: 9px;
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 28px); }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__gutter {
  position: sticky;
  left: 0;
  display: flex;
  flex-direction: column;
  flex: none;
  margin-right: 16px;
  padding-left: var(--ba-pad);
  padding-right: 16px;
  border-right: 1px solid var(--ba-border);
  text-align: right;
  color: var(--ba-linenum);
  font-variant-numeric: tabular-nums;
  user-select: none;
  z-index: 1;
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__panel--before .ba-code__gutter { background: var(--ba-before-bg); }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__panel--after .ba-code__gutter { background: var(--ba-after-bg); }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__gutter i { display: block; line-height: var(--ba-lh); }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__pre {
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  white-space: pre;
  font-variant-ligatures: none;
  tab-size: 4;
  -moz-tab-size: 4;
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__panel--before .ba-code__pre { color: var(--ba-before-text); }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__panel--after .ba-code__pre { color: var(--ba-after-text); }
/* when line numbers are hidden, the pre is first child and owns the left inset */
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__body &gt; .ba-code__pre:first-child { padding-left: var(--ba-pad); }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__code { font-family: var(--ba-code-font); font-size: var(--ba-code-size); }

/* ---- before / after badges ---- */
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__label {
  position: absolute;
  top: var(--ba-pad);
  z-index: 3;
  display: inline-flex;
  padding: 5px 11px;
  border-radius: 6px;
  background: var(--ba-label-bg);
  color: var(--ba-label-text);
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
}
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__label--before { left: var(--ba-pad); }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__label--after { right: var(--ba-pad); }

/* ---- syntax helper classes (used inside the pasted code) ---- */
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .tok-keyword { color: var(--ba-tok-keyword); }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .tok-func { color: var(--ba-tok-func); }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .tok-type { color: var(--ba-tok-type); }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .tok-number { color: var(--ba-tok-number); }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .tok-comment { color: var(--ba-tok-comment); }
#bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .tok-mark {
  background: var(--ba-tok-mark);
  border-radius: 4px;
  padding: 0.05em 0.32em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

@keyframes ba-rise-bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  #bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__frame { animation: none; }
  #bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__handle { transition: none; }
}

/* ---- stack on small screens ---- */
@media (max-width: 720px) {
  #bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__viewport { flex-direction: column; }
  /* when stacked, each panel sizes to its OWN content: no forced min-height
     (which left a big empty void on short panels) and no equal-height collapse
     (which clipped the taller panel&#39;s extra lines) */
  #bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__panel { min-height: 0; overflow: visible; }
  #bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__panel--before,
  #bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__panel--after { flex: 0 0 auto; }
  #bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__divider { flex: 0 0 var(--ba-divider-w); }
  #bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__handle { display: none; }
  /* panels are full-width when stacked: keep both badges left-aligned so the
     &quot;after&quot; label doesn&#39;t float off to the right edge */
  #bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__label--after { right: auto; left: var(--ba-pad); }
}

/* ---- scale the code down on phones so more fits + line numbers hug the edge ---- */
@media (max-width: 600px) {
  #bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 {
    --ba-code-size: 12.5px;
    --ba-label-size: 9.5px;
    --ba-pad: 12px;
    --ba-lh: 1.55;
  }
  #bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__gutter { margin-right: 10px; padding-right: 10px; }
  #bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__chrome { gap: 10px; padding: 0 12px; min-height: 40px; }
  #bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 24px); }
  #bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221 .ba-code__label { padding: 4px 9px; letter-spacing: 0.08em; }
}
&lt;/style&gt;



&lt;div id=&quot;bac-widget_69f8e5de-193c-4489-84f0-1254d4e39221&quot; class=&quot;ba-code ba-has-labels&quot;&gt;
  &lt;div class=&quot;ba-code__shell&quot;&gt;

    

    &lt;div class=&quot;ba-code__frame&quot;&gt;

      
      &lt;div class=&quot;ba-code__chrome&quot;&gt;
        &lt;span class=&quot;ba-code__dots&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;
        &lt;span class=&quot;ba-code__files&quot;&gt;
          
            
            &lt;span class=&quot;ba-code__file ba-code__file--after&quot;&gt;&lt;/span&gt;
            
          
        &lt;/span&gt;
      &lt;/div&gt;
      

      
      &lt;div class=&quot;ba-code__viewport&quot;&gt;
        
        
&lt;div class=&quot;ba-code__panel ba-code__panel--before ba-code__panel--single&quot;&gt;
  &lt;span class=&quot;ba-code__label ba-code__label--before&quot;&gt;Pseudocode&lt;/span&gt;
  &lt;div class=&quot;ba-code__body&quot;&gt;
    &lt;span class=&quot;ba-code__gutter&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;1&lt;/i&gt;&lt;i&gt;2&lt;/i&gt;&lt;i&gt;3&lt;/i&gt;&lt;i&gt;4&lt;/i&gt;&lt;/span&gt;
    &lt;pre class=&quot;ba-code__pre&quot;&gt;&lt;code class=&quot;ba-code__code&quot;&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;Swift::Int&lt;/span&gt; &lt;span style=&quot;color:#c678dd&quot;&gt;__swiftcall&lt;/span&gt; &lt;span style=&quot;color:#61afef&quot;&gt;callTyped&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;_:&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)(&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;Swift::Int&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;a1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color:#7f8696&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color:#c678dd&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#e5c07b&quot;&gt;_s10swift_errs11typedThrowsyS2iAA7MyErrorOYKF&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;a1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color:#7f8696&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

        
      &lt;/div&gt;
      

    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;Why? Again because of Swift-specific ABI trickery: in vanilla ARM64,&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X21&lt;/code&gt;&lt;span&gt; &lt;/span&gt;is&lt;span&gt; &lt;/span&gt;&lt;em&gt;callee-saved&lt;/em&gt;. That means the decompiler sees the sequence &quot;initialize&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X21&lt;/code&gt;; call something [that will preserve&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X21&lt;/code&gt;, because it&#39;s callee-saved]; check if&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X21&lt;/code&gt;&lt;span&gt; &lt;/span&gt;is still zero&quot;, and consequently concludes that the&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;CMP&lt;/code&gt;&lt;span&gt; &lt;/span&gt;at&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;0x100000ED8&lt;/code&gt;&lt;span&gt; &lt;/span&gt;will always set the&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;EQ&lt;/code&gt;&lt;span&gt; &lt;/span&gt;flag and hence the&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;CSEL&lt;/code&gt;&lt;span&gt; &lt;/span&gt;will always take the&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X0&lt;/code&gt;&lt;span&gt; &lt;/span&gt;input reg (which still holds the return value of the callee in standard AAPCS64) — it hence completely optimizes away the check, leading to the flawed pseudocode output.&lt;/p&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;In IDA 9.4, however, the&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swiftthrows&lt;/code&gt;&lt;span&gt; &lt;/span&gt;function prototype annotation is here to save the day: unlike the other two new keywords presented in this blog post,&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swiftthrows&lt;/code&gt;&lt;span&gt; &lt;/span&gt;alters the behaviour of all callers, rather than the function that carries the annotation. In our example that means the sole callee of this function is typed&lt;/p&gt;
&lt;div id=&quot;hs_cos_wrapper_widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;widget&quot; data-hs-cos-type=&quot;module&quot;&gt;











&lt;style&gt;
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 {
  --ba-module-bg: rgba(255, 255, 255, 0.0);
  --ba-before-bg: rgba(26, 27, 33, 1.0);
  --ba-after-bg: rgba(16, 17, 22, 1.0);
  --ba-chrome-bg: rgba(29, 30, 37, 1.0);
  --ba-before-text: rgba(206, 209, 217, 1.0);
  --ba-after-text: rgba(206, 209, 217, 1.0);
  --ba-border: rgba(255, 255, 255, 0.1);
  --ba-label-bg: rgba(255, 255, 255, 0.06);
  --ba-label-text: rgba(147, 150, 161, 1.0);
  --ba-linenum: rgba(255, 255, 255, 0.22);
  --ba-tok-keyword: rgba(122, 162, 247, 1.0);
  --ba-tok-func: rgba(224, 175, 104, 1.0);
  --ba-tok-type: rgba(125, 207, 255, 1.0);
  --ba-tok-number: rgba(255, 158, 100, 1.0);
  --ba-tok-comment: rgba(86, 95, 137, 1.0);
  --ba-tok-mark: rgba(122, 162, 247, 0.2);
  --ba-divider: rgba(255, 255, 255, 0.16);
  --ba-grip-bg: rgba(244, 244, 245, 1.0);
  --ba-grip-icon: rgba(27, 27, 31, 1.0);
  --ba-divider-w: 2px;
  --ba-grip-size: 42px;
  --ba-radius: 14px;
  --ba-border-w: 1px;
  --ba-pad: 24px;
  --ba-min-h: 200px;
  --ba-code-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;
  --ba-code-size: 15px;
  --ba-label-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ba-label-size: 11px;
  --ba-lh: 1.7;
  display: block;
  background: var(--ba-module-bg);
}

/* ---- hard reset: every selector is (1,1,0)+, beating the theme&#39;s (1,0,1)
       #hs_cos_wrapper_post_body div/pre/code rules without !important ---- */
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__shell,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__intro,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__heading,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__desc,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__frame,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__chrome,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__viewport,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__panel,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__body,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__pre,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__code,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__gutter,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__label,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__files,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__file,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__arrow,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__dots,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__divider,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__handle {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  max-width: none;
  min-width: 0;
  overflow: visible;
  font-family: inherit;
  color: inherit;
  text-transform: none;
  letter-spacing: normal;
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__gutter i,
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__dots i {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  font-style: normal;
}

/* ---- shell ---- */
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__shell { margin: 0 auto; }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__intro {
  max-width: 640px;
  margin: 0 auto 18px;
  text-align: center;
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__heading {
  color: var(--ba-after-text);
  font-size: clamp(1.3rem, 1rem + 1.2vw, 1.85rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__desc {
  margin-top: 7px;
  color: var(--ba-after-text);
  opacity: 0.6;
  font-size: 1rem;
  line-height: 1.55;
}

/* ---- frame: the code box ---- */
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__frame {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 100%;
  
  margin-inline: auto;
  border: var(--ba-border-w) solid var(--ba-border);
  border-radius: var(--ba-radius);
  background: var(--ba-after-bg);
  box-shadow: 0 26px 64px -34px rgba(0, 0, 0, 0.75);
  animation: ba-rise-bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

/* ---- window chrome ---- */
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 16px;
  min-height: 44px;
  background: var(--ba-chrome-bg);
  border-bottom: 1px solid var(--ba-border);
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__dots { display: inline-flex; gap: 7px; flex: none; }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__dots i {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--ba-border);
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__files {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__file { color: var(--ba-linenum); overflow: hidden; text-overflow: ellipsis; }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__file--after { color: var(--ba-label-text); }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__arrow { flex: none; color: var(--ba-linenum); }

/* ---- panels ---- */
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__viewport {
  position: relative;
  display: flex;
  align-items: stretch;
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__panel {
  position: relative;
  min-width: 0;
  min-height: var(--ba-min-h);
  overflow: hidden;
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__panel--before {
  flex: 0 0 var(--ba-split, 50%);
  background-color: var(--ba-before-bg);
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__panel--after {
  flex: 1 1 0;
  background-color: var(--ba-after-bg);
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__panel--single { flex: 1 1 auto; }

/* ---- resize divider + handle (split mode only) ---- */
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__divider {
  position: relative;
  flex: 0 0 var(--ba-divider-w);
  background: var(--ba-divider);
  z-index: 4;
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--ba-grip-size);
  height: var(--ba-grip-size);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ba-grip-bg);
  color: var(--ba-grip-icon);
  cursor: ew-resize;
  touch-action: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.06);
  transition: transform 0.14s ease;
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__handle:hover { transform: translate(-50%, -50%) scale(1.08); }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__handle:focus-visible {
  outline: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 3px var(--ba-after-bg), 0 0 0 5px var(--ba-divider);
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__chev { display: block; pointer-events: none; }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63.is-dragging { user-select: none; -webkit-user-select: none; }

/* ---- code body ---- */
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__body {
  display: flex;
  align-items: flex-start;
  /* no left padding: the sticky gutter (or the pre) owns the left inset so code
     can&#39;t scroll into a dead strip to the left of the line numbers */
  padding: var(--ba-pad) var(--ba-pad) var(--ba-pad) 0;
  overflow-x: auto;
  overflow-y: hidden;
  /* only capture horizontal pans; let vertical swipes scroll the page (mobile) */
  touch-action: pan-x;
  scrollbar-width: thin;
  scrollbar-color: var(--ba-border) transparent;
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  -webkit-font-smoothing: antialiased;
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__body::-webkit-scrollbar { height: 9px; }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__body::-webkit-scrollbar-thumb {
  background: var(--ba-border);
  border-radius: 9px;
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 28px); }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__gutter {
  position: sticky;
  left: 0;
  display: flex;
  flex-direction: column;
  flex: none;
  margin-right: 16px;
  padding-left: var(--ba-pad);
  padding-right: 16px;
  border-right: 1px solid var(--ba-border);
  text-align: right;
  color: var(--ba-linenum);
  font-variant-numeric: tabular-nums;
  user-select: none;
  z-index: 1;
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__panel--before .ba-code__gutter { background: var(--ba-before-bg); }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__panel--after .ba-code__gutter { background: var(--ba-after-bg); }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__gutter i { display: block; line-height: var(--ba-lh); }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__pre {
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  white-space: pre;
  font-variant-ligatures: none;
  tab-size: 4;
  -moz-tab-size: 4;
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__panel--before .ba-code__pre { color: var(--ba-before-text); }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__panel--after .ba-code__pre { color: var(--ba-after-text); }
/* when line numbers are hidden, the pre is first child and owns the left inset */
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__body &gt; .ba-code__pre:first-child { padding-left: var(--ba-pad); }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__code { font-family: var(--ba-code-font); font-size: var(--ba-code-size); }

/* ---- before / after badges ---- */
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__label {
  position: absolute;
  top: var(--ba-pad);
  z-index: 3;
  display: inline-flex;
  padding: 5px 11px;
  border-radius: 6px;
  background: var(--ba-label-bg);
  color: var(--ba-label-text);
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
}
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__label--before { left: var(--ba-pad); }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__label--after { right: var(--ba-pad); }

/* ---- syntax helper classes (used inside the pasted code) ---- */
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .tok-keyword { color: var(--ba-tok-keyword); }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .tok-func { color: var(--ba-tok-func); }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .tok-type { color: var(--ba-tok-type); }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .tok-number { color: var(--ba-tok-number); }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .tok-comment { color: var(--ba-tok-comment); }
#bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .tok-mark {
  background: var(--ba-tok-mark);
  border-radius: 4px;
  padding: 0.05em 0.32em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

@keyframes ba-rise-bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  #bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__frame { animation: none; }
  #bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__handle { transition: none; }
}

/* ---- stack on small screens ---- */
@media (max-width: 720px) {
  #bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__viewport { flex-direction: column; }
  /* when stacked, each panel sizes to its OWN content: no forced min-height
     (which left a big empty void on short panels) and no equal-height collapse
     (which clipped the taller panel&#39;s extra lines) */
  #bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__panel { min-height: 0; overflow: visible; }
  #bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__panel--before,
  #bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__panel--after { flex: 0 0 auto; }
  #bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__divider { flex: 0 0 var(--ba-divider-w); }
  #bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__handle { display: none; }
  /* panels are full-width when stacked: keep both badges left-aligned so the
     &quot;after&quot; label doesn&#39;t float off to the right edge */
  #bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__label--after { right: auto; left: var(--ba-pad); }
}

/* ---- scale the code down on phones so more fits + line numbers hug the edge ---- */
@media (max-width: 600px) {
  #bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 {
    --ba-code-size: 12.5px;
    --ba-label-size: 9.5px;
    --ba-pad: 12px;
    --ba-lh: 1.55;
  }
  #bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__gutter { margin-right: 10px; padding-right: 10px; }
  #bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__chrome { gap: 10px; padding: 0 12px; min-height: 40px; }
  #bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 24px); }
  #bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63 .ba-code__label { padding: 4px 9px; letter-spacing: 0.08em; }
}
&lt;/style&gt;



&lt;div id=&quot;bac-widget_6802b58e-bb25-4804-89a0-b93dbb9d1f63&quot; class=&quot;ba-code ba-has-labels&quot;&gt;
  &lt;div class=&quot;ba-code__shell&quot;&gt;

    

    &lt;div class=&quot;ba-code__frame&quot;&gt;

      
      &lt;div class=&quot;ba-code__chrome&quot;&gt;
        &lt;span class=&quot;ba-code__dots&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;
        &lt;span class=&quot;ba-code__files&quot;&gt;
          
            
            &lt;span class=&quot;ba-code__file ba-code__file--after&quot;&gt;&lt;/span&gt;
            
          
        &lt;/span&gt;
      &lt;/div&gt;
      

      
      &lt;div class=&quot;ba-code__viewport&quot;&gt;
        
        
&lt;div class=&quot;ba-code__panel ba-code__panel--before ba-code__panel--single&quot;&gt;
  &lt;span class=&quot;ba-code__label ba-code__label--before&quot;&gt;pseudocode&lt;/span&gt;
  &lt;div class=&quot;ba-code__body&quot;&gt;
    &lt;span class=&quot;ba-code__gutter&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;1&lt;/i&gt;&lt;i&gt;2&lt;/i&gt;&lt;/span&gt;
    &lt;pre class=&quot;ba-code__pre&quot;&gt;&lt;code class=&quot;ba-code__code&quot;&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;__int64&lt;/span&gt; &lt;span style=&quot;color:#c678dd&quot;&gt;__swiftcall&lt;/span&gt; &lt;span style=&quot;color:#c678dd&quot;&gt;__swiftthrows&lt;/span&gt; &lt;span style=&quot;color:#e5c07b&quot;&gt;_s10swift_errs11typedThrowsyS2iAA7MyErrorOYKF&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;__int64&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;result&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
                    &lt;span style=&quot;color:#98c379&quot;&gt;^~~~~~~~~~~~~ new keyword&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

        
      &lt;/div&gt;
      

    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;and hence signals to the caller that&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X21&lt;/code&gt;&lt;span&gt; &lt;/span&gt;is precisely&lt;span&gt; &lt;/span&gt;&lt;em&gt;not&lt;/em&gt;&lt;span&gt; &lt;/span&gt;callee-saved, but rather carries the &quot;exception state&quot; (~zero = no exception, ~non-zero = exception; we&#39;ll spare you an explanation of Swift&#39;s typed exceptions today). As a consequence, the decompiler surfaces any subsequent&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X21&lt;/code&gt;&lt;span&gt; &lt;/span&gt;accesses in terms of the new&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swift_get_error()&lt;/code&gt;&lt;span&gt; &lt;/span&gt;custom intrinsic, and we get the desired result:&lt;/p&gt;
&lt;div id=&quot;hs_cos_wrapper_widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;widget&quot; data-hs-cos-type=&quot;module&quot;&gt;











&lt;style&gt;
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 {
  --ba-module-bg: rgba(255, 255, 255, 0.0);
  --ba-before-bg: rgba(26, 27, 33, 1.0);
  --ba-after-bg: rgba(16, 17, 22, 1.0);
  --ba-chrome-bg: rgba(29, 30, 37, 1.0);
  --ba-before-text: rgba(206, 209, 217, 1.0);
  --ba-after-text: rgba(206, 209, 217, 1.0);
  --ba-border: rgba(255, 255, 255, 0.1);
  --ba-label-bg: rgba(255, 255, 255, 0.06);
  --ba-label-text: rgba(147, 150, 161, 1.0);
  --ba-linenum: rgba(255, 255, 255, 0.22);
  --ba-tok-keyword: rgba(122, 162, 247, 1.0);
  --ba-tok-func: rgba(224, 175, 104, 1.0);
  --ba-tok-type: rgba(125, 207, 255, 1.0);
  --ba-tok-number: rgba(255, 158, 100, 1.0);
  --ba-tok-comment: rgba(86, 95, 137, 1.0);
  --ba-tok-mark: rgba(122, 162, 247, 0.2);
  --ba-divider: rgba(255, 255, 255, 0.16);
  --ba-grip-bg: rgba(244, 244, 245, 1.0);
  --ba-grip-icon: rgba(27, 27, 31, 1.0);
  --ba-divider-w: 2px;
  --ba-grip-size: 42px;
  --ba-radius: 14px;
  --ba-border-w: 1px;
  --ba-pad: 24px;
  --ba-min-h: 200px;
  --ba-code-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;
  --ba-code-size: 15px;
  --ba-label-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ba-label-size: 11px;
  --ba-lh: 1.7;
  display: block;
  background: var(--ba-module-bg);
}

/* ---- hard reset: every selector is (1,1,0)+, beating the theme&#39;s (1,0,1)
       #hs_cos_wrapper_post_body div/pre/code rules without !important ---- */
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__shell,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__intro,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__heading,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__desc,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__frame,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__chrome,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__viewport,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__panel,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__body,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__pre,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__code,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__gutter,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__label,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__files,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__file,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__arrow,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__dots,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__divider,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__handle {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  max-width: none;
  min-width: 0;
  overflow: visible;
  font-family: inherit;
  color: inherit;
  text-transform: none;
  letter-spacing: normal;
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__gutter i,
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__dots i {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  font-style: normal;
}

/* ---- shell ---- */
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__shell { margin: 0 auto; }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__intro {
  max-width: 640px;
  margin: 0 auto 18px;
  text-align: center;
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__heading {
  color: var(--ba-after-text);
  font-size: clamp(1.3rem, 1rem + 1.2vw, 1.85rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__desc {
  margin-top: 7px;
  color: var(--ba-after-text);
  opacity: 0.6;
  font-size: 1rem;
  line-height: 1.55;
}

/* ---- frame: the code box ---- */
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__frame {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 100%;
  
  margin-inline: auto;
  border: var(--ba-border-w) solid var(--ba-border);
  border-radius: var(--ba-radius);
  background: var(--ba-after-bg);
  box-shadow: 0 26px 64px -34px rgba(0, 0, 0, 0.75);
  animation: ba-rise-bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

/* ---- window chrome ---- */
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 16px;
  min-height: 44px;
  background: var(--ba-chrome-bg);
  border-bottom: 1px solid var(--ba-border);
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__dots { display: inline-flex; gap: 7px; flex: none; }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__dots i {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--ba-border);
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__files {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__file { color: var(--ba-linenum); overflow: hidden; text-overflow: ellipsis; }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__file--after { color: var(--ba-label-text); }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__arrow { flex: none; color: var(--ba-linenum); }

/* ---- panels ---- */
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__viewport {
  position: relative;
  display: flex;
  align-items: stretch;
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__panel {
  position: relative;
  min-width: 0;
  min-height: var(--ba-min-h);
  overflow: hidden;
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__panel--before {
  flex: 0 0 var(--ba-split, 50%);
  background-color: var(--ba-before-bg);
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__panel--after {
  flex: 1 1 0;
  background-color: var(--ba-after-bg);
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__panel--single { flex: 1 1 auto; }

/* ---- resize divider + handle (split mode only) ---- */
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__divider {
  position: relative;
  flex: 0 0 var(--ba-divider-w);
  background: var(--ba-divider);
  z-index: 4;
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--ba-grip-size);
  height: var(--ba-grip-size);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ba-grip-bg);
  color: var(--ba-grip-icon);
  cursor: ew-resize;
  touch-action: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.06);
  transition: transform 0.14s ease;
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__handle:hover { transform: translate(-50%, -50%) scale(1.08); }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__handle:focus-visible {
  outline: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 3px var(--ba-after-bg), 0 0 0 5px var(--ba-divider);
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__chev { display: block; pointer-events: none; }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29.is-dragging { user-select: none; -webkit-user-select: none; }

/* ---- code body ---- */
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__body {
  display: flex;
  align-items: flex-start;
  /* no left padding: the sticky gutter (or the pre) owns the left inset so code
     can&#39;t scroll into a dead strip to the left of the line numbers */
  padding: var(--ba-pad) var(--ba-pad) var(--ba-pad) 0;
  overflow-x: auto;
  overflow-y: hidden;
  /* only capture horizontal pans; let vertical swipes scroll the page (mobile) */
  touch-action: pan-x;
  scrollbar-width: thin;
  scrollbar-color: var(--ba-border) transparent;
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  -webkit-font-smoothing: antialiased;
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__body::-webkit-scrollbar { height: 9px; }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__body::-webkit-scrollbar-thumb {
  background: var(--ba-border);
  border-radius: 9px;
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 28px); }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__gutter {
  position: sticky;
  left: 0;
  display: flex;
  flex-direction: column;
  flex: none;
  margin-right: 16px;
  padding-left: var(--ba-pad);
  padding-right: 16px;
  border-right: 1px solid var(--ba-border);
  text-align: right;
  color: var(--ba-linenum);
  font-variant-numeric: tabular-nums;
  user-select: none;
  z-index: 1;
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__panel--before .ba-code__gutter { background: var(--ba-before-bg); }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__panel--after .ba-code__gutter { background: var(--ba-after-bg); }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__gutter i { display: block; line-height: var(--ba-lh); }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__pre {
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  white-space: pre;
  font-variant-ligatures: none;
  tab-size: 4;
  -moz-tab-size: 4;
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__panel--before .ba-code__pre { color: var(--ba-before-text); }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__panel--after .ba-code__pre { color: var(--ba-after-text); }
/* when line numbers are hidden, the pre is first child and owns the left inset */
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__body &gt; .ba-code__pre:first-child { padding-left: var(--ba-pad); }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__code { font-family: var(--ba-code-font); font-size: var(--ba-code-size); }

/* ---- before / after badges ---- */
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__label {
  position: absolute;
  top: var(--ba-pad);
  z-index: 3;
  display: inline-flex;
  padding: 5px 11px;
  border-radius: 6px;
  background: var(--ba-label-bg);
  color: var(--ba-label-text);
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
}
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__label--before { left: var(--ba-pad); }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__label--after { right: var(--ba-pad); }

/* ---- syntax helper classes (used inside the pasted code) ---- */
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .tok-keyword { color: var(--ba-tok-keyword); }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .tok-func { color: var(--ba-tok-func); }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .tok-type { color: var(--ba-tok-type); }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .tok-number { color: var(--ba-tok-number); }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .tok-comment { color: var(--ba-tok-comment); }
#bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .tok-mark {
  background: var(--ba-tok-mark);
  border-radius: 4px;
  padding: 0.05em 0.32em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

@keyframes ba-rise-bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  #bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__frame { animation: none; }
  #bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__handle { transition: none; }
}

/* ---- stack on small screens ---- */
@media (max-width: 720px) {
  #bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__viewport { flex-direction: column; }
  /* when stacked, each panel sizes to its OWN content: no forced min-height
     (which left a big empty void on short panels) and no equal-height collapse
     (which clipped the taller panel&#39;s extra lines) */
  #bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__panel { min-height: 0; overflow: visible; }
  #bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__panel--before,
  #bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__panel--after { flex: 0 0 auto; }
  #bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__divider { flex: 0 0 var(--ba-divider-w); }
  #bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__handle { display: none; }
  /* panels are full-width when stacked: keep both badges left-aligned so the
     &quot;after&quot; label doesn&#39;t float off to the right edge */
  #bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__label--after { right: auto; left: var(--ba-pad); }
}

/* ---- scale the code down on phones so more fits + line numbers hug the edge ---- */
@media (max-width: 600px) {
  #bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 {
    --ba-code-size: 12.5px;
    --ba-label-size: 9.5px;
    --ba-pad: 12px;
    --ba-lh: 1.55;
  }
  #bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__gutter { margin-right: 10px; padding-right: 10px; }
  #bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__chrome { gap: 10px; padding: 0 12px; min-height: 40px; }
  #bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 24px); }
  #bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29 .ba-code__label { padding: 4px 9px; letter-spacing: 0.08em; }
}
&lt;/style&gt;



&lt;div id=&quot;bac-widget_ed67f692-8f4b-4f3c-9f5a-9847bad72f29&quot; class=&quot;ba-code ba-has-labels&quot;&gt;
  &lt;div class=&quot;ba-code__shell&quot;&gt;

    

    &lt;div class=&quot;ba-code__frame&quot;&gt;

      
      &lt;div class=&quot;ba-code__chrome&quot;&gt;
        &lt;span class=&quot;ba-code__dots&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;
        &lt;span class=&quot;ba-code__files&quot;&gt;
          
            
            &lt;span class=&quot;ba-code__file ba-code__file--after&quot;&gt;&lt;/span&gt;
            
          
        &lt;/span&gt;
      &lt;/div&gt;
      

      
      &lt;div class=&quot;ba-code__viewport&quot;&gt;
        
        
&lt;div class=&quot;ba-code__panel ba-code__panel--before ba-code__panel--single&quot;&gt;
  &lt;span class=&quot;ba-code__label ba-code__label--before&quot;&gt;pseudocode&lt;/span&gt;
  &lt;div class=&quot;ba-code__body&quot;&gt;
    &lt;span class=&quot;ba-code__gutter&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;1&lt;/i&gt;&lt;i&gt;2&lt;/i&gt;&lt;i&gt;3&lt;/i&gt;&lt;i&gt;4&lt;/i&gt;&lt;i&gt;5&lt;/i&gt;&lt;i&gt;6&lt;/i&gt;&lt;i&gt;7&lt;/i&gt;&lt;i&gt;8&lt;/i&gt;&lt;i&gt;9&lt;/i&gt;&lt;i&gt;10&lt;/i&gt;&lt;/span&gt;
    &lt;pre class=&quot;ba-code__pre&quot;&gt;&lt;code class=&quot;ba-code__code&quot;&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;Swift::Int&lt;/span&gt; &lt;span style=&quot;color:#c678dd&quot;&gt;__swiftcall&lt;/span&gt; &lt;span style=&quot;color:#61afef&quot;&gt;callTyped&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;_:&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)(&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;Swift::Int&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;a1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color:#7f8696&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color:#56b6c2&quot;&gt;Swift::Int&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;result&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;// x0&lt;/span&gt;
  &lt;span style=&quot;color:#56b6c2&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;// x21&lt;/span&gt;

  &lt;span style=&quot;color:#e0e2e6&quot;&gt;result&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e5c07b&quot;&gt;_s10swift_errs11typedThrowsyS2iAA7MyErrorOYKF&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;result:&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;a1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#e0e2e6&quot;&gt;error&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e5c07b&quot;&gt;__swift_get_error&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#c678dd&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;error&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;nullptr&lt;/span&gt; &lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color:#c678dd&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;-3&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color:#c678dd&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;result&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color:#7f8696&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

        
      &lt;/div&gt;
      

    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;This is tremendously helpful for analyzing complex control flow. The&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swiftthrows&lt;/code&gt;&lt;span&gt; &lt;/span&gt;keyword is either deduced from the demangled function prototype (if available) or inferred from the callee&#39;s structure for unsymbolicated but known-Swift callees. We had to make this auto-detection check rather strict to prevent false positives because, sure enough, in other parts of the code — in non-excepting contexts — the Swift compiler uses&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;X21&lt;/code&gt;&lt;span&gt; &lt;/span&gt;as a perfectly fine callee-saved local scratch register. This new keyword and mechanic in the caller supersedes the old way of handling the Swift error return register, where IDA would work with spoils lists when it detected a thrower via the prototype (resulting in incantations like&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;Swift::Int __swiftcall __spoils&amp;lt;CF,ZF,NF,VF,X0,X1,...,X17,X21,Q0,...,Q31&amp;gt; Thrower(Swift::Int x, Swift::Int y, Swift::Int z);&lt;/code&gt;).&lt;/p&gt;
&lt;h2 style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;Runtime Symbol Typing&lt;/h2&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;Modelling the ABI fixes how Swift functions&lt;span&gt; &lt;/span&gt;&lt;em&gt;talk to each other&lt;/em&gt;. The other half of the readability problem is the functions a Swift binary&lt;span&gt; &lt;/span&gt;&lt;em&gt;talks to&lt;/em&gt;: the runtime and standard library. A typical app calls hundreds of&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;swift_*&lt;/code&gt;&lt;span&gt; &lt;/span&gt;entry points, and historically IDA had nothing to say about any of them. They are not described by the&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swift5&lt;/code&gt;&lt;span&gt; &lt;/span&gt;metadata IDA walks (that metadata describes the types the binary&lt;span&gt; &lt;/span&gt;&lt;em&gt;defines&lt;/em&gt;, not the runtime it&lt;span&gt; &lt;/span&gt;&lt;em&gt;links against&lt;/em&gt;), so the best IDA could do was the usual&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__int64 __fastcall foo(_QWORD, _QWORD, ...)&lt;/code&gt;&lt;span&gt; &lt;/span&gt;guess. Multiply that by every call site, and a Swift pseudocode listing turns into a sea of untyped quadwords.&lt;/p&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;IDA 9.4 ships a curated set of prototypes for the runtime surface and applies them by name, so these functions arrive fully typed: with&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swiftcall&lt;/code&gt;, the right argument types, and meaningful enums. Take&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;swift_beginAccess&lt;/code&gt;, the exclusivity-checking primitive the compiler emits around&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;inout&lt;/code&gt;&lt;span&gt; &lt;/span&gt;and stored-property access. Before:&lt;/p&gt;
&lt;div id=&quot;hs_cos_wrapper_widget_c884d6a9-844d-4192-83e5-d4c119dce11d&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;widget&quot; data-hs-cos-type=&quot;module&quot;&gt;











&lt;style&gt;
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d {
  --ba-module-bg: rgba(255, 255, 255, 0.0);
  --ba-before-bg: rgba(26, 27, 33, 1.0);
  --ba-after-bg: rgba(16, 17, 22, 1.0);
  --ba-chrome-bg: rgba(29, 30, 37, 1.0);
  --ba-before-text: rgba(206, 209, 217, 1.0);
  --ba-after-text: rgba(206, 209, 217, 1.0);
  --ba-border: rgba(255, 255, 255, 0.1);
  --ba-label-bg: rgba(255, 255, 255, 0.06);
  --ba-label-text: rgba(147, 150, 161, 1.0);
  --ba-linenum: rgba(255, 255, 255, 0.22);
  --ba-tok-keyword: rgba(122, 162, 247, 1.0);
  --ba-tok-func: rgba(224, 175, 104, 1.0);
  --ba-tok-type: rgba(125, 207, 255, 1.0);
  --ba-tok-number: rgba(255, 158, 100, 1.0);
  --ba-tok-comment: rgba(86, 95, 137, 1.0);
  --ba-tok-mark: rgba(122, 162, 247, 0.2);
  --ba-divider: rgba(255, 255, 255, 0.16);
  --ba-grip-bg: rgba(244, 244, 245, 1.0);
  --ba-grip-icon: rgba(27, 27, 31, 1.0);
  --ba-divider-w: 2px;
  --ba-grip-size: 42px;
  --ba-radius: 14px;
  --ba-border-w: 1px;
  --ba-pad: 24px;
  --ba-min-h: 200px;
  --ba-code-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;
  --ba-code-size: 15px;
  --ba-label-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ba-label-size: 11px;
  --ba-lh: 1.7;
  display: block;
  background: var(--ba-module-bg);
}

/* ---- hard reset: every selector is (1,1,0)+, beating the theme&#39;s (1,0,1)
       #hs_cos_wrapper_post_body div/pre/code rules without !important ---- */
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__shell,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__intro,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__heading,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__desc,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__frame,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__chrome,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__viewport,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__panel,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__body,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__pre,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__code,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__gutter,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__label,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__files,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__file,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__arrow,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__dots,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__divider,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__handle {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  max-width: none;
  min-width: 0;
  overflow: visible;
  font-family: inherit;
  color: inherit;
  text-transform: none;
  letter-spacing: normal;
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__gutter i,
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__dots i {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  font-style: normal;
}

/* ---- shell ---- */
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__shell { margin: 0 auto; }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__intro {
  max-width: 640px;
  margin: 0 auto 18px;
  text-align: center;
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__heading {
  color: var(--ba-after-text);
  font-size: clamp(1.3rem, 1rem + 1.2vw, 1.85rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__desc {
  margin-top: 7px;
  color: var(--ba-after-text);
  opacity: 0.6;
  font-size: 1rem;
  line-height: 1.55;
}

/* ---- frame: the code box ---- */
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__frame {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 100%;
  
  margin-inline: auto;
  border: var(--ba-border-w) solid var(--ba-border);
  border-radius: var(--ba-radius);
  background: var(--ba-after-bg);
  box-shadow: 0 26px 64px -34px rgba(0, 0, 0, 0.75);
  animation: ba-rise-bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

/* ---- window chrome ---- */
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 16px;
  min-height: 44px;
  background: var(--ba-chrome-bg);
  border-bottom: 1px solid var(--ba-border);
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__dots { display: inline-flex; gap: 7px; flex: none; }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__dots i {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--ba-border);
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__files {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__file { color: var(--ba-linenum); overflow: hidden; text-overflow: ellipsis; }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__file--after { color: var(--ba-label-text); }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__arrow { flex: none; color: var(--ba-linenum); }

/* ---- panels ---- */
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__viewport {
  position: relative;
  display: flex;
  align-items: stretch;
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__panel {
  position: relative;
  min-width: 0;
  min-height: var(--ba-min-h);
  overflow: hidden;
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__panel--before {
  flex: 0 0 var(--ba-split, 50%);
  background-color: var(--ba-before-bg);
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__panel--after {
  flex: 1 1 0;
  background-color: var(--ba-after-bg);
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__panel--single { flex: 1 1 auto; }

/* ---- resize divider + handle (split mode only) ---- */
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__divider {
  position: relative;
  flex: 0 0 var(--ba-divider-w);
  background: var(--ba-divider);
  z-index: 4;
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--ba-grip-size);
  height: var(--ba-grip-size);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ba-grip-bg);
  color: var(--ba-grip-icon);
  cursor: ew-resize;
  touch-action: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.06);
  transition: transform 0.14s ease;
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__handle:hover { transform: translate(-50%, -50%) scale(1.08); }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__handle:focus-visible {
  outline: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 3px var(--ba-after-bg), 0 0 0 5px var(--ba-divider);
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__chev { display: block; pointer-events: none; }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d.is-dragging { user-select: none; -webkit-user-select: none; }

/* ---- code body ---- */
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__body {
  display: flex;
  align-items: flex-start;
  /* no left padding: the sticky gutter (or the pre) owns the left inset so code
     can&#39;t scroll into a dead strip to the left of the line numbers */
  padding: var(--ba-pad) var(--ba-pad) var(--ba-pad) 0;
  overflow-x: auto;
  overflow-y: hidden;
  /* only capture horizontal pans; let vertical swipes scroll the page (mobile) */
  touch-action: pan-x;
  scrollbar-width: thin;
  scrollbar-color: var(--ba-border) transparent;
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  -webkit-font-smoothing: antialiased;
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__body::-webkit-scrollbar { height: 9px; }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__body::-webkit-scrollbar-thumb {
  background: var(--ba-border);
  border-radius: 9px;
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 28px); }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__gutter {
  position: sticky;
  left: 0;
  display: flex;
  flex-direction: column;
  flex: none;
  margin-right: 16px;
  padding-left: var(--ba-pad);
  padding-right: 16px;
  border-right: 1px solid var(--ba-border);
  text-align: right;
  color: var(--ba-linenum);
  font-variant-numeric: tabular-nums;
  user-select: none;
  z-index: 1;
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__panel--before .ba-code__gutter { background: var(--ba-before-bg); }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__panel--after .ba-code__gutter { background: var(--ba-after-bg); }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__gutter i { display: block; line-height: var(--ba-lh); }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__pre {
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  white-space: pre;
  font-variant-ligatures: none;
  tab-size: 4;
  -moz-tab-size: 4;
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__panel--before .ba-code__pre { color: var(--ba-before-text); }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__panel--after .ba-code__pre { color: var(--ba-after-text); }
/* when line numbers are hidden, the pre is first child and owns the left inset */
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__body &gt; .ba-code__pre:first-child { padding-left: var(--ba-pad); }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__code { font-family: var(--ba-code-font); font-size: var(--ba-code-size); }

/* ---- before / after badges ---- */
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__label {
  position: absolute;
  top: var(--ba-pad);
  z-index: 3;
  display: inline-flex;
  padding: 5px 11px;
  border-radius: 6px;
  background: var(--ba-label-bg);
  color: var(--ba-label-text);
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
}
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__label--before { left: var(--ba-pad); }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__label--after { right: var(--ba-pad); }

/* ---- syntax helper classes (used inside the pasted code) ---- */
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .tok-keyword { color: var(--ba-tok-keyword); }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .tok-func { color: var(--ba-tok-func); }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .tok-type { color: var(--ba-tok-type); }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .tok-number { color: var(--ba-tok-number); }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .tok-comment { color: var(--ba-tok-comment); }
#bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .tok-mark {
  background: var(--ba-tok-mark);
  border-radius: 4px;
  padding: 0.05em 0.32em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

@keyframes ba-rise-bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  #bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__frame { animation: none; }
  #bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__handle { transition: none; }
}

/* ---- stack on small screens ---- */
@media (max-width: 720px) {
  #bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__viewport { flex-direction: column; }
  /* when stacked, each panel sizes to its OWN content: no forced min-height
     (which left a big empty void on short panels) and no equal-height collapse
     (which clipped the taller panel&#39;s extra lines) */
  #bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__panel { min-height: 0; overflow: visible; }
  #bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__panel--before,
  #bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__panel--after { flex: 0 0 auto; }
  #bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__divider { flex: 0 0 var(--ba-divider-w); }
  #bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__handle { display: none; }
  /* panels are full-width when stacked: keep both badges left-aligned so the
     &quot;after&quot; label doesn&#39;t float off to the right edge */
  #bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__label--after { right: auto; left: var(--ba-pad); }
}

/* ---- scale the code down on phones so more fits + line numbers hug the edge ---- */
@media (max-width: 600px) {
  #bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d {
    --ba-code-size: 12.5px;
    --ba-label-size: 9.5px;
    --ba-pad: 12px;
    --ba-lh: 1.55;
  }
  #bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__gutter { margin-right: 10px; padding-right: 10px; }
  #bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__chrome { gap: 10px; padding: 0 12px; min-height: 40px; }
  #bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 24px); }
  #bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d .ba-code__label { padding: 4px 9px; letter-spacing: 0.08em; }
}
&lt;/style&gt;



&lt;div id=&quot;bac-widget_c884d6a9-844d-4192-83e5-d4c119dce11d&quot; class=&quot;ba-code ba-has-labels&quot;&gt;
  &lt;div class=&quot;ba-code__shell&quot;&gt;

    

    &lt;div class=&quot;ba-code__frame&quot;&gt;

      
      &lt;div class=&quot;ba-code__chrome&quot;&gt;
        &lt;span class=&quot;ba-code__dots&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;
        &lt;span class=&quot;ba-code__files&quot;&gt;
          
            
            &lt;span class=&quot;ba-code__file ba-code__file--after&quot;&gt;&lt;/span&gt;
            
          
        &lt;/span&gt;
      &lt;/div&gt;
      

      
      &lt;div class=&quot;ba-code__viewport&quot;&gt;
        
        
&lt;div class=&quot;ba-code__panel ba-code__panel--before ba-code__panel--single&quot;&gt;
  &lt;span class=&quot;ba-code__label ba-code__label--before&quot;&gt;pseudocode&lt;/span&gt;
  &lt;div class=&quot;ba-code__body&quot;&gt;
    &lt;span class=&quot;ba-code__gutter&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;1&lt;/i&gt;&lt;i&gt;2&lt;/i&gt;&lt;i&gt;3&lt;/i&gt;&lt;/span&gt;
    &lt;pre class=&quot;ba-code__pre&quot;&gt;&lt;code class=&quot;ba-code__code&quot;&gt;&lt;span style=&quot;color:#7d8590&quot;&gt;// __int64 __fastcall swift_beginAccess(_QWORD, _QWORD, _QWORD, _QWORD); weak&lt;/span&gt;
&lt;span style=&quot;color:#e5c07b&quot;&gt;swift_beginAccess&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;v1&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;a1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;33&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color:#e5c07b&quot;&gt;swift_beginAccess&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;v0&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;v3&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

        
      &lt;/div&gt;
      

    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;and after:&lt;/p&gt;
&lt;div id=&quot;hs_cos_wrapper_widget_57569de8-e694-4037-947f-a0de9e9957db&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;widget&quot; data-hs-cos-type=&quot;module&quot;&gt;











&lt;style&gt;
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db {
  --ba-module-bg: rgba(255, 255, 255, 0.0);
  --ba-before-bg: rgba(26, 27, 33, 1.0);
  --ba-after-bg: rgba(16, 17, 22, 1.0);
  --ba-chrome-bg: rgba(29, 30, 37, 1.0);
  --ba-before-text: rgba(206, 209, 217, 1.0);
  --ba-after-text: rgba(206, 209, 217, 1.0);
  --ba-border: rgba(255, 255, 255, 0.1);
  --ba-label-bg: rgba(255, 255, 255, 0.06);
  --ba-label-text: rgba(147, 150, 161, 1.0);
  --ba-linenum: rgba(255, 255, 255, 0.22);
  --ba-tok-keyword: rgba(122, 162, 247, 1.0);
  --ba-tok-func: rgba(224, 175, 104, 1.0);
  --ba-tok-type: rgba(125, 207, 255, 1.0);
  --ba-tok-number: rgba(255, 158, 100, 1.0);
  --ba-tok-comment: rgba(86, 95, 137, 1.0);
  --ba-tok-mark: rgba(122, 162, 247, 0.2);
  --ba-divider: rgba(255, 255, 255, 0.16);
  --ba-grip-bg: rgba(244, 244, 245, 1.0);
  --ba-grip-icon: rgba(27, 27, 31, 1.0);
  --ba-divider-w: 2px;
  --ba-grip-size: 42px;
  --ba-radius: 14px;
  --ba-border-w: 1px;
  --ba-pad: 24px;
  --ba-min-h: 200px;
  --ba-code-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;
  --ba-code-size: 15px;
  --ba-label-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ba-label-size: 11px;
  --ba-lh: 1.7;
  display: block;
  background: var(--ba-module-bg);
}

/* ---- hard reset: every selector is (1,1,0)+, beating the theme&#39;s (1,0,1)
       #hs_cos_wrapper_post_body div/pre/code rules without !important ---- */
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__shell,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__intro,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__heading,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__desc,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__frame,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__chrome,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__viewport,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__panel,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__body,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__pre,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__code,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__gutter,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__label,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__files,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__file,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__arrow,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__dots,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__divider,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__handle {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  max-width: none;
  min-width: 0;
  overflow: visible;
  font-family: inherit;
  color: inherit;
  text-transform: none;
  letter-spacing: normal;
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__gutter i,
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__dots i {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  font-style: normal;
}

/* ---- shell ---- */
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__shell { margin: 0 auto; }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__intro {
  max-width: 640px;
  margin: 0 auto 18px;
  text-align: center;
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__heading {
  color: var(--ba-after-text);
  font-size: clamp(1.3rem, 1rem + 1.2vw, 1.85rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__desc {
  margin-top: 7px;
  color: var(--ba-after-text);
  opacity: 0.6;
  font-size: 1rem;
  line-height: 1.55;
}

/* ---- frame: the code box ---- */
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__frame {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 100%;
  
  margin-inline: auto;
  border: var(--ba-border-w) solid var(--ba-border);
  border-radius: var(--ba-radius);
  background: var(--ba-after-bg);
  box-shadow: 0 26px 64px -34px rgba(0, 0, 0, 0.75);
  animation: ba-rise-bac-widget_57569de8-e694-4037-947f-a0de9e9957db 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

/* ---- window chrome ---- */
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 16px;
  min-height: 44px;
  background: var(--ba-chrome-bg);
  border-bottom: 1px solid var(--ba-border);
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__dots { display: inline-flex; gap: 7px; flex: none; }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__dots i {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--ba-border);
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__files {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__file { color: var(--ba-linenum); overflow: hidden; text-overflow: ellipsis; }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__file--after { color: var(--ba-label-text); }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__arrow { flex: none; color: var(--ba-linenum); }

/* ---- panels ---- */
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__viewport {
  position: relative;
  display: flex;
  align-items: stretch;
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__panel {
  position: relative;
  min-width: 0;
  min-height: var(--ba-min-h);
  overflow: hidden;
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__panel--before {
  flex: 0 0 var(--ba-split, 50%);
  background-color: var(--ba-before-bg);
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__panel--after {
  flex: 1 1 0;
  background-color: var(--ba-after-bg);
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__panel--single { flex: 1 1 auto; }

/* ---- resize divider + handle (split mode only) ---- */
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__divider {
  position: relative;
  flex: 0 0 var(--ba-divider-w);
  background: var(--ba-divider);
  z-index: 4;
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--ba-grip-size);
  height: var(--ba-grip-size);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ba-grip-bg);
  color: var(--ba-grip-icon);
  cursor: ew-resize;
  touch-action: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.06);
  transition: transform 0.14s ease;
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__handle:hover { transform: translate(-50%, -50%) scale(1.08); }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__handle:focus-visible {
  outline: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 3px var(--ba-after-bg), 0 0 0 5px var(--ba-divider);
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__chev { display: block; pointer-events: none; }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db.is-dragging { user-select: none; -webkit-user-select: none; }

/* ---- code body ---- */
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__body {
  display: flex;
  align-items: flex-start;
  /* no left padding: the sticky gutter (or the pre) owns the left inset so code
     can&#39;t scroll into a dead strip to the left of the line numbers */
  padding: var(--ba-pad) var(--ba-pad) var(--ba-pad) 0;
  overflow-x: auto;
  overflow-y: hidden;
  /* only capture horizontal pans; let vertical swipes scroll the page (mobile) */
  touch-action: pan-x;
  scrollbar-width: thin;
  scrollbar-color: var(--ba-border) transparent;
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  -webkit-font-smoothing: antialiased;
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__body::-webkit-scrollbar { height: 9px; }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__body::-webkit-scrollbar-thumb {
  background: var(--ba-border);
  border-radius: 9px;
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 28px); }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__gutter {
  position: sticky;
  left: 0;
  display: flex;
  flex-direction: column;
  flex: none;
  margin-right: 16px;
  padding-left: var(--ba-pad);
  padding-right: 16px;
  border-right: 1px solid var(--ba-border);
  text-align: right;
  color: var(--ba-linenum);
  font-variant-numeric: tabular-nums;
  user-select: none;
  z-index: 1;
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__panel--before .ba-code__gutter { background: var(--ba-before-bg); }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__panel--after .ba-code__gutter { background: var(--ba-after-bg); }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__gutter i { display: block; line-height: var(--ba-lh); }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__pre {
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  white-space: pre;
  font-variant-ligatures: none;
  tab-size: 4;
  -moz-tab-size: 4;
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__panel--before .ba-code__pre { color: var(--ba-before-text); }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__panel--after .ba-code__pre { color: var(--ba-after-text); }
/* when line numbers are hidden, the pre is first child and owns the left inset */
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__body &gt; .ba-code__pre:first-child { padding-left: var(--ba-pad); }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__code { font-family: var(--ba-code-font); font-size: var(--ba-code-size); }

/* ---- before / after badges ---- */
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__label {
  position: absolute;
  top: var(--ba-pad);
  z-index: 3;
  display: inline-flex;
  padding: 5px 11px;
  border-radius: 6px;
  background: var(--ba-label-bg);
  color: var(--ba-label-text);
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
}
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__label--before { left: var(--ba-pad); }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__label--after { right: var(--ba-pad); }

/* ---- syntax helper classes (used inside the pasted code) ---- */
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .tok-keyword { color: var(--ba-tok-keyword); }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .tok-func { color: var(--ba-tok-func); }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .tok-type { color: var(--ba-tok-type); }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .tok-number { color: var(--ba-tok-number); }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .tok-comment { color: var(--ba-tok-comment); }
#bac-widget_57569de8-e694-4037-947f-a0de9e9957db .tok-mark {
  background: var(--ba-tok-mark);
  border-radius: 4px;
  padding: 0.05em 0.32em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

@keyframes ba-rise-bac-widget_57569de8-e694-4037-947f-a0de9e9957db {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  #bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__frame { animation: none; }
  #bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__handle { transition: none; }
}

/* ---- stack on small screens ---- */
@media (max-width: 720px) {
  #bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__viewport { flex-direction: column; }
  /* when stacked, each panel sizes to its OWN content: no forced min-height
     (which left a big empty void on short panels) and no equal-height collapse
     (which clipped the taller panel&#39;s extra lines) */
  #bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__panel { min-height: 0; overflow: visible; }
  #bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__panel--before,
  #bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__panel--after { flex: 0 0 auto; }
  #bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__divider { flex: 0 0 var(--ba-divider-w); }
  #bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__handle { display: none; }
  /* panels are full-width when stacked: keep both badges left-aligned so the
     &quot;after&quot; label doesn&#39;t float off to the right edge */
  #bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__label--after { right: auto; left: var(--ba-pad); }
}

/* ---- scale the code down on phones so more fits + line numbers hug the edge ---- */
@media (max-width: 600px) {
  #bac-widget_57569de8-e694-4037-947f-a0de9e9957db {
    --ba-code-size: 12.5px;
    --ba-label-size: 9.5px;
    --ba-pad: 12px;
    --ba-lh: 1.55;
  }
  #bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__gutter { margin-right: 10px; padding-right: 10px; }
  #bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__chrome { gap: 10px; padding: 0 12px; min-height: 40px; }
  #bac-widget_57569de8-e694-4037-947f-a0de9e9957db.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 24px); }
  #bac-widget_57569de8-e694-4037-947f-a0de9e9957db .ba-code__label { padding: 4px 9px; letter-spacing: 0.08em; }
}
&lt;/style&gt;



&lt;div id=&quot;bac-widget_57569de8-e694-4037-947f-a0de9e9957db&quot; class=&quot;ba-code ba-has-labels&quot;&gt;
  &lt;div class=&quot;ba-code__shell&quot;&gt;

    

    &lt;div class=&quot;ba-code__frame&quot;&gt;

      
      &lt;div class=&quot;ba-code__chrome&quot;&gt;
        &lt;span class=&quot;ba-code__dots&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;
        &lt;span class=&quot;ba-code__files&quot;&gt;
          
            
            &lt;span class=&quot;ba-code__file ba-code__file--after&quot;&gt;&lt;/span&gt;
            
          
        &lt;/span&gt;
      &lt;/div&gt;
      

      
      &lt;div class=&quot;ba-code__viewport&quot;&gt;
        
        
&lt;div class=&quot;ba-code__panel ba-code__panel--before ba-code__panel--single&quot;&gt;
  &lt;span class=&quot;ba-code__label ba-code__label--before&quot;&gt;pseudocode&lt;/span&gt;
  &lt;div class=&quot;ba-code__body&quot;&gt;
    &lt;span class=&quot;ba-code__gutter&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;1&lt;/i&gt;&lt;i&gt;2&lt;/i&gt;&lt;i&gt;3&lt;/i&gt;&lt;/span&gt;
    &lt;pre class=&quot;ba-code__pre&quot;&gt;&lt;code class=&quot;ba-code__code&quot;&gt;&lt;span style=&quot;color:#7d8590&quot;&gt;// void __swiftcall swift_beginAccess(void *pointer, void *buffer, Swift::ExclusivityFlags flags, void *pc);&lt;/span&gt;
&lt;span style=&quot;color:#e5c07b&quot;&gt;swift_beginAccess&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)(&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;self&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;buffer&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;Tracking&lt;/span&gt;&lt;span style=&quot;color:#abb2bf&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;Modify&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;nullptr&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color:#e5c07b&quot;&gt;swift_beginAccess&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)(&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;v0&lt;/span&gt;  &lt;span style=&quot;color:#abb2bf&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;buffer&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;Modify&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt;          &lt;span style=&quot;color:#d19a66&quot;&gt;nullptr&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

        
      &lt;/div&gt;
      

    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;The prototype is now the actual one —&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;__swiftcall&lt;/code&gt;, with typed arguments rather than a guess. Notice how the flags argument is typed as&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;Swift::ExclusivityFlags&lt;/code&gt;, so&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;33&lt;/code&gt;&lt;span&gt; &lt;/span&gt;prints as&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;Tracking|Modify&lt;/code&gt;&lt;span&gt; &lt;/span&gt;(&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;0x20|0x1&lt;/code&gt;) and&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;1&lt;/code&gt;&lt;span&gt; &lt;/span&gt;as&lt;span&gt; &lt;/span&gt;&lt;code style=&quot;background-color: #f6f7f9;&quot;&gt;Modify&lt;/code&gt;.&lt;/p&gt;
&lt;h2 style=&quot;line-height: 1.5; background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #1d1d1f;&quot;&gt;The Future&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span&gt;Those of you closely following IDA’s progress over the last releases already know that what was presented above is just the beginning. Upcoming IDA versions will address many more shortcomings (Strings, Metadata, Typing, Mangling, …) of current analysis and continue closing the gap between Swift binaries and the analysis they deserve.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #1d1d1f; background-color: #ffffff; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;
        </description><link>https://hex-rays.com/blog/ida-9.4-improved-analysis-of-compiled-swift-binaries</link><guid isPermaLink="false">https://hex-rays.com/blog/ida-9.4-improved-analysis-of-compiled-swift-binaries</guid><pubDate>Sat, 08 Aug 2026 15:15:04 GMT</pubDate></item><item><title>IDA 9.4: Smarter Navigation and Quality-of-Life Improvements</title><description>&lt;span id=&quot;hs_cos_wrapper_post_body&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_rich_text&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;meta_field&quot; data-hs-cos-type=&quot;rich_text&quot;&gt;&lt;p&gt;IDA 9.4 makes getting around a binary faster. The Jump dialog becomes smarter by default, a new Pathfinder answers reachability questions directly from the cross-reference graph, and a batch of quality-of-life fixes smooth out the everyday interface.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;Jump Anywhere, by default&lt;/h2&gt;
&lt;p&gt;IDA 9.4 introduces the new Jump dialog. This dialog debuted in 9.2 under the name &lt;em&gt;Jump Anywhere&lt;/em&gt; as an opt-in alternative to the classic &lt;em&gt;Jump to address&lt;/em&gt; dialog, matured in 9.3 with asynchronous search and demangled-name indexing, and now, in IDA 9.4, it graduates from &quot;the other dialog&quot; to &lt;strong&gt;the&lt;/strong&gt; dialog. Pressing &lt;code&gt;G&lt;/code&gt; opens it by default; the muscle memory keeps working, only the dialog behind it gets smarter.&lt;span style=&quot;color: #222222; background-color: #ffffff; white-space-collapse: preserve;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-23-0172-PM.png?width=864&amp;amp;height=528&amp;amp;name=undefined-Jun-23-2026-02-15-23-0172-PM.png&quot; width=&quot;864&quot; height=&quot;528&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-23-0172-PM.png?width=432&amp;amp;height=264&amp;amp;name=undefined-Jun-23-2026-02-15-23-0172-PM.png 432w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-23-0172-PM.png?width=864&amp;amp;height=528&amp;amp;name=undefined-Jun-23-2026-02-15-23-0172-PM.png 864w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-23-0172-PM.png?width=1296&amp;amp;height=792&amp;amp;name=undefined-Jun-23-2026-02-15-23-0172-PM.png 1296w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-23-0172-PM.png?width=1728&amp;amp;height=1056&amp;amp;name=undefined-Jun-23-2026-02-15-23-0172-PM.png 1728w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-23-0172-PM.png?width=2160&amp;amp;height=1320&amp;amp;name=undefined-Jun-23-2026-02-15-23-0172-PM.png 2160w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-23-0172-PM.png?width=2592&amp;amp;height=1584&amp;amp;name=undefined-Jun-23-2026-02-15-23-0172-PM.png 2592w&quot; sizes=&quot;(max-width: 864px) 100vw, 864px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;G&lt;/code&gt; is now Jump Anywhere&lt;/h3&gt;
&lt;p&gt;The 9.4 default binding for &lt;code&gt;G&lt;/code&gt; is the Jump Anywhere dialog. Same key, same place, same muscle memory, only now the dialog accepts names, expressions, segment-relative addresses, and script identifiers without you having to remember which dialog handles which.&lt;/p&gt;
&lt;p&gt;Existing input forms still work unchanged:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Plain hex (&lt;code&gt;401000&lt;/code&gt;, &lt;code&gt;0x401000&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;seg:off&lt;/code&gt; for segmented inputs&lt;/li&gt;
&lt;li&gt;Relative offsets (&lt;code&gt;+100&lt;/code&gt;, &lt;code&gt;-10000&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Named items, including auto-generated names (&lt;code&gt;sub_401000&lt;/code&gt;, &lt;code&gt;loc_4010A0&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;C-style arithmetic with &lt;code&gt;$&lt;/code&gt; as the current address&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What&#39;s new is that the same keypress now also gives you a live, ranked result list across functions, names, local types and segments, without breaking any of the above.&lt;/p&gt;
&lt;h3 style=&quot;line-height: 1.8;&quot;&gt;&lt;span style=&quot;color: #222222; background-color: #ffffff;&quot;&gt;One box, everything IDA knows&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span&gt;The list under the input is more than an address picker. A single query searches every kind of thing in the database at once - functions (library and imported ones included), names (data, strings, and the auto-generated &lt;/span&gt;&lt;span style=&quot;background-color: #f6f6f6;&quot;&gt;sub_&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: #f6f6f6;&quot;&gt;loc_&lt;/span&gt;&lt;span&gt;, a… labels), local types, function comments, and segments - ranks the hits by how well they match, and highlights the characters you typed.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span&gt;That last bit catches people out: yes, your types are in there too. Type &lt;/span&gt;&lt;span style=&quot;background-color: #f6f6f6;&quot;&gt;sig&lt;/span&gt;&lt;span&gt; and the list interleaves the &lt;/span&gt;&lt;span style=&quot;background-color: #f6f6f6;&quot;&gt;sigprocmask&lt;/span&gt;&lt;span&gt; function, the sigaction and &lt;/span&gt;&lt;span style=&quot;background-color: #f6f6f6;&quot;&gt;siginfo_t&lt;/span&gt;&lt;span&gt; structures, and the &lt;/span&gt;&lt;span style=&quot;background-color: #f6f6f6;&quot;&gt;aSigaction&lt;/span&gt;&lt;span&gt; string literal - each one a single Enter away, the preview pane already showing you where it leads. You stop having to know in advance whether the thing you&#39;re chasing is a function, a label, or a struct; you type part of its name and Jump Anywhere sorts the rest.&lt;span style=&quot;color: #222222; background-color: #ffffff; white-space-collapse: preserve;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-01-42-42-3084-PM.png?width=864&amp;amp;height=528&amp;amp;name=undefined-Jun-23-2026-01-42-42-3084-PM.png&quot; width=&quot;864&quot; height=&quot;528&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-01-42-42-3084-PM.png?width=432&amp;amp;height=264&amp;amp;name=undefined-Jun-23-2026-01-42-42-3084-PM.png 432w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-01-42-42-3084-PM.png?width=864&amp;amp;height=528&amp;amp;name=undefined-Jun-23-2026-01-42-42-3084-PM.png 864w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-01-42-42-3084-PM.png?width=1296&amp;amp;height=792&amp;amp;name=undefined-Jun-23-2026-01-42-42-3084-PM.png 1296w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-01-42-42-3084-PM.png?width=1728&amp;amp;height=1056&amp;amp;name=undefined-Jun-23-2026-01-42-42-3084-PM.png 1728w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-01-42-42-3084-PM.png?width=2160&amp;amp;height=1320&amp;amp;name=undefined-Jun-23-2026-01-42-42-3084-PM.png 2160w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-01-42-42-3084-PM.png?width=2592&amp;amp;height=1584&amp;amp;name=undefined-Jun-23-2026-01-42-42-3084-PM.png 2592w&quot; sizes=&quot;(max-width: 864px) 100vw, 864px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Live previews&lt;/h3&gt;
&lt;p&gt;As you move through the result list, a preview pane shows you exactly where each row leads, before you commit the jump. Toggle it between &lt;strong&gt;Disassembly&lt;/strong&gt;, &lt;strong&gt;Pseudocode&lt;/strong&gt; (for functions you&#39;ve already decompiled), and &lt;strong&gt;Hex&lt;/strong&gt; with the buttons next to the input, and Jump Anywhere remembers your pick for next time.&lt;span style=&quot;color: #222222; background-color: #ffffff; white-space-collapse: preserve;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-48-2129-PM.png?width=864&amp;amp;height=528&amp;amp;name=undefined-Jun-23-2026-02-15-48-2129-PM.png&quot; width=&quot;864&quot; height=&quot;528&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-48-2129-PM.png?width=432&amp;amp;height=264&amp;amp;name=undefined-Jun-23-2026-02-15-48-2129-PM.png 432w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-48-2129-PM.png?width=864&amp;amp;height=528&amp;amp;name=undefined-Jun-23-2026-02-15-48-2129-PM.png 864w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-48-2129-PM.png?width=1296&amp;amp;height=792&amp;amp;name=undefined-Jun-23-2026-02-15-48-2129-PM.png 1296w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-48-2129-PM.png?width=1728&amp;amp;height=1056&amp;amp;name=undefined-Jun-23-2026-02-15-48-2129-PM.png 1728w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-48-2129-PM.png?width=2160&amp;amp;height=1320&amp;amp;name=undefined-Jun-23-2026-02-15-48-2129-PM.png 2160w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-48-2129-PM.png?width=2592&amp;amp;height=1584&amp;amp;name=undefined-Jun-23-2026-02-15-48-2129-PM.png 2592w&quot; sizes=&quot;(max-width: 864px) 100vw, 864px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;span style=&quot;color: #222222; background-color: #ffffff; white-space-collapse: preserve;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-59-2684-PM.png?width=864&amp;amp;height=528&amp;amp;name=undefined-Jun-23-2026-02-15-59-2684-PM.png&quot; width=&quot;864&quot; height=&quot;528&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-59-2684-PM.png?width=432&amp;amp;height=264&amp;amp;name=undefined-Jun-23-2026-02-15-59-2684-PM.png 432w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-59-2684-PM.png?width=864&amp;amp;height=528&amp;amp;name=undefined-Jun-23-2026-02-15-59-2684-PM.png 864w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-59-2684-PM.png?width=1296&amp;amp;height=792&amp;amp;name=undefined-Jun-23-2026-02-15-59-2684-PM.png 1296w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-59-2684-PM.png?width=1728&amp;amp;height=1056&amp;amp;name=undefined-Jun-23-2026-02-15-59-2684-PM.png 1728w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-59-2684-PM.png?width=2160&amp;amp;height=1320&amp;amp;name=undefined-Jun-23-2026-02-15-59-2684-PM.png 2160w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-15-59-2684-PM.png?width=2592&amp;amp;height=1584&amp;amp;name=undefined-Jun-23-2026-02-15-59-2684-PM.png 2592w&quot; sizes=&quot;(max-width: 864px) 100vw, 864px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&quot;But I want the old dialog back&quot;&lt;/h3&gt;
&lt;p&gt;We hear you. If your fingers expect a no-distractions address prompt, you can keep one. A Feature Flag in &lt;strong&gt;Options → Feature Flags…&lt;/strong&gt; restores the classic &lt;em&gt;Jump to address&lt;/em&gt; dialog for &lt;code&gt;G&lt;/code&gt;; the new dialog is then still available as the &lt;strong&gt;Jump Anywhere&lt;/strong&gt; action in the Jump menu.&lt;/p&gt;
&lt;h3&gt;Re-jump to the last address with a single &lt;code&gt;Enter&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;A common pattern with the old &lt;code&gt;G&lt;/code&gt; was &quot;press G, type the same thing again, hit Enter.&quot; In 9.4 the dialog opens with your most recent jump already selected, so &lt;code&gt;G ↵&lt;/code&gt; takes you straight back to the last place you went: two keystrokes, no typing. Need an address from further back? Arrow down through the history first, then &lt;code&gt;Enter&lt;/code&gt;.&lt;span style=&quot;color: #222222; background-color: #ffffff; white-space-collapse: preserve;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-01-44-41-6915-PM.png?width=864&amp;amp;height=528&amp;amp;name=undefined-Jun-23-2026-01-44-41-6915-PM.png&quot; width=&quot;864&quot; height=&quot;528&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-01-44-41-6915-PM.png?width=432&amp;amp;height=264&amp;amp;name=undefined-Jun-23-2026-01-44-41-6915-PM.png 432w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-01-44-41-6915-PM.png?width=864&amp;amp;height=528&amp;amp;name=undefined-Jun-23-2026-01-44-41-6915-PM.png 864w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-01-44-41-6915-PM.png?width=1296&amp;amp;height=792&amp;amp;name=undefined-Jun-23-2026-01-44-41-6915-PM.png 1296w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-01-44-41-6915-PM.png?width=1728&amp;amp;height=1056&amp;amp;name=undefined-Jun-23-2026-01-44-41-6915-PM.png 1728w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-01-44-41-6915-PM.png?width=2160&amp;amp;height=1320&amp;amp;name=undefined-Jun-23-2026-01-44-41-6915-PM.png 2160w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-01-44-41-6915-PM.png?width=2592&amp;amp;height=1584&amp;amp;name=undefined-Jun-23-2026-01-44-41-6915-PM.png 2592w&quot; sizes=&quot;(max-width: 864px) 100vw, 864px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;If there&#39;s something you want to type into Jump Anywhere that doesn&#39;t work yet, tell us. The dialog is the one place every navigation request lands, and it&#39;s easier to add a syntax than to argue about which menu it should live under.&lt;/p&gt;
&lt;h2&gt;Pathfinder: Xref marks the path&lt;/h2&gt;
&lt;p&gt;Every reverse engineer knows the question. You are staring at a dangerous function, &lt;code&gt;system()&lt;/code&gt;, a crypto routine, a privileged syscall wrapper, and you need to know: &lt;strong&gt;can the code I care about actually reach this?&lt;/strong&gt; Or the inverse: does the data that arrives in &lt;code&gt;recv()&lt;/code&gt; ever flow anywhere interesting?&lt;/p&gt;
&lt;p&gt;Until now, IDA&#39;s answer was to chase cross-references one level at a time, or to open &lt;em&gt;Xrefs graph to/from&lt;/em&gt; and squint at the resulting hairball. The information was always there (the xref graph knows every caller and callee), but the &lt;em&gt;question&lt;/em&gt; you wanted to ask was about &lt;strong&gt;paths&lt;/strong&gt;, and there was no way to ask it directly.&lt;/p&gt;
&lt;p&gt;IDA 9.4 adds one: the &lt;strong&gt;Pathfinder&lt;/strong&gt;.&lt;span style=&quot;color: #222222; background-color: #ffffff; white-space-collapse: preserve;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-11-5210-PM.png?width=943&amp;amp;height=874&amp;amp;name=undefined-Jun-23-2026-02-16-11-5210-PM.png&quot; width=&quot;943&quot; height=&quot;874&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-11-5210-PM.png?width=472&amp;amp;height=437&amp;amp;name=undefined-Jun-23-2026-02-16-11-5210-PM.png 472w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-11-5210-PM.png?width=943&amp;amp;height=874&amp;amp;name=undefined-Jun-23-2026-02-16-11-5210-PM.png 943w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-11-5210-PM.png?width=1415&amp;amp;height=1311&amp;amp;name=undefined-Jun-23-2026-02-16-11-5210-PM.png 1415w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-11-5210-PM.png?width=1886&amp;amp;height=1748&amp;amp;name=undefined-Jun-23-2026-02-16-11-5210-PM.png 1886w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-11-5210-PM.png?width=2358&amp;amp;height=2185&amp;amp;name=undefined-Jun-23-2026-02-16-11-5210-PM.png 2358w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-11-5210-PM.png?width=2829&amp;amp;height=2622&amp;amp;name=undefined-Jun-23-2026-02-16-11-5210-PM.png 2829w&quot; sizes=&quot;(max-width: 943px) 100vw, 943px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;State the question, get the answer&lt;/h3&gt;
&lt;p&gt;Open the Pathfinder with &lt;code&gt;Shift-F9&lt;/code&gt; (or &lt;strong&gt;View → Open subviews → Pathfinder&lt;/strong&gt;). Add two waypoints, the &lt;em&gt;from&lt;/em&gt; and the &lt;em&gt;to&lt;/em&gt;, and IDA immediately searches the cross-reference graph for every path connecting them.&lt;/p&gt;
&lt;p&gt;The result appears right in the widget: between each pair of waypoints you see how many functions participate in some path and how short the shortest connection is (&quot;N nodes, shortest path: M&quot;), and a status bar beneath the waypoint list sums it up (&quot;Found N unique nodes across M segment(s)&quot;). If there is a route, Pathfinder says so, which is often exactly the answer you needed (&quot;Yes, attacker input can&amp;nbsp;reach this sink&quot;).&lt;span style=&quot;color: #222222; background-color: #ffffff; white-space-collapse: preserve;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-22-6983-PM.png?width=943&amp;amp;height=851&amp;amp;name=undefined-Jun-23-2026-02-16-22-6983-PM.png&quot; width=&quot;943&quot; height=&quot;851&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-22-6983-PM.png?width=472&amp;amp;height=426&amp;amp;name=undefined-Jun-23-2026-02-16-22-6983-PM.png 472w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-22-6983-PM.png?width=943&amp;amp;height=851&amp;amp;name=undefined-Jun-23-2026-02-16-22-6983-PM.png 943w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-22-6983-PM.png?width=1415&amp;amp;height=1277&amp;amp;name=undefined-Jun-23-2026-02-16-22-6983-PM.png 1415w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-22-6983-PM.png?width=1886&amp;amp;height=1702&amp;amp;name=undefined-Jun-23-2026-02-16-22-6983-PM.png 1886w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-22-6983-PM.png?width=2358&amp;amp;height=2128&amp;amp;name=undefined-Jun-23-2026-02-16-22-6983-PM.png 2358w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-22-6983-PM.png?width=2829&amp;amp;height=2553&amp;amp;name=undefined-Jun-23-2026-02-16-22-6983-PM.png 2829w&quot; sizes=&quot;(max-width: 943px) 100vw, 943px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Waypoints can be added three ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;drag a function straight in from the &lt;strong&gt;Functions&lt;/strong&gt; list,&lt;/li&gt;
&lt;li&gt;right-click the waypoint list and pick &lt;strong&gt;Add waypoint…&lt;/strong&gt; to choose a function,&lt;/li&gt;
&lt;li&gt;or, from any disassembly or pseudocode view, right-click → &lt;strong&gt;Add to path&lt;/strong&gt; (or just press &lt;code&gt;Ctrl-Shift-F9&lt;/code&gt;). This is the fastest way: navigate where you care, press the key, move on.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;More than two dots&lt;/h3&gt;
&lt;p&gt;Paths are rarely a two-point question. Pathfinder accepts an &lt;strong&gt;ordered list&lt;/strong&gt; of waypoints, &lt;em&gt;A through B to C&lt;/em&gt;, and finds paths that visit them in order, segment by segment. Drag rows to reorder; the per-segment counts update as you go.&lt;/p&gt;
&lt;p&gt;And when the search keeps routing through some hyper-connected utility function that you know is noise, a logging helper or a generic wrapper, drop that function into the &lt;strong&gt;Exclusions&lt;/strong&gt; panel and it is banned from every path. Drag it back up into the waypoint list to re-include it. (Remove any row with its ✕ button; a right-click &lt;strong&gt;Clear&lt;/strong&gt; empties a whole list at once.)&lt;/p&gt;
&lt;p&gt;Two checkboxes and a slider tune the search:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Include data xrefs&lt;/strong&gt;: follow data references too, not just calls (on by default)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shortest path only&lt;/strong&gt;: collapse the result to the minimal route&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Max depth&lt;/strong&gt;: bound the search radius (default: unlimited)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Seeing it&lt;/h3&gt;
&lt;p&gt;Numbers are an answer; a picture is an explanation. Pathfinder has three buttons for that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tree (First → Last)&lt;/strong&gt; and &lt;strong&gt;Tree (Last ← First)&lt;/strong&gt; open the cross-references tree with every discovered path already expanded, the whole route from caller to callee (or callee to caller), ready to walk. For very large results (256+ nodes) IDA asks before building the tree, and the build is cancellable.&lt;span style=&quot;color: #222222; background-color: #ffffff; white-space-collapse: preserve;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-36-3929-PM.png?width=469&amp;amp;height=842&amp;amp;name=undefined-Jun-23-2026-02-16-36-3929-PM.png&quot; width=&quot;469&quot; height=&quot;842&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-36-3929-PM.png?width=235&amp;amp;height=421&amp;amp;name=undefined-Jun-23-2026-02-16-36-3929-PM.png 235w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-36-3929-PM.png?width=469&amp;amp;height=842&amp;amp;name=undefined-Jun-23-2026-02-16-36-3929-PM.png 469w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-36-3929-PM.png?width=704&amp;amp;height=1263&amp;amp;name=undefined-Jun-23-2026-02-16-36-3929-PM.png 704w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-36-3929-PM.png?width=938&amp;amp;height=1684&amp;amp;name=undefined-Jun-23-2026-02-16-36-3929-PM.png 938w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-36-3929-PM.png?width=1173&amp;amp;height=2105&amp;amp;name=undefined-Jun-23-2026-02-16-36-3929-PM.png 1173w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-36-3929-PM.png?width=1407&amp;amp;height=2526&amp;amp;name=undefined-Jun-23-2026-02-16-36-3929-PM.png 1407w&quot; sizes=&quot;(max-width: 469px) 100vw, 469px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graph&lt;/strong&gt; renders the paths as an Xref Graph: the path spine and your waypoints get dedicated colors (theme-aware, of course), so the route pops out of the surrounding graph instead of drowning in it.&lt;span style=&quot;color: #222222; background-color: #ffffff; white-space-collapse: preserve;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-47-3821-PM.png?width=943&amp;amp;height=819&amp;amp;name=undefined-Jun-23-2026-02-16-47-3821-PM.png&quot; width=&quot;943&quot; height=&quot;819&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-47-3821-PM.png?width=472&amp;amp;height=410&amp;amp;name=undefined-Jun-23-2026-02-16-47-3821-PM.png 472w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-47-3821-PM.png?width=943&amp;amp;height=819&amp;amp;name=undefined-Jun-23-2026-02-16-47-3821-PM.png 943w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-47-3821-PM.png?width=1415&amp;amp;height=1229&amp;amp;name=undefined-Jun-23-2026-02-16-47-3821-PM.png 1415w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-47-3821-PM.png?width=1886&amp;amp;height=1638&amp;amp;name=undefined-Jun-23-2026-02-16-47-3821-PM.png 1886w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-47-3821-PM.png?width=2358&amp;amp;height=2048&amp;amp;name=undefined-Jun-23-2026-02-16-47-3821-PM.png 2358w, https://hex-rays.com/hs-fs/hubfs/undefined-Jun-23-2026-02-16-47-3821-PM.png?width=2829&amp;amp;height=2457&amp;amp;name=undefined-Jun-23-2026-02-16-47-3821-PM.png 2829w&quot; sizes=&quot;(max-width: 943px) 100vw, 943px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The graphs Pathfinder creates are ordinary xref graphs, saved with your database and listed in the &lt;strong&gt;Xref Graph manager&lt;/strong&gt;, which is itself new in 9.4: a dockable widget where saved graphs live in folders, with live node counts. Pathfinder even files its graphs into a dedicated &lt;strong&gt;Paths&lt;/strong&gt; folder there.&lt;/p&gt;
&lt;h3&gt;It remembers&lt;/h3&gt;
&lt;p&gt;Waypoints, exclusions, and options are saved with your desktop, per database. Close IDA mid-investigation, reopen the IDB tomorrow, and your waypoint list is still there, paths recomputed and ready.&lt;/p&gt;
&lt;p&gt;If there is a question you want to ask the xref graph that Pathfinder can&#39;t express yet, tell us. The widget is new, and the whole point is to let you ask path questions directly instead of reconstructing answers by hand.&lt;/p&gt;
&lt;h2&gt;Quality of life: the little things in 9.4&lt;/h2&gt;
&lt;p&gt;Not every improvement earns its own headline. Here are the small wins that clear friction out of the everyday interface, grouped by where you&#39;ll notice them.&lt;/p&gt;
&lt;h3&gt;Readable in every theme&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Expand/collapse arrows in tree views (Functions folders, the cross-references tree, structure members) are legible in every dark theme, not just the default.&lt;/li&gt;
&lt;li&gt;Hint-popup titles no longer fade into the background on macOS under the default dark theme.&lt;/li&gt;
&lt;li&gt;Merge view detail-pane text is readable against dark backgrounds.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Clicks that land where you meant&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Clicking an address in the navigator band from the pseudocode view now switches to IDA-View and jumps there. Previously this did nothing.&lt;/li&gt;
&lt;li&gt;Under the debugger, double-clicking a stack variable jumps to that stack-memory slot.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Lists that behave&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The cross-references tree name column auto-sizes to its contents instead of clipping.&lt;/li&gt;
&lt;li&gt;Quick-filtering a list whose items live in more than one folder no longer shows phantom matches or trips an internal error.&lt;/li&gt;
&lt;li&gt;The status-bar analysis indicator updates immediately when toggled.&lt;/li&gt;
&lt;li&gt;Dispatching a chooser action from the command palette no longer crashes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Closing&lt;/h2&gt;
&lt;p&gt;Taken together, navigation in 9.4 gets both smarter and deeper. The Jump dialog answers &quot;where is this?&quot; the moment you press &lt;code&gt;G&lt;/code&gt;, and Pathfinder answers &quot;how do I get from here to there?&quot; straight from the cross-reference graph, while a batch of quality-of-life fixes clears the small frictions out of the way. Many of these improvements started as customer requests, so thank you for your feedback. If there&#39;s a navigation workflow or a path question you&#39;d like IDA to handle, tell us on the forum: &lt;a href=&quot;https://community.hex-rays.com/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;https://community.hex-rays.com/&lt;/a&gt; or contact &lt;a href=&quot;mailto:support@hex-rays.com&quot; rel=&quot;noopener&quot;&gt;support@hex-rays.com.&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;
        </description><link>https://hex-rays.com/blog/ida-9.4-smarter-navigation-and-quality-of-life-improvements</link><guid isPermaLink="false">https://hex-rays.com/blog/ida-9.4-smarter-navigation-and-quality-of-life-improvements</guid><pubDate>Sat, 08 Aug 2026 15:15:04 GMT</pubDate></item><item><title>IDA 9.4: Apple Dyld Shared Cache workflow improvements</title><description>&lt;span id=&quot;hs_cos_wrapper_post_body&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_rich_text&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;meta_field&quot; data-hs-cos-type=&quot;rich_text&quot;&gt;&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Over the years, the Apple ecosystem (iOS, macOS, …) has seen steady gains in security, application load-time, and more. One of the cornerstones enabling those is the &quot;Dyld Shared Cache&quot; (DSC): a highly specific collection of common system libraries, pre-optimized on many fronts and used across applications.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;!--more--&gt;If you have spent time in that field, you have probably noticed that IDA&#39;s support for the DSC left a lot to be desired. It took us some time, but IDA 9.4 changes that dramatically, with a far more streamlined workflow, fewer hurdles, &lt;a href=&quot;https://hex-rays.com/blog/ida-9.4-improved-analysis-of-compiled-swift-binaries&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;much better Swift support&lt;/a&gt;, clearer feedback, and (perhaps most importantly) fluid navigation that is no longer broken by missing cross-references, the dreaded &quot;red addresses&quot;.&lt;br&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;What&#39;s new&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;In a nutshell, we have &lt;a href=&quot;https://docs.hex-rays.com/9.4/core/disassembler/concepts/dsc-workflow&quot; style=&quot;color: #000000;&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;reconsidered the way reversers approach a Dyld Shared Cache as a whole.&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Gone are the days of loading the entire DSC into the database just to keep cross-references intact. The user now gets fluid navigation across every part of the DSC - even the parts that are not loaded: those are brought in on-demand.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IDA 9.4 also ships new, &lt;a href=&quot;https://github.com/HexRaysSA/ida-docs/blob/arnaud/dsc_skeleton/.gitbook/assets/dsc_index_full.png&quot; style=&quot;color: #000000;&quot;&gt;specialized widgets&lt;/a&gt; that keep the layout of the DSC in view at all times: what is currently loaded, what is available, and so on. Alongside them comes tooling built for very DSC-specific use-cases:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;color: #000000;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;load image(s) (that is, shared libraries) and their dependencies, down to N levels of depth&lt;/span&gt;&lt;br&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/dsc_index_full.png?width=717&amp;amp;height=605&amp;amp;name=dsc_index_full.png&quot; width=&quot;717&quot; height=&quot;605&quot; loading=&quot;lazy&quot; alt=&quot;dsc_index_full&quot; style=&quot;height: auto; max-width: 100%; width: 717px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/dsc_index_full.png?width=359&amp;amp;height=303&amp;amp;name=dsc_index_full.png 359w, https://hex-rays.com/hs-fs/hubfs/dsc_index_full.png?width=717&amp;amp;height=605&amp;amp;name=dsc_index_full.png 717w, https://hex-rays.com/hs-fs/hubfs/dsc_index_full.png?width=1076&amp;amp;height=908&amp;amp;name=dsc_index_full.png 1076w, https://hex-rays.com/hs-fs/hubfs/dsc_index_full.png?width=1434&amp;amp;height=1210&amp;amp;name=dsc_index_full.png 1434w, https://hex-rays.com/hs-fs/hubfs/dsc_index_full.png?width=1793&amp;amp;height=1513&amp;amp;name=dsc_index_full.png 1793w, https://hex-rays.com/hs-fs/hubfs/dsc_index_full.png?width=2151&amp;amp;height=1815&amp;amp;name=dsc_index_full.png 2151w&quot; sizes=&quot;(max-width: 717px) 100vw, 717px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;extract the list of dependencies from a user application and load those (plus dependencies, if needed)&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/dsc_load_deps_dialog.png?width=853&amp;amp;height=548&amp;amp;name=dsc_load_deps_dialog.png&quot; width=&quot;853&quot; height=&quot;548&quot; loading=&quot;lazy&quot; alt=&quot;dsc_load_deps_dialog&quot; style=&quot;height: auto; max-width: 100%; width: 853px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/dsc_load_deps_dialog.png?width=427&amp;amp;height=274&amp;amp;name=dsc_load_deps_dialog.png 427w, https://hex-rays.com/hs-fs/hubfs/dsc_load_deps_dialog.png?width=853&amp;amp;height=548&amp;amp;name=dsc_load_deps_dialog.png 853w, https://hex-rays.com/hs-fs/hubfs/dsc_load_deps_dialog.png?width=1280&amp;amp;height=822&amp;amp;name=dsc_load_deps_dialog.png 1280w, https://hex-rays.com/hs-fs/hubfs/dsc_load_deps_dialog.png?width=1706&amp;amp;height=1096&amp;amp;name=dsc_load_deps_dialog.png 1706w, https://hex-rays.com/hs-fs/hubfs/dsc_load_deps_dialog.png?width=2133&amp;amp;height=1370&amp;amp;name=dsc_load_deps_dialog.png 2133w, https://hex-rays.com/hs-fs/hubfs/dsc_load_deps_dialog.png?width=2559&amp;amp;height=1644&amp;amp;name=dsc_load_deps_dialog.png 2559w&quot; sizes=&quot;(max-width: 853px) 100vw, 853px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;find which image or section of the DSC contains specific symbols&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/dsc_load_deps_external.png?width=853&amp;amp;height=548&amp;amp;name=dsc_load_deps_external.png&quot; width=&quot;853&quot; height=&quot;548&quot; loading=&quot;lazy&quot; alt=&quot;dsc_load_deps_external&quot; style=&quot;height: auto; max-width: 100%; width: 853px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/dsc_load_deps_external.png?width=427&amp;amp;height=274&amp;amp;name=dsc_load_deps_external.png 427w, https://hex-rays.com/hs-fs/hubfs/dsc_load_deps_external.png?width=853&amp;amp;height=548&amp;amp;name=dsc_load_deps_external.png 853w, https://hex-rays.com/hs-fs/hubfs/dsc_load_deps_external.png?width=1280&amp;amp;height=822&amp;amp;name=dsc_load_deps_external.png 1280w, https://hex-rays.com/hs-fs/hubfs/dsc_load_deps_external.png?width=1706&amp;amp;height=1096&amp;amp;name=dsc_load_deps_external.png 1706w, https://hex-rays.com/hs-fs/hubfs/dsc_load_deps_external.png?width=2133&amp;amp;height=1370&amp;amp;name=dsc_load_deps_external.png 2133w, https://hex-rays.com/hs-fs/hubfs/dsc_load_deps_external.png?width=2559&amp;amp;height=1644&amp;amp;name=dsc_load_deps_external.png 2559w&quot; sizes=&quot;(max-width: 853px) 100vw, 853px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;find your way into the DSC straight from log messages&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/dsc_locate_symbol.png?width=592&amp;amp;height=826&amp;amp;name=dsc_locate_symbol.png&quot; width=&quot;592&quot; height=&quot;826&quot; loading=&quot;lazy&quot; alt=&quot;dsc_locate_symbol&quot; style=&quot;height: auto; max-width: 100%; width: 592px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/dsc_locate_symbol.png?width=296&amp;amp;height=413&amp;amp;name=dsc_locate_symbol.png 296w, https://hex-rays.com/hs-fs/hubfs/dsc_locate_symbol.png?width=592&amp;amp;height=826&amp;amp;name=dsc_locate_symbol.png 592w, https://hex-rays.com/hs-fs/hubfs/dsc_locate_symbol.png?width=888&amp;amp;height=1239&amp;amp;name=dsc_locate_symbol.png 888w, https://hex-rays.com/hs-fs/hubfs/dsc_locate_symbol.png?width=1184&amp;amp;height=1652&amp;amp;name=dsc_locate_symbol.png 1184w, https://hex-rays.com/hs-fs/hubfs/dsc_locate_symbol.png?width=1480&amp;amp;height=2065&amp;amp;name=dsc_locate_symbol.png 1480w, https://hex-rays.com/hs-fs/hubfs/dsc_locate_symbol.png?width=1776&amp;amp;height=2478&amp;amp;name=dsc_locate_symbol.png 1776w&quot; sizes=&quot;(max-width: 592px) 100vw, 592px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;build your own tooling on top of a specialized API, the same one the entire UI is built on&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/dsc_locate_string.png?width=592&amp;amp;height=826&amp;amp;name=dsc_locate_string.png&quot; width=&quot;592&quot; height=&quot;826&quot; loading=&quot;lazy&quot; alt=&quot;dsc_locate_string&quot; style=&quot;height: auto; max-width: 100%; width: 592px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/dsc_locate_string.png?width=296&amp;amp;height=413&amp;amp;name=dsc_locate_string.png 296w, https://hex-rays.com/hs-fs/hubfs/dsc_locate_string.png?width=592&amp;amp;height=826&amp;amp;name=dsc_locate_string.png 592w, https://hex-rays.com/hs-fs/hubfs/dsc_locate_string.png?width=888&amp;amp;height=1239&amp;amp;name=dsc_locate_string.png 888w, https://hex-rays.com/hs-fs/hubfs/dsc_locate_string.png?width=1184&amp;amp;height=1652&amp;amp;name=dsc_locate_string.png 1184w, https://hex-rays.com/hs-fs/hubfs/dsc_locate_string.png?width=1480&amp;amp;height=2065&amp;amp;name=dsc_locate_string.png 1480w, https://hex-rays.com/hs-fs/hubfs/dsc_locate_string.png?width=1776&amp;amp;height=2478&amp;amp;name=dsc_locate_string.png 1776w&quot; sizes=&quot;(max-width: 592px) 100vw, 592px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;…&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;These improvements went through several iterations with a very eager group of alpha-testers, and the result is an experience far ahead of what IDA 9.3 had to offer.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Humans and agents&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;While IDA 9.4 ships brand new and specialized tooling, it is, by and large, all built on an&amp;nbsp;API - one that humans and agents can both use. The API is, by design, simple, fast, and available in both C++ and Python. Point your agents at it, and they will trivially find their way.&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;How can I try it?&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;If you have not already, register for our &lt;a href=&quot;https://hex-rays.com/beta-program&quot; style=&quot;color: #000000;&quot;&gt;beta program&lt;/a&gt; and give it a spin: point IDA at a DSC&#39;s &quot;entrypoint&quot; file and enjoy the trip. Feedback during the beta directly shapes the final release, so tell us what works and what doesn&#39;t.&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;What&#39;s next?&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IDA 9.4 lays a new foundation for working with DSCs, and there is more to come: now that the groundwork is in place, we can start surfacing more of the data buried in the DSC internals. It is not the only thing on our radar either. KernelCaches and DriverKit share similarities with the DSC, so they should benefit from the same improvements - hopefully soon.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Finally, a huge thank-you to our alpha testers squad - their feedback has been invaluable, and their suggestions greatly helped shape the result. Kudos to everyone who was involved!&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;
        </description><link>https://hex-rays.com/blog/ida-9.4-apple-dyld-shared-cache-workflow-improvements</link><guid isPermaLink="false">https://hex-rays.com/blog/ida-9.4-apple-dyld-shared-cache-workflow-improvements</guid><pubDate>Sat, 08 Aug 2026 15:15:04 GMT</pubDate></item><item><title>IDA 9.4: Wider Processor and Platform Support</title><description>&lt;span id=&quot;hs_cos_wrapper_post_body&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_rich_text&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;meta_field&quot; data-hs-cos-type=&quot;rich_text&quot;&gt;&lt;h2 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IDA 9.4 comes with a brand-new Qualcomm Hexagon DSP module, an MCore family covering C-SKY V1, and deeper coverage of ARM, TriCore and RISC-V.&lt;/span&gt;&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Qualcomm Hexagon (QDSP6)&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;We&#39;ve added a new processor module for Qualcomm Hexagon. If you reverse Snapdragon firmware (audio and compute DSPs, modems or newer NPU images), IDA now disassembles and analyzes it, with loaders for both ELF and Qualcomm&#39;s MBN container.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/qualcomm%20screenshot%201%20+%20border%20v2.png?width=786&amp;amp;height=520&amp;amp;name=qualcomm%20screenshot%201%20+%20border%20v2.png&quot; width=&quot;786&quot; height=&quot;520&quot; loading=&quot;lazy&quot; alt=&quot;qualcomm screenshot 1 + border v2&quot; style=&quot;height: auto; max-width: 100%; width: 786px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/qualcomm%20screenshot%201%20+%20border%20v2.png?width=393&amp;amp;height=260&amp;amp;name=qualcomm%20screenshot%201%20+%20border%20v2.png 393w, https://hex-rays.com/hs-fs/hubfs/qualcomm%20screenshot%201%20+%20border%20v2.png?width=786&amp;amp;height=520&amp;amp;name=qualcomm%20screenshot%201%20+%20border%20v2.png 786w, https://hex-rays.com/hs-fs/hubfs/qualcomm%20screenshot%201%20+%20border%20v2.png?width=1179&amp;amp;height=780&amp;amp;name=qualcomm%20screenshot%201%20+%20border%20v2.png 1179w, https://hex-rays.com/hs-fs/hubfs/qualcomm%20screenshot%201%20+%20border%20v2.png?width=1572&amp;amp;height=1040&amp;amp;name=qualcomm%20screenshot%201%20+%20border%20v2.png 1572w, https://hex-rays.com/hs-fs/hubfs/qualcomm%20screenshot%201%20+%20border%20v2.png?width=1965&amp;amp;height=1300&amp;amp;name=qualcomm%20screenshot%201%20+%20border%20v2.png 1965w, https://hex-rays.com/hs-fs/hubfs/qualcomm%20screenshot%201%20+%20border%20v2.png?width=2358&amp;amp;height=1560&amp;amp;name=qualcomm%20screenshot%201%20+%20border%20v2.png 2358w&quot; sizes=&quot;(max-width: 786px) 100vw, 786px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;A couple of remarks about Hexagon:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;color: #000000;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Instructions execute in parallel groups of up to four. IDA shows each packet inside braces, decodes duplex instructions (two sub-instructions in one word), and resolves &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;.new&lt;/code&gt; operands.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Zero-overhead hardware loops, marked with &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;:endloop0&lt;/code&gt; / &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;:endloop1&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Packet-aware control flow. A single packet can hold more than one branch.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;The output is configurable. Through the processor options you can move braces onto their own lines, show slot labels or annotate &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;.new&lt;/code&gt; producers.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/hexagon%20processor%20options%20+%20border.png?width=336&amp;amp;height=598&amp;amp;name=hexagon%20processor%20options%20+%20border.png&quot; width=&quot;336&quot; height=&quot;598&quot; loading=&quot;lazy&quot; alt=&quot;hexagon processor options + border&quot; style=&quot;height: auto; max-width: 100%; width: 336px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/hexagon%20processor%20options%20+%20border.png?width=168&amp;amp;height=299&amp;amp;name=hexagon%20processor%20options%20+%20border.png 168w, https://hex-rays.com/hs-fs/hubfs/hexagon%20processor%20options%20+%20border.png?width=336&amp;amp;height=598&amp;amp;name=hexagon%20processor%20options%20+%20border.png 336w, https://hex-rays.com/hs-fs/hubfs/hexagon%20processor%20options%20+%20border.png?width=504&amp;amp;height=897&amp;amp;name=hexagon%20processor%20options%20+%20border.png 504w, https://hex-rays.com/hs-fs/hubfs/hexagon%20processor%20options%20+%20border.png?width=672&amp;amp;height=1196&amp;amp;name=hexagon%20processor%20options%20+%20border.png 672w, https://hex-rays.com/hs-fs/hubfs/hexagon%20processor%20options%20+%20border.png?width=840&amp;amp;height=1495&amp;amp;name=hexagon%20processor%20options%20+%20border.png 840w, https://hex-rays.com/hs-fs/hubfs/hexagon%20processor%20options%20+%20border.png?width=1008&amp;amp;height=1794&amp;amp;name=hexagon%20processor%20options%20+%20border.png 1008w&quot; sizes=&quot;(max-width: 336px) 100vw, 336px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MCore and C-SKY V1&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;For 9.4 we used the occasion to add C-SKY V1. It is derived from and largely compatible with Motorola/Freescale M-CORE, so the two share the decoder.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/c-sky%20+%20border%20v2.png?width=786&amp;amp;height=520&amp;amp;name=c-sky%20+%20border%20v2.png&quot; width=&quot;786&quot; height=&quot;520&quot; loading=&quot;lazy&quot; alt=&quot;c-sky + border v2&quot; style=&quot;height: auto; max-width: 100%; width: 786px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/c-sky%20+%20border%20v2.png?width=393&amp;amp;height=260&amp;amp;name=c-sky%20+%20border%20v2.png 393w, https://hex-rays.com/hs-fs/hubfs/c-sky%20+%20border%20v2.png?width=786&amp;amp;height=520&amp;amp;name=c-sky%20+%20border%20v2.png 786w, https://hex-rays.com/hs-fs/hubfs/c-sky%20+%20border%20v2.png?width=1179&amp;amp;height=780&amp;amp;name=c-sky%20+%20border%20v2.png 1179w, https://hex-rays.com/hs-fs/hubfs/c-sky%20+%20border%20v2.png?width=1572&amp;amp;height=1040&amp;amp;name=c-sky%20+%20border%20v2.png 1572w, https://hex-rays.com/hs-fs/hubfs/c-sky%20+%20border%20v2.png?width=1965&amp;amp;height=1300&amp;amp;name=c-sky%20+%20border%20v2.png 1965w, https://hex-rays.com/hs-fs/hubfs/c-sky%20+%20border%20v2.png?width=2358&amp;amp;height=1560&amp;amp;name=c-sky%20+%20border%20v2.png 2358w&quot; sizes=&quot;(max-width: 786px) 100vw, 786px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Supported by the module:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;color: #000000;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Stack-variable tracking, so frames are recovered and locals get names.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Literal-pool loads shown as &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;= symbol&lt;/code&gt;, with the pool entry and its cross-references resolved (e.g. &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;lrw r7, =aBootseqNormal&lt;/code&gt;).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Relocation-based cross-references and better function detection.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;The C-SKY V1 support covers the CK510, CK610, CK610E and CK620 cores, including their coprocessor and DSP/multiply instructions, in both little- and big-endian variants. The ELF loader detects C-SKY binaries and handles MCore/C-SKY relocations.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/csky%20options%20+%20border.png?width=675&amp;amp;height=516&amp;amp;name=csky%20options%20+%20border.png&quot; width=&quot;675&quot; height=&quot;516&quot; loading=&quot;lazy&quot; alt=&quot;csky options + border&quot; style=&quot;height: auto; max-width: 100%; width: 675px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/csky%20options%20+%20border.png?width=338&amp;amp;height=258&amp;amp;name=csky%20options%20+%20border.png 338w, https://hex-rays.com/hs-fs/hubfs/csky%20options%20+%20border.png?width=675&amp;amp;height=516&amp;amp;name=csky%20options%20+%20border.png 675w, https://hex-rays.com/hs-fs/hubfs/csky%20options%20+%20border.png?width=1013&amp;amp;height=774&amp;amp;name=csky%20options%20+%20border.png 1013w, https://hex-rays.com/hs-fs/hubfs/csky%20options%20+%20border.png?width=1350&amp;amp;height=1032&amp;amp;name=csky%20options%20+%20border.png 1350w, https://hex-rays.com/hs-fs/hubfs/csky%20options%20+%20border.png?width=1688&amp;amp;height=1290&amp;amp;name=csky%20options%20+%20border.png 1688w, https://hex-rays.com/hs-fs/hubfs/csky%20options%20+%20border.png?width=2025&amp;amp;height=1548&amp;amp;name=csky%20options%20+%20border.png 2025w&quot; sizes=&quot;(max-width: 675px) 100vw, 675px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ARM: complete SVE and SME&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;In IDA 9.3, you could decode the SVE/SME subset that turns up in Apple kernels. For 9.4, we implemented the whole thing: the full AArch64 SVE, SVE2, SME and SME2 instruction sets, including the scalable vector registers (Z), predicate registers (P), multi-vector and indexed SME2 operations, and &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;MUL VL&lt;/code&gt; addressing.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/arm-sve-sme%20+%20border.png?width=1170&amp;amp;height=590&amp;amp;name=arm-sve-sme%20+%20border.png&quot; width=&quot;1170&quot; height=&quot;590&quot; loading=&quot;lazy&quot; alt=&quot;arm-sve-sme + border&quot; style=&quot;height: auto; max-width: 100%; width: 1170px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/arm-sve-sme%20+%20border.png?width=585&amp;amp;height=295&amp;amp;name=arm-sve-sme%20+%20border.png 585w, https://hex-rays.com/hs-fs/hubfs/arm-sve-sme%20+%20border.png?width=1170&amp;amp;height=590&amp;amp;name=arm-sve-sme%20+%20border.png 1170w, https://hex-rays.com/hs-fs/hubfs/arm-sve-sme%20+%20border.png?width=1755&amp;amp;height=885&amp;amp;name=arm-sve-sme%20+%20border.png 1755w, https://hex-rays.com/hs-fs/hubfs/arm-sve-sme%20+%20border.png?width=2340&amp;amp;height=1180&amp;amp;name=arm-sve-sme%20+%20border.png 2340w, https://hex-rays.com/hs-fs/hubfs/arm-sve-sme%20+%20border.png?width=2925&amp;amp;height=1475&amp;amp;name=arm-sve-sme%20+%20border.png 2925w, https://hex-rays.com/hs-fs/hubfs/arm-sve-sme%20+%20border.png?width=3510&amp;amp;height=1770&amp;amp;name=arm-sve-sme%20+%20border.png 3510w&quot; sizes=&quot;(max-width: 1170px) 100vw, 1170px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ARM architecture detection selects an appropriate SVE/SME profile based on the binary’s reported architecture and attributes. As a heuristic, ARMv8.2 targets select SVE, ARMv9 targets select SVE2, and generic AArch64 targets enable SVE2+SME2. You can override it from the processor options if the detection is wrong, or disable the extensions entirely.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/arm%20arch%20options%20+%20border.png?width=786&amp;amp;height=563&amp;amp;name=arm%20arch%20options%20+%20border.png&quot; width=&quot;786&quot; height=&quot;563&quot; loading=&quot;lazy&quot; alt=&quot;arm arch options + border&quot; style=&quot;height: auto; max-width: 100%; width: 786px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/arm%20arch%20options%20+%20border.png?width=393&amp;amp;height=282&amp;amp;name=arm%20arch%20options%20+%20border.png 393w, https://hex-rays.com/hs-fs/hubfs/arm%20arch%20options%20+%20border.png?width=786&amp;amp;height=563&amp;amp;name=arm%20arch%20options%20+%20border.png 786w, https://hex-rays.com/hs-fs/hubfs/arm%20arch%20options%20+%20border.png?width=1179&amp;amp;height=845&amp;amp;name=arm%20arch%20options%20+%20border.png 1179w, https://hex-rays.com/hs-fs/hubfs/arm%20arch%20options%20+%20border.png?width=1572&amp;amp;height=1126&amp;amp;name=arm%20arch%20options%20+%20border.png 1572w, https://hex-rays.com/hs-fs/hubfs/arm%20arch%20options%20+%20border.png?width=1965&amp;amp;height=1408&amp;amp;name=arm%20arch%20options%20+%20border.png 1965w, https://hex-rays.com/hs-fs/hubfs/arm%20arch%20options%20+%20border.png?width=2358&amp;amp;height=1689&amp;amp;name=arm%20arch%20options%20+%20border.png 2358w&quot; sizes=&quot;(max-width: 786px) 100vw, 786px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Two ABI improvements landed alongside it:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;color: #000000;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;The VFP (hardfloat) ABI is now inferred from the ELF file.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;For ARM32 Windows binaries, IDA assumes the AAPCS-VFP ABI.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;A few smaller disassembly fixes:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;color: #000000;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;STM SP&lt;/code&gt; is recognized as a multi-slot stack-argument store.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Fixed &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;UDF&lt;/code&gt; decoding for AArch64.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Improved 64-bit &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;TBB&lt;/code&gt;-style switch recovery.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TriCore: calling conventions and analysis&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TriCore is the core of Infineon&#39;s AURIX family, a dominant microcontroller in automotive ECUs. For 9.4, we gave the module a real type system and an explicit calling-convention model. IDA now knows how arguments and return values are laid out across the TriCore register banks, so function prototypes, argument types and cross-references come out far more accurate on AURIX firmware. This is the groundwork for a decompiler, but it makes everyday disassembly more useful today.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;A calling-convention model&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Usually TriCore passes the first integer/pointer arguments in the data and address register banks (D4–D7, A4–A7) and spills the rest to the stack. IDA now models this directly: it computes argument locations, the return location, and the varargs layout from a function&#39;s prototype, and it distributes operands across the D/A banks the way the ABI requires.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/tricore%20arglocs%20+%20border.png?width=786&amp;amp;height=194&amp;amp;name=tricore%20arglocs%20+%20border.png&quot; width=&quot;786&quot; height=&quot;194&quot; loading=&quot;lazy&quot; alt=&quot;tricore arglocs + border&quot; style=&quot;height: auto; max-width: 100%; width: 786px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/tricore%20arglocs%20+%20border.png?width=393&amp;amp;height=97&amp;amp;name=tricore%20arglocs%20+%20border.png 393w, https://hex-rays.com/hs-fs/hubfs/tricore%20arglocs%20+%20border.png?width=786&amp;amp;height=194&amp;amp;name=tricore%20arglocs%20+%20border.png 786w, https://hex-rays.com/hs-fs/hubfs/tricore%20arglocs%20+%20border.png?width=1179&amp;amp;height=291&amp;amp;name=tricore%20arglocs%20+%20border.png 1179w, https://hex-rays.com/hs-fs/hubfs/tricore%20arglocs%20+%20border.png?width=1572&amp;amp;height=388&amp;amp;name=tricore%20arglocs%20+%20border.png 1572w, https://hex-rays.com/hs-fs/hubfs/tricore%20arglocs%20+%20border.png?width=1965&amp;amp;height=485&amp;amp;name=tricore%20arglocs%20+%20border.png 1965w, https://hex-rays.com/hs-fs/hubfs/tricore%20arglocs%20+%20border.png?width=2358&amp;amp;height=582&amp;amp;name=tricore%20arglocs%20+%20border.png 2358w&quot; sizes=&quot;(max-width: 786px) 100vw, 786px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Two common ABIs are selectable from the processor options: the GCC/HighTec EABI and the TASKING ABI. These differ in how some arguments and return values are allocated. IDA will automatically apply heuristics to guess the ABI during analysis, but the user can always change it from &quot;Options/Compiler.../ABI name&quot;.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/tricore%20abi%20options%20+%20border.png?width=571&amp;amp;height=435&amp;amp;name=tricore%20abi%20options%20+%20border.png&quot; width=&quot;571&quot; height=&quot;435&quot; loading=&quot;lazy&quot; alt=&quot;tricore abi options + border&quot; style=&quot;height: auto; max-width: 100%; width: 571px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/tricore%20abi%20options%20+%20border.png?width=286&amp;amp;height=218&amp;amp;name=tricore%20abi%20options%20+%20border.png 286w, https://hex-rays.com/hs-fs/hubfs/tricore%20abi%20options%20+%20border.png?width=571&amp;amp;height=435&amp;amp;name=tricore%20abi%20options%20+%20border.png 571w, https://hex-rays.com/hs-fs/hubfs/tricore%20abi%20options%20+%20border.png?width=857&amp;amp;height=653&amp;amp;name=tricore%20abi%20options%20+%20border.png 857w, https://hex-rays.com/hs-fs/hubfs/tricore%20abi%20options%20+%20border.png?width=1142&amp;amp;height=870&amp;amp;name=tricore%20abi%20options%20+%20border.png 1142w, https://hex-rays.com/hs-fs/hubfs/tricore%20abi%20options%20+%20border.png?width=1428&amp;amp;height=1088&amp;amp;name=tricore%20abi%20options%20+%20border.png 1428w, https://hex-rays.com/hs-fs/hubfs/tricore%20abi%20options%20+%20border.png?width=1713&amp;amp;height=1305&amp;amp;name=tricore%20abi%20options%20+%20border.png 1713w&quot; sizes=&quot;(max-width: 571px) 100vw, 571px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Sharper disassembly&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Alongside the ABI work, we improved several analysis passes:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;color: #000000;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Better switch-table detection, including 16-bit relative offset tables.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;A reworked relocation handler with more relocation types and cleaner xrefs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AURIX TC4x device support&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Built-in memory maps and peripheral-register definitions for the latest AURIX TC4x devices — TC45x, TC48x, TC49xN and TC4Dx. Selecting one of these devices lays out the on-chip memory map and names the special-function registers, so peripheral accesses in firmware read as &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;CAN_17_MCMCAN_F0SA&lt;/code&gt; instead of a raw address.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/tricore%20device%20+%20border%20v2.png?width=786&amp;amp;height=560&amp;amp;name=tricore%20device%20+%20border%20v2.png&quot; width=&quot;786&quot; height=&quot;560&quot; loading=&quot;lazy&quot; alt=&quot;tricore device + border v2&quot; style=&quot;height: auto; max-width: 100%; width: 786px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/tricore%20device%20+%20border%20v2.png?width=393&amp;amp;height=280&amp;amp;name=tricore%20device%20+%20border%20v2.png 393w, https://hex-rays.com/hs-fs/hubfs/tricore%20device%20+%20border%20v2.png?width=786&amp;amp;height=560&amp;amp;name=tricore%20device%20+%20border%20v2.png 786w, https://hex-rays.com/hs-fs/hubfs/tricore%20device%20+%20border%20v2.png?width=1179&amp;amp;height=840&amp;amp;name=tricore%20device%20+%20border%20v2.png 1179w, https://hex-rays.com/hs-fs/hubfs/tricore%20device%20+%20border%20v2.png?width=1572&amp;amp;height=1120&amp;amp;name=tricore%20device%20+%20border%20v2.png 1572w, https://hex-rays.com/hs-fs/hubfs/tricore%20device%20+%20border%20v2.png?width=1965&amp;amp;height=1400&amp;amp;name=tricore%20device%20+%20border%20v2.png 1965w, https://hex-rays.com/hs-fs/hubfs/tricore%20device%20+%20border%20v2.png?width=2358&amp;amp;height=1680&amp;amp;name=tricore%20device%20+%20border%20v2.png 2358w&quot; sizes=&quot;(max-width: 786px) 100vw, 786px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RISC-V: vendor extensions and embedded cores&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RISC-V keeps spreading into security chips and microcontrollers, and the vendor custom-extension space has grown with it. For 9.4 we widened RISC-V coverage on both fronts.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Soteria&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Soteria (Xsoteria) is a custom RISC-V extension encountered in security-chip firmware.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/riscv%20soteria%20+%20border.png?width=786&amp;amp;height=331&amp;amp;name=riscv%20soteria%20+%20border.png&quot; width=&quot;786&quot; height=&quot;331&quot; loading=&quot;lazy&quot; alt=&quot;riscv soteria + border&quot; style=&quot;height: auto; max-width: 100%; width: 786px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/riscv%20soteria%20+%20border.png?width=393&amp;amp;height=166&amp;amp;name=riscv%20soteria%20+%20border.png 393w, https://hex-rays.com/hs-fs/hubfs/riscv%20soteria%20+%20border.png?width=786&amp;amp;height=331&amp;amp;name=riscv%20soteria%20+%20border.png 786w, https://hex-rays.com/hs-fs/hubfs/riscv%20soteria%20+%20border.png?width=1179&amp;amp;height=497&amp;amp;name=riscv%20soteria%20+%20border.png 1179w, https://hex-rays.com/hs-fs/hubfs/riscv%20soteria%20+%20border.png?width=1572&amp;amp;height=662&amp;amp;name=riscv%20soteria%20+%20border.png 1572w, https://hex-rays.com/hs-fs/hubfs/riscv%20soteria%20+%20border.png?width=1965&amp;amp;height=828&amp;amp;name=riscv%20soteria%20+%20border.png 1965w, https://hex-rays.com/hs-fs/hubfs/riscv%20soteria%20+%20border.png?width=2358&amp;amp;height=993&amp;amp;name=riscv%20soteria%20+%20border.png 2358w&quot; sizes=&quot;(max-width: 786px) 100vw, 786px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Those opcodes overlap with other vendor extensions (the Andes XAndesPerf set uses the same encodings), so IDA cannot always tell which vendor a word belongs to from the bytes alone. Rather than guess silently, it decodes the configured extension and prints the alternative reading as a comment (&lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;alt Xsoteria&lt;/code&gt; / &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;alt XAndesPerf&lt;/code&gt;), so an analyst working on the wrong assumption sees it immediately.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;The non-trivial Soteria instructions lift to microcode and surface as intrinsics in the pseudocode, while constant-argument forms are folded locally:&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;hs_cos_wrapper_widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;widget&quot; data-hs-cos-type=&quot;module&quot;&gt;











&lt;style&gt;
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 {
  --ba-module-bg: rgba(255, 255, 255, 0.0);
  --ba-before-bg: rgba(26, 27, 33, 1.0);
  --ba-after-bg: rgba(16, 17, 22, 1.0);
  --ba-chrome-bg: rgba(29, 30, 37, 1.0);
  --ba-before-text: rgba(206, 209, 217, 1.0);
  --ba-after-text: rgba(206, 209, 217, 1.0);
  --ba-border: rgba(255, 255, 255, 0.1);
  --ba-label-bg: rgba(255, 255, 255, 0.06);
  --ba-label-text: rgba(147, 150, 161, 1.0);
  --ba-linenum: rgba(255, 255, 255, 0.22);
  --ba-tok-keyword: rgba(122, 162, 247, 1.0);
  --ba-tok-func: rgba(224, 175, 104, 1.0);
  --ba-tok-type: rgba(125, 207, 255, 1.0);
  --ba-tok-number: rgba(255, 158, 100, 1.0);
  --ba-tok-comment: rgba(86, 95, 137, 1.0);
  --ba-tok-mark: rgba(122, 162, 247, 0.2);
  --ba-divider: rgba(255, 255, 255, 0.16);
  --ba-grip-bg: rgba(244, 244, 245, 1.0);
  --ba-grip-icon: rgba(27, 27, 31, 1.0);
  --ba-divider-w: 2px;
  --ba-grip-size: 42px;
  --ba-radius: 14px;
  --ba-border-w: 1px;
  --ba-pad: 24px;
  --ba-min-h: 200px;
  --ba-code-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;
  --ba-code-size: 15px;
  --ba-label-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ba-label-size: 11px;
  --ba-lh: 1.7;
  display: block;
  background: var(--ba-module-bg);
}

/* ---- hard reset: every selector is (1,1,0)+, beating the theme&#39;s (1,0,1)
       #hs_cos_wrapper_post_body div/pre/code rules without !important ---- */
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__shell,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__intro,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__heading,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__desc,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__frame,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__chrome,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__viewport,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__panel,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__body,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__pre,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__code,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__gutter,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__label,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__files,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__file,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__arrow,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__dots,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__divider,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__handle {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  max-width: none;
  min-width: 0;
  overflow: visible;
  font-family: inherit;
  color: inherit;
  text-transform: none;
  letter-spacing: normal;
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__gutter i,
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__dots i {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  font-style: normal;
}

/* ---- shell ---- */
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__shell { margin: 0 auto; }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__intro {
  max-width: 640px;
  margin: 0 auto 18px;
  text-align: center;
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__heading {
  color: var(--ba-after-text);
  font-size: clamp(1.3rem, 1rem + 1.2vw, 1.85rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__desc {
  margin-top: 7px;
  color: var(--ba-after-text);
  opacity: 0.6;
  font-size: 1rem;
  line-height: 1.55;
}

/* ---- frame: the code box ---- */
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__frame {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 100%;
  
  margin-inline: auto;
  border: var(--ba-border-w) solid var(--ba-border);
  border-radius: var(--ba-radius);
  background: var(--ba-after-bg);
  box-shadow: 0 26px 64px -34px rgba(0, 0, 0, 0.75);
  animation: ba-rise-bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

/* ---- window chrome ---- */
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 16px;
  min-height: 44px;
  background: var(--ba-chrome-bg);
  border-bottom: 1px solid var(--ba-border);
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__dots { display: inline-flex; gap: 7px; flex: none; }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__dots i {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--ba-border);
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__files {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__file { color: var(--ba-linenum); overflow: hidden; text-overflow: ellipsis; }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__file--after { color: var(--ba-label-text); }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__arrow { flex: none; color: var(--ba-linenum); }

/* ---- panels ---- */
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__viewport {
  position: relative;
  display: flex;
  align-items: stretch;
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__panel {
  position: relative;
  min-width: 0;
  min-height: var(--ba-min-h);
  overflow: hidden;
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__panel--before {
  flex: 0 0 var(--ba-split, 50%);
  background-color: var(--ba-before-bg);
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__panel--after {
  flex: 1 1 0;
  background-color: var(--ba-after-bg);
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__panel--single { flex: 1 1 auto; }

/* ---- resize divider + handle (split mode only) ---- */
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__divider {
  position: relative;
  flex: 0 0 var(--ba-divider-w);
  background: var(--ba-divider);
  z-index: 4;
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--ba-grip-size);
  height: var(--ba-grip-size);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ba-grip-bg);
  color: var(--ba-grip-icon);
  cursor: ew-resize;
  touch-action: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.06);
  transition: transform 0.14s ease;
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__handle:hover { transform: translate(-50%, -50%) scale(1.08); }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__handle:focus-visible {
  outline: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 3px var(--ba-after-bg), 0 0 0 5px var(--ba-divider);
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__chev { display: block; pointer-events: none; }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993.is-dragging { user-select: none; -webkit-user-select: none; }

/* ---- code body ---- */
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__body {
  display: flex;
  align-items: flex-start;
  /* no left padding: the sticky gutter (or the pre) owns the left inset so code
     can&#39;t scroll into a dead strip to the left of the line numbers */
  padding: var(--ba-pad) var(--ba-pad) var(--ba-pad) 0;
  overflow-x: auto;
  overflow-y: hidden;
  /* only capture horizontal pans; let vertical swipes scroll the page (mobile) */
  touch-action: pan-x;
  scrollbar-width: thin;
  scrollbar-color: var(--ba-border) transparent;
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  -webkit-font-smoothing: antialiased;
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__body::-webkit-scrollbar { height: 9px; }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__body::-webkit-scrollbar-thumb {
  background: var(--ba-border);
  border-radius: 9px;
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 28px); }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__gutter {
  position: sticky;
  left: 0;
  display: flex;
  flex-direction: column;
  flex: none;
  margin-right: 16px;
  padding-left: var(--ba-pad);
  padding-right: 16px;
  border-right: 1px solid var(--ba-border);
  text-align: right;
  color: var(--ba-linenum);
  font-variant-numeric: tabular-nums;
  user-select: none;
  z-index: 1;
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__panel--before .ba-code__gutter { background: var(--ba-before-bg); }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__panel--after .ba-code__gutter { background: var(--ba-after-bg); }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__gutter i { display: block; line-height: var(--ba-lh); }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__pre {
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  white-space: pre;
  font-variant-ligatures: none;
  tab-size: 4;
  -moz-tab-size: 4;
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__panel--before .ba-code__pre { color: var(--ba-before-text); }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__panel--after .ba-code__pre { color: var(--ba-after-text); }
/* when line numbers are hidden, the pre is first child and owns the left inset */
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__body &gt; .ba-code__pre:first-child { padding-left: var(--ba-pad); }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__code { font-family: var(--ba-code-font); font-size: var(--ba-code-size); }

/* ---- before / after badges ---- */
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__label {
  position: absolute;
  top: var(--ba-pad);
  z-index: 3;
  display: inline-flex;
  padding: 5px 11px;
  border-radius: 6px;
  background: var(--ba-label-bg);
  color: var(--ba-label-text);
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
}
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__label--before { left: var(--ba-pad); }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__label--after { right: var(--ba-pad); }

/* ---- syntax helper classes (used inside the pasted code) ---- */
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .tok-keyword { color: var(--ba-tok-keyword); }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .tok-func { color: var(--ba-tok-func); }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .tok-type { color: var(--ba-tok-type); }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .tok-number { color: var(--ba-tok-number); }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .tok-comment { color: var(--ba-tok-comment); }
#bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .tok-mark {
  background: var(--ba-tok-mark);
  border-radius: 4px;
  padding: 0.05em 0.32em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

@keyframes ba-rise-bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  #bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__frame { animation: none; }
  #bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__handle { transition: none; }
}

/* ---- stack on small screens ---- */
@media (max-width: 720px) {
  #bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__viewport { flex-direction: column; }
  /* when stacked, each panel sizes to its OWN content: no forced min-height
     (which left a big empty void on short panels) and no equal-height collapse
     (which clipped the taller panel&#39;s extra lines) */
  #bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__panel { min-height: 0; overflow: visible; }
  #bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__panel--before,
  #bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__panel--after { flex: 0 0 auto; }
  #bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__divider { flex: 0 0 var(--ba-divider-w); }
  #bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__handle { display: none; }
  /* panels are full-width when stacked: keep both badges left-aligned so the
     &quot;after&quot; label doesn&#39;t float off to the right edge */
  #bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__label--after { right: auto; left: var(--ba-pad); }
}

/* ---- scale the code down on phones so more fits + line numbers hug the edge ---- */
@media (max-width: 600px) {
  #bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 {
    --ba-code-size: 12.5px;
    --ba-label-size: 9.5px;
    --ba-pad: 12px;
    --ba-lh: 1.55;
  }
  #bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__gutter { margin-right: 10px; padding-right: 10px; }
  #bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__chrome { gap: 10px; padding: 0 12px; min-height: 40px; }
  #bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 24px); }
  #bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993 .ba-code__label { padding: 4px 9px; letter-spacing: 0.08em; }
}
&lt;/style&gt;



&lt;div id=&quot;bac-widget_573d9ed1-6689-4b5c-af4a-02db8d0e0993&quot; class=&quot;ba-code ba-has-labels&quot;&gt;
  &lt;div class=&quot;ba-code__shell&quot;&gt;

    

    &lt;div class=&quot;ba-code__frame&quot;&gt;

      
      &lt;div class=&quot;ba-code__chrome&quot;&gt;
        &lt;span class=&quot;ba-code__dots&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;
        &lt;span class=&quot;ba-code__files&quot;&gt;
          
            
            &lt;span class=&quot;ba-code__file ba-code__file--after&quot;&gt;&lt;/span&gt;
            
          
        &lt;/span&gt;
      &lt;/div&gt;
      

      
      &lt;div class=&quot;ba-code__viewport&quot;&gt;
        
        
&lt;div class=&quot;ba-code__panel ba-code__panel--before ba-code__panel--single&quot;&gt;
  &lt;span class=&quot;ba-code__label ba-code__label--before&quot;&gt;Pseudocode&lt;/span&gt;
  &lt;div class=&quot;ba-code__body&quot;&gt;
    &lt;span class=&quot;ba-code__gutter&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;1&lt;/i&gt;&lt;i&gt;2&lt;/i&gt;&lt;i&gt;3&lt;/i&gt;&lt;i&gt;4&lt;/i&gt;&lt;i&gt;5&lt;/i&gt;&lt;i&gt;6&lt;/i&gt;&lt;i&gt;7&lt;/i&gt;&lt;i&gt;8&lt;/i&gt;&lt;/span&gt;
    &lt;pre class=&quot;ba-code__pre&quot;&gt;&lt;code class=&quot;ba-code__code&quot;&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;__int32&lt;/span&gt; &lt;span style=&quot;color:#c678dd&quot;&gt;__fastcall&lt;/span&gt; &lt;span style=&quot;color:#61afef&quot;&gt;test_grevi_bswap&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;__int32&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;a1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color:#7f8696&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color:#c678dd&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#e5c07b&quot;&gt;_soteria_grevi&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;a1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;0x18u&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color:#7f8696&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color:#56b6c2&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color:#c678dd&quot;&gt;__fastcall&lt;/span&gt; &lt;span style=&quot;color:#61afef&quot;&gt;test_clear_highbit&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#56b6c2&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;__int32&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;a1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color:#7f8696&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color:#c678dd&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#e0e2e6&quot;&gt;a1&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#d19a66&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color:#abb2bf&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color:#e5c07b&quot;&gt;_soteria_fls&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#e0e2e6&quot;&gt;a1&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;));&lt;/span&gt;
&lt;span style=&quot;color:#7f8696&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

        
      &lt;/div&gt;
      

    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;h3 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hazard3 / RP2350&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hazard3 is the RISC-V core in the RP2350 (Raspberry Pi Pico 2). IDA decodes its custom instructions, including the inter-hart synchronization primitives. RP2350 firmware decompiles cleanly, down to the SDK GPIO helpers.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/riscv%20hazard%20+%20border.png?width=786&amp;amp;height=319&amp;amp;name=riscv%20hazard%20+%20border.png&quot; width=&quot;786&quot; height=&quot;319&quot; loading=&quot;lazy&quot; alt=&quot;riscv hazard + border&quot; style=&quot;height: auto; max-width: 100%; width: 786px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/riscv%20hazard%20+%20border.png?width=393&amp;amp;height=160&amp;amp;name=riscv%20hazard%20+%20border.png 393w, https://hex-rays.com/hs-fs/hubfs/riscv%20hazard%20+%20border.png?width=786&amp;amp;height=319&amp;amp;name=riscv%20hazard%20+%20border.png 786w, https://hex-rays.com/hs-fs/hubfs/riscv%20hazard%20+%20border.png?width=1179&amp;amp;height=479&amp;amp;name=riscv%20hazard%20+%20border.png 1179w, https://hex-rays.com/hs-fs/hubfs/riscv%20hazard%20+%20border.png?width=1572&amp;amp;height=638&amp;amp;name=riscv%20hazard%20+%20border.png 1572w, https://hex-rays.com/hs-fs/hubfs/riscv%20hazard%20+%20border.png?width=1965&amp;amp;height=798&amp;amp;name=riscv%20hazard%20+%20border.png 1965w, https://hex-rays.com/hs-fs/hubfs/riscv%20hazard%20+%20border.png?width=2358&amp;amp;height=957&amp;amp;name=riscv%20hazard%20+%20border.png 2358w&quot; sizes=&quot;(max-width: 786px) 100vw, 786px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Compressed instructions&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;The compressed-ISA support was extended with the Zcmp, Zcmt, Zclsd, Zcb and Zihintntl extensions, plus semihosting recognition. Compressed instructions now carry an explicit &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;c.&lt;/code&gt; prefix in the listing (&lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;c.addi&lt;/code&gt;, &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;c.sw&lt;/code&gt;, &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;c.j&lt;/code&gt;), so it is obvious at a glance which instructions are 16-bit.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Complete HINT decoding&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IDA now decodes the full RISC-V HINT space, including standard hints, pause, NTL, semihosting markers, and vendor-reserved encodings. Think of a hint as a &quot;do-nothing&quot; instruction that signals the CPU something (cache, pause) without changing state. Expect to see inline IDA annotations along such instructions.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;For example:&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;hs_cos_wrapper_widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_widget hs_cos_wrapper_type_module&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;widget&quot; data-hs-cos-type=&quot;module&quot;&gt;











&lt;style&gt;
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 {
  --ba-module-bg: rgba(255, 255, 255, 0.0);
  --ba-before-bg: rgba(26, 27, 33, 1.0);
  --ba-after-bg: rgba(16, 17, 22, 1.0);
  --ba-chrome-bg: rgba(29, 30, 37, 1.0);
  --ba-before-text: rgba(206, 209, 217, 1.0);
  --ba-after-text: rgba(206, 209, 217, 1.0);
  --ba-border: rgba(255, 255, 255, 0.1);
  --ba-label-bg: rgba(255, 255, 255, 0.06);
  --ba-label-text: rgba(147, 150, 161, 1.0);
  --ba-linenum: rgba(255, 255, 255, 0.22);
  --ba-tok-keyword: rgba(122, 162, 247, 1.0);
  --ba-tok-func: rgba(224, 175, 104, 1.0);
  --ba-tok-type: rgba(125, 207, 255, 1.0);
  --ba-tok-number: rgba(255, 158, 100, 1.0);
  --ba-tok-comment: rgba(86, 95, 137, 1.0);
  --ba-tok-mark: rgba(122, 162, 247, 0.2);
  --ba-divider: rgba(255, 255, 255, 0.16);
  --ba-grip-bg: rgba(244, 244, 245, 1.0);
  --ba-grip-icon: rgba(27, 27, 31, 1.0);
  --ba-divider-w: 2px;
  --ba-grip-size: 42px;
  --ba-radius: 14px;
  --ba-border-w: 1px;
  --ba-pad: 24px;
  --ba-min-h: 200px;
  --ba-code-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, &quot;SF Mono&quot;, Menlo, Consolas, &quot;Liberation Mono&quot;, monospace;
  --ba-code-size: 15px;
  --ba-label-font: &#39;JetBrains Mono&#39;, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ba-label-size: 11px;
  --ba-lh: 1.7;
  display: block;
  background: var(--ba-module-bg);
}

/* ---- hard reset: every selector is (1,1,0)+, beating the theme&#39;s (1,0,1)
       #hs_cos_wrapper_post_body div/pre/code rules without !important ---- */
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__shell,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__intro,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__heading,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__desc,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__frame,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__chrome,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__viewport,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__panel,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__body,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__pre,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__code,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__gutter,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__label,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__files,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__file,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__arrow,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__dots,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__divider,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__handle {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  max-width: none;
  min-width: 0;
  overflow: visible;
  font-family: inherit;
  color: inherit;
  text-transform: none;
  letter-spacing: normal;
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__gutter i,
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__dots i {
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  font-style: normal;
}

/* ---- shell ---- */
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__shell { margin: 0 auto; }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__intro {
  max-width: 640px;
  margin: 0 auto 18px;
  text-align: center;
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__heading {
  color: var(--ba-after-text);
  font-size: clamp(1.3rem, 1rem + 1.2vw, 1.85rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__desc {
  margin-top: 7px;
  color: var(--ba-after-text);
  opacity: 0.6;
  font-size: 1rem;
  line-height: 1.55;
}

/* ---- frame: the code box ---- */
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__frame {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 100%;
  
  margin-inline: auto;
  border: var(--ba-border-w) solid var(--ba-border);
  border-radius: var(--ba-radius);
  background: var(--ba-after-bg);
  box-shadow: 0 26px 64px -34px rgba(0, 0, 0, 0.75);
  animation: ba-rise-bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

/* ---- window chrome ---- */
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 16px;
  min-height: 44px;
  background: var(--ba-chrome-bg);
  border-bottom: 1px solid var(--ba-border);
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__dots { display: inline-flex; gap: 7px; flex: none; }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__dots i {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--ba-border);
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__files {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  letter-spacing: 0.03em;
  white-space: nowrap;
  overflow: hidden;
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__file { color: var(--ba-linenum); overflow: hidden; text-overflow: ellipsis; }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__file--after { color: var(--ba-label-text); }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__arrow { flex: none; color: var(--ba-linenum); }

/* ---- panels ---- */
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__viewport {
  position: relative;
  display: flex;
  align-items: stretch;
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__panel {
  position: relative;
  min-width: 0;
  min-height: var(--ba-min-h);
  overflow: hidden;
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__panel--before {
  flex: 0 0 var(--ba-split, 50%);
  background-color: var(--ba-before-bg);
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__panel--after {
  flex: 1 1 0;
  background-color: var(--ba-after-bg);
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__panel--single { flex: 1 1 auto; }

/* ---- resize divider + handle (split mode only) ---- */
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__divider {
  position: relative;
  flex: 0 0 var(--ba-divider-w);
  background: var(--ba-divider);
  z-index: 4;
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--ba-grip-size);
  height: var(--ba-grip-size);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ba-grip-bg);
  color: var(--ba-grip-icon);
  cursor: ew-resize;
  touch-action: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 5px rgba(255, 255, 255, 0.06);
  transition: transform 0.14s ease;
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__handle:hover { transform: translate(-50%, -50%) scale(1.08); }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__handle:focus-visible {
  outline: none;
  box-shadow: 0 6px 18px -6px rgba(0, 0, 0, 0.7), 0 0 0 3px var(--ba-after-bg), 0 0 0 5px var(--ba-divider);
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__chev { display: block; pointer-events: none; }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67.is-dragging { user-select: none; -webkit-user-select: none; }

/* ---- code body ---- */
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__body {
  display: flex;
  align-items: flex-start;
  /* no left padding: the sticky gutter (or the pre) owns the left inset so code
     can&#39;t scroll into a dead strip to the left of the line numbers */
  padding: var(--ba-pad) var(--ba-pad) var(--ba-pad) 0;
  overflow-x: auto;
  overflow-y: hidden;
  /* only capture horizontal pans; let vertical swipes scroll the page (mobile) */
  touch-action: pan-x;
  scrollbar-width: thin;
  scrollbar-color: var(--ba-border) transparent;
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  -webkit-font-smoothing: antialiased;
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__body::-webkit-scrollbar { height: 9px; }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__body::-webkit-scrollbar-thumb {
  background: var(--ba-border);
  border-radius: 9px;
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 28px); }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__gutter {
  position: sticky;
  left: 0;
  display: flex;
  flex-direction: column;
  flex: none;
  margin-right: 16px;
  padding-left: var(--ba-pad);
  padding-right: 16px;
  border-right: 1px solid var(--ba-border);
  text-align: right;
  color: var(--ba-linenum);
  font-variant-numeric: tabular-nums;
  user-select: none;
  z-index: 1;
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__panel--before .ba-code__gutter { background: var(--ba-before-bg); }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__panel--after .ba-code__gutter { background: var(--ba-after-bg); }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__gutter i { display: block; line-height: var(--ba-lh); }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__pre {
  font-family: var(--ba-code-font);
  font-size: var(--ba-code-size);
  line-height: var(--ba-lh);
  white-space: pre;
  font-variant-ligatures: none;
  tab-size: 4;
  -moz-tab-size: 4;
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__panel--before .ba-code__pre { color: var(--ba-before-text); }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__panel--after .ba-code__pre { color: var(--ba-after-text); }
/* when line numbers are hidden, the pre is first child and owns the left inset */
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__body &gt; .ba-code__pre:first-child { padding-left: var(--ba-pad); }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__code { font-family: var(--ba-code-font); font-size: var(--ba-code-size); }

/* ---- before / after badges ---- */
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__label {
  position: absolute;
  top: var(--ba-pad);
  z-index: 3;
  display: inline-flex;
  padding: 5px 11px;
  border-radius: 6px;
  background: var(--ba-label-bg);
  color: var(--ba-label-text);
  font-family: var(--ba-label-font);
  font-size: var(--ba-label-size);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1;
}
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__label--before { left: var(--ba-pad); }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__label--after { right: var(--ba-pad); }

/* ---- syntax helper classes (used inside the pasted code) ---- */
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .tok-keyword { color: var(--ba-tok-keyword); }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .tok-func { color: var(--ba-tok-func); }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .tok-type { color: var(--ba-tok-type); }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .tok-number { color: var(--ba-tok-number); }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .tok-comment { color: var(--ba-tok-comment); }
#bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .tok-mark {
  background: var(--ba-tok-mark);
  border-radius: 4px;
  padding: 0.05em 0.32em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

@keyframes ba-rise-bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  #bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__frame { animation: none; }
  #bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__handle { transition: none; }
}

/* ---- stack on small screens ---- */
@media (max-width: 720px) {
  #bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__viewport { flex-direction: column; }
  /* when stacked, each panel sizes to its OWN content: no forced min-height
     (which left a big empty void on short panels) and no equal-height collapse
     (which clipped the taller panel&#39;s extra lines) */
  #bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__panel { min-height: 0; overflow: visible; }
  #bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__panel--before,
  #bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__panel--after { flex: 0 0 auto; }
  #bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__divider { flex: 0 0 var(--ba-divider-w); }
  #bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__handle { display: none; }
  /* panels are full-width when stacked: keep both badges left-aligned so the
     &quot;after&quot; label doesn&#39;t float off to the right edge */
  #bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__label--after { right: auto; left: var(--ba-pad); }
}

/* ---- scale the code down on phones so more fits + line numbers hug the edge ---- */
@media (max-width: 600px) {
  #bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 {
    --ba-code-size: 12.5px;
    --ba-label-size: 9.5px;
    --ba-pad: 12px;
    --ba-lh: 1.55;
  }
  #bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__gutter { margin-right: 10px; padding-right: 10px; }
  #bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__chrome { gap: 10px; padding: 0 12px; min-height: 40px; }
  #bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67.ba-has-labels .ba-code__body { padding-top: calc(var(--ba-pad) + 24px); }
  #bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67 .ba-code__label { padding: 4px 9px; letter-spacing: 0.08em; }
}
&lt;/style&gt;



&lt;div id=&quot;bac-widget_bdc75da8-9cb3-4301-bbbf-5d11ec43ed67&quot; class=&quot;ba-code ba-has-labels&quot;&gt;
  &lt;div class=&quot;ba-code__shell&quot;&gt;

    

    &lt;div class=&quot;ba-code__frame&quot;&gt;

      
      &lt;div class=&quot;ba-code__chrome&quot;&gt;
        &lt;span class=&quot;ba-code__dots&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;
        &lt;span class=&quot;ba-code__files&quot;&gt;
          
            
            &lt;span class=&quot;ba-code__file ba-code__file--after&quot;&gt;&lt;/span&gt;
            
          
        &lt;/span&gt;
      &lt;/div&gt;
      

      
      &lt;div class=&quot;ba-code__viewport&quot;&gt;
        
        
&lt;div class=&quot;ba-code__panel ba-code__panel--before ba-code__panel--single&quot;&gt;
  &lt;span class=&quot;ba-code__label ba-code__label--before&quot;&gt;Disassembly&lt;/span&gt;
  &lt;div class=&quot;ba-code__body&quot;&gt;
    &lt;span class=&quot;ba-code__gutter&quot; aria-hidden=&quot;true&quot;&gt;&lt;i&gt;1&lt;/i&gt;&lt;i&gt;2&lt;/i&gt;&lt;i&gt;3&lt;/i&gt;&lt;/span&gt;
    &lt;pre class=&quot;ba-code__pre&quot;&gt;&lt;code class=&quot;ba-code__code&quot;&gt;&lt;span style=&quot;color:#c678dd&quot;&gt;add&lt;/span&gt;     &lt;span style=&quot;color:#56b6c2&quot;&gt;zero&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;ra&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;sp&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;# standard hint&lt;/span&gt;
&lt;span style=&quot;color:#c678dd&quot;&gt;srai&lt;/span&gt;    &lt;span style=&quot;color:#56b6c2&quot;&gt;zero&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;zero&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;7&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;# semihosting exit&lt;/span&gt;
&lt;span style=&quot;color:#c678dd&quot;&gt;slti&lt;/span&gt;    &lt;span style=&quot;color:#56b6c2&quot;&gt;zero&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#56b6c2&quot;&gt;ra&lt;/span&gt;&lt;span style=&quot;color:#7f8696&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#d19a66&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color:#7d8590&quot;&gt;# custom hint&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

        
      &lt;/div&gt;
      

    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;h3 style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Debugger: improved remote and embedded debugging&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;All the new silicon above has to be debugged somewhere, and for embedded and DSP targets that usually means a remote GDB stub reached over JTAG or a gdbserver. For 9.4 we went through IDA&#39;s GDB remote serial protocol (RSP) client and made it more compliant and more compatible with third-party and embedded stubs, plus added a couple of conveniences aimed squarely at microcontroller work.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;color: #000000;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RISC-V debugger configuration.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hardware breakpoints are used automatically for addresses in flash ranges, where a software breakpoint cannot be written.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Binary &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;x&lt;/code&gt;/&lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;X&lt;/code&gt; memory transfers when the stub advertises them.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Library and memory-map discovery over &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;qXfer:libraries-svr4:read&lt;/code&gt;, the full &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;qXfer:libraries:read&lt;/code&gt; XML format, and &lt;code style=&quot;background-color: #f6f6f6; line-height: 1.357em;&quot;&gt;qXfer:memory-map:read&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;When a process fails to launch, IDA shows the real reason behind it.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;line-height: 1.25; color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Closing&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Taken together, 9.4 reaches further into embedded and DSP silicon. This is just the groundwork for more in-depth analysis to come. Many of these improvements started as customer requests - thank you for your feedback!&amp;nbsp;If there’s a processor, ISA extension or debugging workflow you’d like to see supported, tell us on the forum: &lt;a href=&quot;https://community.hex-rays.com/&quot; style=&quot;color: #000000;&quot;&gt;https://community.hex-rays.com/&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;
        </description><link>https://hex-rays.com/blog/ida-9.4-wider-processor-and-platform-support</link><guid isPermaLink="false">https://hex-rays.com/blog/ida-9.4-wider-processor-and-platform-support</guid><pubDate>Sat, 08 Aug 2026 15:15:04 GMT</pubDate></item><item><title>IDA 9.4 Beta Is Now Available</title><description>&lt;span id=&quot;hs_cos_wrapper_post_body&quot; class=&quot;hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_rich_text&quot; style=&quot;&quot; data-hs-cos-general-type=&quot;meta_field&quot; data-hs-cos-type=&quot;rich_text&quot;&gt;&lt;p&gt;If you&#39;re part of our Beta Program, the new build is now available in the &lt;a href=&quot;https://my.hex-rays.com/login&quot;&gt;&lt;span&gt;Download Center&lt;/span&gt;&lt;/a&gt; of your customer portal. Your testing and feedback are essential in validating new features, surfacing regressions, and ensuring this release is ready for production use.&lt;/p&gt;
&lt;p&gt;Not enrolled yet? Joining the program is quick and easy, just click Subscribe from your &lt;a href=&quot;https://my.hex-rays.com/login&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;customer portal dashboard&lt;/a&gt; - see below for details.&lt;/p&gt;
&lt;!--more--&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p&gt;The IDA 9.4 Beta is here, and we would love your help putting it through its paces. This build brings a major overhaul of Apple shared-cache analysis, new processors, decompiler upgrades, and a lot more. Your feedback during the beta directly shapes the quality of the final release.&lt;/p&gt;
&lt;h2&gt;Highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;New Apple Dyld Shared Cache infrastructure.&lt;/strong&gt; A completely overhauled approach to analyzing Dyld Shared Caches, with dedicated widgets, specialized workflows and actions, seamless navigation between cache components, and improved analysis.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decompiler.&lt;/strong&gt; Swift ABI recognition lands in the decompiler and type system, and strings recovered during decompilation now show up automatically in the Strings list. You also get call-site argument name hints, collapsible code blocks, and a new &quot;Edit type&quot; action.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;strong&gt;Support for higher-level programming languages:&lt;/strong&gt; Deeper Rust, Golang, and Objective-C support&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;New processor modules.&lt;/strong&gt; A brand-new Qualcomm Hexagon (QDSP6) disassembler paired with a Qualcomm MBN boot-image loader, plus a new MCore / CSky V1 module.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;More architecture support.&lt;/strong&gt; ARM SVE2 and SME are now fully disassembled, RISC-V gains Hazard3 (RP2350), compressed Zcmp / Zcmt / Zclsd, and Soteria extensions, and TriCore sees broad improvements.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pathfinder and a redesigned Xrefs Graph.&lt;/strong&gt; The new Pathfinder widget (Shift-F9) finds call paths between functions, and the Xrefs Graph has been redesigned around a new graph manager. Jump Anywhere is now the default &quot;g&quot; shortcut.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Git-based Teams server.&lt;/strong&gt; &lt;span&gt;Teams add-on for IDA Pro &lt;/span&gt;can now version databases through your own Git server instead of the proprietary Vault, and new IDB deep links let you share a location without shipping files around.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Scripting and API.&lt;/strong&gt; A unified &quot;Scripts&quot; window replaces the old Execute script and Snippets dialogs, and a new IDA Domain API release (v0.5.0) adds microcode and pseudocode access plus object store and retrieve APIs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Native ARM64 Windows build.&lt;/strong&gt; IDA now ships as a native build for Windows-on-ARM.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Beyond these, 9.4 adds compilation-unit folders in the Functions list, RISC-V debugging via the GDB backend, faster loading of large DWARF files and shared caches, and a long list of bug fixes.&lt;/p&gt;
&lt;p style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-weight: bold;&quot;&gt;-&amp;gt; &lt;/span&gt;Read the full beta release notes here: &lt;a href=&quot;https://docs.hex-rays.com/release-notes/9_4beta&quot;&gt;https://docs.hex-rays.com/release-notes/9_4beta&lt;/a&gt;&lt;/p&gt;
&lt;a href=&quot;https://docs.hex-rays.com/release-notes/9_3beta#whats-new-in-beta-1&quot; style=&quot;font-size: 16px; font-weight: normal;&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;display: block; padding: 0 20px; box-sizing: border-box; max-width: 100%; background-color: #f6f6f6; color: #000000; border: 1px solid #E4E4E4; border-radius: 16px; margin: 0 20px;&quot;&gt;
&lt;h3 style=&quot;font-size: 24px;&quot;&gt;Enrolling in the Beta Program is simple&lt;/h3&gt;
&lt;ul&gt;
&lt;li aria-level=&quot;1&quot;&gt;Log in to your&lt;a href=&quot;https://my.hex-rays.com/&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;color: #1155cc; text-decoration: underline;&quot;&gt;customer portal&lt;/span&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li aria-level=&quot;1&quot;&gt;Click &lt;strong&gt;Subscribe&lt;/strong&gt; when prompted at the top of your dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://hex-rays.com/hs-fs/hubfs/beta-box.png?width=705&amp;amp;height=138&amp;amp;name=beta-box.png&quot; width=&quot;705&quot; height=&quot;138&quot; loading=&quot;lazy&quot; alt=&quot;beta-box&quot; style=&quot;height: auto; max-width: 100%; width: 705px;&quot; srcset=&quot;https://hex-rays.com/hs-fs/hubfs/beta-box.png?width=353&amp;amp;height=69&amp;amp;name=beta-box.png 353w, https://hex-rays.com/hs-fs/hubfs/beta-box.png?width=705&amp;amp;height=138&amp;amp;name=beta-box.png 705w, https://hex-rays.com/hs-fs/hubfs/beta-box.png?width=1058&amp;amp;height=207&amp;amp;name=beta-box.png 1058w, https://hex-rays.com/hs-fs/hubfs/beta-box.png?width=1410&amp;amp;height=276&amp;amp;name=beta-box.png 1410w, https://hex-rays.com/hs-fs/hubfs/beta-box.png?width=1763&amp;amp;height=345&amp;amp;name=beta-box.png 1763w, https://hex-rays.com/hs-fs/hubfs/beta-box.png?width=2115&amp;amp;height=414&amp;amp;name=beta-box.png 2115w&quot; sizes=&quot;(max-width: 705px) 100vw, 705px&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/p&gt;
&lt;p&gt;Once enrolled, you will&amp;nbsp;&lt;span style=&quot;padding: 0px; font-weight: normal;&quot;&gt;be able to access the beta release in the&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;padding: 0px;&quot;&gt;&amp;nbsp;&lt;strong&gt;Download Center&lt;/strong&gt;&lt;/span&gt;. &lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Moving forward, &lt;/span&gt;we’ll notify you by email when beta versions&amp;nbsp;are ready for download.&amp;nbsp; Note that beta licenses will&amp;nbsp;automatically match your active IDA license (e.g., IDA Home → IDA Home Beta, IDA Pro → IDA Pro Beta).*&lt;/p&gt;
&lt;p&gt;&lt;em&gt;*You must have an active IDA Pro or IDA Home license to beta test.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: transparent; font-weight: bold;&quot;&gt;Get full program details plus&amp;nbsp;the terms and conditions here:&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;a href=&quot;https://hex-rays.com/beta-program&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot; style=&quot;font-weight: normal;&quot;&gt;https://hex-rays.com/beta-program&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 8px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;h3 style=&quot;font-size: 24px;&quot;&gt;Your feedback drives IDA forward&lt;/h3&gt;
&lt;p&gt;We rely on your feedback to shape the future of IDA. Please report bugs or suggestions using the&lt;a href=&quot;https://support.hex-rays.com/&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;color: #1155cc; text-decoration: underline;&quot;&gt;Early Access Feedback Form&lt;/span&gt;&lt;/a&gt; or by emailing &lt;a href=&quot;mailto:support@hex-rays.com&quot;&gt;&lt;span&gt;support@hex-rays.com&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&lt;/span&gt;
        </description><link>https://hex-rays.com/blog/ida-9.4-beta-is-now-available</link><guid isPermaLink="false">https://hex-rays.com/blog/ida-9.4-beta-is-now-available</guid><pubDate>Sat, 08 Aug 2026 15:15:04 GMT</pubDate></item></channel></rss>