Files
2026-08-18 13:39:21 +00:00

29 lines
24 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>TOCS 2025 Digest | Publish Assistant</title><meta name=keywords content><meta name=description content="10 papers selected.
Whole-system Persistence Made Efficient with Tree-structured Checkpointing on Microkernel
Mingkai Dong, Fangnuo Wu, Gequan Mo, Haibo Chen
TL;DR — A microkernel-based whole-system persistence scheme uses tree-structured incremental checkpointing to achieve low-overhead, crash-consistent snapshots of the entire OS state.
Why notable — Whole-system persistence is a foundational building block for reliable systems; this paper shows it can be done efficiently within a microkernel architecture.
XpuTEE: A High-Performance and Practical Heterogeneous Trusted Execution Environment for GPUs
Shulin Fan, Zhichao Hua, Yubin Xia, Haibo Chen"><meta name=author content="Publish Assistant"><link rel=canonical href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/tocs-2025/><link crossorigin=anonymous href=/vincent/publish-assistant/assets/css/stylesheet.d72f07832e13c592b3edba91680bfe70f01daac396179bcace0ac36e8e0494c6.css integrity="sha256-1y8Hgy4TxZKz7bqRaAv+cPAdqsOWF5vKzgrDbo4ElMY=" rel="preload stylesheet" as=style><link rel=icon href=https://pub.sqrt.fr/vincent/publish-assistant/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://pub.sqrt.fr/vincent/publish-assistant/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://pub.sqrt.fr/vincent/publish-assistant/favicon-32x32.png><link rel=apple-touch-icon href=https://pub.sqrt.fr/vincent/publish-assistant/apple-touch-icon.png><link rel=mask-icon href=https://pub.sqrt.fr/vincent/publish-assistant/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate hreflang=en href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/tocs-2025/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><meta property="og:url" content="https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/tocs-2025/"><meta property="og:site_name" content="Publish Assistant"><meta property="og:title" content="TOCS 2025 Digest"><meta property="og:description" content="10 papers selected.
Whole-system Persistence Made Efficient with Tree-structured Checkpointing on Microkernel Mingkai Dong, Fangnuo Wu, Gequan Mo, Haibo Chen
TL;DR — A microkernel-based whole-system persistence scheme uses tree-structured incremental checkpointing to achieve low-overhead, crash-consistent snapshots of the entire OS state.
Why notable — Whole-system persistence is a foundational building block for reliable systems; this paper shows it can be done efficiently within a microkernel architecture.
XpuTEE: A High-Performance and Practical Heterogeneous Trusted Execution Environment for GPUs Shulin Fan, Zhichao Hua, Yubin Xia, Haibo Chen"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="cloud-edge"><meta property="article:published_time" content="2025-01-01T00:00:00+00:00"><meta property="article:modified_time" content="2025-01-01T00:00:00+00:00"><meta name=twitter:card content="summary"><meta name=twitter:title content="TOCS 2025 Digest"><meta name=twitter:description content="10 papers selected.
Whole-system Persistence Made Efficient with Tree-structured Checkpointing on Microkernel Mingkai Dong, Fangnuo Wu, Gequan Mo, Haibo Chen
TL;DR — A microkernel-based whole-system persistence scheme uses tree-structured incremental checkpointing to achieve low-overhead, crash-consistent snapshots of the entire OS state.
Why notable — Whole-system persistence is a foundational building block for reliable systems; this paper shows it can be done efficiently within a microkernel architecture.
XpuTEE: A High-Performance and Practical Heterogeneous Trusted Execution Environment for GPUs Shulin Fan, Zhichao Hua, Yubin Xia, Haibo Chen"><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Edge and Cloud Systems","item":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/"},{"@type":"ListItem","position":2,"name":"Digests","item":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/"},{"@type":"ListItem","position":3,"name":"TOCS 2025 Digest","item":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/tocs-2025/"}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BlogPosting","headline":"TOCS 2025 Digest","name":"TOCS 2025 Digest","description":"10 papers selected.\nWhole-system Persistence Made Efficient with Tree-structured Checkpointing on Microkernel Mingkai Dong, Fangnuo Wu, Gequan Mo, Haibo Chen\nTL;DR — A microkernel-based whole-system persistence scheme uses tree-structured incremental checkpointing to achieve low-overhead, crash-consistent snapshots of the entire OS state.\nWhy notable — Whole-system persistence is a foundational building block for reliable systems; this paper shows it can be done efficiently within a microkernel architecture.\nXpuTEE: A High-Performance and Practical Heterogeneous Trusted Execution Environment for GPUs Shulin Fan, Zhichao Hua, Yubin Xia, Haibo Chen\n","keywords":[],"articleBody":"10 papers selected.\nWhole-system Persistence Made Efficient with Tree-structured Checkpointing on Microkernel Mingkai Dong, Fangnuo Wu, Gequan Mo, Haibo Chen\nTL;DR — A microkernel-based whole-system persistence scheme uses tree-structured incremental checkpointing to achieve low-overhead, crash-consistent snapshots of the entire OS state.\nWhy notable — Whole-system persistence is a foundational building block for reliable systems; this paper shows it can be done efficiently within a microkernel architecture.\nXpuTEE: A High-Performance and Practical Heterogeneous Trusted Execution Environment for GPUs Shulin Fan, Zhichao Hua, Yubin Xia, Haibo Chen\nTL;DR — XpuTEE extends trusted execution environments to GPUs by designing a hardware-assisted isolation mechanism that protects GPU computations with low performance overhead.\nWhy notable — As GPUs process sensitive ML workloads in shared clouds, TEE support for accelerators is urgently needed; XpuTEE is a comprehensive and practical solution.\nRegVault II: Achieving Hardware-Assisted Selective Kernel Data Randomization for Multiple Architectures Ruorong Guo, Yangye Zhou, Jinyan Xu, Wenbo Shen et al.\nTL;DR — RegVault II uses hardware features to selectively randomize sensitive kernel data structures at runtime across multiple ISAs, raising the bar for kernel exploitation.\nWhy notable — Kernel data-only attacks bypass existing code-randomization defenses; this works multi-architecture approach makes selective data randomization practical for production kernels.\nValidating JIT Compilers via Compilation Space Exploration Cong Li, Yanyan Jiang, Chang Xu, Zhendong Su\nTL;DR — Compilation space exploration systematically generates and tests the large space of valid JIT compilation outcomes to find miscompilation bugs in production JIT compilers.\nWhy notable — JIT correctness is notoriously hard to test; this papers systematic exploration strategy finds real bugs in widely-used runtimes and advances the state of compiler validation.\nFreezing-based Memory and Process Co-design for User Experience on Resource-limited Mobile Devices Changlong Li, Zongwei Zhu, Chun Jason Xue, Yu Liang et al.\nTL;DR — A co-designed memory and process management scheme freezes background processes at fine granularity to reclaim memory while preserving fast resume latency on constrained mobile hardware.\nWhy notable — Mobile memory pressure directly degrades user experience; this papers co-design perspective yields measurable improvements on real devices with limited resources.\nAnalyzing Configuration Dependencies of File Systems Tabassum Mahmud, Om Rameshwar Gatla, Duo Zhang, Carson Love et al.\nTL;DR — This work systematically analyzes the dependency graph among file-system configuration options to reveal hidden interactions that lead to silent data corruption or crashes.\nWhy notable — File-system misconfiguration is a major source of data loss in practice; understanding configuration dependencies is essential for building safer storage systems.\nEfficient Fault Tolerance for Stateful Serverless Computing with Asymmetric Logging Sheng Qi, Haoyu Feng, Xuanzhe Liu, Xin Jin\nTL;DR — Asymmetric logging decouples the logging cost between the fast and slow paths of stateful serverless functions, enabling low-overhead fault tolerance without sacrificing recovery guarantees.\nWhy notable — Fault tolerance for stateful serverless remains an open performance challenge; this papers asymmetric design significantly reduces logging overhead compared to symmetric approaches.\nTowards Serialization/Deserialization-free State Transfer in Serverless Workflows Xingda Wei, Fangming Lu, Zhuobin Huang, Rong Chen et al.\nTL;DR — This system eliminates serialization and deserialization costs when passing state between serverless functions by enabling direct in-memory state transfer across workflow stages.\nWhy notable — Ser/deser overhead is a dominant cost in serverless workflows; removing it fundamentally changes the performance profile of function chaining at scale.\nEnabling Anonymous Online Streaming Analytics at the Network Edge Yunming Xiao, Yanqi Gu, Yibo Zhao, Sen Lin et al.\nTL;DR — This paper designs an edge-based streaming analytics framework that enforces differential privacy while processing high-throughput data streams with low latency.\nWhy notable — Privacy-preserving analytics at the edge is increasingly required by regulation and user expectation; this system shows it can be done at practical streaming throughputs.\nLCL+: a Lock Chain Length-based Distributed Deadlock Detection and Resolution Service Built for OceanBase Zhenkun Yang, Chen Qian, Xuwang Teng, Fanyu Kong et al.\nTL;DR — LCL+ detects and resolves distributed deadlocks in the OceanBase database by tracking lock-chain lengths across nodes, achieving low overhead with fast detection latency.\nWhy notable — Deadlock detection in large-scale distributed databases is an unsolved production problem; this paper presents a battle-tested algorithm deployed in a major commercial system.\n","wordCount":"686","inLanguage":"en","datePublished":"2025-01-01T00:00:00Z","dateModified":"2025-01-01T00:00:00Z","author":{"@type":"Person","name":"Publish Assistant"},"mainEntityOfPage":{"@type":"WebPage","@id":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/tocs-2025/"},"publisher":{"@type":"Organization","name":"Publish Assistant","logo":{"@type":"ImageObject","url":"https://pub.sqrt.fr/vincent/publish-assistant/favicon.ico"}}}</script></head><body id=top><header class=header><nav class=header-nav><div class=logo><a href=https://pub.sqrt.fr/vincent/publish-assistant/ accesskey=h title="Publish Assistant (Alt + H)">Publish Assistant</a>
<span class=logo-sep>/</span>
<a class=logo-topic href=/vincent/publish-assistant/cloud-edge/ title="Edge and Cloud Systems">Edge and Cloud Systems</a><div class=logo-switches><button id=theme-toggle class=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg class="moon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg class="sun" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu class=menu><li><a href=/vincent/publish-assistant/cloud-edge/venues/ title=Venues><span>Venues</span></a></li><li><a href=/vincent/publish-assistant/cloud-edge/calendar/ title=Calendar><span>Calendar</span></a></li><li><a href=/vincent/publish-assistant/cloud-edge/digests/ title=Digests><span class=active>Digests</span></a></li></ul></nav></header><main class=main><article class=post-single><header class=post-header><nav class=breadcrumbs role=navigation aria-label=Breadcrumb><a href=/vincent/publish-assistant/cloud-edge/digests/>Digests</a>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right"><polyline points="9 18 15 12 9 6"/></svg></nav><h1 class="post-title entry-hint-parent">TOCS 2025 Digest</h1><div class=post-meta><span title='2025-01-01 00:00:00 +0000 UTC'>January 1, 2025</span>&nbsp;·&nbsp;<span>Publish Assistant</span></div></header><div class="post-content md-content"><p>10 papers selected.</p><hr><h3 id=whole-system-persistence-made-efficient-with-tree-structured-checkpointing-on-microkernel>Whole-system Persistence Made Efficient with Tree-structured Checkpointing on Microkernel<a hidden class=anchor aria-hidden=true href=#whole-system-persistence-made-efficient-with-tree-structured-checkpointing-on-microkernel>#</a></h3><p><em>Mingkai Dong, Fangnuo Wu, Gequan Mo, Haibo Chen</em></p><p><strong>TL;DR</strong> — A microkernel-based whole-system persistence scheme uses tree-structured incremental checkpointing to achieve low-overhead, crash-consistent snapshots of the entire OS state.</p><p><strong>Why notable</strong> — Whole-system persistence is a foundational building block for reliable systems; this paper shows it can be done efficiently within a microkernel architecture.</p><hr><h3 id=xputee-a-high-performance-and-practical-heterogeneous-trusted-execution-environment-for-gpus>XpuTEE: A High-Performance and Practical Heterogeneous Trusted Execution Environment for GPUs<a hidden class=anchor aria-hidden=true href=#xputee-a-high-performance-and-practical-heterogeneous-trusted-execution-environment-for-gpus>#</a></h3><p><em>Shulin Fan, Zhichao Hua, Yubin Xia, Haibo Chen</em></p><p><strong>TL;DR</strong> — XpuTEE extends trusted execution environments to GPUs by designing a hardware-assisted isolation mechanism that protects GPU computations with low performance overhead.</p><p><strong>Why notable</strong> — As GPUs process sensitive ML workloads in shared clouds, TEE support for accelerators is urgently needed; XpuTEE is a comprehensive and practical solution.</p><hr><h3 id=regvault-ii-achieving-hardware-assisted-selective-kernel-data-randomization-for-multiple-architectures>RegVault II: Achieving Hardware-Assisted Selective Kernel Data Randomization for Multiple Architectures<a hidden class=anchor aria-hidden=true href=#regvault-ii-achieving-hardware-assisted-selective-kernel-data-randomization-for-multiple-architectures>#</a></h3><p><em>Ruorong Guo, Yangye Zhou, Jinyan Xu, Wenbo Shen <em>et al.</em></em></p><p><strong>TL;DR</strong> — RegVault II uses hardware features to selectively randomize sensitive kernel data structures at runtime across multiple ISAs, raising the bar for kernel exploitation.</p><p><strong>Why notable</strong> — Kernel data-only attacks bypass existing code-randomization defenses; this work&rsquo;s multi-architecture approach makes selective data randomization practical for production kernels.</p><hr><h3 id=validating-jit-compilers-via-compilation-space-exploration>Validating JIT Compilers via Compilation Space Exploration<a hidden class=anchor aria-hidden=true href=#validating-jit-compilers-via-compilation-space-exploration>#</a></h3><p><em>Cong Li, Yanyan Jiang, Chang Xu, Zhendong Su</em></p><p><strong>TL;DR</strong> — Compilation space exploration systematically generates and tests the large space of valid JIT compilation outcomes to find miscompilation bugs in production JIT compilers.</p><p><strong>Why notable</strong> — JIT correctness is notoriously hard to test; this paper&rsquo;s systematic exploration strategy finds real bugs in widely-used runtimes and advances the state of compiler validation.</p><hr><h3 id=freezing-based-memory-and-process-co-design-for-user-experience-on-resource-limited-mobile-devices>Freezing-based Memory and Process Co-design for User Experience on Resource-limited Mobile Devices<a hidden class=anchor aria-hidden=true href=#freezing-based-memory-and-process-co-design-for-user-experience-on-resource-limited-mobile-devices>#</a></h3><p><em>Changlong Li, Zongwei Zhu, Chun Jason Xue, Yu Liang <em>et al.</em></em></p><p><strong>TL;DR</strong> — A co-designed memory and process management scheme freezes background processes at fine granularity to reclaim memory while preserving fast resume latency on constrained mobile hardware.</p><p><strong>Why notable</strong> — Mobile memory pressure directly degrades user experience; this paper&rsquo;s co-design perspective yields measurable improvements on real devices with limited resources.</p><hr><h3 id=analyzing-configuration-dependencies-of-file-systems>Analyzing Configuration Dependencies of File Systems<a hidden class=anchor aria-hidden=true href=#analyzing-configuration-dependencies-of-file-systems>#</a></h3><p><em>Tabassum Mahmud, Om Rameshwar Gatla, Duo Zhang, Carson Love <em>et al.</em></em></p><p><strong>TL;DR</strong> — This work systematically analyzes the dependency graph among file-system configuration options to reveal hidden interactions that lead to silent data corruption or crashes.</p><p><strong>Why notable</strong> — File-system misconfiguration is a major source of data loss in practice; understanding configuration dependencies is essential for building safer storage systems.</p><hr><h3 id=efficient-fault-tolerance-for-stateful-serverless-computing-with-asymmetric-logging>Efficient Fault Tolerance for Stateful Serverless Computing with Asymmetric Logging<a hidden class=anchor aria-hidden=true href=#efficient-fault-tolerance-for-stateful-serverless-computing-with-asymmetric-logging>#</a></h3><p><em>Sheng Qi, Haoyu Feng, Xuanzhe Liu, Xin Jin</em></p><p><strong>TL;DR</strong> — Asymmetric logging decouples the logging cost between the fast and slow paths of stateful serverless functions, enabling low-overhead fault tolerance without sacrificing recovery guarantees.</p><p><strong>Why notable</strong> — Fault tolerance for stateful serverless remains an open performance challenge; this paper&rsquo;s asymmetric design significantly reduces logging overhead compared to symmetric approaches.</p><hr><h3 id=towards-serializationdeserialization-free-state-transfer-in-serverless-workflows>Towards Serialization/Deserialization-free State Transfer in Serverless Workflows<a hidden class=anchor aria-hidden=true href=#towards-serializationdeserialization-free-state-transfer-in-serverless-workflows>#</a></h3><p><em>Xingda Wei, Fangming Lu, Zhuobin Huang, Rong Chen <em>et al.</em></em></p><p><strong>TL;DR</strong> — This system eliminates serialization and deserialization costs when passing state between serverless functions by enabling direct in-memory state transfer across workflow stages.</p><p><strong>Why notable</strong> — Ser/deser overhead is a dominant cost in serverless workflows; removing it fundamentally changes the performance profile of function chaining at scale.</p><hr><h3 id=enabling-anonymous-online-streaming-analytics-at-the-network-edge>Enabling Anonymous Online Streaming Analytics at the Network Edge<a hidden class=anchor aria-hidden=true href=#enabling-anonymous-online-streaming-analytics-at-the-network-edge>#</a></h3><p><em>Yunming Xiao, Yanqi Gu, Yibo Zhao, Sen Lin <em>et al.</em></em></p><p><strong>TL;DR</strong> — This paper designs an edge-based streaming analytics framework that enforces differential privacy while processing high-throughput data streams with low latency.</p><p><strong>Why notable</strong> — Privacy-preserving analytics at the edge is increasingly required by regulation and user expectation; this system shows it can be done at practical streaming throughputs.</p><hr><h3 id=lcl-a-lock-chain-length-based-distributed-deadlock-detection-and-resolution-service-built-for-oceanbase>LCL+: a Lock Chain Length-based Distributed Deadlock Detection and Resolution Service Built for OceanBase<a hidden class=anchor aria-hidden=true href=#lcl-a-lock-chain-length-based-distributed-deadlock-detection-and-resolution-service-built-for-oceanbase>#</a></h3><p><em>Zhenkun Yang, Chen Qian, Xuwang Teng, Fanyu Kong <em>et al.</em></em></p><p><strong>TL;DR</strong> — LCL+ detects and resolves distributed deadlocks in the OceanBase database by tracking lock-chain lengths across nodes, achieving low overhead with fast detection latency.</p><p><strong>Why notable</strong> — Deadlock detection in large-scale distributed databases is an unsolved production problem; this paper presents a battle-tested algorithm deployed in a major commercial system.</p></div><footer class=post-footer><ul class=post-tags></ul><nav class=paginav><a class=prev href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/tcc-2025/><span class=title>« Prev</span>
<span>TCC 2025 Digest</span>
</a><a class=next href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/tpds-2025/><span class=title>Next »</span>
<span>TPDS 2025 Digest</span></a></nav></footer></article></main><footer class=footer><span>&copy; 2026 <a href=https://pub.sqrt.fr/vincent/publish-assistant/>Publish Assistant</a></span> ·
<span>Powered by
<a href="https://gohugo.io/?utm_source=papermod" rel=noopener target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top id=top-link class="top-link hidden" aria-label="go to top" title="Go to Top (Alt + G)" accesskey=g><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevrons-up"><polyline points="17 11 12 6 7 11"/><polyline points="17 18 12 13 7 18"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var toplink=document.getElementById("top-link");window.onscroll=function(){const e=window.innerHeight;document.body.scrollTop>e||document.documentElement.scrollTop>e?toplink.classList.remove("hidden"):toplink.classList.add("hidden")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>