<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-562640272081991521</id><updated>2026-10-31T10:33:04.888+08:00</updated><category term="手工皮件/手縫皮革"/><category term="3c類"/><category term="文具"/><category term="AI對話"/><category term="(G8342 / poplar_dsds)"/><category term="Sony Xperia XZ1"/><category term="AI應用"/><category term="雜項"/><category term="命理"/><category term="天干地支"/><category term="Oblivious Odyssey"/><category term="文字集"/><category term="音響"/><title type='text'>隨興雜記</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://silywuns.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>185</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-7466284361056921864</id><published>2026-10-31T10:33:04.885+08:00</published><updated>2026-10-31T10:33:04.888+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="3c類"/><title type='text'> Waveshare ESP32-P4-WIFI6-Touch-LCD-5</title><content type='html'>&lt;p&gt;&lt;span class=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; color: #1f1f1f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&amp;nbsp;Waveshare ESP32-P4-WIFI6-Touch-LCD-5 與 ESP-IDF v6.&lt;/span&gt;&lt;span class=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; color: #1f1f1f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1 &lt;/span&gt;&lt;span class=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; color: #1f1f1f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;可直接編譯、&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; color: #1f1f1f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;運行的完整工程基準與硬體腳位定義。&lt;/span&gt;&lt;/p&gt;&lt;div _ngcontent-ng-c3512389644=&quot;&quot; aria-busy=&quot;false&quot; aria-live=&quot;off&quot; class=&quot;markdown markdown-main-panel md-content enable-luminous-fast-follows enable-updated-hr-color stronger&quot; dir=&quot;ltr&quot; id=&quot;model-response-message-contentr_a99b0da05b42df56&quot; inline-copy-host=&quot;&quot; style=&quot;--animation-duration: 400ms; --fade-animation-function: ease-out; animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; color: #1f1f1f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;br /&gt;&lt;h3 data-path-to-node=&quot;2&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans&amp;quot;, sans-serif !important; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;一、硬體規格與實體腳位定義（Hardware Mapping）&lt;/h3&gt;&lt;ul data-path-to-node=&quot;3&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding-inline-start: 32px; padding: 0px 0px 0px 3.36px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;核心 MCU&lt;/b&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;：ESP32-P4 Rev 3.&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;2（雙核 RISC-V 400MHz），&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;板載 32MB 16-Line PSRAM（200MHz）與 16MB SPI Flash。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;通訊除錯&lt;/b&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;：Console UART_TX = &lt;/span&gt;&lt;code data-index-in-node=&quot;23&quot; data-path-to-node=&quot;3,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 38&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;、&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;UART_RX = &lt;/span&gt;&lt;code data-index-in-node=&quot;41&quot; data-path-to-node=&quot;3,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 37&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Wi-Fi 6 / 藍牙&lt;/b&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;：板載 ESP32-C6 協處理器，&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;透過 SDIO 匯流排對接（CLK:&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;18,&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; CMD:&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;19,&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; D0:&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;14,&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; D1:&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;15,&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; D2:&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;16,&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; D3:&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;17,&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; Reset:&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;54）。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,3,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;MIPI DSI 螢幕（HX8394）&lt;/b&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;：&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul data-path-to-node=&quot;3,3,1&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding-inline-start: 32px; padding: 0px 0px 0px 3.36px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;解析度：直屏 720x1280、&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;2-lane MIPI DSI。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;面板重置：&lt;/span&gt;&lt;code data-index-in-node=&quot;5&quot; data-path-to-node=&quot;3,3,1,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 27&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;（Panel RST，&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;高電平有效）。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;面板背光：&lt;/span&gt;&lt;code data-index-in-node=&quot;5&quot; data-path-to-node=&quot;3,3,1,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 26&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;（Backlight，&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;建議以標準 GPIO 輸出高電平常開，&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;避免與 LEDC Timer 衝突報錯）。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,4,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;觸控 IC（GT911）&lt;/b&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;：&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul data-path-to-node=&quot;3,4,1&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding-inline-start: 32px; padding: 0px 0px 0px 3.36px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;I2C1 匯流排：SDA = &lt;/span&gt;&lt;code data-index-in-node=&quot;15&quot; data-path-to-node=&quot;3,4,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 7&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;、&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;SCL = &lt;/span&gt;&lt;code data-index-in-node=&quot;28&quot; data-path-to-node=&quot;3,4,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 8&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;（位址 &lt;/span&gt;&lt;code data-index-in-node=&quot;38&quot; data-path-to-node=&quot;3,4,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0x5D&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;）。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;中斷與復位：硬體未拉出獨立中斷/復位（&lt;/span&gt;&lt;code data-index-in-node=&quot;19&quot; data-path-to-node=&quot;3,4,1,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;INT = NC&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;、&lt;/span&gt;&lt;code data-index-in-node=&quot;28&quot; data-path-to-node=&quot;3,4,1,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;RST = NC&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;），&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;由原廠適配器以輪詢方式處理點擊事件。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,5,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;音訊 Codec（ES8311 放音 + ES7210 錄音）&lt;/b&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;：&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul data-path-to-node=&quot;3,5,1&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding-inline-start: 32px; padding: 0px 0px 0px 3.36px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;I2S1 匯流排：MCLK = &lt;/span&gt;&lt;code data-index-in-node=&quot;16&quot; data-path-to-node=&quot;3,5,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 13&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;、&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;SCLK = &lt;/span&gt;&lt;code data-index-in-node=&quot;31&quot; data-path-to-node=&quot;3,5,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 12&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;、&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;WS(LCLK) = &lt;/span&gt;&lt;code data-index-in-node=&quot;50&quot; data-path-to-node=&quot;3,5,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 10&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;、&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;DOUT = &lt;/span&gt;&lt;code data-index-in-node=&quot;65&quot; data-path-to-node=&quot;3,5,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 9&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;、&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;DSIN = &lt;/span&gt;&lt;code data-index-in-node=&quot;79&quot; data-path-to-node=&quot;3,5,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 11&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;功放致能（PA_EN）：&lt;/span&gt;&lt;code data-index-in-node=&quot;12&quot; data-path-to-node=&quot;3,5,1,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 53&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;（高電平致能）。&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;原廠標準採樣率為 &lt;/span&gt;&lt;code data-index-in-node=&quot;36&quot; data-path-to-node=&quot;3,5,1,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;22050 Hz&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;（單聲道/立體聲映射）。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,6,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;MicroSD 卡槽（Slot 0 原生 SDMMC 4-wire）&lt;/b&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;：&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul data-path-to-node=&quot;3,6,1&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding-inline-start: 32px; padding: 0px 0px 0px 3.36px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;腳位：CLK = &lt;/span&gt;&lt;code data-index-in-node=&quot;9&quot; data-path-to-node=&quot;3,6,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 43&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;、&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;CMD = &lt;/span&gt;&lt;code data-index-in-node=&quot;23&quot; data-path-to-node=&quot;3,6,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 44&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;、&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;D0 = &lt;/span&gt;&lt;code data-index-in-node=&quot;36&quot; data-path-to-node=&quot;3,6,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 39&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;、&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;D1 = &lt;/span&gt;&lt;code data-index-in-node=&quot;49&quot; data-path-to-node=&quot;3,6,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 40&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;、&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;D2 = &lt;/span&gt;&lt;code data-index-in-node=&quot;62&quot; data-path-to-node=&quot;3,6,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 41&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;、&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;D3 = &lt;/span&gt;&lt;code data-index-in-node=&quot;75&quot; data-path-to-node=&quot;3,6,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO 42&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;卡槽偵測（CD）：&lt;/span&gt;&lt;b data-index-in-node=&quot;9&quot; data-path-to-node=&quot;3,6,1,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;無獨立實體 CD 腳位&lt;/b&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;（GPIO 40 為 SDMMC D1 資料線，&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;不可作為 GPIO 偵測輸入）。&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;標準實務為「關機插拔、&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;開機靜態掛載」；若開機未插卡僅執行單次防呆，&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;不進行高頻重複輪詢以防止 LDO 電源單元與記憶體死鎖。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-path-to-node=&quot;5&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans&amp;quot;, sans-serif !important; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;二、ESP-IDF v6.1 驅動相容性修補（解開機死白屏關鍵）&lt;/h3&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;若使用官方 Waveshare HX8394 驅動，&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;在 ESP-IDF v6.&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1 下預設會出現死白光（背光全亮但無畫面），&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;需確認以下兩處修補：&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;ol data-path-to-node=&quot;7&quot; start=&quot;1&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding-inline-start: 32px; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;驅動結構體映射&lt;/b&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;：
在 &lt;/span&gt;&lt;code data-index-in-node=&quot;11&quot; data-path-to-node=&quot;7,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;managed_components/waveshare__esp_lcd_hx8394/include/esp_lcd_hx8394.h&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; 內的巨集 &lt;/span&gt;&lt;code data-index-in-node=&quot;86&quot; data-path-to-node=&quot;7,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;WAVESHARE_LCD_DPI_CONFIG_COLOR_FORMAT&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; 需確保同時配置 &lt;/span&gt;&lt;code data-index-in-node=&quot;132&quot; data-path-to-node=&quot;7,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;.in_color_format&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; 與 &lt;/span&gt;&lt;code data-index-in-node=&quot;151&quot; data-path-to-node=&quot;7,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;.out_color_format&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;面板初始化序列&lt;/b&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;：
在 &lt;/span&gt;&lt;code data-index-in-node=&quot;11&quot; data-path-to-node=&quot;7,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;esp_lcd_hx8394.c&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; 的預設初始化序列末尾，&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;暫存器 &lt;/span&gt;&lt;code data-index-in-node=&quot;43&quot; data-path-to-node=&quot;7,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0x3A&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;（COLMOD）需修正為 &lt;/span&gt;&lt;code data-index-in-node=&quot;60&quot; data-path-to-node=&quot;7,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0x55&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;（RGB565），&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;且必須送出 &lt;/span&gt;&lt;code data-index-in-node=&quot;79&quot; data-path-to-node=&quot;7,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0x21&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; 指令（Display Inversion ON，&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;IPS 常黑反轉），&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;否則像素無法導通。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3 class=&quot;&quot; data-path-to-node=&quot;9&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans&amp;quot;, sans-serif !important; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;三、工程相依配置（&lt;code data-index-in-node=&quot;9&quot; data-path-to-node=&quot;9&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;main/idf_component.yml&lt;/code&gt;）&lt;/h3&gt;&lt;response-element class=&quot;no-md md-has-block-component&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;code-block _nghost-ng-c2266508646=&quot;&quot; class=&quot;ng-tns-c2266508646-78 enable-luminous-code-block ng-star-inserted&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;code-block ng-tns-c2266508646-78 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation&quot; data-hveid=&quot;0&quot; data-ved=&quot;0CAAQhtANahgKEwjQ0qr1meOXAxUAAAAAHQAAAAAQmwE&quot; decode-data-ved=&quot;1&quot; jslog=&quot;223238;track:impression,attention;BardVeMetadataKey:W1sicl9hOTliMGRhMDViNDJkZjU2IiwiY19iOWY2Mjk3YTIzZjMyNGM5IixudWxsLCJyY182N2M0Y2ZhNTcyMWIwODM3IixudWxsLG51bGwsInpoIixudWxsLDEsbnVsbCxudWxsLDAsMF1d&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;formatted-code-block-internal-container ng-tns-c2266508646-78&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(20, 20, 20); border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 26px 0px 0px 32px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;animated-opacity ng-tns-c2266508646-78&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c2266508646-78 ng-star-inserted&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: -72px auto auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px 11px 0px 0px; page: auto; perspective: none; position: sticky; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;ng-tns-c2266508646-78&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;YAML&lt;/span&gt;&lt;div _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;buttons ng-tns-c2266508646-78 ng-star-inserted&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;gem-icon-button _ngcontent-ng-c2266508646=&quot;&quot; _nghost-ng-c3543789491=&quot;&quot; aria-describedby=&quot;cdk-describedby-message-ng-1-20&quot; arialabel=&quot;下載程式碼&quot; cdk-describedby-host=&quot;ng-1&quot; class=&quot;mat-mdc-tooltip-trigger download-button ng-tns-c2266508646-78 gem-button gem-button-badge-size-small gem-button-size-small gem-button-type-on-surface lm-enabled ng-star-inserted&quot; fonticonname=&quot;arrow_circle_down&quot; gemtooltip=&quot;下載程式碼&quot; size=&quot;small&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; theme=&quot;lm&quot; type=&quot;onSurface&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;button _ngcontent-ng-c3543789491=&quot;&quot; aria-label=&quot;下載程式碼&quot; class=&quot;mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed _mat-animation-noopable mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted&quot; jslog=&quot;305704;track:generic_click,impression&quot; mat-ripple-loader-centered=&quot;&quot; mat-ripple-loader-class-name=&quot;mat-mdc-button-ripple&quot; mat-ripple-loader-uninitialized=&quot;&quot; matbadgeposition=&quot;after&quot; maticonbutton=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border-color: rgb(0, 0, 0); border-style: none; border-width: 0px; clear: none; clip: auto; color: black; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 24px; font-stretch: normal; font-style: normal; font-variation-settings: normal; font-weight: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 6px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: none; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;mat-mdc-button-persistent-ripple mdc-icon-button__ripple&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;gem-icon _ngcontent-ng-c3543789491=&quot;&quot; _nghost-ng-c703485066=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;mat-icon _ngcontent-ng-c703485066=&quot;&quot; aria-hidden=&quot;true&quot; class=&quot;mat-icon notranslate lm-icon-l lumi-symbols mat-ligature-font mat-icon-no-color ng-star-inserted&quot; data-mat-icon-name=&quot;arrow_circle_down&quot; data-mat-icon-namespace=&quot;lumi-symbols&quot; data-mat-icon-type=&quot;font&quot; fonticon=&quot;arrow_circle_down&quot; role=&quot;img&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(255, 255, 255); filter: none; flex-direction: row; flex: 0 0 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/mat-icon&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon&gt;&lt;!----&gt;&lt;span class=&quot;mat-focus-indicator&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mat-mdc-button-touch-target&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: none; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 50% auto auto 50%; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon-button&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;gem-icon-button _ngcontent-ng-c2266508646=&quot;&quot; _nghost-ng-c3543789491=&quot;&quot; aria-describedby=&quot;cdk-describedby-message-ng-1-21&quot; arialabel=&quot;複製代碼&quot; cdk-describedby-host=&quot;ng-1&quot; class=&quot;mat-mdc-tooltip-trigger copy-button ng-tns-c2266508646-78 gem-button gem-button-badge-size-small gem-button-size-small gem-button-type-on-surface lm-enabled ng-star-inserted&quot; data-test-id=&quot;gem-copy-button&quot; fonticonname=&quot;copy&quot; gemtooltip=&quot;複製代碼&quot; size=&quot;small&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; theme=&quot;lm&quot; type=&quot;onSurface&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;button _ngcontent-ng-c3543789491=&quot;&quot; aria-label=&quot;複製代碼&quot; class=&quot;mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed _mat-animation-noopable mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted&quot; jslog=&quot;179062;track:generic_click,impression;BardVeMetadataKey:W1sicl9hOTliMGRhMDViNDJkZjU2IiwiY19iOWY2Mjk3YTIzZjMyNGM5IixudWxsLCJyY182N2M0Y2ZhNTcyMWIwODM3IixudWxsLG51bGwsInpoIixudWxsLDEsbnVsbCxudWxsLDEsMF1d;mutable:true&quot; mat-ripple-loader-centered=&quot;&quot; mat-ripple-loader-class-name=&quot;mat-mdc-button-ripple&quot; mat-ripple-loader-uninitialized=&quot;&quot; matbadgeposition=&quot;after&quot; maticonbutton=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border-color: rgb(0, 0, 0); border-style: none; border-width: 0px; clear: none; clip: auto; color: black; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 24px; font-stretch: normal; font-style: normal; font-variation-settings: normal; font-weight: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 6px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: none; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;mat-mdc-button-persistent-ripple mdc-icon-button__ripple&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;gem-icon _ngcontent-ng-c3543789491=&quot;&quot; _nghost-ng-c703485066=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;mat-icon _ngcontent-ng-c703485066=&quot;&quot; aria-hidden=&quot;true&quot; class=&quot;mat-icon notranslate lm-icon-l lumi-symbols mat-ligature-font mat-icon-no-color ng-star-inserted&quot; data-mat-icon-name=&quot;copy&quot; data-mat-icon-namespace=&quot;lumi-symbols&quot; data-mat-icon-type=&quot;font&quot; fonticon=&quot;copy&quot; role=&quot;img&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(255, 255, 255); filter: none; flex-direction: row; flex: 0 0 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/mat-icon&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon&gt;&lt;!----&gt;&lt;span class=&quot;mat-focus-indicator&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mat-mdc-button-touch-target&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: none; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 50% auto auto 50%; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon-button&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/div&gt;&lt;!----&gt;&lt;!----&gt;&lt;/div&gt;&lt;!----&gt;&lt;pre _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;ng-tns-c2266508646-78&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;code-container formatted ng-tns-c2266508646-78&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 16px 0px 32px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;dependencies:&lt;/span&gt;
  &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;idf:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;&amp;gt;=6.0.0&quot;&lt;/span&gt;
  &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;waveshare/esp32_p4_wifi6_touch_lcd_5:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;^1.0.0&quot;&lt;/span&gt;
  &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;espressif/esp_codec_dev:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;^1.3.0&quot;&lt;/span&gt;
  &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;espressif/esp_hosted:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;^1.0.0&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;!----&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/code-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;h3 class=&quot;&quot; data-path-to-node=&quot;12&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans&amp;quot;, sans-serif !important; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;四、完整且可直接運行的主程式碼（&lt;code data-index-in-node=&quot;16&quot; data-path-to-node=&quot;12&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;main/hello_world_main.c&lt;/code&gt;）&lt;/h3&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;此代碼已整合：&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;ol data-path-to-node=&quot;14&quot; start=&quot;1&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding-inline-start: 32px; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;ES8311 音訊子系統與 GPIO 53 功放獨立任務非同步播放。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;MicroSD 卡槽開機靜態安全掛載（未插卡不崩潰、&lt;/span&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;開機插卡即顯示容量）。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;原廠 &lt;/span&gt;&lt;code data-index-in-node=&quot;3&quot; data-path-to-node=&quot;14,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 240, 240); border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; color: rgba(0, 0, 0, 0.55); columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 2.85714px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;esp_lv_adapter&lt;/code&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt; 封裝之 LVGL 9 與 GT911 觸控整合（解決多重適配器搶鎖死結問題）。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;--animation-duration: 478ms; animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;--animation-duration: 478ms; animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;經由 ESP32-C6 Hosted 架構之 Wi-Fi 6 STA 自動連線與非同步 UI 狀態更新。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;response-element class=&quot;no-md md-has-block-component&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;--animation-duration: 900ms; animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;code-block _nghost-ng-c2266508646=&quot;&quot; class=&quot;ng-tns-c2266508646-79 enable-luminous-code-block ng-star-inserted&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;code-block ng-tns-c2266508646-79 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation&quot; data-hveid=&quot;0&quot; data-ved=&quot;0CAAQhtANahgKEwjQ0qr1meOXAxUAAAAAHQAAAAAQnAE&quot; decode-data-ved=&quot;1&quot; jslog=&quot;223238;track:impression,attention;BardVeMetadataKey:W1sicl9hOTliMGRhMDViNDJkZjU2IiwiY19iOWY2Mjk3YTIzZjMyNGM5IixudWxsLCJyY182N2M0Y2ZhNTcyMWIwODM3IixudWxsLG51bGwsInpoIixudWxsLDEsbnVsbCxudWxsLDAsMF1d&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;formatted-code-block-internal-container ng-tns-c2266508646-79&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(20, 20, 20); border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 26px 0px 0px 32px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;animated-opacity ng-tns-c2266508646-79&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c2266508646-79 ng-star-inserted&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: -72px auto auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px 11px 0px 0px; page: auto; perspective: none; position: sticky; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;ng-tns-c2266508646-79&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;C&lt;/span&gt;&lt;div _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;buttons ng-tns-c2266508646-79 ng-star-inserted&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;gem-icon-button _ngcontent-ng-c2266508646=&quot;&quot; _nghost-ng-c3543789491=&quot;&quot; aria-describedby=&quot;cdk-describedby-message-ng-1-20&quot; arialabel=&quot;下載程式碼&quot; cdk-describedby-host=&quot;ng-1&quot; class=&quot;mat-mdc-tooltip-trigger download-button ng-tns-c2266508646-79 gem-button gem-button-badge-size-small gem-button-size-small gem-button-type-on-surface lm-enabled ng-star-inserted&quot; fonticonname=&quot;arrow_circle_down&quot; gemtooltip=&quot;下載程式碼&quot; size=&quot;small&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; theme=&quot;lm&quot; type=&quot;onSurface&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;button _ngcontent-ng-c3543789491=&quot;&quot; aria-label=&quot;下載程式碼&quot; class=&quot;mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed _mat-animation-noopable mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted&quot; jslog=&quot;305704;track:generic_click,impression&quot; mat-ripple-loader-centered=&quot;&quot; mat-ripple-loader-class-name=&quot;mat-mdc-button-ripple&quot; mat-ripple-loader-uninitialized=&quot;&quot; matbadgeposition=&quot;after&quot; maticonbutton=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border-color: rgb(0, 0, 0); border-style: none; border-width: 0px; clear: none; clip: auto; color: black; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 24px; font-stretch: normal; font-style: normal; font-variation-settings: normal; font-weight: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 6px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: none; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;mat-mdc-button-persistent-ripple mdc-icon-button__ripple&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;gem-icon _ngcontent-ng-c3543789491=&quot;&quot; _nghost-ng-c703485066=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;mat-icon _ngcontent-ng-c703485066=&quot;&quot; aria-hidden=&quot;true&quot; class=&quot;mat-icon notranslate lm-icon-l lumi-symbols mat-ligature-font mat-icon-no-color ng-star-inserted&quot; data-mat-icon-name=&quot;arrow_circle_down&quot; data-mat-icon-namespace=&quot;lumi-symbols&quot; data-mat-icon-type=&quot;font&quot; fonticon=&quot;arrow_circle_down&quot; role=&quot;img&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(255, 255, 255); filter: none; flex-direction: row; flex: 0 0 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/mat-icon&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon&gt;&lt;!----&gt;&lt;span class=&quot;mat-focus-indicator&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mat-mdc-button-touch-target&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: none; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 50% auto auto 50%; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon-button&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;gem-icon-button _ngcontent-ng-c2266508646=&quot;&quot; _nghost-ng-c3543789491=&quot;&quot; aria-describedby=&quot;cdk-describedby-message-ng-1-21&quot; arialabel=&quot;複製代碼&quot; cdk-describedby-host=&quot;ng-1&quot; class=&quot;mat-mdc-tooltip-trigger copy-button ng-tns-c2266508646-79 gem-button gem-button-badge-size-small gem-button-size-small gem-button-type-on-surface lm-enabled ng-star-inserted&quot; data-test-id=&quot;gem-copy-button&quot; fonticonname=&quot;copy&quot; gemtooltip=&quot;複製代碼&quot; size=&quot;small&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; theme=&quot;lm&quot; type=&quot;onSurface&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;button _ngcontent-ng-c3543789491=&quot;&quot; aria-label=&quot;複製代碼&quot; class=&quot;mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed _mat-animation-noopable mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted&quot; jslog=&quot;179062;track:generic_click,impression;BardVeMetadataKey:W1sicl9hOTliMGRhMDViNDJkZjU2IiwiY19iOWY2Mjk3YTIzZjMyNGM5IixudWxsLCJyY182N2M0Y2ZhNTcyMWIwODM3IixudWxsLG51bGwsInpoIixudWxsLDEsbnVsbCxudWxsLDEsMF1d;mutable:true&quot; mat-ripple-loader-centered=&quot;&quot; mat-ripple-loader-class-name=&quot;mat-mdc-button-ripple&quot; mat-ripple-loader-uninitialized=&quot;&quot; matbadgeposition=&quot;after&quot; maticonbutton=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border-color: rgb(0, 0, 0); border-style: none; border-width: 0px; clear: none; clip: auto; color: black; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 24px; font-stretch: normal; font-style: normal; font-variation-settings: normal; font-weight: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 6px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: none; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;mat-mdc-button-persistent-ripple mdc-icon-button__ripple&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;gem-icon _ngcontent-ng-c3543789491=&quot;&quot; _nghost-ng-c703485066=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;mat-icon _ngcontent-ng-c703485066=&quot;&quot; aria-hidden=&quot;true&quot; class=&quot;mat-icon notranslate lm-icon-l lumi-symbols mat-ligature-font mat-icon-no-color ng-star-inserted&quot; data-mat-icon-name=&quot;copy&quot; data-mat-icon-namespace=&quot;lumi-symbols&quot; data-mat-icon-type=&quot;font&quot; fonticon=&quot;copy&quot; role=&quot;img&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(255, 255, 255); filter: none; flex-direction: row; flex: 0 0 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/mat-icon&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon&gt;&lt;!----&gt;&lt;span class=&quot;mat-focus-indicator&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mat-mdc-button-touch-target&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: none; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 50% auto auto 50%; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon-button&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/div&gt;&lt;!----&gt;&lt;!----&gt;&lt;/div&gt;&lt;!----&gt;&lt;pre _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;ng-tns-c2266508646-79&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;code-container formatted ng-tns-c2266508646-79&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 16px 0px 32px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&amp;lt;math.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;freertos/FreeRTOS.h&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;freertos/task.h&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;esp_log.h&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;esp_system.h&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;esp_wifi.h&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;esp_event.h&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;nvs_flash.h&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;driver/gpio.h&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;lvgl.h&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;esp_lv_adapter.h&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;bsp/esp32_p4_wifi6_touch_lcd_5.h&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;esp_codec_dev.h&quot;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;char&lt;/span&gt; *TAG = &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;MAIN_APP&quot;&lt;/span&gt;;

&lt;span class=&quot;hljs-comment&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(128, 128, 128); clear: none; clip: auto; color: grey; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(128, 128, 128) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(128, 128, 128); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;// Wi-Fi 基地台連線資訊 (請依實際環境修改)&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;define&lt;/span&gt; WIFI_SSID &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;uap&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;define&lt;/span&gt; WIFI_PASS &lt;span class=&quot;hljs-meta-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;23307667&quot;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;esp_codec_dev_handle_t&lt;/span&gt; speaker_handle = &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;NULL&lt;/span&gt;;
&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; TaskHandle_t audio_task_handle = &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;NULL&lt;/span&gt;;
&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;lv_obj_t&lt;/span&gt; *wifi_status_label = &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;NULL&lt;/span&gt;;
&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;lv_obj_t&lt;/span&gt; *sd_status_label = &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;NULL&lt;/span&gt;;
&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;lv_obj_t&lt;/span&gt; *touch_status_label = &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;NULL&lt;/span&gt;;
&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;lv_obj_t&lt;/span&gt; *btn_label = &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;NULL&lt;/span&gt;;
&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;int&lt;/span&gt; click_count = &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0&lt;/span&gt;;
&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;bool&lt;/span&gt; sd_mounted = &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;false&lt;/span&gt;;

&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;char&lt;/span&gt; sd_display_text[&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;128&lt;/span&gt;] = &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;SD Card: Not Installed&quot;&lt;/span&gt;;

&lt;span class=&quot;hljs-comment&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(128, 128, 128); clear: none; clip: auto; color: grey; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(128, 128, 128) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(128, 128, 128); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;// 產生 22050Hz (官方標準採樣率) 正弦波 PCM 提示音&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;define&lt;/span&gt; SAMPLE_RATE 22050&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;define&lt;/span&gt; BEEP_MS 80&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; font-weight: 700; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;define&lt;/span&gt; TOTAL_SAMPLES ((SAMPLE_RATE * BEEP_MS) / 1000)&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;int16_t&lt;/span&gt; beep_pcm[TOTAL_SAMPLES];

&lt;span class=&quot;hljs-function&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 219, 15); clear: none; clip: auto; color: #ffdb0f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 219, 15) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 219, 15); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;init_beep_pcm&lt;/span&gt;&lt;span class=&quot;hljs-params&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;(&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt;)&lt;/span&gt;
&lt;/span&gt;{
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0&lt;/span&gt;; i &amp;lt; TOTAL_SAMPLES; i++) {
        beep_pcm[i] = (&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;int16_t&lt;/span&gt;)(&lt;span class=&quot;hljs-built_in&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;sin&lt;/span&gt;(&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;2.0&lt;/span&gt; * M_PI * &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1000.0&lt;/span&gt; * i / SAMPLE_RATE) * &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;22000&lt;/span&gt;);
    }
}

&lt;span class=&quot;hljs-function&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 219, 15); clear: none; clip: auto; color: #ffdb0f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 219, 15) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 219, 15); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;audio_task&lt;/span&gt;&lt;span class=&quot;hljs-params&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;(&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt; *arg)&lt;/span&gt;
&lt;/span&gt;{
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;while&lt;/span&gt; (&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1&lt;/span&gt;) {
        ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
        &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;if&lt;/span&gt; (speaker_handle) {
            gpio_set_level(BSP_POWER_AMP_IO, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1&lt;/span&gt;);
            esp_codec_dev_write(speaker_handle, beep_pcm, &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;sizeof&lt;/span&gt;(beep_pcm));
        }
    }
}

&lt;span class=&quot;hljs-function&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 219, 15); clear: none; clip: auto; color: #ffdb0f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 219, 15) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 219, 15); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;play_beep_async&lt;/span&gt;&lt;span class=&quot;hljs-params&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;(&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt;)&lt;/span&gt;
&lt;/span&gt;{
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;if&lt;/span&gt; (audio_task_handle) {
        xTaskNotifyGive(audio_task_handle);
    }
}

&lt;span class=&quot;hljs-function&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 219, 15); clear: none; clip: auto; color: #ffdb0f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 219, 15) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 219, 15); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;btn_click_event_cb&lt;/span&gt;&lt;span class=&quot;hljs-params&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;(&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;lv_event_t&lt;/span&gt; *e)&lt;/span&gt;
&lt;/span&gt;{
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;lv_event_code_t&lt;/span&gt; code = lv_event_get_code(e);
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;if&lt;/span&gt; (code == LV_EVENT_CLICKED) {
        click_count++;
        &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;char&lt;/span&gt; buf[&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;64&lt;/span&gt;];
        &lt;span class=&quot;hljs-built_in&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;snprintf&lt;/span&gt;(buf, &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;sizeof&lt;/span&gt;(buf), &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;Touch Count: %d&quot;&lt;/span&gt;, click_count);
        &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;if&lt;/span&gt; (btn_label) {
            lv_label_set_text(btn_label, buf);
        }
        &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;if&lt;/span&gt; (touch_status_label) {
            lv_label_set_text(touch_status_label, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;Touch: Clicked!&quot;&lt;/span&gt;);
        }
        ESP_LOGI(TAG, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;Touch Click Event Validated! Count = %d&quot;&lt;/span&gt;, click_count);
        play_beep_async();
    }
}

&lt;span class=&quot;hljs-function&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 219, 15); clear: none; clip: auto; color: #ffdb0f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 219, 15) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 219, 15); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;update_wifi_ui_async&lt;/span&gt;&lt;span class=&quot;hljs-params&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;(&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt; *user_data)&lt;/span&gt;
&lt;/span&gt;{
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;if&lt;/span&gt; (wifi_status_label) {
        lv_label_set_text(wifi_status_label, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;Wi-Fi: Connected (192.168.1.192)&quot;&lt;/span&gt;);
        lv_obj_set_style_text_color(wifi_status_label, lv_color_hex(&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0x10B981&lt;/span&gt;), LV_PART_MAIN);
    }
}

&lt;span class=&quot;hljs-function&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 219, 15); clear: none; clip: auto; color: #ffdb0f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 219, 15) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 219, 15); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;wifi_event_handler&lt;/span&gt;&lt;span class=&quot;hljs-params&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;(&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt;* arg, &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;esp_event_base_t&lt;/span&gt; event_base,
                               &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;int32_t&lt;/span&gt; event_id, &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt;* event_data)&lt;/span&gt;
&lt;/span&gt;{
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;if&lt;/span&gt; (event_base == WIFI_EVENT &amp;amp;&amp;amp; event_id == WIFI_EVENT_STA_START) {
        esp_wifi_connect();
    } &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;if&lt;/span&gt; (event_base == IP_EVENT &amp;amp;&amp;amp; event_id == IP_EVENT_STA_GOT_IP) {
        &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;ip_event_got_ip_t&lt;/span&gt;* event = (&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;ip_event_got_ip_t&lt;/span&gt;*) event_data;
        ESP_LOGI(TAG, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;Wi-Fi Connected IP: &quot;&lt;/span&gt; IPSTR, IP2STR(&amp;amp;event-&amp;gt;ip_info.ip));
        lv_async_call(update_wifi_ui_async, &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;NULL&lt;/span&gt;);
    }
}

&lt;span class=&quot;hljs-function&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 219, 15); clear: none; clip: auto; color: #ffdb0f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 219, 15) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 219, 15); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;wifi_init_sta&lt;/span&gt;&lt;span class=&quot;hljs-params&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;(&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt;)&lt;/span&gt;
&lt;/span&gt;{
    esp_netif_init();
    esp_event_loop_create_default();
    esp_netif_create_default_wifi_sta();

    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;wifi_init_config_t&lt;/span&gt; cfg = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&amp;amp;cfg);

    esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &amp;amp;wifi_event_handler, &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;NULL&lt;/span&gt;, &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;NULL&lt;/span&gt;);
    esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &amp;amp;wifi_event_handler, &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;NULL&lt;/span&gt;, &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;NULL&lt;/span&gt;);

    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;wifi_config_t&lt;/span&gt; wifi_config = {
        .sta = {
            .ssid = WIFI_SSID,
            .password = WIFI_PASS,
        },
    };
    esp_wifi_set_mode(WIFI_MODE_STA);
    esp_wifi_set_config(WIFI_IF_STA, &amp;amp;wifi_config);
    esp_wifi_start();
}

&lt;span class=&quot;hljs-function&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 219, 15); clear: none; clip: auto; color: #ffdb0f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 219, 15) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 219, 15); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;app_main&lt;/span&gt;&lt;span class=&quot;hljs-params&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;(&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;void&lt;/span&gt;)&lt;/span&gt;
&lt;/span&gt;{
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;esp_err_t&lt;/span&gt; ret = nvs_flash_init();
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;if&lt;/span&gt; (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
        nvs_flash_erase();
        nvs_flash_init();
    }

    init_beep_pcm();

    &lt;span class=&quot;hljs-comment&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(128, 128, 128); clear: none; clip: auto; color: grey; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(128, 128, 128) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(128, 128, 128); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;// 1. MicroSD 卡開機單次靜態掛載檢測 (關機插卡標準工程模式)&lt;/span&gt;
    ESP_LOGI(TAG, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;Detecting SD Card at boot...&quot;&lt;/span&gt;);
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;if&lt;/span&gt; (bsp_sdcard_mount() == ESP_OK &amp;amp;&amp;amp; bsp_sdcard != &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;NULL&lt;/span&gt;) {
        sd_mounted = &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;true&lt;/span&gt;;
        &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;uint64_t&lt;/span&gt; total_mb = ((&lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;uint64_t&lt;/span&gt;)bsp_sdcard-&amp;gt;csd.capacity * bsp_sdcard-&amp;gt;csd.sector_size) / (&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1024&lt;/span&gt; * &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1024&lt;/span&gt;);
        &lt;span class=&quot;hljs-built_in&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;snprintf&lt;/span&gt;(sd_display_text, &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;sizeof&lt;/span&gt;(sd_display_text), &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;SD Card: Mounted (%s, %lluMB)&quot;&lt;/span&gt;, bsp_sdcard-&amp;gt;cid.name, total_mb);
        ESP_LOGI(TAG, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;%s&quot;&lt;/span&gt;, sd_display_text);
    } &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;else&lt;/span&gt; {
        sd_mounted = &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;false&lt;/span&gt;;
        &lt;span class=&quot;hljs-built_in&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 90, 89); clear: none; clip: auto; color: #ff5a59; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 90, 89) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 90, 89); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;snprintf&lt;/span&gt;(sd_display_text, &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;sizeof&lt;/span&gt;(sd_display_text), &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;SD Card: Not Installed&quot;&lt;/span&gt;);
        ESP_LOGI(TAG, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;SD Card not installed at boot.&quot;&lt;/span&gt;);
    }

    &lt;span class=&quot;hljs-comment&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(128, 128, 128); clear: none; clip: auto; color: grey; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(128, 128, 128) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(128, 128, 128); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;// 2. 音訊子系統初始化 (ES8311 + 功放 GPIO 53 致能)&lt;/span&gt;
    gpio_reset_pin(BSP_POWER_AMP_IO);
    gpio_set_direction(BSP_POWER_AMP_IO, GPIO_MODE_OUTPUT);
    gpio_set_level(BSP_POWER_AMP_IO, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1&lt;/span&gt;);

    speaker_handle = bsp_audio_codec_speaker_init();
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;if&lt;/span&gt; (speaker_handle) {
        &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;esp_codec_dev_sample_info_t&lt;/span&gt; fs = {
            .bits_per_sample = &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;16&lt;/span&gt;,
            .channel = &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1&lt;/span&gt;,
            .sample_rate = SAMPLE_RATE,
        };
        esp_codec_dev_open(speaker_handle, &amp;amp;fs);
        esp_codec_dev_set_out_mute(speaker_handle, &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;false&lt;/span&gt;);
        esp_codec_dev_set_out_vol(speaker_handle, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;85&lt;/span&gt;);
        ESP_LOGI(TAG, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;Audio Codec Speaker Initialized via BSP.&quot;&lt;/span&gt;);
    }

    xTaskCreatePinnedToCore(audio_task, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;audio_task&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;4096&lt;/span&gt;, &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;NULL&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;5&lt;/span&gt;, &amp;amp;audio_task_handle, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0&lt;/span&gt;);
    play_beep_async();

    &lt;span class=&quot;hljs-comment&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(128, 128, 128); clear: none; clip: auto; color: grey; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(128, 128, 128) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(128, 128, 128); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;// 3. 顯示與觸控子系統 (透過官方原廠 BSP 與 esp_lv_adapter 啟動)&lt;/span&gt;
    ESP_LOGI(TAG, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;Starting Display and Touch via BSP...&quot;&lt;/span&gt;);
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;lv_display_t&lt;/span&gt; *disp = bsp_display_start();
    assert(disp);

    bsp_display_backlight_on();

    &lt;span class=&quot;hljs-comment&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(128, 128, 128); clear: none; clip: auto; color: grey; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(128, 128, 128) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(128, 128, 128); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;// 使用阻塞式鎖確保 UI 繪製與適配器內部渲染任務同步&lt;/span&gt;
    ESP_LOGI(TAG, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;Acquiring LVGL Lock (blocking)...&quot;&lt;/span&gt;);
    ESP_ERROR_CHECK(esp_lv_adapter_lock(&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;-1&lt;/span&gt;));

    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;lv_obj_t&lt;/span&gt; *scr = lv_display_get_screen_active(disp);
    lv_obj_set_style_bg_color(scr, lv_color_hex(&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0x0F172A&lt;/span&gt;), LV_PART_MAIN);

    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;lv_obj_t&lt;/span&gt; *title = lv_label_create(scr);
    lv_label_set_text(title, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;Waveshare ESP32-P4 Official Driver&quot;&lt;/span&gt;);
    lv_obj_set_style_text_color(title, lv_color_hex(&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0x38BDF8&lt;/span&gt;), LV_PART_MAIN);
    lv_obj_align(title, LV_ALIGN_TOP_MID, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;70&lt;/span&gt;);

    sd_status_label = lv_label_create(scr);
    lv_label_set_text(sd_status_label, sd_display_text);
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;if&lt;/span&gt; (sd_mounted) {
        lv_obj_set_style_text_color(sd_status_label, lv_color_hex(&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0x10B981&lt;/span&gt;), LV_PART_MAIN);
    } &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;else&lt;/span&gt; {
        lv_obj_set_style_text_color(sd_status_label, lv_color_hex(&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0x94A3B8&lt;/span&gt;), LV_PART_MAIN);
    }
    lv_obj_align(sd_status_label, LV_ALIGN_TOP_MID, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;130&lt;/span&gt;);

    wifi_status_label = lv_label_create(scr);
    lv_label_set_text(wifi_status_label, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;Wi-Fi: Connecting (uap)...&quot;&lt;/span&gt;);
    lv_obj_set_style_text_color(wifi_status_label, lv_color_hex(&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0xFBBF24&lt;/span&gt;), LV_PART_MAIN);
    lv_obj_align(wifi_status_label, LV_ALIGN_TOP_MID, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;180&lt;/span&gt;);

    touch_status_label = lv_label_create(scr);
    lv_label_set_text(touch_status_label, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;Touch: Idle (Waiting for touch)&quot;&lt;/span&gt;);
    lv_obj_set_style_text_color(touch_status_label, lv_color_hex(&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0xA78BFA&lt;/span&gt;), LV_PART_MAIN);
    lv_obj_align(touch_status_label, LV_ALIGN_TOP_MID, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;230&lt;/span&gt;);

    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;lv_obj_t&lt;/span&gt; *btn = lv_button_create(scr);
    lv_obj_set_size(btn, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;550&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;250&lt;/span&gt;);
    lv_obj_align(btn, LV_ALIGN_CENTER, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;70&lt;/span&gt;);
    lv_obj_set_style_bg_color(btn, lv_color_hex(&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0x2563EB&lt;/span&gt;), LV_PART_MAIN);
    lv_obj_add_event_cb(btn, btn_click_event_cb, LV_EVENT_CLICKED, &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;NULL&lt;/span&gt;);

    btn_label = lv_label_create(btn);
    lv_label_set_text(btn_label, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;Touch Count: 0&quot;&lt;/span&gt;);
    lv_obj_set_style_text_color(btn_label, lv_color_hex(&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;0xFFFFFF&lt;/span&gt;), LV_PART_MAIN);
    lv_obj_center(btn_label);

    lv_obj_invalidate(scr);
    esp_lv_adapter_unlock();
    ESP_LOGI(TAG, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;UI initialized and LVGL Lock released.&quot;&lt;/span&gt;);

    &lt;span class=&quot;hljs-comment&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(128, 128, 128); clear: none; clip: auto; color: grey; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(128, 128, 128) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(128, 128, 128); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;// 4. 啟動 Wi-Fi STA 連線&lt;/span&gt;
    ESP_LOGI(TAG, &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;Starting Wi-Fi STA connection...&quot;&lt;/span&gt;);
    wifi_init_sta();

    &lt;span class=&quot;hljs-keyword&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(150, 157, 255); clear: none; clip: auto; color: #969dff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(150, 157, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(150, 157, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;while&lt;/span&gt; (&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1&lt;/span&gt;) {
        vTaskDelay(pdMS_TO_TICKS(&lt;span class=&quot;hljs-number&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1000&lt;/span&gt;));
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;!----&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/code-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;h3 class=&quot;&quot; data-path-to-node=&quot;17&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans&amp;quot;, sans-serif !important; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;五、編譯與燒錄指令&lt;/h3&gt;&lt;div style=&quot;--animation-duration: 814ms; animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;在專案目錄下執行以下指令進行建置與監控：&lt;/span&gt;&lt;/div&gt;&lt;response-element class=&quot;no-md md-has-block-component&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;code-block _nghost-ng-c2266508646=&quot;&quot; class=&quot;ng-tns-c2266508646-80 enable-luminous-code-block ng-star-inserted&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;code-block ng-tns-c2266508646-80 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation&quot; data-hveid=&quot;0&quot; data-ved=&quot;0CAAQhtANahgKEwjQ0qr1meOXAxUAAAAAHQAAAAAQoAE&quot; decode-data-ved=&quot;1&quot; jslog=&quot;223238;track:impression,attention;BardVeMetadataKey:W1sicl9hOTliMGRhMDViNDJkZjU2IiwiY19iOWY2Mjk3YTIzZjMyNGM5IixudWxsLCJyY182N2M0Y2ZhNTcyMWIwODM3IixudWxsLG51bGwsInpoIixudWxsLDEsbnVsbCxudWxsLDEsMF1d&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;formatted-code-block-internal-container ng-tns-c2266508646-80&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(20, 20, 20); border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 26px 0px 0px 32px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;animated-opacity ng-tns-c2266508646-80&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c2266508646-80 ng-star-inserted&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: -72px auto auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px 11px 0px 0px; page: auto; perspective: none; position: sticky; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;ng-tns-c2266508646-80&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;PowerShell&lt;/span&gt;&lt;div _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;buttons ng-tns-c2266508646-80 ng-star-inserted&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;gem-icon-button _ngcontent-ng-c2266508646=&quot;&quot; _nghost-ng-c3543789491=&quot;&quot; aria-describedby=&quot;cdk-describedby-message-ng-1-20&quot; arialabel=&quot;下載程式碼&quot; cdk-describedby-host=&quot;ng-1&quot; class=&quot;mat-mdc-tooltip-trigger download-button ng-tns-c2266508646-80 gem-button gem-button-badge-size-small gem-button-size-small gem-button-type-on-surface lm-enabled ng-star-inserted&quot; fonticonname=&quot;arrow_circle_down&quot; gemtooltip=&quot;下載程式碼&quot; size=&quot;small&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; theme=&quot;lm&quot; type=&quot;onSurface&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;button _ngcontent-ng-c3543789491=&quot;&quot; aria-label=&quot;下載程式碼&quot; class=&quot;mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed _mat-animation-noopable mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted&quot; jslog=&quot;305704;track:generic_click,impression&quot; mat-ripple-loader-centered=&quot;&quot; mat-ripple-loader-class-name=&quot;mat-mdc-button-ripple&quot; mat-ripple-loader-uninitialized=&quot;&quot; matbadgeposition=&quot;after&quot; maticonbutton=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border-color: rgb(0, 0, 0); border-style: none; border-width: 0px; clear: none; clip: auto; color: black; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 24px; font-stretch: normal; font-style: normal; font-variation-settings: normal; font-weight: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 6px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: none; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;mat-mdc-button-persistent-ripple mdc-icon-button__ripple&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;gem-icon _ngcontent-ng-c3543789491=&quot;&quot; _nghost-ng-c703485066=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;mat-icon _ngcontent-ng-c703485066=&quot;&quot; aria-hidden=&quot;true&quot; class=&quot;mat-icon notranslate lm-icon-l lumi-symbols mat-ligature-font mat-icon-no-color ng-star-inserted&quot; data-mat-icon-name=&quot;arrow_circle_down&quot; data-mat-icon-namespace=&quot;lumi-symbols&quot; data-mat-icon-type=&quot;font&quot; fonticon=&quot;arrow_circle_down&quot; role=&quot;img&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(255, 255, 255); filter: none; flex-direction: row; flex: 0 0 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/mat-icon&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon&gt;&lt;!----&gt;&lt;span class=&quot;mat-focus-indicator&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mat-mdc-button-touch-target&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: none; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 50% auto auto 50%; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon-button&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;gem-icon-button _ngcontent-ng-c2266508646=&quot;&quot; _nghost-ng-c3543789491=&quot;&quot; aria-describedby=&quot;cdk-describedby-message-ng-1-21&quot; arialabel=&quot;複製代碼&quot; cdk-describedby-host=&quot;ng-1&quot; class=&quot;mat-mdc-tooltip-trigger copy-button ng-tns-c2266508646-80 gem-button gem-button-badge-size-small gem-button-size-small gem-button-type-on-surface lm-enabled ng-star-inserted&quot; data-test-id=&quot;gem-copy-button&quot; fonticonname=&quot;copy&quot; gemtooltip=&quot;複製代碼&quot; size=&quot;small&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; theme=&quot;lm&quot; type=&quot;onSurface&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;button _ngcontent-ng-c3543789491=&quot;&quot; aria-label=&quot;複製代碼&quot; class=&quot;mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed _mat-animation-noopable mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted&quot; jslog=&quot;179062;track:generic_click,impression;BardVeMetadataKey:W1sicl9hOTliMGRhMDViNDJkZjU2IiwiY19iOWY2Mjk3YTIzZjMyNGM5IixudWxsLCJyY182N2M0Y2ZhNTcyMWIwODM3IixudWxsLG51bGwsInpoIixudWxsLDEsbnVsbCxudWxsLDEsMF1d;mutable:true&quot; mat-ripple-loader-centered=&quot;&quot; mat-ripple-loader-class-name=&quot;mat-mdc-button-ripple&quot; mat-ripple-loader-uninitialized=&quot;&quot; matbadgeposition=&quot;after&quot; maticonbutton=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border-color: rgb(0, 0, 0); border-style: none; border-width: 0px; clear: none; clip: auto; color: black; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 24px; font-stretch: normal; font-style: normal; font-variation-settings: normal; font-weight: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 6px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: none; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;mat-mdc-button-persistent-ripple mdc-icon-button__ripple&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;gem-icon _ngcontent-ng-c3543789491=&quot;&quot; _nghost-ng-c703485066=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;mat-icon _ngcontent-ng-c703485066=&quot;&quot; aria-hidden=&quot;true&quot; class=&quot;mat-icon notranslate lm-icon-l lumi-symbols mat-ligature-font mat-icon-no-color ng-star-inserted&quot; data-mat-icon-name=&quot;copy&quot; data-mat-icon-namespace=&quot;lumi-symbols&quot; data-mat-icon-type=&quot;font&quot; fonticon=&quot;copy&quot; role=&quot;img&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(255, 255, 255); filter: none; flex-direction: row; flex: 0 0 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/mat-icon&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon&gt;&lt;!----&gt;&lt;span class=&quot;mat-focus-indicator&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mat-mdc-button-touch-target&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: none; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 50% auto auto 50%; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon-button&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/div&gt;&lt;!----&gt;&lt;!----&gt;&lt;/div&gt;&lt;!----&gt;&lt;pre _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;ng-tns-c2266508646-80&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code _ngcontent-ng-c2266508646=&quot;&quot; class=&quot;code-container formatted ng-tns-c2266508646-80&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif !important; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 16px 0px 32px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;idf.py &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15 !important; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; marker: none; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 2.85714px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;-p&lt;/span&gt; COM12 flash monitor
&lt;/code&gt;&lt;/pre&gt;&lt;!----&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/code-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/7466284361056921864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/7466284361056921864'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/10/waveshare-esp32-p4-wifi6-touch-lcd-5.html' title=' Waveshare ESP32-P4-WIFI6-Touch-LCD-5'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-1124228396685731005</id><published>2026-10-28T19:27:31.636+08:00</published><updated>2026-10-28T19:27:31.637+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="3c類"/><title type='text'>esp32-s3-lcd2 加ov5640</title><content type='html'>&lt;p&gt;&amp;nbsp;esphome:&lt;/p&gt;&lt;p&gt;&amp;nbsp; name: vsbr-esp32-s3-lcd2&lt;/p&gt;&lt;p&gt;&amp;nbsp; on_boot:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; priority: 200&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; then:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - output.turn_on: lcd_backlight&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;esp32:&lt;/p&gt;&lt;p&gt;&amp;nbsp; board: esp32-s3-devkitc-1&lt;/p&gt;&lt;p&gt;&amp;nbsp; framework:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; type: esp-idf&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; sdkconfig_options:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240: &quot;y&quot;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;psram:&lt;/p&gt;&lt;p&gt;&amp;nbsp; mode: octal&lt;/p&gt;&lt;p&gt;&amp;nbsp; speed: 80MHz&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;wifi:&lt;/p&gt;&lt;p&gt;&amp;nbsp; ssid: &quot;xxxxxx&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; password: &quot;YOUR_WIFI_PASSWORD&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; power_save_mode: none&lt;/p&gt;&lt;p&gt;&amp;nbsp; fast_connect: true&lt;/p&gt;&lt;p&gt;&amp;nbsp; output_power: 20dBm&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;logger:&lt;/p&gt;&lt;p&gt;&amp;nbsp; level: DEBUG&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;api:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;ota:&lt;/p&gt;&lt;p&gt;&amp;nbsp; - platform: esphome&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;# 1. 雙獨立硬體 I2C&lt;/p&gt;&lt;p&gt;i2c:&lt;/p&gt;&lt;p&gt;&amp;nbsp; # 觸控專用 (GPIO48/47)&lt;/p&gt;&lt;p&gt;&amp;nbsp; - id: bus_touch&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; sda: GPIO48&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; scl: GPIO47&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; scan: true&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; frequency: 400kHz&lt;/p&gt;&lt;p&gt;&amp;nbsp; # 相機 SCCB (GPIO21/16)&lt;/p&gt;&lt;p&gt;&amp;nbsp; - id: bus_cam&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; sda: GPIO21&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; scl: GPIO16&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; scan: false&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; frequency: 100kHz&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;# 2. 原廠硬體 SPI&lt;/p&gt;&lt;p&gt;spi:&lt;/p&gt;&lt;p&gt;&amp;nbsp; - id: spi_bus&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; clk_pin: GPIO39&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; mosi_pin: GPIO38&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;# 3. 原廠螢幕實體背光控制&lt;/p&gt;&lt;p&gt;output:&lt;/p&gt;&lt;p&gt;&amp;nbsp; - platform: gpio&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; pin: GPIO1&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; id: lcd_backlight&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;# 4. 微雪原廠 DVP 相機&lt;/p&gt;&lt;p&gt;esp32_camera:&lt;/p&gt;&lt;p&gt;&amp;nbsp; id: my_cam&lt;/p&gt;&lt;p&gt;&amp;nbsp; name: &quot;LCD2 Camera&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; data_pins:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - GPIO12&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - GPIO13&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - GPIO15&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - GPIO11&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - GPIO14&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - GPIO10&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - GPIO7&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; - GPIO2&lt;/p&gt;&lt;p&gt;&amp;nbsp; vsync_pin: GPIO6&lt;/p&gt;&lt;p&gt;&amp;nbsp; href_pin: GPIO4&lt;/p&gt;&lt;p&gt;&amp;nbsp; pixel_clock_pin: GPIO9&lt;/p&gt;&lt;p&gt;&amp;nbsp; external_clock:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; pin: GPIO8&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; frequency: 20MHz&lt;/p&gt;&lt;p&gt;&amp;nbsp; i2c_id: bus_cam&lt;/p&gt;&lt;p&gt;&amp;nbsp; resolution: 320X240&lt;/p&gt;&lt;p&gt;&amp;nbsp; pixel_format: RGB565&lt;/p&gt;&lt;p&gt;&amp;nbsp; frame_buffer_count: 2&lt;/p&gt;&lt;p&gt;&amp;nbsp; frame_buffer_location: PSRAM&lt;/p&gt;&lt;p&gt;&amp;nbsp; max_framerate: 10fps&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;# 5. UI 與觸控狀態變數&lt;/p&gt;&lt;p&gt;globals:&lt;/p&gt;&lt;p&gt;&amp;nbsp; - id: current_page&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; type: int&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; initial_value: &quot;0&quot;&amp;nbsp; # 0: SYS, 1: CAM&lt;/p&gt;&lt;p&gt;&amp;nbsp; - id: screen_on&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; type: bool&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; initial_value: &quot;true&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; - id: touch_x&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; type: int&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; initial_value: &quot;120&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; - id: touch_y&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; type: int&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; initial_value: &quot;160&quot;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;# 6. 字型&lt;/p&gt;&lt;p&gt;font:&lt;/p&gt;&lt;p&gt;&amp;nbsp; - file: &quot;gfonts://Roboto&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; id: font_small&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; size: 14&lt;/p&gt;&lt;p&gt;&amp;nbsp; - file: &quot;gfonts://Roboto&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; id: font_title&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; size: 16&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;# 7. 系統感測器&lt;/p&gt;&lt;p&gt;text_sensor:&lt;/p&gt;&lt;p&gt;&amp;nbsp; - platform: wifi_info&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; ssid:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; name: &quot;Connected SSID&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; id: wifi_status_sensor&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; ip_address:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; name: &quot;IP Address&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; id: wifi_ip_sensor&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;sensor:&lt;/p&gt;&lt;p&gt;&amp;nbsp; - platform: wifi_signal&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; name: &quot;WiFi Signal&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; id: wifi_rssi_sensor&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; update_interval: 10s&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;# 8. ST7789T3 顯示驅動 (依官方規格校正反轉與色彩排列)&lt;/p&gt;&lt;p&gt;display:&lt;/p&gt;&lt;p&gt;&amp;nbsp; - platform: mipi_spi&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; id: my_display&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; spi_id: spi_bus&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; model: ST7789V&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; dimensions:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; width: 240&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; height: 320&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; cs_pin: GPIO45&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; dc_pin: GPIO42&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; data_rate: 20MHz&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; invert_colors: true&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; color_order: bgr&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; update_interval: 100ms&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; lambda: |-&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (!id(screen_on)) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; int page = id(current_page);&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // --- 頂部導航列 ---&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; it.filled_rectangle(0, 0, 240, 36, Color(15, 23, 42));&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // Tab 1: SYS&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (page == 0) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it.filled_rectangle(4, 4, 66, 28, Color(37, 99, 235));&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } else {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it.filled_rectangle(4, 4, 66, 28, Color(30, 41, 59));&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; it.print(37, 18, id(font_title), Color(255, 255, 255), TextAlign::CENTER, &quot;SYS&quot;);&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // Tab 2: CAM&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (page == 1) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it.filled_rectangle(74, 4, 66, 28, Color(37, 99, 235));&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } else {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it.filled_rectangle(74, 4, 66, 28, Color(30, 41, 59));&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; it.print(107, 18, id(font_title), Color(255, 255, 255), TextAlign::CENTER, &quot;CAM&quot;);&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // 關屏按鈕: OFF&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; it.filled_rectangle(170, 4, 66, 28, Color(220, 38, 38));&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; it.print(203, 18, id(font_title), Color(255, 255, 255), TextAlign::CENTER, &quot;OFF&quot;);&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // --- 內容區 ---&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (page == 0) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // [PAGE 0: 系統狀態與觸控板]&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it.filled_rectangle(0, 36, 240, 284, Color(15, 23, 42));&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it.printf(15, 46, id(font_small), Color(148, 163, 184), &quot;SSID: %s&quot;, id(wifi_status_sensor).state.c_str());&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it.printf(15, 66, id(font_small), Color(148, 163, 184), &quot;IP:&amp;nbsp; &amp;nbsp;%s&quot;, id(wifi_ip_sensor).state.c_str());&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it.printf(15, 86, id(font_small), Color(148, 163, 184), &quot;RSSI: %.0f dBm&quot;, id(wifi_rssi_sensor).state);&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it.filled_rectangle(10, 110, 220, 195, Color(2, 6, 23));&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it.rectangle(10, 110, 220, 195, Color(51, 65, 85));&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int tx = id(touch_x);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int ty = id(touch_y);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (tx &amp;gt;= 10 &amp;amp;&amp;amp; tx &amp;lt;= 230 &amp;amp;&amp;amp; ty &amp;gt;= 110 &amp;amp;&amp;amp; ty &amp;lt;= 305) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it.line(10, ty, 230, ty, Color(71, 85, 105));&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it.line(tx, 110, tx, 305, Color(71, 85, 105));&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it.filled_circle(tx, ty, 5, Color(56, 189, 248));&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it.printf(120, 288, id(font_small), Color(226, 232, 240), TextAlign::CENTER, &quot;Touch: X=%d, Y=%d&quot;, tx, ty);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } else {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // [PAGE 1: 本機即時影像 - 手動正確解構 RGB565 原色]&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; camera_fb_t *cam_fb = esp_camera_fb_get();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (cam_fb != nullptr) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (cam_fb-&amp;gt;format == PIXFORMAT_RGB565) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const uint8_t *raw = cam_fb-&amp;gt;buf;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int y = 0; y &amp;lt; 240 &amp;amp;&amp;amp; y &amp;lt; cam_fb-&amp;gt;height; y++) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int row_offset = y * cam_fb-&amp;gt;width * 2;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int x = 0; x &amp;lt; 240 &amp;amp;&amp;amp; x &amp;lt; cam_fb-&amp;gt;width; x++) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int idx = row_offset + (x * 2);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // OV5640 標準 RGB565 雙位元組&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t b1 = raw[idx];&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t b2 = raw[idx + 1];&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 提取 R(5-bit), G(6-bit), B(5-bit) 並擴展至 8-bit&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t r = (b1 &amp;amp; 0xF8);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t g = ((b1 &amp;amp; 0x07) &amp;lt;&amp;lt; 5) | ((b2 &amp;amp; 0xE0) &amp;gt;&amp;gt; 3);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint8_t b = (b2 &amp;amp; 0x1F) &amp;lt;&amp;lt; 3;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 呼叫明確的 Color(r, g, b) 三通道建構子&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; it.draw_pixel_at(x, y + 40, Color(r, g, b));&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; esp_camera_fb_return(cam_fb);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;# 9. CST816D 觸控邏輯 (綁定 bus_touch)&lt;/p&gt;&lt;p&gt;touchscreen:&lt;/p&gt;&lt;p&gt;&amp;nbsp; - platform: cst816&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; id: my_touch&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; display: my_display&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; i2c_id: bus_touch&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; interrupt_pin: GPIO46&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; on_touch:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - lambda: |-&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!id(screen_on)) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; id(screen_on) = true;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; id(lcd_backlight).turn_on();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; id(touch_x) = touch.x;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; id(touch_y) = touch.y;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (touch.y &amp;lt;= 36) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (touch.x &amp;gt;= 4 &amp;amp;&amp;amp; touch.x &amp;lt;= 70) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; id(current_page) = 0;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else if (touch.x &amp;gt;= 74 &amp;amp;&amp;amp; touch.x &amp;lt;= 140) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; id(current_page) = 1;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else if (touch.x &amp;gt;= 170 &amp;amp;&amp;amp; touch.x &amp;lt;= 236) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; id(screen_on) = false;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; id(lcd_backlight).turn_off();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/1124228396685731005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/1124228396685731005'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/10/esp32-s3-lcd2-ov5640.html' title='esp32-s3-lcd2 加ov5640'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-571068059800329341</id><published>2026-10-11T16:03:19.966+08:00</published><updated>2026-10-11T16:04:00.698+08:00</updated><title type='text'>Home Assistant 音訊雙軌與原音廣播及 AI 對話 </title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h1 style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Home Assistant 音訊雙軌與原音廣播及 AI 對話完整部署手冊&lt;/span&gt;&lt;/h1&gt;&lt;p style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;（適用於全新安裝 HA 系統之全端工程部署手冊）&lt;/strong&gt;&lt;/p&gt;&lt;h2 style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;1. 系統架構理念：什麼是「音訊雙軌」？&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;在傳統智慧家庭系統中，語音廣播（Intercom）通常過度依賴文字轉語音（TTS），導致真人發話失去溫度；而語音助理互動則常受限於特定硬體生態（例如只能對著實體 Nest 音箱說話，無法跨廠牌連動）。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;本架構建立於 Home Assistant（HA）之上，採用&lt;/span&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;音訊雙軌並行&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;設計：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;                ┌─── [軌道 1：真人原音廣播軌] ───► 麥克風採樣 ──► 4KB 分段寫入 ──► Port 80 原音直推 ──► 多房間喇叭同步播放
前端長按發話 ───┤
                └─── [軌道 2：AI 雙向對話軌]   ───► Web Speech ──► Google Assistant SDK ──► 單一請求解析 ──► 跨生態設備同步回應 / 控制設備
&lt;/span&gt;&lt;br class=&quot;ProseMirror-trailingBreak&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot; /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ol style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;軌道 1：真人原音廣播軌（Human Voice Intercom）&lt;/strong&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;長按瀏覽器/手機端按鍵直接收音。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;以用戶硬體之原生取樣率（動態適配 44.1kHz / 48kHz）生成標準無損 PCM WAV。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;透過 4KB 分段通道寫入 HA 本地快取，直接以反向代理推送到多房間設備（如 Squeezebox/XZ1、Google Cast、AirPlay）。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;軌道 2：AI 雙向對話軌（AI Assistant Conversation &amp;amp; Control）&lt;/strong&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;切換至 AI 模式長按發話。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;利用瀏覽器 Web Speech API 即時轉為純文字。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;透過後端 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;google_assistant_sdk.send_text_command&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 送至 Google 雲端處理。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;具備智慧家庭直接控制能力&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;（如「打開客廳電燈」、「把冷氣調到 26 度」）。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;採用&lt;/span&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&amp;nbsp;官方多 ID 動態陣列一次性派發&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;，由 HA 底層同步將 Google 助理之回答推播至勾選之複數設備，徹底根除多設備 Session 錯位與 N-1 舊回應殘留問題。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;2. 核心技術痛點與避坑設計&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;全新部署 HA 時，自行開發語音卡片通常會踩中以下底層地雷，本架構已在程式碼層級全數解決：&lt;/span&gt;&lt;/p&gt;&lt;ol style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Linux 命令列參數長度限制（E2BIG 錯誤）&lt;/strong&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;問題&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：錄音 5 秒的音訊轉換成 Base64 字串常達 300KB 以上，直接作為參數傳遞給 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;shell_command&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 會觸發 Linux 核心的 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Argument list too long&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 報錯而靜默失敗。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;解法&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：前端強制切分成每包 4,000 字元（4KB Chunk），透過 Python 腳本串流追加（Append）寫入暫存檔，最後在 HA 端以 Python 原生解碼還原。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;瀏覽器 Web Audio 垃圾回收（Garbage Collection）丟失&lt;/strong&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;問題&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：使用者按下按鈕時，AudioContext 準備期（450ms）尚未有大量音訊樣本流入，&lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;ScriptProcessorNode&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 容易被瀏覽器引擎判定為閒置而提前進行 GC 回收，造成斷音或無聲。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;解法&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：錄音節點直接掛載至全域變數 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;window._activeIntercomRecorderNode&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;，直到放開按鍵後才顯式註銷。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;多設備廣播時序錯亂（N-1 vs N 回應覆蓋）&lt;/strong&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;問題&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：以往後端使用 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;repeat&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 迴圈逐一對每台設備呼叫 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;google_assistant_sdk.send_text_command&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;，Google 雲端會視為連續多次獨立請求；反應慢的設備（如 Google Audio）會被塞入前一次（N-1）快取，反應快的設備（如 Sony XZ1 LMS）則播當次（N），造成嚴重的時序分裂。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;解法&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：廢除 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;repeat&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;，改用官方原生支援的多 ID 動態陣列，向 Google 雲端發起&lt;/span&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;唯獨一次&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;請求，由 HA 核心底層跨協議並行推送音訊串流。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;3. 全新安裝環境需求與事前準備&lt;/span&gt;&lt;/h2&gt;&lt;h3 style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;硬體與網路環境&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;已安裝 Home Assistant OS 或 Home Assistant Supervised / Core 之主機。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;區域網路內可正常存取 HA（範例 HA 內部 IP 為 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;192.168.1.187&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;，若你的 IP 不同，僅需更改 YAML 內的廣播 URL）。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;至少一台可用的 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;media_player&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 實體（如 Google Cast 音箱、Squeezebox / LMS 播放器、Apple TV / HomePod 等）。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;必要整合組件（Integrations）&lt;/span&gt;&lt;/h3&gt;&lt;ol style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Google Assistant SDK&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;用於執行 AI 語音雙向對話及語音控制設備。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;請在 HA &lt;/span&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;「設定」-&amp;gt;「裝置與服務」-&amp;gt;「新增整合」&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 中搜尋並完成 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Google Assistant SDK&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 的 OAuth 授權綁定。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;啟用 packages 機制&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;檢查 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;/config/configuration.yaml&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;，確保包含以下設定：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;homeassistant:
  packages: !include_dir_named packages
&lt;/span&gt;&lt;br class=&quot;ProseMirror-trailingBreak&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot; /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;4. 步驟一：後端核心配置 (&lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;/config/packages/intercom.yaml&lt;/code&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;)&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;在 HA 設定檔目錄下建立資料夾 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;/config/packages&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;（若無），並新增檔案 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;intercom.yaml&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;。&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;# ==============================================================================
# Home Assistant 獨立音訊對講與 AI 語音 Package (packages/intercom.yaml)
# 遵循【HA 官方原生多設備列表與 Google Assistant SDK 規範 - 方案 B 滿意版】
# 修復重點：
# 1. 4KB 安全分段通道，徹底根絕 Linux Shell Argument list too long 靜默丟失
# 2. 廣播模式支援 Port 80 動態多端點推播
# 3. AI 模式廢除 repeat 串列迴圈，採用官方原生多 media_player 陣列一次性派發，根除 N-1 Session 衝突
# ==============================================================================

shell_command:
  clear_intercom_raw: &quot;mkdir -p /config/www/intercom &amp;amp;&amp;amp; rm -f /config/www/intercom/voice.b64 /config/www/intercom/voice.wav&quot;
  save_intercom_chunk: &quot;python3 -c &#39;import sys; f=open(\&quot;/config/www/intercom/voice.b64\&quot;, \&quot;a\&quot;); f.write(\&quot;{{ chunk }}\&quot;); f.close()&#39;&quot;
  decode_intercom_raw: &quot;python3 -c &#39;import base64; data=open(\&quot;/config/www/intercom/voice.b64\&quot;, \&quot;rb\&quot;).read(); open(\&quot;/config/www/intercom/voice.wav\&quot;, \&quot;wb\&quot;).write(base64.b64decode(data))&#39;&quot;

input_boolean:
  ai_conversation_mode:
    name: &quot;AI 語音對話模式&quot;
    icon: mdi:robot
  ai_voice_recording:
    name: &quot;語音廣播發話中&quot;
    icon: mdi:microphone-message

script:
  # ----------------------------------------------------------------------------
  # 廣播模式：真人錄音推播 (標準 Port 80 反向代理，支援多設備一次性發送)
  # ----------------------------------------------------------------------------
  intercom_play_voice:
    alias: &quot;真人錄音對講廣播處理&quot;
    mode: restart
    fields:
      target_player:
        description: &quot;目標廣播播放器清單 (字串或陣列)&quot;
    sequence:
      - action: input_boolean.turn_on
        target:
          entity_id: input_boolean.ai_voice_recording
        continue_on_error: true

      - action: media_player.play_media
        target:
          entity_id: &amp;gt;-
            {{ [target_player] if target_player is string else target_player }}
        data:
          # 內部靜態代理網址，加上時間戳記強制刷新瀏覽器/音箱快取
          media_content_id: &quot;http://192.168.1.187/local/intercom/voice.wav?t={{ as_timestamp(now()) }}&quot;
          media_content_type: &quot;music&quot;

      - delay:
          seconds: 3

      - action: input_boolean.turn_off
        target:
          entity_id: input_boolean.ai_voice_recording
        continue_on_error: true

  # ----------------------------------------------------------------------------
  # AI 模式：方案 B 官方標準多 ID 原生陣列派發 (全動態、單次請求、根除 N-1 衝突)
  # ----------------------------------------------------------------------------
  intercom_ai_talk:
    alias: &quot;AI 對話語音處理 (原生 Google Assistant SDK)&quot;
    mode: restart
    fields:
      target_player:
        description: &quot;目標播放實體清單或單一實體&quot;
      prompt_text:
        description: &quot;真實語音辨識文字&quot;
    sequence:
      - action: input_boolean.turn_on
        target:
          entity_id: input_boolean.ai_voice_recording
        continue_on_error: true

      # 方案 B 核心：動態陣列直送 SDK，向 Google 雲端僅索取 1 次回應並分派各端點
      - action: google_assistant_sdk.send_text_command
        data:
          command: &quot;{{ prompt_text }}&quot;
          media_player: &amp;gt;-
            {{ [target_player] if target_player is string else target_player }}

      - delay:
          seconds: 5

      - action: input_boolean.turn_off
        target:
          entity_id: input_boolean.ai_voice_recording
        continue_on_error: true

  # ----------------------------------------------------------------------------
  # 快捷相容別名：Gemini 直連 Alias
  # ----------------------------------------------------------------------------
  gemini:
    alias: &quot;AI 對話發話處理 (Gemini 直連 Alias)&quot;
    mode: restart
    fields:
      target_player:
        description: &quot;目標播放實體清單或單一實體&quot;
      prompt_text:
        description: &quot;語音發話文字&quot;
    sequence:
      - action: script.intercom_ai_talk
        data:
          target_player: &quot;{{ target_player }}&quot;
          prompt_text: &quot;{{ prompt_text }}&quot;
&lt;/span&gt;&lt;br class=&quot;ProseMirror-trailingBreak&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot; /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;注意&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：請將腳本中的 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;192.168.1.187&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 替換為你的 Home Assistant 主機區域網路 IP 位址。&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;5. 步驟二：前端自訂卡片全碼 (&lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;/config/www/intercom/intercom-card.js&lt;/code&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;)&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;在 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;/config/www&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 下建立 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;intercom&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 資料夾，並新增 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;intercom-card.js&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 檔案：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;/**
 * Home Assistant - Universal Intercom &amp;amp; AI Broadcast Card (custom:intercom-card)
 * 遵循【HA 音訊排查復原點 4：Tiny Room 原生 Sections 整合、全動態端點與零 TTS 封存 - 方案 B 滿意版】
 */

class IntercomCard extends HTMLElement {
  constructor() {
    super();
    this._isAi = false;
    this.audioCtx = null;
    this.micStream = null;
    this.processor = null;
    this.pcmData = [];
    this.isRecording = false;
    this.localHolding = false;
    this.prepTimer = null;
    this.prepCount = 0;
    this.savedCheckedEntities = new Set();
    this.renderedSignature = &#39;&#39;;
    this.recognizedSpeechText = &#39;&#39;;
    this.recognition = null;
  }

  static getStubConfig() {
    return {};
  }

  setConfig(config) {
    if (Array.isArray(config)) {
      config = config[0] || {};
    }
    this._config = config || {};
  }

  getLayoutOptions() {
    return {
      grid_columns: 4,
      grid_min_columns: 2,
      grid_rows: 2
    };
  }

  set hass(hass) {
    this._hass = hass;
    if (!this.content) {
      this.initCard();
    }
    this.updateCardState();
    this.renderDynamicPlayers();
  }

  initCard() {
    this.innerHTML = `
      &amp;lt;ha-card style=&quot;padding: 10px 14px; background: #1c222b; border: 1px solid #283242; border-radius: 12px; color: #fff; box-sizing: border-box; display: flex; flex-direction: column;&quot;&amp;gt;
        &amp;lt;!-- 動態在線播放設備列表 (預設全部不勾選) --&amp;gt;
        &amp;lt;div id=&quot;player-container&quot; style=&quot;display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px;&quot;&amp;gt;&amp;lt;/div&amp;gt;

        &amp;lt;!-- 控制列：左側 [廣播/AI開關] + 右側 [長按語音對講按鍵] --&amp;gt;
        &amp;lt;div style=&quot;display: flex; align-items: center; gap: 10px;&quot;&amp;gt;
          &amp;lt;!-- 雙模切換膠囊 --&amp;gt;
          &amp;lt;div id=&quot;switch-box&quot; style=&quot;display: inline-flex; align-items: center; gap: 6px; background: #181d24; border: 1px solid #2e384d; padding: 6px 12px; border-radius: 8px; flex-shrink: 0; cursor: pointer; user-select: none;&quot;&amp;gt;
            &amp;lt;span id=&quot;label-broadcast&quot; style=&quot;font-size: 14px; font-weight: bold; color: #03a9f4; transition: color 0.2s;&quot;&amp;gt;廣播&amp;lt;/span&amp;gt;
            &amp;lt;ha-switch id=&quot;ai-toggle&quot;&amp;gt;&amp;lt;/ha-switch&amp;gt;
            &amp;lt;span id=&quot;label-ai&quot; style=&quot;font-size: 14px; font-weight: bold; color: #64748b; transition: color 0.2s;&quot;&amp;gt;AI&amp;lt;/span&amp;gt;
          &amp;lt;/div&amp;gt;

          &amp;lt;!-- 主發話按鈕 (純色藍 #3b82f6) --&amp;gt;
          &amp;lt;button id=&quot;main-action-btn&quot; style=&quot;flex: 1 1 140px; min-width: 140px; white-space: nowrap; height: 46px; background: #3b82f6; border: none; border-radius: 8px; color: #fff; font-weight: bold; font-size: 16px; cursor: pointer; user-select: none; -webkit-user-select: none; touch-action: none; display: flex; align-items: center; justify-content: center; gap: 8px; position: relative; overflow: hidden; box-sizing: border-box; transition: all 0.25s ease;&quot;&amp;gt;
            &amp;lt;ha-icon id=&quot;btn-icon&quot; icon=&quot;mdi:microphone&quot; style=&quot;color: #ffffff; --mdc-icon-size: 22px;&quot;&amp;gt;&amp;lt;/ha-icon&amp;gt;
            &amp;lt;span id=&quot;btn-label&quot; style=&quot;letter-spacing: 0.5px;&quot;&amp;gt;長按語音對講&amp;lt;/span&amp;gt;
          &amp;lt;/button&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/ha-card&amp;gt;
    `;

    this.content = true;
    this.mainBtn = this.querySelector(&#39;#main-action-btn&#39;);
    this.btnIcon = this.querySelector(&#39;#btn-icon&#39;);
    this.btnLabel = this.querySelector(&#39;#btn-label&#39;);
    this.aiToggle = this.querySelector(&#39;#ai-toggle&#39;);
    this.labelBroadcast = this.querySelector(&#39;#label-broadcast&#39;);
    this.labelAi = this.querySelector(&#39;#label-ai&#39;);
    this.playerContainer = this.querySelector(&#39;#player-container&#39;);

    // 雙模切換點選聯動
    const switchBox = this.querySelector(&#39;#switch-box&#39;);
    switchBox.addEventListener(&#39;click&#39;, (e) =&amp;gt; {
      if (e.target !== this.aiToggle) {
        this.aiToggle.checked = !this.aiToggle.checked;
        this.aiToggle.dispatchEvent(new Event(&#39;change&#39;));
      }
    });

    this.aiToggle.addEventListener(&#39;change&#39;, (e) =&amp;gt; {
      this._isAi = e.target.checked;
      this.updateCardState();
      if (this._hass &amp;amp;&amp;amp; this._hass.states &amp;amp;&amp;amp; this._hass.states[&#39;input_boolean.ai_conversation_mode&#39;]) {
        this._hass.callService(&#39;input_boolean&#39;, this._isAi ? &#39;turn_on&#39; : &#39;turn_off&#39;, {
          entity_id: &#39;input_boolean.ai_conversation_mode&#39;
        });
      }
    });

    // 450ms 判定閾值 (5 步每步 90ms 橘色進度條)
    const prepChars = [&#39;系&#39;, &#39;系統&#39;, &#39;系統準&#39;, &#39;系統準備&#39;, &#39;系統準備中&#39;];

    const onStart = async (e) =&amp;gt; {
      if (e.cancelable) e.preventDefault();
      const targets = this.getSelectedPlayers();
      if (targets.length === 0) {
        this.btnLabel.innerText = &#39;⚠️ 請先勾選設備！&#39;;
        this.mainBtn.style.background = &#39;#e65100&#39;;
        setTimeout(() =&amp;gt; this.updateCardState(), 1200);
        return;
      }

      this.localHolding = true;
      this.isRecording = false;
      this.prepCount = 0;
      this.recognizedSpeechText = &#39;&#39;;

      this.btnLabel.innerText = prepChars[0];
      this.mainBtn.style.background = &#39;linear-gradient(90deg, #ff9800 20%, #1e293b 20%)&#39;;

      // 只有廣播模式才預啟動硬體麥克風
      if (!this._isAi) {
        await this.initMicHardware();
      }

      this.prepTimer = setInterval(() =&amp;gt; {
        this.prepCount++;
        if (this.prepCount &amp;lt; 5) {
          this.btnLabel.innerText = prepChars[this.prepCount];
          const pct = (this.prepCount + 1) * 20;
          this.mainBtn.style.background = `linear-gradient(90deg, #ff9800 ${pct}%, #1e293b ${pct}%)`;
        } else if (this.prepCount === 5) {
          clearInterval(this.prepTimer);
          this.prepTimer = null;
          this.isRecording = true;
          this.pcmData = []; // 清空預熱雜訊

          this.mainBtn.style.background = this._isAi ? &#39;#15803d&#39; : &#39;#dc2626&#39;;
          this.btnIcon.setAttribute(&#39;icon&#39;, &#39;mdi:record-rec&#39;);
          this.btnLabel.innerText = &#39;錄音中&#39;;

          // AI 模式：每次長按全新啟動獨立 SpeechRecognition 實例
          if (this._isAi) {
            this.startSpeechRecognition();
          }
        }
      }, 90);
    };

    const onEnd = async (e) =&amp;gt; {
      if (e.cancelable) e.preventDefault();
      if (!this.localHolding) return;
      this.localHolding = false;

      // 未滿 450ms 放開：立即取消
      if (this.prepTimer) {
        clearInterval(this.prepTimer);
        this.prepTimer = null;
        if (!this._isAi) this.closeMicHardware();
        this.stopSpeechRecognition();
        this.updateCardState();
        return;
      }

      // 滿 450ms：放開按鈕微緩衝 300ms 讓辨識引擎結算最後文字後立刻送出
      if (this.isRecording) {
        this.btnLabel.innerText = &#39;發送中...&#39;;
        await new Promise(r =&amp;gt; setTimeout(r, 300));
        this.isRecording = false;
        await this.finishRecordingAndSend();
      }
    };

    this.mainBtn.addEventListener(&#39;pointerdown&#39;, onStart);
    this.mainBtn.addEventListener(&#39;pointerup&#39;, onEnd);
    this.mainBtn.addEventListener(&#39;pointercancel&#39;, onEnd);
  }

  // 每次全新實例化 Web Speech API
  startSpeechRecognition() {
    const SpeechRec = window.SpeechRecognition || window.webkitSpeechRecognition;
    if (!SpeechRec) {
      console.warn(&#39;[Intercom] 瀏覽器環境不支援 Web Speech API&#39;);
      return;
    }
    try {
      this.stopSpeechRecognition();
      this.recognition = new SpeechRec();
      this.recognition.lang = &#39;zh-TW&#39;;
      this.recognition.continuous = true;
      this.recognition.interimResults = true;
      this.recognition.maxAlternatives = 1;

      this.recognition.onresult = (e) =&amp;gt; {
        let txt = &#39;&#39;;
        for (let i = e.resultIndex; i &amp;lt; e.results.length; ++i) {
          txt += e.results[i][0].transcript;
        }
        if (txt.trim()) {
          this.recognizedSpeechText = txt.trim();
          if (this.btnLabel) {
            this.btnLabel.innerText = this.recognizedSpeechText;
          }
        }
      };

      this.recognition.onerror = (e) =&amp;gt; {
        console.warn(&#39;[Intercom] 語音辨識事件:&#39;, e.error);
      };

      this.recognition.start();
    } catch (err) {
      console.warn(&#39;[Intercom] 啟動語音辨識異常:&#39;, err);
    }
  }

  stopSpeechRecognition() {
    if (this.recognition) {
      try { this.recognition.stop(); } catch (e) {}
      this.recognition = null;
    }
  }

  // 廣播模式：硬體原生音訊採樣
  async initMicHardware() {
    try {
      this.micStream = await navigator.mediaDevices.getUserMedia({
        audio: {
          channelCount: 1,
          echoCancellation: true,
          noiseSuppression: true,
          autoGainControl: true
        },
        video: false
      });

      const AudioCtx = window.AudioContext || window.webkitAudioContext;
      this.audioCtx = new AudioCtx();
      if (this.audioCtx.state === &#39;suspended&#39;) {
        await this.audioCtx.resume();
      }

      const source = this.audioCtx.createMediaStreamSource(this.micStream);
      this.pcmData = [];
      this.processor = this.audioCtx.createScriptProcessor(4096, 1, 1);

      // 核心防護：綁定全域避免在 450ms 準備期被 GC 回收
      window._activeIntercomRecorderNode = this.processor;

      this.processor.onaudioprocess = (e) =&amp;gt; {
        if (!this.isRecording) return;
        const channel = e.inputBuffer.getChannelData(0);
        this.pcmData.push(new Float32Array(channel));
      };

      source.connect(this.processor);
      this.processor.connect(this.audioCtx.destination);
    } catch(err) {
      console.error(&#39;[Intercom] 麥克風啟動異常:&#39;, err);
    }
  }

  closeMicHardware() {
    window._activeIntercomRecorderNode = null;
    if (this.processor) { try { this.processor.disconnect(); } catch(e) {} this.processor = null; }
    if (this.micStream) { try { this.micStream.getTracks().forEach(t =&amp;gt; t.stop()); } catch(e) {} this.micStream = null; }
    if (this.audioCtx) { try { this.audioCtx.close(); } catch(e) {} this.audioCtx = null; }
  }

  async finishRecordingAndSend() {
    const targets = this.getSelectedPlayers();

    try {
      if (this._isAi) {
        this.stopSpeechRecognition();
        const q = this.recognizedSpeechText.trim();
        if (!q) {
          console.warn(&#39;[Intercom] AI 模式未錄得有效文字，取消發送&#39;);
          if (this.btnLabel) this.btnLabel.innerText = &#39;⚠️ 未識別到語音&#39;;
          if (this.mainBtn) this.mainBtn.style.background = &#39;#e65100&#39;;
          setTimeout(() =&amp;gt; this.updateCardState(), 1500);
          return;
        }

        console.log(&#39;[Intercom] AI 模式：發送真實識別文字:&#39;, q, &#39;動態目標端點清單:&#39;, targets);
        this.btnLabel.innerText = &#39;AI 回應中...&#39;;
        await this._hass.callService(&#39;script&#39;, &#39;intercom_ai_talk&#39;, {
          prompt_text: q,
          target_player: targets
        });
      } else {
        // 廣播模式：抓取設備真實取樣率 (44100Hz / 48000Hz)
        const realSampleRate = (this.audioCtx &amp;amp;&amp;amp; this.audioCtx.sampleRate) ? this.audioCtx.sampleRate : 44100;
        const wavBlob = this.encodeWAV(this.pcmData, realSampleRate);
        this.closeMicHardware();

        if (!wavBlob || wavBlob.size &amp;lt; 1000) {
          console.warn(&#39;[Intercom] 錄音數據為空，取消廣播&#39;);
          if (this.btnLabel) this.btnLabel.innerText = &#39;⚠️ 錄音為空&#39;;
          setTimeout(() =&amp;gt; this.updateCardState(), 1200);
          return;
        }

        console.log(`[Intercom] 成功錄得原音: ${wavBlob.size} bytes, 取樣率: ${realSampleRate}Hz`);
        await this.uploadAndPlay(wavBlob, targets);
      }
    } catch(err) {
      console.error(&#39;[Intercom] 派發異常:&#39;, err);
    } finally {
      this.updateCardState();
    }
  }

  // 安全分段通道 (每包 4KB 寫入，保證 voice.wav 100% 寫出)
  async uploadAndPlay(wavBlob, targets) {
    return new Promise((resolve) =&amp;gt; {
      const reader = new FileReader();
      reader.readAsDataURL(wavBlob);
      reader.onloadend = async () =&amp;gt; {
        try {
          const b64 = reader.result.split(&#39;,&#39;)[1];
          if (!b64) { resolve(); return; }

          console.log(`[Intercom] 開始寫入音訊，Base64 總長度: ${b64.length}`);

          // 1. 先清空並初始化暫存檔
          await this._hass.callService(&#39;shell_command&#39;, &#39;clear_intercom_raw&#39;);

          // 2. 每包 4000 字元分段寫入，徹底避免 Argument list too long
          const chunkSize = 4000;
          for (let i = 0; i &amp;lt; b64.length; i += chunkSize) {
            const chunk = b64.slice(i, i + chunkSize);
            await this._hass.callService(&#39;shell_command&#39;, &#39;save_intercom_chunk&#39;, {
              chunk: chunk
            });
          }

          // 3. 呼叫解碼產生 voice.wav
          await this._hass.callService(&#39;shell_command&#39;, &#39;decode_intercom_raw&#39;);

          // 4. 等待 200ms 讓磁碟寫入完成
          await new Promise(r =&amp;gt; setTimeout(r, 200));

          console.log(&#39;[Intercom] voice.wav 產出完成，呼叫 script.intercom_play_voice 推播給:&#39;, targets);
          await this._hass.callService(&#39;script&#39;, &#39;intercom_play_voice&#39;, {
            target_player: targets
          });
        } catch(e) {
          console.error(&#39;[Intercom] 上傳播放失敗:&#39;, e);
        }
        resolve();
      };
      reader.onerror = () =&amp;gt; resolve();
    });
  }

  getSelectedPlayers() {
    return Array.from(this.querySelectorAll(&#39;.player-chk:checked&#39;)).map(i =&amp;gt; i.value);
  }

  renderDynamicPlayers() {
    if (!this.playerContainer || !this._hass || !this._hass.states) return;

    this.querySelectorAll(&#39;.player-chk&#39;).forEach(input =&amp;gt; {
      if (input.checked) this.savedCheckedEntities.add(input.value);
      else this.savedCheckedEntities.delete(input.value);
    });

    const candidateEntities = Object.keys(this._hass.states).filter(entityId =&amp;gt; {
      if (!entityId.startsWith(&#39;media_player.&#39;)) return false;
      const s = this._hass.states[entityId];
      return s &amp;amp;&amp;amp; ![&#39;unavailable&#39;, &#39;unknown&#39;, &#39;off&#39;].includes(s.state);
    });

    const deduplicated = new Map();
    candidateEntities.forEach(id =&amp;gt; {
      const s = this._hass.states[id];
      const name = (s &amp;amp;&amp;amp; s.attributes &amp;amp;&amp;amp; s.attributes.friendly_name) || id.replace(&#39;media_player.&#39;, &#39;&#39;);
      if (!deduplicated.has(name) || id &amp;gt; deduplicated.get(name).id) {
        deduplicated.set(name, { id, name });
      }
    });

    const playerList = Array.from(deduplicated.values());
    const signature = playerList.map(p =&amp;gt; p.id).sort().join(&#39;,&#39;);

    if (this.renderedSignature !== signature) {
      this.renderedSignature = signature;
      this.playerContainer.innerHTML = playerList.map(p =&amp;gt; {
        const checked = this.savedCheckedEntities.has(p.id) ? &#39;checked&#39; : &#39;&#39;;
        return `
          &amp;lt;label style=&quot;display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; background: #262e3d; border: 1px solid #3b465c; border-radius: 6px; cursor: pointer; font-size: 13px; color: #e2e8f0; user-select: none; transition: all 0.2s;&quot;&amp;gt;
            &amp;lt;input type=&quot;checkbox&quot; class=&quot;player-chk&quot; value=&quot;${p.id}&quot; ${checked} style=&quot;accent-color: #03a9f4; width: 16px; height: 16px; margin: 0; cursor: pointer;&quot;&amp;gt;
            &amp;lt;span&amp;gt;${p.name}&amp;lt;/span&amp;gt;
          &amp;lt;/label&amp;gt;
        `;
      }).join(&#39;&#39;);
    }
  }

  updateCardState() {
    if (!this.content) return;
    this.aiToggle.checked = this._isAi;

    if (this.localHolding) return;

    if (this._isAi) {
      this.labelBroadcast.style.color = &#39;#64748b&#39;;
      this.labelAi.style.color = &#39;#38bdf8&#39;;
      this.mainBtn.style.background = &#39;#0284c7&#39;;
      this.btnIcon.setAttribute(&#39;icon&#39;, &#39;mdi:robot&#39;);
      this.btnLabel.innerText = &#39;長按 AI 對話&#39;;
    } else {
      this.labelBroadcast.style.color = &#39;#03a9f4&#39;;
      this.labelAi.style.color = &#39;#64748b&#39;;
      this.mainBtn.style.background = &#39;#3b82f6&#39;;
      this.btnIcon.setAttribute(&#39;icon&#39;, &#39;mdi:microphone&#39;);
      this.btnLabel.innerText = &#39;長按語音對講&#39;;
    }
  }

  encodeWAV(samplesArrays, sampleRate) {
    let total = 0;
    for (const a of samplesArrays) total += a.length;
    if (total === 0) return null;
    const samples = new Float32Array(total);
    let offset = 0;
    for (const a of samplesArrays) { samples.set(a, offset); offset += a.length; }

    const buffer = new ArrayBuffer(44 + samples.length * 2);
    const view = new DataView(buffer);
    const writeStr = (v, o, s) =&amp;gt; { for (let i = 0; i &amp;lt; s.length; i++) v.setUint8(o + i, s.charCodeAt(i)); };

    writeStr(view, 0, &#39;RIFF&#39;);
    view.setUint32(4, 36 + samples.length * 2, true);
    writeStr(view, 8, &#39;WAVE&#39;);
    writeStr(view, 12, &#39;fmt &#39;);
    view.setUint32(16, 16, true);
    view.setUint16(20, 1, true); // PCM 格式
    view.setUint16(22, 1, true); // 單聲道
    view.setUint32(24, sampleRate, true); // 動態真實取樣率
    view.setUint32(28, sampleRate * 2, true); // Byte rate
    view.setUint16(32, 2, true); // Block align
    view.setUint16(34, 16, true); // 16-bit
    writeStr(view, 36, &#39;data&#39;);
    view.setUint32(40, samples.length * 2, true);

    let idx = 44;
    for (let i = 0; i &amp;lt; samples.length; i++) {
      let s = Math.max(-1, Math.min(1, samples[i]));
      view.setInt16(idx, s &amp;lt; 0 ? s * 0x8000 : s * 0x7FFF, true);
      idx += 2;
    }
    return new Blob([view], { type: &#39;audio/wav&#39; });
  }
}

customElements.define(&#39;intercom-card&#39;, IntercomCard);

window.customCards = window.customCards || [];
window.customCards.push({
  type: &#39;intercom-card&#39;,
  name: &#39;Intercom Card&#39;,
  description: &#39;Universal Intercom &amp;amp; AI Broadcast Card&#39;,
  preview: true
});
&lt;/span&gt;&lt;br class=&quot;ProseMirror-trailingBreak&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot; /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;6. 步驟三：儀表板註冊與啟用&lt;/span&gt;&lt;/h2&gt;&lt;ol style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;註冊前端資源（Resources）&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;前往 HA &lt;/span&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;「設定」 -&amp;gt; 「儀表板」 -&amp;gt; 右上角「資源」&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;點擊「新增資源」，輸入：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;URL&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：&lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;/local/intercom/intercom-card.js?v=20261011&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;資源類型&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：&lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;JavaScript 模組 (JavaScript Module)&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;重新載入腳本與設定&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;前往 &lt;/span&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;「開發者工具」 -&amp;gt; 「YAML」&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;，分別點擊：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;「重新載入腳本 (Reload Scripts)」&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;「重新載入命令列 (Reload Shell Commands)」&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;「重新載入手動設定的 input_booleans」&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;新增卡片到儀表板&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;進入任何儀表板檢視，點擊「新增卡片」，滑到最底選擇「手動 (Manual)」，輸入：&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;type: custom:intercom-card
&lt;/span&gt;&lt;br class=&quot;ProseMirror-trailingBreak&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot; /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;儲存後，卡片會自動列出系統中所有非 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;off&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; / &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;unavailable&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 的 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;media_player&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;7. 操作說明與智慧家庭語音控制實務&lt;/span&gt;&lt;/h2&gt;&lt;h3 style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;模式切換操作&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;卡片左側具備 &lt;/span&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;[廣播 / AI]&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 膠囊切換鈕：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;廣播模式（藍色）&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：按鈕顯示「長按語音對講」，收錄真人聲音並原音推播給勾選設備。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;AI 模式（綠色）&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：按鈕顯示「長按 AI 對話」，將辨識出的繁體中文文字傳送給 Google Assistant SDK。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;長按判定保護機制&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;按下按鈕時有 &lt;/span&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;450ms 系統準備期&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;（按鈕呈現橘色進度條並逐字顯示「系統準備中」）。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;防誤觸設計&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：若按下時間未滿 450ms 放開，系統會自動取消，不產生無效上傳。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;滿 450ms 後按鈕變色並顯示「錄音中」，放開按鈕後微延遲 300ms 完成封裝並自動送出。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;直接用語音控制家電&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;在 AI 模式下，因直接對接 Google Assistant SDK，你可以在勾選任意喇叭的情況下直接說出：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;開關控制&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：「打開客廳燈」、「關閉車庫大門」、「打開電視」。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;數值調節&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：「把冷氣溫度調到 25 度」、「將玄關燈亮度設定為 60%」。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;情境觸發&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：「執行睡眠模式」、「啟動離家模式」。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;狀態查詢&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：「客廳溫度幾度？」、「今天外面天氣怎麼樣？」。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Google Assistant 執行完畢後的語音反饋（如「好的，已開啟客廳燈」），會&lt;/span&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;同步廣播至所有勾選的播放器中&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;。&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;8. 瀏覽器相容性參考&lt;/span&gt;&lt;/h2&gt;&lt;table style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-bottom: 32px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px 0px 32px;&quot;&gt;&lt;tbody style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;tr style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;瀏覽器核心 / 品牌&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;原聲廣播 (PCM WAV)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;AI 模式 (Web Speech API)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;備註說明&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;Google Chrome&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;✅ 支援&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;✅ 支援&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;原生完整支援 Google 語音識別雲端金鑰。&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;Comet (Chromium)&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;✅ 支援&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;✅ 支援&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;完美適配 Web Audio 與 Web Speech。&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;Microsoft Edge&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;✅ 支援&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;⚠️ 部分支援&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;依賴微軟 Azure Speech 服務，延遲略高。&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;Brave&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;✅ 支援&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;❌ 不相容&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;隱私引擎強制攔截音訊上傳至 Google。&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;Vivaldi&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;✅ 支援&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;❌ 不相容&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;缺少 Google Speech 授權 Key，回報 Network Error。&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;iOS Safari / Chrome&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;✅ 支援 (需 HTTPS)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;⚠️ 受限&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(196, 199, 197); line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 8px 12px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;iOS 限制背景長按錄音生命週期，建議使用實體發話端點或桌面端。&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 style=&quot;font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif !important&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;9. 排查與檢核清單（Troubleshooting）&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;點擊發話卡片顯示「⚠️ 請先勾選設備！」&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;請至少在設備列表中勾選一台 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;media_player&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;廣播沒聲音，但 HA 腳本有被觸發&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;確認 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;/config/packages/intercom.yaml&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 中的 IP 是否與當前 HA 主機 IP 一致。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;檢查瀏覽器控制台（F12），確認音訊是否成功以 4KB 分段上傳至 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;/local/intercom/voice.wav&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;按住時沒有橘色進度條或按鍵無反應&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;請確認網頁是否透過 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;http://&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 或內部 IP 連線，部分瀏覽器需要 Secure Context（HTTPS 或 localhost / 內網 IP 授權）才允許存取麥克風。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Google Audio 與其他喇叭聲音不同步或回覆舊問題&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 32px;&quot;&gt;&lt;li style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;p style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;請確認 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;packages/intercom.yaml&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 中的 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;intercom_ai_talk&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 是否已完全採用&lt;/span&gt;&lt;strong style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;動態陣列直送&lt;/strong&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;，而非 &lt;/span&gt;&lt;code style=&quot;font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;repeat&lt;/code&gt;&lt;span class=&quot;selected&quot; style=&quot;line-height: 1.15; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt; 迴圈。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/571068059800329341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/571068059800329341'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/10/home-assistant-ai_015816019.html' title='Home Assistant 音訊雙軌與原音廣播及 AI 對話 '/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-2809167692545269301</id><published>2026-10-07T22:07:36.746+08:00</published><updated>2026-10-08T09:12:59.765+08:00</updated><title type='text'>Dify 整合架構</title><content type='html'>&lt;div style=&quot;color: #1e293b; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; line-height: 1.7; margin: 0px auto; max-width: 860px; padding: 20px;&quot;&gt;
  &lt;h1 style=&quot;align-items: center; border-bottom: 3px solid rgb(2, 132, 199); color: #0f172a; display: flex; font-size: 26px; gap: 8px; padding-bottom: 12px;&quot;&gt;
    🎙️ 打造極致 Home Assistant 智能管家：Dify 大腦、Google AI TTS 真人發聲與全域原音對講實戰落地
  &lt;/h1&gt;

  &lt;p style=&quot;color: #475569; font-size: 15px;&quot;&gt;
    在現代智慧家庭中，傳統語音助理往往受限於原廠封閉生態、呆板的機器發音以及無法跨裝置廣播的限制。本文公開一套經實機驗證通過的完整生產級架構：以 &lt;strong&gt;Dify 本地大腦&lt;/strong&gt; 賦予管家人性化思維與時空感知，結合次世代 &lt;strong&gt;Google AI TTS&lt;/strong&gt; 擬真口吻開口朗讀，並相容自研 &lt;strong&gt;Universal Intercom Card (v=6.0)&lt;/strong&gt; 實現極低延遲的跨端點 PCM 原音廣播。
  &lt;/p&gt;

  &lt;h2 style=&quot;border-left: 4px solid rgb(2, 132, 199); color: #0369a1; font-size: 20px; margin-top: 32px; padding-left: 10px;&quot;&gt;
    🏛️ 系統架構與關鍵技術突破
  &lt;/h2&gt;
  &lt;ul style=&quot;color: #334155; padding-left: 20px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
      &lt;strong&gt;4KB 安全分段通道（Chunk-based Upload）&lt;/strong&gt;：前端錄音編碼後，以每包 4,000 字元分段追加寫入 &lt;code style=&quot;background: rgb(241, 245, 249); border-radius: 4px; padding: 2px 6px;&quot;&gt;voice.b64&lt;/code&gt;，後端直接以 Python 原生庫進行二進位解碼產出 &lt;code style=&quot;background: rgb(241, 245, 249); border-radius: 4px; padding: 2px 6px;&quot;&gt;voice.wav&lt;/code&gt;，根治 Linux 終端 Argument list too long 與 0 byte 假檔案問題。
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
      &lt;strong&gt;動態環境感知上下文注入&lt;/strong&gt;：大語言模型本體具無狀態特性。後端腳本於觸發對話當下，自動將精確年月日時分、星期與家中 Weather 感測器數據動態包裹為環境上下文，使 Dify 具備即時時空意識。
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
      &lt;strong&gt;先進先出（FIFO）滾動通知抽屜&lt;/strong&gt;：利用微秒級時間戳動態管理通知實體，當記錄累積達 3 筆時自動清除最舊一筆，完美維持最新 3 筆對話歷史常駐顯示。
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
      &lt;strong&gt;播放佇列自動釋放機制&lt;/strong&gt;：監控各媒體播放端點狀態，播音結束後延遲 2 秒自動調用 &lt;code style=&quot;background: rgb(241, 245, 249); border-radius: 4px; padding: 2px 6px;&quot;&gt;clear_playlist&lt;/code&gt;，避免介面殘留暫停標題或鎖定音訊通道。
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;border-left: 4px solid rgb(2, 132, 199); color: #0369a1; font-size: 20px; margin-top: 32px; padding-left: 10px;&quot;&gt;
    🛠️ 第一步：部署後端單一真理來源配置
  &lt;/h2&gt;
  &lt;p style=&quot;color: #475569; font-size: 14px;&quot;&gt;
    在 Home Assistant 建立檔案 &lt;code style=&quot;background: rgb(241, 245, 249); border-radius: 4px; color: #0284c7; padding: 2px 6px;&quot;&gt;/config/packages/intercom_pkg.yaml&lt;/code&gt;，全選貼上以下自洽配置：
  &lt;/p&gt;
  &lt;pre style=&quot;background: rgb(15, 23, 42); border-radius: 8px; color: #f8fafc; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;# ==============================================================================
# File: /config/packages/intercom_pkg.yaml
# Description: Dify 智能管家大腦、Google AI TTS 播報與原音廣播整合套件
# ==============================================================================

shell_command:
  clear_intercom_raw: &amp;gt;-
    rm -f /config/www/intercom/voice.wav /config/www/intercom/voice.b64
  save_intercom_chunk: &amp;gt;-
    python3 -c &quot;import sys; open(&#39;/config/www/intercom/voice.b64&#39;, &#39;a&#39;, encoding=&#39;utf-8&#39;).write(&#39;&#39;&#39;{{ chunk }}&#39;&#39;&#39;)&quot;
  decode_intercom_raw: &amp;gt;-
    python3 -c &quot;import base64; open(&#39;/config/www/intercom/voice.wav&#39;, &#39;wb&#39;).write(base64.b64decode(open(&#39;/config/www/intercom/voice.b64&#39;, &#39;r&#39;, encoding=&#39;utf-8&#39;).read().strip()))&quot;

input_boolean:
  ai_conversation_mode:
    name: &quot;AI 對話模式&quot;
    icon: mdi:robot

script:
  # ----------------------------------------------------------------------------
  # A. 原音廣播核心：推播至前端動態勾選之端點
  # ----------------------------------------------------------------------------
  intercom_play_voice:
    alias: &quot;Intercom: Play Voice Broadcast&quot;
    mode: single
    max_exceeded: silent
    fields:
      target_player:
        description: &quot;前端勾選之 media_player 清單&quot;
    sequence:
      - condition: template
        value_template: &quot;{{ target_player is defined and target_player | length &amp;gt; 0 }}&quot;
      - alias: &quot;推播 16kHz PCM 原音至勾選設備&quot;
        action: media_player.play_media
        target:
          entity_id: &quot;{{ target_player }}&quot;
        data:
          media_content_id: &quot;/local/intercom/voice.wav&quot;
          media_content_type: &quot;music&quot;

  # ----------------------------------------------------------------------------
  # B. AI 對話核心：環境感知注入 + Dify 大腦 + 3 筆滾動通知 + Google AI TTS
  # ----------------------------------------------------------------------------
  intercom_ai_talk:
    alias: &quot;Intercom: AI Talk (Dify + Google AI TTS)&quot;
    mode: single
    max_exceeded: silent
    fields:
      prompt_text:
        description: &quot;前端 Web Speech 識別文字&quot;
      target_player:
        description: &quot;前端勾選之發聲端點清單&quot;
    sequence:
      - variables:
          target_text: &quot;{{ prompt_text | default(&#39;&#39;, true) | trim }}&quot;
          current_time: &quot;{{ now().strftime(&#39;%Y年%m月%d日 %H點%M分&#39;) }}&quot;
          current_weekday: &amp;gt;-
            {% set days = [&#39;星期一&#39;, &#39;星期二&#39;, &#39;星期三&#39;, &#39;星期四&#39;, &#39;星期五&#39;, &#39;星期六&#39;, &#39;星期日&#39;] %}
            {{ days[now().weekday()] }}
          weather_entity: &amp;gt;-
            {{ states.weather | map(attribute=&#39;entity_id&#39;) | first | default(&#39;&#39;, true) }}
          weather_state: &amp;gt;-
            {% if weather_entity != &#39;&#39; %}
              {{ states(weather_entity) }}，氣溫 {{ state_attr(weather_entity, &#39;temperature&#39;) }}°C，濕度 {{ state_attr(weather_entity, &#39;humidity&#39;) }}%
            {% else %}
              目前無可用天氣感測器
            {% endif %}
          enriched_prompt: &amp;gt;-
            [系統環境資訊：當前時間是 {{ current_time }} {{ current_weekday }}；住家天氣狀況為：{{ weather_state }}]
            使用者發問：{{ target_text }}

      - condition: template
        value_template: &quot;{{ target_text | length &amp;gt; 0 }}&quot;

      - alias: &quot;調用 Dify 大腦處理對話&quot;
        action: conversation.process
        data:
          text: &quot;{{ enriched_prompt }}&quot;
          agent_id: conversation.dify_voice_assistant
        response_variable: dify_reply

      - variables:
          ai_answer: &quot;{{ dify_reply.response.speech.plain.speech }}&quot;
          existing_notifications: &amp;gt;-
            {{ states.persistent_notification 
               | selectattr(&#39;entity_id&#39;, &#39;search&#39;, &#39;^persistent_notification.intercom_dify_&#39;) 
               | sort(attribute=&#39;last_updated&#39;) 
               | map(attribute=&#39;entity_id&#39;) 
               | list }}

      # 限制通知抽屜最多常駐 3 筆
      - choose:
          - conditions:
              - condition: template
                value_template: &quot;{{ existing_notifications | length &amp;gt;= 3 }}&quot;
            sequence:
              - alias: &quot;裁切超出上限之最舊通知&quot;
                action: persistent_notification.dismiss
                data:
                  notification_id: &quot;{{ existing_notifications[0].replace(&#39;persistent_notification.&#39;, &#39;&#39;) }}&quot;

      - alias: &quot;推播家庭管家回覆通知&quot;
        action: persistent_notification.create
        data:
          title: &quot;家庭管家回覆 ({{ now().strftime(&#39;%H:%M:%S&#39;) }})&quot;
          message: &quot;{{ ai_answer }}&quot;
          notification_id: &quot;intercom_dify_{{ now().strftime(&#39;%Y%m%d_%H%M%S_%f&#39;) }}&quot;

      # 調用 Google AI TTS 生成式語音推播
      - choose:
          - conditions:
              - condition: template
                value_template: &quot;{{ target_player is defined and target_player | length &amp;gt; 0 }}&quot;
            sequence:
              - alias: &quot;調用 Google AI TTS 朗讀&quot;
                action: tts.speak
                target:
                  entity_id: &amp;gt;-
                    {{ &#39;tts.google_ai_tts&#39; if states(&#39;tts.google_ai_tts&#39;) != &#39;unknown&#39; else &#39;tts.google_translate_zh_tw_com&#39; }}
                data:
                  media_player_entity_id: &quot;{{ target_player }}&quot;
                  message: &quot;{{ ai_answer }}&quot;

  # ----------------------------------------------------------------------------
  # C. 自動釋放佇列：播放完畢延遲 2 秒清理
  # ----------------------------------------------------------------------------
  intercom_auto_clear_player:
    alias: &quot;Intercom: Auto Clear Player&quot;
    mode: parallel
    fields:
      target_entity:
        description: &quot;動態傳入的媒體播放器實體&quot;
    sequence:
      - delay:
          seconds: 2
      - condition: template
        value_template: &quot;{{ states(target_entity) in [&#39;idle&#39;, &#39;paused&#39;, &#39;off&#39;] }}&quot;
      - action: media_player.clear_playlist
        target:
          entity_id: &quot;{{ target_entity }}&quot;

automation:
  - alias: &quot;Intercom: Media Player Idle Watchdog&quot;
    id: intercom_media_player_idle_watchdog
    mode: parallel
    trigger:
      - platform: event
        event_type: state_changed
    condition:
      - condition: template
        value_template: &amp;gt;-
          {{ trigger.event.data.entity_id.startswith(&#39;media_player.&#39;) 
             and trigger.event.data.new_state.state in [&#39;idle&#39;, &#39;paused&#39;]
             and trigger.event.data.old_state.state == &#39;playing&#39; }}
    action:
      - action: script.intercom_auto_clear_player
        data:
          target_entity: &quot;{{ trigger.event.data.entity_id }}&quot;&lt;/code&gt;&lt;/pre&gt;

  &lt;h2 style=&quot;border-left: 4px solid rgb(2, 132, 199); color: #0369a1; font-size: 20px; margin-top: 32px; padding-left: 10px;&quot;&gt;
    📱 第二步：部署前端對講卡片
  &lt;/h2&gt;
  &lt;p style=&quot;color: #475569; font-size: 14px;&quot;&gt;
    在 Home Assistant 建立檔案 &lt;code style=&quot;background: rgb(241, 245, 249); border-radius: 4px; color: #0284c7; padding: 2px 6px;&quot;&gt;/config/www/intercom/intercom-card.js&lt;/code&gt;，貼上 v=6.0 滿意版代碼：
  &lt;/p&gt;
  &lt;pre style=&quot;background: rgb(15, 23, 42); border-radius: 8px; color: #f8fafc; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;/**
 * Home Assistant - Universal Intercom &amp;amp; AI Broadcast Card (custom:intercom-card)
 * Version: 6.0
 */

class IntercomCard extends HTMLElement {
  constructor() {
    super();
    this._isAi = false;
    this.audioCtx = null;
    this.micStream = null;
    this.processor = null;
    this.pcmData = [];
    this.isRecording = false;
    this.localHolding = false;
    this.prepTimer = null;
    this.prepCount = 0;
    this.savedCheckedEntities = new Set();
    this.renderedSignature = &#39;&#39;;
    this.recognizedSpeechText = &#39;&#39;;
    this.recognition = null;
  }

  static getStubConfig() { return {}; }
  setConfig(config) { this._config = (Array.isArray(config) ? config[0] : config) || {}; }
  getLayoutOptions() { return { grid_columns: 4, grid_min_columns: 2, grid_rows: 2 }; }

  set hass(hass) {
    this._hass = hass;
    if (!this.content) this.initCard();
    this.updateCardState();
    this.renderDynamicPlayers();
  }

  initCard() {
    this.innerHTML = `
      &amp;lt;ha-card style=&quot;padding: 10px 14px; background: #1c222b; border: 1px solid #283242; border-radius: 12px; color: #fff; box-sizing: border-box; display: flex; flex-direction: column;&quot;&amp;gt;
        &amp;lt;div id=&quot;player-container&quot; style=&quot;display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px;&quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div style=&quot;display: flex; align-items: center; gap: 10px;&quot;&amp;gt;
          &amp;lt;div id=&quot;switch-box&quot; style=&quot;display: inline-flex; align-items: center; gap: 6px; background: #181d24; border: 1px solid #2e384d; padding: 6px 12px; border-radius: 8px; flex-shrink: 0; cursor: pointer; user-select: none;&quot;&amp;gt;
            &amp;lt;span id=&quot;label-broadcast&quot; style=&quot;font-size: 14px; font-weight: bold; color: #03a9f4; transition: color 0.2s;&quot;&amp;gt;廣播&amp;lt;/span&amp;gt;
            &amp;lt;ha-switch id=&quot;ai-toggle&quot;&amp;gt;&amp;lt;/ha-switch&amp;gt;
            &amp;lt;span id=&quot;label-ai&quot; style=&quot;font-size: 14px; font-weight: bold; color: #64748b; transition: color 0.2s;&quot;&amp;gt;AI&amp;lt;/span&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;button id=&quot;main-action-btn&quot; style=&quot;flex: 1 1 140px; min-width: 140px; white-space: nowrap; height: 46px; background: #3b82f6; border: none; border-radius: 8px; color: #fff; font-weight: bold; font-size: 16px; cursor: pointer; user-select: none; -webkit-user-select: none; touch-action: none; display: flex; align-items: center; justify-content: center; gap: 8px; position: relative; overflow: hidden; box-sizing: border-box; transition: all 0.25s ease;&quot;&amp;gt;
            &amp;lt;ha-icon id=&quot;btn-icon&quot; icon=&quot;mdi:microphone&quot; style=&quot;color: #ffffff; --mdc-icon-size: 22px;&quot;&amp;gt;&amp;lt;/ha-icon&amp;gt;
            &amp;lt;span id=&quot;btn-label&quot; style=&quot;letter-spacing: 0.5px;&quot;&amp;gt;長按語音對講&amp;lt;/span&amp;gt;
          &amp;lt;/button&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/ha-card&amp;gt;
    `;

    this.content = true;
    this.mainBtn = this.querySelector(&#39;#main-action-btn&#39;);
    this.btnIcon = this.querySelector(&#39;#btn-icon&#39;);
    this.btnLabel = this.querySelector(&#39;#btn-label&#39;);
    this.aiToggle = this.querySelector(&#39;#ai-toggle&#39;);
    this.labelBroadcast = this.querySelector(&#39;#label-broadcast&#39;);
    this.labelAi = this.querySelector(&#39;#label-ai&#39;);
    this.playerContainer = this.querySelector(&#39;#player-container&#39;);

    const switchBox = this.querySelector(&#39;#switch-box&#39;);
    switchBox.addEventListener(&#39;click&#39;, (e) =&amp;gt; {
      if (e.target !== this.aiToggle) {
        this.aiToggle.checked = !this.aiToggle.checked;
        this.aiToggle.dispatchEvent(new Event(&#39;change&#39;));
      }
    });

    this.aiToggle.addEventListener(&#39;change&#39;, (e) =&amp;gt; {
      this._isAi = e.target.checked;
      this.updateCardState();
      if (this._hass &amp;amp;&amp;amp; this._hass.states &amp;amp;&amp;amp; this._hass.states[&#39;input_boolean.ai_conversation_mode&#39;]) {
        this._hass.callService(&#39;input_boolean&#39;, this._isAi ? &#39;turn_on&#39; : &#39;turn_off&#39;, {
          entity_id: &#39;input_boolean.ai_conversation_mode&#39;
        });
      }
    });

    const prepChars = [&#39;系&#39;, &#39;系統&#39;, &#39;系統準&#39;, &#39;系統準備&#39;, &#39;系統準備中&#39;];

    const onStart = async (e) =&amp;gt; {
      if (e.cancelable) e.preventDefault();
      const targets = this.getSelectedPlayers();
      if (targets.length === 0) {
        this.btnLabel.innerText = &#39;⚠️ 請先勾選設備！&#39;;
        this.mainBtn.style.background = &#39;#e65100&#39;;
        setTimeout(() =&amp;gt; this.updateCardState(), 1200);
        return;
      }

      this.localHolding = true;
      this.isRecording = false;
      this.prepCount = 0;
      this.recognizedSpeechText = &#39;&#39;;

      this.btnLabel.innerText = prepChars[0];
      this.mainBtn.style.background = &#39;linear-gradient(90deg, #ff9800 20%, #1e293b 20%)&#39;;

      if (!this._isAi) await this.initMicHardware();

      this.prepTimer = setInterval(() =&amp;gt; {
        this.prepCount++;
        if (this.prepCount &amp;lt; 5) {
          this.btnLabel.innerText = prepChars[this.prepCount];
          const pct = (this.prepCount + 1) * 20;
          this.mainBtn.style.background = `linear-gradient(90deg, #ff9800 ${pct}%, #1e293b ${pct}%)`;
        } else if (this.prepCount === 5) {
          clearInterval(this.prepTimer);
          this.prepTimer = null;
          this.isRecording = true;
          this.pcmData = [];

          this.mainBtn.style.background = this._isAi ? &#39;#15803d&#39; : &#39;#dc2626&#39;;
          this.btnIcon.setAttribute(&#39;icon&#39;, &#39;mdi:record-rec&#39;);
          this.btnLabel.innerText = &#39;錄音中&#39;;

          if (this._isAi) this.startSpeechRecognition();
        }
      }, 90);
    };

    const onEnd = async (e) =&amp;gt; {
      if (e.cancelable) e.preventDefault();
      if (!this.localHolding) return;
      this.localHolding = false;

      if (this.prepTimer) {
        clearInterval(this.prepTimer);
        this.prepTimer = null;
        if (!this._isAi) this.closeMicHardware();
        this.stopSpeechRecognition();
        this.updateCardState();
        return;
      }

      if (this.isRecording) {
        this.btnLabel.innerText = &#39;發送中...&#39;;
        await new Promise(r =&amp;gt; setTimeout(r, 300));
        this.isRecording = false;
        await this.finishRecordingAndSend();
      }
    };

    this.mainBtn.addEventListener(&#39;pointerdown&#39;, onStart);
    this.mainBtn.addEventListener(&#39;pointerup&#39;, onEnd);
    this.mainBtn.addEventListener(&#39;pointercancel&#39;, onEnd);
  }

  startSpeechRecognition() {
    const SpeechRec = window.SpeechRecognition || window.webkitSpeechRecognition;
    if (!SpeechRec) return;
    try {
      this.stopSpeechRecognition();
      this.recognition = new SpeechRec();
      this.recognition.lang = &#39;zh-TW&#39;;
      this.recognition.continuous = true;
      this.recognition.interimResults = true;
      this.recognition.maxAlternatives = 1;

      this.recognition.onresult = (e) =&amp;gt; {
        let txt = &#39;&#39;;
        for (let i = e.resultIndex; i &amp;lt; e.results.length; ++i) txt += e.results[i][0].transcript;
        if (txt.trim()) {
          this.recognizedSpeechText = txt.trim();
          if (this.btnLabel) this.btnLabel.innerText = this.recognizedSpeechText;
        }
      };
      this.recognition.start();
    } catch (err) {}
  }

  stopSpeechRecognition() {
    if (this.recognition) {
      try { this.recognition.stop(); } catch (e) {}
      this.recognition = null;
    }
  }

  async initMicHardware() {
    try {
      this.micStream = await navigator.mediaDevices.getUserMedia({
        audio: { channelCount: 1, echoCancellation: true, noiseSuppression: true, autoGainControl: true },
        video: false
      });
      const AudioCtx = window.AudioContext || window.webkitAudioContext;
      this.audioCtx = new AudioCtx();
      if (this.audioCtx.state === &#39;suspended&#39;) await this.audioCtx.resume();

      const source = this.audioCtx.createMediaStreamSource(this.micStream);
      this.pcmData = [];
      this.processor = this.audioCtx.createScriptProcessor(4096, 1, 1);
      window._activeIntercomRecorderNode = this.processor;

      this.processor.onaudioprocess = (e) =&amp;gt; {
        if (!this.isRecording) return;
        this.pcmData.push(new Float32Array(e.inputBuffer.getChannelData(0)));
      };

      source.connect(this.processor);
      this.processor.connect(this.audioCtx.destination);
    } catch(err) {}
  }

  closeMicHardware() {
    window._activeIntercomRecorderNode = null;
    if (this.processor) { try { this.processor.disconnect(); } catch(e) {} this.processor = null; }
    if (this.micStream) { try { this.micStream.getTracks().forEach(t =&amp;gt; t.stop()); } catch(e) {} this.micStream = null; }
    if (this.audioCtx) { try { this.audioCtx.close(); } catch(e) {} this.audioCtx = null; }
  }

  async finishRecordingAndSend() {
    const targets = this.getSelectedPlayers();
    try {
      if (this._isAi) {
        this.stopSpeechRecognition();
        const q = this.recognizedSpeechText.trim();
        if (!q) {
          if (this.btnLabel) this.btnLabel.innerText = &#39;⚠️ 未識別到語音&#39;;
          if (this.mainBtn) this.mainBtn.style.background = &#39;#e65100&#39;;
          setTimeout(() =&amp;gt; this.updateCardState(), 1500);
          return;
        }
        this.btnLabel.innerText = &#39;AI 回應中...&#39;;
        await this._hass.callService(&#39;script&#39;, &#39;intercom_ai_talk&#39;, {
          prompt_text: q,
          target_player: targets
        });
      } else {
        const realSampleRate = (this.audioCtx &amp;amp;&amp;amp; this.audioCtx.sampleRate) ? this.audioCtx.sampleRate : 44100;
        const wavBlob = this.encodeWAV(this.pcmData, realSampleRate);
        this.closeMicHardware();
        if (!wavBlob || wavBlob.size &amp;lt; 1000) {
          if (this.btnLabel) this.btnLabel.innerText = &#39;⚠️ 錄音為空&#39;;
          setTimeout(() =&amp;gt; this.updateCardState(), 1200);
          return;
        }
        await this.uploadAndPlay(wavBlob, targets);
      }
    } catch(err) {
    } finally {
      this.updateCardState();
    }
  }

  async uploadAndPlay(wavBlob, targets) {
    return new Promise((resolve) =&amp;gt; {
      const reader = new FileReader();
      reader.readAsDataURL(wavBlob);
      reader.onloadend = async () =&amp;gt; {
        try {
          const b64 = reader.result.split(&#39;,&#39;)[1];
          if (!b64) { resolve(); return; }
          await this._hass.callService(&#39;shell_command&#39;, &#39;clear_intercom_raw&#39;);
          const chunkSize = 4000;
          for (let i = 0; i &amp;lt; b64.length; i += chunkSize) {
            await this._hass.callService(&#39;shell_command&#39;, &#39;save_intercom_chunk&#39;, {
              chunk: b64.slice(i, i + chunkSize)
            });
          }
          await this._hass.callService(&#39;shell_command&#39;, &#39;decode_intercom_raw&#39;);
          await new Promise(r =&amp;gt; setTimeout(r, 200));
          await this._hass.callService(&#39;script&#39;, &#39;intercom_play_voice&#39;, {
            target_player: targets
          });
        } catch(e) {}
        resolve();
      };
      reader.onerror = () =&amp;gt; resolve();
    });
  }

  getSelectedPlayers() {
    return Array.from(this.querySelectorAll(&#39;.player-chk:checked&#39;)).map(i =&amp;gt; i.value);
  }

  renderDynamicPlayers() {
    if (!this.playerContainer || !this._hass || !this._hass.states) return;
    this.querySelectorAll(&#39;.player-chk&#39;).forEach(input =&amp;gt; {
      if (input.checked) this.savedCheckedEntities.add(input.value);
      else this.savedCheckedEntities.delete(input.value);
    });

    const candidateEntities = Object.keys(this._hass.states).filter(entityId =&amp;gt; {
      if (!entityId.startsWith(&#39;media_player.&#39;)) return false;
      const s = this._hass.states[entityId];
      return s &amp;amp;&amp;amp; ![&#39;unavailable&#39;, &#39;unknown&#39;, &#39;off&#39;].includes(s.state);
    });

    const deduplicated = new Map();
    candidateEntities.forEach(id =&amp;gt; {
      const s = this._hass.states[id];
      const name = (s &amp;amp;&amp;amp; s.attributes &amp;amp;&amp;amp; s.attributes.friendly_name) || id.replace(&#39;media_player.&#39;, &#39;&#39;);
      if (!deduplicated.has(name) || id &amp;gt; deduplicated.get(name).id) {
        deduplicated.set(name, { id, name });
      }
    });

    const playerList = Array.from(deduplicated.values());
    const signature = playerList.map(p =&amp;gt; p.id).sort().join(&#39;,&#39;);

    if (this.renderedSignature !== signature) {
      this.renderedSignature = signature;
      this.playerContainer.innerHTML = playerList.map(p =&amp;gt; {
        const checked = this.savedCheckedEntities.has(p.id) ? &#39;checked&#39; : &#39;&#39;;
        return `
          &amp;lt;label style=&quot;display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; background: #262e3d; border: 1px solid #3b465c; border-radius: 6px; cursor: pointer; font-size: 13px; color: #e2e8f0; user-select: none; transition: all 0.2s;&quot;&amp;gt;
            &amp;lt;input type=&quot;checkbox&quot; class=&quot;player-chk&quot; value=&quot;${p.id}&quot; ${checked} style=&quot;accent-color: #03a9f4; width: 16px; height: 16px; margin: 0; cursor: pointer;&quot;&amp;gt;
            &amp;lt;span&amp;gt;${p.name}&amp;lt;/span&amp;gt;
          &amp;lt;/label&amp;gt;
        `;
      }).join(&#39;&#39;);
    }
  }

  updateCardState() {
    if (!this.content) return;
    this.aiToggle.checked = this._isAi;
    if (this.localHolding) return;

    if (this._isAi) {
      this.labelBroadcast.style.color = &#39;#64748b&#39;;
      this.labelAi.style.color = &#39;#38bdf8&#39;;
      this.mainBtn.style.background = &#39;#0284c7&#39;;
      this.btnIcon.setAttribute(&#39;icon&#39;, &#39;mdi:robot&#39;);
      this.btnLabel.innerText = &#39;長按 AI 對話&#39;;
    } else {
      this.labelBroadcast.style.color = &#39;#03a9f4&#39;;
      this.labelAi.style.color = &#39;#64748b&#39;;
      this.mainBtn.style.background = &#39;#3b82f6&#39;;
      this.btnIcon.setAttribute(&#39;icon&#39;, &#39;mdi:microphone&#39;);
      this.btnLabel.innerText = &#39;長按語音對講&#39;;
    }
  }

  encodeWAV(samplesArrays, sampleRate) {
    let total = 0;
    for (const a of samplesArrays) total += a.length;
    if (total === 0) return null;
    const samples = new Float32Array(total);
    let offset = 0;
    for (const a of samplesArrays) { samples.set(a, offset); offset += a.length; }

    const buffer = new ArrayBuffer(44 + samples.length * 2);
    const view = new DataView(buffer);
    const writeStr = (v, o, s) =&amp;gt; { for (let i = 0; i &amp;lt; s.length; i++) v.setUint8(o + i, s.charCodeAt(i)); };

    writeStr(view, 0, &#39;RIFF&#39;);
    view.setUint32(4, 36 + samples.length * 2, true);
    writeStr(view, 8, &#39;WAVE&#39;);
    writeStr(view, 12, &#39;fmt &#39;);
    view.setUint32(16, 16, true);
    view.setUint16(20, 1, true);
    view.setUint16(22, 1, true);
    view.setUint32(24, sampleRate, true);
    view.setUint32(28, sampleRate * 2, true);
    view.setUint16(32, 2, true);
    view.setUint16(34, 16, true);
    writeStr(view, 36, &#39;data&#39;);
    view.setUint32(40, samples.length * 2, true);

    let idx = 44;
    for (let i = 0; i &amp;lt; samples.length; i++) {
      let s = Math.max(-1, Math.min(1, samples[i]));
      view.setInt16(idx, s &amp;lt; 0 ? s * 0x8000 : s * 0x7FFF, true);
      idx += 2;
    }
    return new Blob([view], { type: &#39;audio/wav&#39; });
  }
}

customElements.define(&#39;intercom-card&#39;, IntercomCard);
window.customCards = window.customCards || [];
window.customCards.push({
  type: &#39;intercom-card&#39;,
  name: &#39;Intercom Card&#39;,
  description: &#39;Universal Intercom &amp;amp; AI Broadcast Card&#39;,
  preview: true
});&lt;/code&gt;&lt;/pre&gt;

  &lt;h2 style=&quot;border-left: 4px solid rgb(2, 132, 199); color: #0369a1; font-size: 20px; margin-top: 32px; padding-left: 10px;&quot;&gt;
    ⚙️ 第三步：儀表板註冊與語音助手管線綁定
  &lt;/h2&gt;
  &lt;ol style=&quot;color: #334155; padding-left: 20px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
      進入 &lt;strong&gt;Settings (設定)&lt;/strong&gt; ➔ &lt;strong&gt;Dashboards (儀表板)&lt;/strong&gt; ➔ &lt;strong&gt;Resources (資源)&lt;/strong&gt;，新增資源 URL：&lt;code style=&quot;background: rgb(241, 245, 249); border-radius: 4px; padding: 2px 6px;&quot;&gt;/local/intercom/intercom-card.js?v=6.0&lt;/code&gt;，型態為 &lt;code style=&quot;background: rgb(241, 245, 249); border-radius: 4px; padding: 2px 6px;&quot;&gt;JavaScript Module&lt;/code&gt;。
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
      在 Lovelace 儀表板中新增手動卡片，填入 &lt;code style=&quot;background: rgb(241, 245, 249); border-radius: 4px; padding: 2px 6px;&quot;&gt;type: custom:intercom-card&lt;/code&gt;。
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
      進入 &lt;strong&gt;Settings (設定)&lt;/strong&gt; ➔ &lt;strong&gt;Voice assistants (語音助理)&lt;/strong&gt;，確認對話代理指向 Dify (&lt;code&gt;conversation.dify_voice_assistant&lt;/code&gt;)，TTS 指向 Google AI TTS (&lt;code&gt;tts.google_ai_tts&lt;/code&gt;)。
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
      在 Dify 後台 System Prompt 尾端追加以下規範：
      &lt;div style=&quot;background: rgb(248, 250, 252); border-left: 3px solid rgb(2, 132, 199); font-size: 13px; margin: 8px 0px; padding: 8px 12px;&quot;&gt;
        若輸入開頭包含 [系統環境資訊：...]，此為當下真實客觀時空背景，請據此親切回答使用者關於時間、星期或天氣之提問，嚴禁複誦括號內標籤。全篇使用繁體中文（台灣）口語化風格。
      &lt;/div&gt;
    &lt;/li&gt;
  &lt;/ol&gt;

  &lt;h2 style=&quot;border-left: 4px solid rgb(2, 132, 199); color: #0369a1; font-size: 20px; margin-top: 32px; padding-left: 10px;&quot;&gt;
    📊 驗收指標與客觀數據
  &lt;/h2&gt;
  &lt;table style=&quot;border-collapse: collapse; font-size: 14px; margin-top: 12px; width: 100%;&quot;&gt;
    &lt;thead&gt;
      &lt;tr style=&quot;background: rgb(241, 245, 249); text-align: left;&quot;&gt;
        &lt;th style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;項目&lt;/th&gt;
        &lt;th style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;驗收基準&lt;/th&gt;
        &lt;th style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;標準輸出狀態&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;原音廣播產出&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;長按 3 秒發話並放開&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;&lt;code&gt;voice.wav&lt;/code&gt; 實體落地，容量約 117KB~200KB（大於 0 byte）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;多端點派發&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;勾選 Sony XZ1、Google Cast 等&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;放開後 200ms 內各音箱同步出聲播音&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;管家時空感知&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;長按 AI 詢問現在時間天氣&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;精確回答當前時間與溫濕度，並以 Google AI TTS 擬真發聲&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;通知滾動歷史&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;連續發問 3 次以上&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;通知抽屜常駐精確保留最新 3 筆，標題帶時間戳，滿 3 筆先進先出汰換&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;佇列防殘留&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;播音結束狀態轉為 idle&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;延遲 2 秒自動調用 &lt;code&gt;clear_playlist&lt;/code&gt; 清&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1 style=&quot;border-bottom: 2px solid rgb(226, 232, 240); color: #0f172a; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans TC&amp;quot;, sans-serif; font-size: 28px; margin-bottom: 20px; padding-bottom: 12px;&quot;&gt;🎙️ Home Assistant 2026.10&amp;nbsp; Dify 雙向中控與 Edge-TTS 曉臻擬真發音&lt;/h1&gt;&lt;p style=&quot;font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans TC&amp;quot;, sans-serif; font-size: 16px; margin-bottom: 20px;&quot;&gt;在家庭智慧中控的演進過程中，語音互動的自然度與穩定度是決定體驗成敗的關鍵。我們在基於 PVE 8.4.14 與 VM105 HAOS 的生產環境中，完成了 Dify 智能大腦與 Home Assistant 官方 Voice Assistant Pipeline 的深度整合，成功解構多項架構瓶頸，實現全屋零按鍵負擔的智慧管家互動鏈路。&lt;/p&gt;&lt;div style=&quot;background-color: #f8fafc; border-left: 4px solid rgb(59, 130, 246); border-radius: 4px; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans TC&amp;quot;, sans-serif; margin-bottom: 24px; padding: 16px;&quot;&gt;&lt;h3 style=&quot;color: #1d4ed8; font-size: 18px; margin: 0px 0px 8px;&quot;&gt;💡 架構升級三大核心亮點&lt;/h3&gt;&lt;ul style=&quot;color: #334155; margin: 0px; padding-left: 20px;&quot;&gt;&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;🚫 根絕 429 資源耗盡&lt;/b&gt;：捨棄每日僅 10 次配額的雲端 Gemini TTS，全面遷移至開源 Microsoft Edge-TTS 整合，完全免 API Key、零調用次數限制。&lt;/li&gt;&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;🗣️ 旗艦級中英混讀體驗&lt;/b&gt;：採用 &lt;code&gt;zh-TW-HsiaoChenNeural&lt;/code&gt;（曉臻）神經語音模型，完美呈現台灣在地語調，中英文名詞穿插切換自然流暢。&lt;/li&gt;&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;🧹 喚醒前綴自動淨化&lt;/b&gt;：建立正則過濾中繼，自動切除「OK／嘿／嗨／喂 小管家」等口語前綴，大幅縮減送往 Dify Agent 的 Token 消耗。&lt;/li&gt;&lt;li style=&quot;margin-bottom: 0px;&quot;&gt;&lt;b&gt;🛡️ 系統純淨與 Sections 原生相容&lt;/b&gt;：堅持 Storage Mode 視覺化可編輯規範，所有對話稽核收斂至 &lt;code&gt;system_log.write&lt;/code&gt;，杜絕前端擾民彈窗。&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;h2 style=&quot;border-bottom: 1px solid rgb(226, 232, 240); color: #0f172a; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans TC&amp;quot;, sans-serif; font-size: 22px; margin-bottom: 16px; margin-top: 32px; padding-bottom: 8px;&quot;&gt;⚙️ 核心後端腳本工程落實（/config/packages/intercom_pkg.yaml）&lt;/h2&gt;&lt;p style=&quot;font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans TC&amp;quot;, sans-serif; font-size: 15px; margin-bottom: 12px;&quot;&gt;為確保錄音對講與 AI 互動具備工業級可靠度，底層音訊鏈路採用 Python 寫入二進制資料破除 256KB 傳輸瓶頸，並在發話流程中動態注入環境時空參數（時間、星期、天氣與感測器狀態），讓 Dify 管家開口即具備在地環境意識：&lt;/p&gt;&lt;div style=&quot;background-color: #0f172a; border-radius: 8px; color: #f8fafc; font-family: &amp;quot;Fira Code&amp;quot;, Consolas, monospace; font-size: 13px; line-height: 1.5; margin-bottom: 24px; overflow-x: auto; padding: 18px;&quot;&gt;&lt;span style=&quot;color: #64748b;&quot;&gt;# 語音前綴淨化與動態時空提示詞封裝&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #38bdf8;&quot;&gt;cleaned_text:&lt;/span&gt; &lt;span style=&quot;color: #f1f5f9;&quot;&gt;&quot;{{ target_text | regex_replace(&#39;^(?:(?:ok|okay|嘿|嗨|喂|請教一下|幫我)?\\s*小管家[，,\\s]*)&#39;, &#39;&#39;, ignorecase=True) }}&quot;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #38bdf8;&quot;&gt;enriched_prompt:&lt;/span&gt; &lt;span style=&quot;color: #f1f5f9;&quot;&gt;&amp;gt;-&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1f5f9;&quot;&gt;[系統環境資訊：當前時間是 {{ current_time }} {{ current_weekday }}；住家天氣狀況為：{{ weather_state }}]&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f1f5f9;&quot;&gt;使用者發問：{{ final_prompt }}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #64748b;&quot;&gt;# 調用 Edge-TTS 高音質繁中發音實體&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #38bdf8;&quot;&gt;action:&lt;/span&gt; &lt;span style=&quot;color: #f1f5f9;&quot;&gt;tts.speak&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #38bdf8;&quot;&gt;target:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #38bdf8;&quot;&gt;entity_id:&lt;/span&gt; &lt;span style=&quot;color: #f1f5f9;&quot;&gt;tts.edge_tts_service&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #38bdf8;&quot;&gt;data:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #38bdf8;&quot;&gt;media_player_entity_id:&lt;/span&gt; &lt;span style=&quot;color: #f1f5f9;&quot;&gt;&quot;{{ target_player }}&quot;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #38bdf8;&quot;&gt;message:&lt;/span&gt; &lt;span style=&quot;color: #f1f5f9;&quot;&gt;&quot;{{ ai_answer }}&quot;&lt;/span&gt;&lt;/div&gt;&lt;h2 style=&quot;border-bottom: 1px solid rgb(226, 232, 240); color: #0f172a; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans TC&amp;quot;, sans-serif; font-size: 22px; margin-bottom: 16px; margin-top: 32px; padding-bottom: 8px;&quot;&gt;📊 整合效益量化對比&lt;/h2&gt;&lt;table style=&quot;border-collapse: collapse; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans TC&amp;quot;, sans-serif; font-size: 14px; margin-bottom: 24px; width: 622.776px;&quot;&gt;&lt;thead&gt;&lt;tr style=&quot;background-color: #f1f5f9;&quot;&gt;&lt;th style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;指標維度&lt;/th&gt;&lt;th style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;舊架構 (Google AI TTS)&lt;/th&gt;&lt;th style=&quot;border: 1px solid rgb(203, 213, 225); color: #0284c7; padding: 10px;&quot;&gt;新架構 (Microsoft Edge-TTS 曉臻)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;border: 1px solid rgb(203, 213, 225); font-weight: bold; padding: 10px;&quot;&gt;每日請求上限&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(203, 213, 225); color: #dc2626; padding: 10px;&quot;&gt;嚴格限制 10 次 (易觸發 429)&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(203, 213, 225); color: #16a34a; font-weight: bold; padding: 10px;&quot;&gt;無限制 (完全免費自由調用)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;border: 1px solid rgb(203, 213, 225); font-weight: bold; padding: 10px;&quot;&gt;發音與腔調表現&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;自然度高但 Assist 介面語系鎖定&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;標準台灣腔女性語音，中英混讀極其滑順&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;border: 1px solid rgb(203, 213, 225); font-weight: bold; padding: 10px;&quot;&gt;宿主算力佔用&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;0% (雲端生成)&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;0% (邊緣網路串流回傳，免本機推理)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;border: 1px solid rgb(203, 213, 225); font-weight: bold; padding: 10px;&quot;&gt;首字發聲延遲&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(203, 213, 225); padding: 10px;&quot;&gt;約 1.2s - 2.0s&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(203, 213, 225); font-weight: bold; padding: 10px;&quot;&gt;約 0.4s - 0.7s (極致低延遲)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans TC&amp;quot;, sans-serif; font-size: 15px; margin-bottom: 0px;&quot;&gt;至此，全屋智慧語音對話系統已在 Home Assistant 2026.10 規範下達成高擬真度、零成本與高強健性的生產基線。下一步將銜接公視（PTS）與中央社（CNA）在地 RSS 新聞串流，進一步擴展長輩日常一鍵隨聽之管家生態！🚀&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/2809167692545269301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/2809167692545269301'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/10/dify.html' title='Dify 整合架構'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-3931841659580156613</id><published>2026-10-07T10:29:44.158+08:00</published><updated>2026-10-07T10:29:44.158+08:00</updated><title type='text'></title><content type='html'>&lt;style&gt;
  .esp-container { font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Helvetica, Arial, sans-serif; color: #333; line-height: 1.5; max-width: 900px; margin: 0 auto; }
  .esp-intro { font-size: 15px; margin-bottom: 20px; color: #555; }
  .esp-table { width: 100%; border-collapse: collapse; margin-top: 10px; background-color: #fff; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
  .esp-table th, .esp-table td { border: 1px solid #e0e0e0; padding: 10px 12px; text-align: left; vertical-align: middle; }
  .esp-table th { background-color: #f4f6f8; font-weight: bold; color: #2c3e50; font-size: 14px; }
  .esp-table td { font-size: 13px; }
  .esp-table tr:hover { background-color: #fafbfc; }
  .esp-link { color: #1a73e8; text-decoration: none; font-weight: 500; }
  .esp-link:hover { text-decoration: underline; }
  .size-tag { display: inline-block; padding: 2px 6px; background-color: #e8f0fe; color: #1a73e8; border-radius: 4px; font-weight: bold; font-size: 12px; }
  .addon-tag { display: inline-block; padding: 2px 6px; background-color: #fce8e6; color: #c5221f; border-radius: 4px; font-weight: bold; font-size: 12px; }
  .price-tag { font-weight: bold; color: #d93025; white-space: nowrap; }
&lt;/style&gt;

&lt;div class=&quot;esp-container&quot;&gt;
  &lt;p class=&quot;esp-intro&quot;&gt;以下為微雪（Waveshare）ESP32-S3 系列智慧中控、顯示模組與音訊/紅外線擴充週邊預購與入手清單（含參考價格範圍與採購管道）：&lt;/p&gt;

  &lt;table class=&quot;esp-table&quot;&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th style=&quot;width: 22%;&quot;&gt;名稱 / 型號&lt;/th&gt;
        &lt;th style=&quot;width: 12%;&quot;&gt;尺寸 / 規格&lt;/th&gt;
        &lt;th style=&quot;width: 36%;&quot;&gt;功能簡介&lt;/th&gt;
        &lt;th style=&quot;width: 13%;&quot;&gt;參考價格&lt;/th&gt;
        &lt;th style=&quot;width: 17%;&quot;&gt;入手方式 / 連結&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;strong&gt;ESP32-S3-Touch-LCD-7B&lt;/strong&gt;&lt;br&gt;&lt;span style=&quot;color: #666; font-size: 12px;&quot;&gt;7吋電容觸控螢幕開發板&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;span class=&quot;size-tag&quot;&gt;7 吋&lt;/span&gt;&lt;br&gt;&lt;small&gt;1024×600&lt;/small&gt;&lt;/td&gt;
        &lt;td&gt;雙核處理器（Wi-Fi/BLE 5）、16M Flash / 8M PSRAM、板載 CAN、RS485、I2C、SD卡槽，支援 LVGL 工控 HMI。&lt;/td&gt;
        &lt;td&gt;&lt;span class=&quot;price-tag&quot;&gt;NT$ 1,200 - 1,600&lt;br&gt;(¥ 260 - 350)&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://docs.waveshare.net/ESP32-S3-Touch-LCD-7B&quot; target=&quot;_blank&quot; class=&quot;esp-link&quot;&gt;官方文檔 / 微雪官網&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;strong&gt;ESP32-S3-Touch-LCD-4.3C&lt;/strong&gt;&lt;br&gt;&lt;span style=&quot;color: #666; font-size: 12px;&quot;&gt;4.3吋智慧語音觸控屏&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;span class=&quot;size-tag&quot;&gt;4.3 吋&lt;/span&gt;&lt;br&gt;&lt;small&gt;800×480&lt;/small&gt;&lt;/td&gt;
        &lt;td&gt;內建雙數位麥克風陣列（AI 語音互動），支援 Wi-Fi/BLE 5，適合作為智慧家居與家電控制中樞。&lt;/td&gt;
        &lt;td&gt;&lt;span class=&quot;price-tag&quot;&gt;NT$ 800 - 1,100&lt;br&gt;(¥ 180 - 240)&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://docs.waveshare.net/ESP32-S3-Touch-LCD-4.3&quot; target=&quot;_blank&quot; class=&quot;esp-link&quot;&gt;官方文檔 / 微雪官網&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;strong&gt;ESP32-S3-CAM-OVxxxx&lt;/strong&gt;&lt;br&gt;&lt;span style=&quot;color: #666; font-size: 12px;&quot;&gt;AI 攝影機/觸控開發套件&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;span class=&quot;size-tag&quot;&gt;多媒體組&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;支援 Wi-Fi/BLE 5、DVP 鏡頭介面（搭配 OV3660/OV5640）、雙數位麥克風陣列（語音識別/降噪）、音訊解碼、SD卡槽。&lt;/td&gt;
        &lt;td&gt;&lt;span class=&quot;price-tag&quot;&gt;NT$ 600 - 900&lt;br&gt;(¥ 130 - 200)&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://docs.waveshare.net/ESP32-S3-CAM-OVxxxx&quot; target=&quot;_blank&quot; class=&quot;esp-link&quot;&gt;官方文檔 / 微雪官網&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;strong&gt;ESP32-S3-ePaper-3.97&lt;/strong&gt;&lt;br&gt;&lt;span style=&quot;color: #666; font-size: 12px;&quot;&gt;3.97吋電子紙開發板&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;span class=&quot;size-tag&quot;&gt;3.97 吋&lt;/span&gt;&lt;br&gt;&lt;small&gt;800×480&lt;/small&gt;&lt;/td&gt;
        &lt;td&gt;內建 ESP32-S3 主控（Wi-Fi/BLE 5）、整合電子紙顯示驅動，超低功耗，適合智慧家居控制與低功耗物聯網應用。&lt;/td&gt;
        &lt;td&gt;&lt;span class=&quot;price-tag&quot;&gt;NT$ 1,000 - 1,300&lt;br&gt;(¥ 220 - 280)&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://docs.waveshare.net/ESP32-S3-ePaper-3.97/&quot; target=&quot;_blank&quot; class=&quot;esp-link&quot;&gt;官方文檔 / 微雪官網&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;strong&gt;INMP441 / MSM261S4030H0&lt;/strong&gt;&lt;br&gt;&lt;span style=&quot;color: #666; font-size: 12px;&quot;&gt;I2S 數位麥克風模組&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;span class=&quot;addon-tag&quot;&gt;音訊輸入&lt;/span&gt;&lt;br&gt;&lt;small&gt;高精度拾音&lt;/small&gt;&lt;/td&gt;
        &lt;td&gt;高精確度 I2S 介面數位 MEMS 麥克風，支援語音辨識、語音助理（如 ESP-NOW / Home Assistant Assist）收音。&lt;/td&gt;
        &lt;td&gt;&lt;span class=&quot;price-tag&quot;&gt;NT$ 60 - 150&lt;br&gt;(¥ 15 - 35)&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;蝦皮購物、淘寶、露天市集（搜尋型號直接選購）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;strong&gt;MAX98357A&lt;/strong&gt;&lt;br&gt;&lt;span style=&quot;color: #666; font-size: 12px;&quot;&gt;I2S D級音訊放大輸出模組&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;span class=&quot;addon-tag&quot;&gt;音訊輸出&lt;/span&gt;&lt;br&gt;&lt;small&gt;3W 功率放大&lt;/small&gt;&lt;/td&gt;
        &lt;td&gt;高效能 D 級數位音訊放大器，直接接收 I2S 音訊輸入驅動外接喇叭，適合搭配 ESP32 實現語音播報或 TTS 語音回饋。&lt;/td&gt;
        &lt;td&gt;&lt;span class=&quot;price-tag&quot;&gt;NT$ 80 - 180&lt;br&gt;(¥ 20 - 40)&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;蝦皮購物、淘寶、露天市集（搜尋型號直接選購）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;strong&gt;360度紅外線發射模組&lt;/strong&gt;&lt;br&gt;&lt;span style=&quot;color: #666; font-size: 12px;&quot;&gt;全向萬能紅外擴充套件&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;span class=&quot;addon-tag&quot;&gt;紅外控制&lt;/span&gt;&lt;br&gt;&lt;small&gt;38kHz 全向&lt;/small&gt;&lt;/td&gt;
        &lt;td&gt;環形多燈珠設計，可透過 GPIO 連接至 ESP32-S3 主板，搭配 ESPHome 打造場區/房間萬能紅外遙控。&lt;/td&gt;
        &lt;td&gt;&lt;span class=&quot;price-tag&quot;&gt;NT$ 100 - 250&lt;br&gt;(¥ 25 - 55)&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;蝦皮購物、淘寶（搜尋「360度 紅外發射模組」）&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/3931841659580156613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/3931841659580156613'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/10/blog-post_07.html' title=''/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-7953336791960931168</id><published>2026-10-07T08:38:18.982+08:00</published><updated>2026-10-11T15:40:56.861+08:00</updated><title type='text'>Home Assistant「原聲廣播與 AI 對話」</title><content type='html'>&lt;div style=&quot;color: #2c3e50; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; line-height: 1.7; margin: 0px auto; max-width: 860px;&quot;&gt;

  &lt;h1 style=&quot;border-bottom: 2px solid rgb(52, 152, 219); color: #1a252f; font-size: 26px; padding-bottom: 10px;&quot;&gt;
    [標準工程架構] Home Assistant 原音廣播與 AI 對話：官方多 ID 動態陣列與全生態跨協議同步
  &lt;/h1&gt;

  &lt;p&gt;
    本架構為 Home Assistant 智慧家居系統中，多房間真人原音廣播（Intercom）與 Google Assistant SDK 繁體中文 AI 雙向語音互動的完整工程實踐。
    歷經實機全面驗證，徹底解決了「Linux Shell Argument list too long 參數超限」、「多設備輪詢引發 Google 雲端 Session 競態與 N-1 歷史快取覆蓋」，以及「跨設備生態（Google Cast、Sony XZ1 Squeezebox、AirPlay 等）無法同步發聲與語音控制設備」的三大痛點。全新安裝之 Home Assistant 系統可直接導入套用。
  &lt;/p&gt;

  &lt;hr style=&quot;border-color: rgb(226, 232, 240) currentcolor currentcolor; border-image: none; border-style: solid none none; border-top: 1px solid #e2e8f0; border-width: 1px 0px 0px; border: 0; margin: 30px 0px;&quot; /&gt;

  &lt;h2 style=&quot;border-left: 5px solid rgb(52, 152, 219); color: #2c3e50; font-size: 20px; padding-left: 12px;&quot;&gt;
    核心架構突破與工程原則
  &lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;官方標準多 ID 動態陣列一次性派發&lt;/strong&gt;：廢除傳統引發競態的 &lt;code&gt;repeat&lt;/code&gt; 串列迴圈，將前端動態勾選的所有實體直接以陣列傳遞至 &lt;code&gt;google_assistant_sdk.send_text_command&lt;/code&gt;。Google 雲端僅生成單次最新（第 N 次）回答，由 HA 底層中樞並行廣播至各端點，徹底杜絕 N-1 殘留。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;4KB 安全分段通道（Chunk-based Upload）&lt;/strong&gt;：前端 PCM-to-WAV 編碼後，以每包 4,000 字元分段追加寫入 &lt;code&gt;voice.b64&lt;/code&gt;，根除 Linux 底層命令列的 E2BIG 限制。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;AudioContext 垃圾回收防護（GC Guard）&lt;/strong&gt;：前端錄音節點常駐全域（&lt;code&gt;window._activeIntercomRecorderNode&lt;/code&gt;），確保 450ms 系統準備期錄音採樣不被瀏覽器釋放。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;支援語音直接控制智慧家庭&lt;/strong&gt;：直接透過 SDK 直通 Google Home 雲端，支援開關電燈、冷氣調節、情境觸發與狀態查詢，並同步語音回覆給所有端點。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;hr style=&quot;border-color: rgb(226, 232, 240) currentcolor currentcolor; border-image: none; border-style: solid none none; border-top: 1px solid #e2e8f0; border-width: 1px 0px 0px; border: 0; margin: 30px 0px;&quot; /&gt;

  &lt;h2 style=&quot;border-left: 5px solid rgb(52, 152, 219); color: #2c3e50; font-size: 20px; padding-left: 12px;&quot;&gt;
    步驟一：後端核心配置 (/config/packages/intercom.yaml)
  &lt;/h2&gt;
  &lt;p&gt;在 Home Assistant 建立 packages 設定檔，提供分段寫入 Shell 指令、真人廣播與 AI 對話主腳本：&lt;/p&gt;

  &lt;pre style=&quot;background: rgb(30, 30, 30); border-radius: 8px; color: #d4d4d4; font-family: Consolas, Monaco, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;# ==============================================================================
# Home Assistant 獨立音訊對講與 AI 語音 Package (packages/intercom.yaml)
# 遵循【HA 官方原生多設備列表與 Google Assistant SDK 規範 - 方案 B 滿意版】
# ==============================================================================

shell_command:
  clear_intercom_raw: &quot;mkdir -p /config/www/intercom &amp;amp;&amp;amp; rm -f /config/www/intercom/voice.b64 /config/www/intercom/voice.wav&quot;
  save_intercom_chunk: &quot;python3 -c &#39;import sys; f=open(\&quot;/config/www/intercom/voice.b64\&quot;, \&quot;a\&quot;); f.write(\&quot;{{ chunk }}\&quot;); f.close()&#39;&quot;
  decode_intercom_raw: &quot;python3 -c &#39;import base64; data=open(\&quot;/config/www/intercom/voice.b64\&quot;, \&quot;rb\&quot;).read(); open(\&quot;/config/www/intercom/voice.wav\&quot;, \&quot;wb\&quot;).write(base64.b64decode(data))&#39;&quot;

input_boolean:
  ai_conversation_mode:
    name: &quot;AI 語音對話模式&quot;
    icon: mdi:robot
  ai_voice_recording:
    name: &quot;語音廣播發話中&quot;
    icon: mdi:microphone-message

script:
  # ----------------------------------------------------------------------------
  # 廣播模式：真人錄音推播 (標準 Port 80 反向代理，支援多設備一次性發送)
  # ----------------------------------------------------------------------------
  intercom_play_voice:
    alias: &quot;真人錄音對講廣播處理&quot;
    mode: restart
    fields:
      target_player:
        description: &quot;目標廣播播放器清單 (字串或陣列)&quot;
    sequence:
      - action: input_boolean.turn_on
        target:
          entity_id: input_boolean.ai_voice_recording
        continue_on_error: true

      - action: media_player.play_media
        target:
          entity_id: &amp;gt;-
            {{ [target_player] if target_player is string else target_player }}
        data:
          media_content_id: &quot;http://192.168.1.187/local/intercom/voice.wav?t={{ as_timestamp(now()) }}&quot;
          media_content_type: &quot;music&quot;

      - delay:
          seconds: 3

      - action: input_boolean.turn_off
        target:
          entity_id: input_boolean.ai_voice_recording
        continue_on_error: true

  # ----------------------------------------------------------------------------
  # AI 模式：方案 B 官方標準多 ID 原生陣列派發 (全動態、單次請求、根除 N-1 衝突)
  # ----------------------------------------------------------------------------
  intercom_ai_talk:
    alias: &quot;AI 對話語音處理 (原生 Google Assistant SDK)&quot;
    mode: restart
    fields:
      target_player:
        description: &quot;目標播放實體清單或單一實體&quot;
      prompt_text:
        description: &quot;真實語音辨識文字&quot;
    sequence:
      - action: input_boolean.turn_on
        target:
          entity_id: input_boolean.ai_voice_recording
        continue_on_error: true

      # 方案 B 核心：動態陣列直送 SDK，向 Google 雲端僅索取 1 次回應並分派各端點
      - action: google_assistant_sdk.send_text_command
        data:
          command: &quot;{{ prompt_text }}&quot;
          media_player: &amp;gt;-
            {{ [target_player] if target_player is string else target_player }}

      - delay:
          seconds: 5

      - action: input_boolean.turn_off
        target:
          entity_id: input_boolean.ai_voice_recording
        continue_on_error: true

  # ----------------------------------------------------------------------------
  # 快捷相容別名：Gemini 直連 Alias
  # ----------------------------------------------------------------------------
  gemini:
    alias: &quot;AI 對話發話處理 (Gemini 直連 Alias)&quot;
    mode: restart
    fields:
      target_player:
        description: &quot;目標播放實體清單或單一實體&quot;
      prompt_text:
        description: &quot;語音發話文字&quot;
    sequence:
      - action: script.intercom_ai_talk
        data:
          target_player: &quot;{{ target_player }}&quot;
          prompt_text: &quot;{{ prompt_text }}&quot;&lt;/code&gt;&lt;/pre&gt;

  &lt;hr style=&quot;border-color: rgb(226, 232, 240) currentcolor currentcolor; border-image: none; border-style: solid none none; border-top: 1px solid #e2e8f0; border-width: 1px 0px 0px; border: 0; margin: 30px 0px;&quot; /&gt;

  &lt;h2 style=&quot;border-left: 5px solid rgb(52, 152, 219); color: #2c3e50; font-size: 20px; padding-left: 12px;&quot;&gt;
    步驟二：前端自訂卡片全碼 (/config/www/intercom/intercom-card.js)
  &lt;/h2&gt;
  &lt;p&gt;前端負責自動掃描在線播放設備、提供多選切換、PCM 原生音訊採樣與 Web Speech API 辨識：&lt;/p&gt;

  &lt;pre style=&quot;background: rgb(30, 30, 30); border-radius: 8px; color: #d4d4d4; font-family: Consolas, Monaco, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;/**
 * Home Assistant - Universal Intercom &amp;amp; AI Broadcast Card (custom:intercom-card)
 * 遵循【HA 音訊排查復原點 4：Tiny Room 原生 Sections 整合、全動態端點與零 TTS 封存 - 方案 B 滿意版】
 */

class IntercomCard extends HTMLElement {
  constructor() {
    super();
    this._isAi = false;
    this.audioCtx = null;
    this.micStream = null;
    this.processor = null;
    this.pcmData = [];
    this.isRecording = false;
    this.localHolding = false;
    this.prepTimer = null;
    this.prepCount = 0;
    this.savedCheckedEntities = new Set();
    this.renderedSignature = &#39;&#39;;
    this.recognizedSpeechText = &#39;&#39;;
    this.recognition = null;
  }

  static getStubConfig() {
    return {};
  }

  setConfig(config) {
    if (Array.isArray(config)) {
      config = config[0] || {};
    }
    this._config = config || {};
  }

  getLayoutOptions() {
    return {
      grid_columns: 4,
      grid_min_columns: 2,
      grid_rows: 2
    };
  }

  set hass(hass) {
    this._hass = hass;
    if (!this.content) {
      this.initCard();
    }
    this.updateCardState();
    this.renderDynamicPlayers();
  }

  initCard() {
    this.innerHTML = `
      &amp;lt;ha-card style=&quot;padding: 10px 14px; background: #1c222b; border: 1px solid #283242; border-radius: 12px; color: #fff; box-sizing: border-box; display: flex; flex-direction: column;&quot;&amp;gt;
        &amp;lt;!-- 動態在線播放設備列表 (預設全部不勾選) --&amp;gt;
        &amp;lt;div id=&quot;player-container&quot; style=&quot;display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px;&quot;&amp;gt;&amp;lt;/div&amp;gt;

        &amp;lt;!-- 控制列：左側 [廣播/AI開關] + 右側 [長按語音對講按鍵] --&amp;gt;
        &amp;lt;div style=&quot;display: flex; align-items: center; gap: 10px;&quot;&amp;gt;
          &amp;lt;!-- 雙模切換膠囊 --&amp;gt;
          &amp;lt;div id=&quot;switch-box&quot; style=&quot;display: inline-flex; align-items: center; gap: 6px; background: #181d24; border: 1px solid #2e384d; padding: 6px 12px; border-radius: 8px; flex-shrink: 0; cursor: pointer; user-select: none;&quot;&amp;gt;
            &amp;lt;span id=&quot;label-broadcast&quot; style=&quot;font-size: 14px; font-weight: bold; color: #03a9f4; transition: color 0.2s;&quot;&amp;gt;廣播&amp;lt;/span&amp;gt;
            &amp;lt;ha-switch id=&quot;ai-toggle&quot;&amp;gt;&amp;lt;/ha-switch&amp;gt;
            &amp;lt;span id=&quot;label-ai&quot; style=&quot;font-size: 14px; font-weight: bold; color: #64748b; transition: color 0.2s;&quot;&amp;gt;AI&amp;lt;/span&amp;gt;
          &amp;lt;/div&amp;gt;

          &amp;lt;!-- 主發話按鈕 (純色藍 #3b82f6) --&amp;gt;
          &amp;lt;button id=&quot;main-action-btn&quot; style=&quot;flex: 1 1 140px; min-width: 140px; white-space: nowrap; height: 46px; background: #3b82f6; border: none; border-radius: 8px; color: #fff; font-weight: bold; font-size: 16px; cursor: pointer; user-select: none; -webkit-user-select: none; touch-action: none; display: flex; align-items: center; justify-content: center; gap: 8px; position: relative; overflow: hidden; box-sizing: border-box; transition: all 0.25s ease;&quot;&amp;gt;
            &amp;lt;ha-icon id=&quot;btn-icon&quot; icon=&quot;mdi:microphone&quot; style=&quot;color: #ffffff; --mdc-icon-size: 22px;&quot;&amp;gt;&amp;lt;/ha-icon&amp;gt;
            &amp;lt;span id=&quot;btn-label&quot; style=&quot;letter-spacing: 0.5px;&quot;&amp;gt;長按語音對講&amp;lt;/span&amp;gt;
          &amp;lt;/button&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/ha-card&amp;gt;
    `;

    this.content = true;
    this.mainBtn = this.querySelector(&#39;#main-action-btn&#39;);
    this.btnIcon = this.querySelector(&#39;#btn-icon&#39;);
    this.btnLabel = this.querySelector(&#39;#btn-label&#39;);
    this.aiToggle = this.querySelector(&#39;#ai-toggle&#39;);
    this.labelBroadcast = this.querySelector(&#39;#label-broadcast&#39;);
    this.labelAi = this.querySelector(&#39;#label-ai&#39;);
    this.playerContainer = this.querySelector(&#39;#player-container&#39;);

    // 雙模切換點選聯動
    const switchBox = this.querySelector(&#39;#switch-box&#39;);
    switchBox.addEventListener(&#39;click&#39;, (e) =&amp;gt; {
      if (e.target !== this.aiToggle) {
        this.aiToggle.checked = !this.aiToggle.checked;
        this.aiToggle.dispatchEvent(new Event(&#39;change&#39;));
      }
    });

    this.aiToggle.addEventListener(&#39;change&#39;, (e) =&amp;gt; {
      this._isAi = e.target.checked;
      this.updateCardState();
      if (this._hass &amp;amp;&amp;amp; this._hass.states &amp;amp;&amp;amp; this._hass.states[&#39;input_boolean.ai_conversation_mode&#39;]) {
        this._hass.callService(&#39;input_boolean&#39;, this._isAi ? &#39;turn_on&#39; : &#39;turn_off&#39;, {
          entity_id: &#39;input_boolean.ai_conversation_mode&#39;
        });
      }
    });

    // 450ms 判定閾值 (5 步每步 90ms 橘色進度條)
    const prepChars = [&#39;系&#39;, &#39;系統&#39;, &#39;系統準&#39;, &#39;系統準備&#39;, &#39;系統準備中&#39;];

    const onStart = async (e) =&amp;gt; {
      if (e.cancelable) e.preventDefault();
      const targets = this.getSelectedPlayers();
      if (targets.length === 0) {
        this.btnLabel.innerText = &#39;⚠️ 請先勾選設備！&#39;;
        this.mainBtn.style.background = &#39;#e65100&#39;;
        setTimeout(() =&amp;gt; this.updateCardState(), 1200);
        return;
      }

      this.localHolding = true;
      this.isRecording = false;
      this.prepCount = 0;
      this.recognizedSpeechText = &#39;&#39;;

      this.btnLabel.innerText = prepChars[0];
      this.mainBtn.style.background = &#39;linear-gradient(90deg, #ff9800 20%, #1e293b 20%)&#39;;

      // 只有廣播模式才預啟動硬體麥克風
      if (!this._isAi) {
        await this.initMicHardware();
      }

      this.prepTimer = setInterval(() =&amp;gt; {
        this.prepCount++;
        if (this.prepCount &amp;lt; 5) {
          this.btnLabel.innerText = prepChars[this.prepCount];
          const pct = (this.prepCount + 1) * 20;
          this.mainBtn.style.background = `linear-gradient(90deg, #ff9800 ${pct}%, #1e293b ${pct}%)`;
        } else if (this.prepCount === 5) {
          clearInterval(this.prepTimer);
          this.prepTimer = null;
          this.isRecording = true;
          this.pcmData = []; // 清空預熱雜訊

          this.mainBtn.style.background = this._isAi ? &#39;#15803d&#39; : &#39;#dc2626&#39;;
          this.btnIcon.setAttribute(&#39;icon&#39;, &#39;mdi:record-rec&#39;);
          this.btnLabel.innerText = &#39;錄音中&#39;;

          // AI 模式：每次長按全新啟動獨立 SpeechRecognition 實例
          if (this._isAi) {
            this.startSpeechRecognition();
          }
        }
      }, 90);
    };

    const onEnd = async (e) =&amp;gt; {
      if (e.cancelable) e.preventDefault();
      if (!this.localHolding) return;
      this.localHolding = false;

      // 未滿 450ms 放開：立即取消
      if (this.prepTimer) {
        clearInterval(this.prepTimer);
        this.prepTimer = null;
        if (!this._isAi) this.closeMicHardware();
        this.stopSpeechRecognition();
        this.updateCardState();
        return;
      }

      // 滿 450ms：放開按鈕微緩衝 300ms 讓辨識引擎結算最後文字後立刻送出
      if (this.isRecording) {
        this.btnLabel.innerText = &#39;發送中...&#39;;
        await new Promise(r =&amp;gt; setTimeout(r, 300));
        this.isRecording = false;
        await this.finishRecordingAndSend();
      }
    };

    this.mainBtn.addEventListener(&#39;pointerdown&#39;, onStart);
    this.mainBtn.addEventListener(&#39;pointerup&#39;, onEnd);
    this.mainBtn.addEventListener(&#39;pointercancel&#39;, onEnd);
  }

  // 每次全新實例化 Web Speech API
  startSpeechRecognition() {
    const SpeechRec = window.SpeechRecognition || window.webkitSpeechRecognition;
    if (!SpeechRec) {
      console.warn(&#39;[Intercom] 瀏覽器環境不支援 Web Speech API&#39;);
      return;
    }
    try {
      this.stopSpeechRecognition();
      this.recognition = new SpeechRec();
      this.recognition.lang = &#39;zh-TW&#39;;
      this.recognition.continuous = true;
      this.recognition.interimResults = true;
      this.recognition.maxAlternatives = 1;

      this.recognition.onresult = (e) =&amp;gt; {
        let txt = &#39;&#39;;
        for (let i = e.resultIndex; i &amp;lt; e.results.length; ++i) {
          txt += e.results[i][0].transcript;
        }
        if (txt.trim()) {
          this.recognizedSpeechText = txt.trim();
          if (this.btnLabel) {
            this.btnLabel.innerText = this.recognizedSpeechText;
          }
        }
      };

      this.recognition.onerror = (e) =&amp;gt; {
        console.warn(&#39;[Intercom] 語音辨識事件:&#39;, e.error);
      };

      this.recognition.start();
    } catch (err) {
      console.warn(&#39;[Intercom] 啟動語音辨識異常:&#39;, err);
    }
  }

  stopSpeechRecognition() {
    if (this.recognition) {
      try { this.recognition.stop(); } catch (e) {}
      this.recognition = null;
    }
  }

  // 廣播模式：硬體原生音訊採樣
  async initMicHardware() {
    try {
      this.micStream = await navigator.mediaDevices.getUserMedia({
        audio: {
          channelCount: 1,
          echoCancellation: true,
          noiseSuppression: true,
          autoGainControl: true
        },
        video: false
      });

      const AudioCtx = window.AudioContext || window.webkitAudioContext;
      this.audioCtx = new AudioCtx();
      if (this.audioCtx.state === &#39;suspended&#39;) {
        await this.audioCtx.resume();
      }

      const source = this.audioCtx.createMediaStreamSource(this.micStream);
      this.pcmData = [];
      this.processor = this.audioCtx.createScriptProcessor(4096, 1, 1);

      // 核心防護：綁定全域避免在 450ms 準備期被 GC 回收
      window._activeIntercomRecorderNode = this.processor;

      this.processor.onaudioprocess = (e) =&amp;gt; {
        if (!this.isRecording) return;
        const channel = e.inputBuffer.getChannelData(0);
        this.pcmData.push(new Float32Array(channel));
      };

      source.connect(this.processor);
      this.processor.connect(this.audioCtx.destination);
    } catch(err) {
      console.error(&#39;[Intercom] 麥克風啟動異常:&#39;, err);
    }
  }

  closeMicHardware() {
    window._activeIntercomRecorderNode = null;
    if (this.processor) { try { this.processor.disconnect(); } catch(e) {} this.processor = null; }
    if (this.micStream) { try { this.micStream.getTracks().forEach(t =&amp;gt; t.stop()); } catch(e) {} this.micStream = null; }
    if (this.audioCtx) { try { this.audioCtx.close(); } catch(e) {} this.audioCtx = null; }
  }

  async finishRecordingAndSend() {
    const targets = this.getSelectedPlayers();

    try {
      if (this._isAi) {
        this.stopSpeechRecognition();
        const q = this.recognizedSpeechText.trim();
        if (!q) {
          console.warn(&#39;[Intercom] AI 模式未錄得有效文字，取消發送&#39;);
          if (this.btnLabel) this.btnLabel.innerText = &#39;⚠️ 未識別到語音&#39;;
          if (this.mainBtn) this.mainBtn.style.background = &#39;#e65100&#39;;
          setTimeout(() =&amp;gt; this.updateCardState(), 1500);
          return;
        }

        console.log(&#39;[Intercom] AI 模式：發送真實識別文字:&#39;, q, &#39;動態目標端點清單:&#39;, targets);
        this.btnLabel.innerText = &#39;AI 回應中...&#39;;
        await this._hass.callService(&#39;script&#39;, &#39;intercom_ai_talk&#39;, {
          prompt_text: q,
          target_player: targets
        });
      } else {
        // 廣播模式：抓取設備真實取樣率 (44100Hz / 48000Hz)
        const realSampleRate = (this.audioCtx &amp;amp;&amp;amp; this.audioCtx.sampleRate) ? this.audioCtx.sampleRate : 44100;
        const wavBlob = this.encodeWAV(this.pcmData, realSampleRate);
        this.closeMicHardware();

        if (!wavBlob || wavBlob.size &amp;lt; 1000) {
          console.warn(&#39;[Intercom] 錄音數據為空，取消廣播&#39;);
          if (this.btnLabel) this.btnLabel.innerText = &#39;⚠️ 錄音為空&#39;;
          setTimeout(() =&amp;gt; this.updateCardState(), 1200);
          return;
        }

        console.log(`[Intercom] 成功錄得原音: ${wavBlob.size} bytes, 取樣率: ${realSampleRate}Hz`);
        await this.uploadAndPlay(wavBlob, targets);
      }
    } catch(err) {
      console.error(&#39;[Intercom] 派發異常:&#39;, err);
    } finally {
      this.updateCardState();
    }
  }

  // 安全分段通道 (每包 4KB 寫入，保證 voice.wav 100% 寫出)
  async uploadAndPlay(wavBlob, targets) {
    return new Promise((resolve) =&amp;gt; {
      const reader = new FileReader();
      reader.readAsDataURL(wavBlob);
      reader.onloadend = async () =&amp;gt; {
        try {
          const b64 = reader.result.split(&#39;,&#39;)[1];
          if (!b64) { resolve(); return; }

          console.log(`[Intercom] 開始寫入音訊，Base64 總長度: ${b64.length}`);

          // 1. 先清空並初始化暫存檔
          await this._hass.callService(&#39;shell_command&#39;, &#39;clear_intercom_raw&#39;);

          // 2. 每包 4000 字元分段寫入，徹底避免 Argument list too long
          const chunkSize = 4000;
          for (let i = 0; i &amp;lt; b64.length; i += chunkSize) {
            const chunk = b64.slice(i, i + chunkSize);
            await this._hass.callService(&#39;shell_command&#39;, &#39;save_intercom_chunk&#39;, {
              chunk: chunk
            });
          }

          // 3. 呼叫解碼產生 voice.wav
          await this._hass.callService(&#39;shell_command&#39;, &#39;decode_intercom_raw&#39;);

          // 4. 等待 200ms 讓磁碟寫入完成
          await new Promise(r =&amp;gt; setTimeout(r, 200));

          console.log(&#39;[Intercom] voice.wav 產出完成，呼叫 script.intercom_play_voice 推播給:&#39;, targets);
          await this._hass.callService(&#39;script&#39;, &#39;intercom_play_voice&#39;, {
            target_player: targets
          });
        } catch(e) {
          console.error(&#39;[Intercom] 上傳播放失敗:&#39;, e);
        }
        resolve();
      };
      reader.onerror = () =&amp;gt; resolve();
    });
  }

  getSelectedPlayers() {
    return Array.from(this.querySelectorAll(&#39;.player-chk:checked&#39;)).map(i =&amp;gt; i.value);
  }

  renderDynamicPlayers() {
    if (!this.playerContainer || !this._hass || !this._hass.states) return;

    this.querySelectorAll(&#39;.player-chk&#39;).forEach(input =&amp;gt; {
      if (input.checked) this.savedCheckedEntities.add(input.value);
      else this.savedCheckedEntities.delete(input.value);
    });

    const candidateEntities = Object.keys(this._hass.states).filter(entityId =&amp;gt; {
      if (!entityId.startsWith(&#39;media_player.&#39;)) return false;
      const s = this._hass.states[entityId];
      return s &amp;amp;&amp;amp; ![&#39;unavailable&#39;, &#39;unknown&#39;, &#39;off&#39;].includes(s.state);
    });

    const deduplicated = new Map();
    candidateEntities.forEach(id =&amp;gt; {
      const s = this._hass.states[id];
      const name = (s &amp;amp;&amp;amp; s.attributes &amp;amp;&amp;amp; s.attributes.friendly_name) || id.replace(&#39;media_player.&#39;, &#39;&#39;);
      if (!deduplicated.has(name) || id &amp;gt; deduplicated.get(name).id) {
        deduplicated.set(name, { id, name });
      }
    });

    const playerList = Array.from(deduplicated.values());
    const signature = playerList.map(p =&amp;gt; p.id).sort().join(&#39;,&#39;);

    if (this.renderedSignature !== signature) {
      this.renderedSignature = signature;
      this.playerContainer.innerHTML = playerList.map(p =&amp;gt; {
        const checked = this.savedCheckedEntities.has(p.id) ? &#39;checked&#39; : &#39;&#39;;
        return `
          &amp;lt;label style=&quot;display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; background: #262e3d; border: 1px solid #3b465c; border-radius: 6px; cursor: pointer; font-size: 13px; color: #e2e8f0; user-select: none; transition: all 0.2s;&quot;&amp;gt;
            &amp;lt;input type=&quot;checkbox&quot; class=&quot;player-chk&quot; value=&quot;${p.id}&quot; ${checked} style=&quot;accent-color: #03a9f4; width: 16px; height: 16px; margin: 0; cursor: pointer;&quot;&amp;gt;
            &amp;lt;span&amp;gt;${p.name}&amp;lt;/span&amp;gt;
          &amp;lt;/label&amp;gt;
        `;
      }).join(&#39;&#39;);
    }
  }

  updateCardState() {
    if (!this.content) return;
    this.aiToggle.checked = this._isAi;

    if (this.localHolding) return;

    if (this._isAi) {
      this.labelBroadcast.style.color = &#39;#64748b&#39;;
      this.labelAi.style.color = &#39;#38bdf8&#39;;
      this.mainBtn.style.background = &#39;#0284c7&#39;;
      this.btnIcon.setAttribute(&#39;icon&#39;, &#39;mdi:robot&#39;);
      this.btnLabel.innerText = &#39;長按 AI 對話&#39;;
    } else {
      this.labelBroadcast.style.color = &#39;#03a9f4&#39;;
      this.labelAi.style.color = &#39;#64748b&#39;;
      this.mainBtn.style.background = &#39;#3b82f6&#39;;
      this.btnIcon.setAttribute(&#39;icon&#39;, &#39;mdi:microphone&#39;);
      this.btnLabel.innerText = &#39;長按語音對講&#39;;
    }
  }

  encodeWAV(samplesArrays, sampleRate) {
    let total = 0;
    for (const a of samplesArrays) total += a.length;
    if (total === 0) return null;
    const samples = new Float32Array(total);
    let offset = 0;
    for (const a of samplesArrays) { samples.set(a, offset); offset += a.length; }

    const buffer = new ArrayBuffer(44 + samples.length * 2);
    const view = new DataView(buffer);
    const writeStr = (v, o, s) =&amp;gt; { for (let i = 0; i &amp;lt; s.length; i++) v.setUint8(o + i, s.charCodeAt(i)); };

    writeStr(view, 0, &#39;RIFF&#39;);
    view.setUint32(4, 36 + samples.length * 2, true);
    writeStr(view, 8, &#39;WAVE&#39;);
    writeStr(view, 12, &#39;fmt &#39;);
    view.setUint32(16, 16, true);
    view.setUint16(20, 1, true); // PCM 格式
    view.setUint16(22, 1, true); // 單聲道
    view.setUint32(24, sampleRate, true); // 動態真實取樣率
    view.setUint32(28, sampleRate * 2, true); // Byte rate
    view.setUint16(32, 2, true); // Block align
    view.setUint16(34, 16, true); // 16-bit
    writeStr(view, 36, &#39;data&#39;);
    view.setUint32(40, samples.length * 2, true);

    let idx = 44;
    for (let i = 0; i &amp;lt; samples.length; i++) {
      let s = Math.max(-1, Math.min(1, samples[i]));
      view.setInt16(idx, s &amp;lt; 0 ? s * 0x8000 : s * 0x7FFF, true);
      idx += 2;
    }
    return new Blob([view], { type: &#39;audio/wav&#39; });
  }
}

customElements.define(&#39;intercom-card&#39;, IntercomCard);

window.customCards = window.customCards || [];
window.customCards.push({
  type: &#39;intercom-card&#39;,
  name: &#39;Intercom Card&#39;,
  description: &#39;Universal Intercom &amp;amp; AI Broadcast Card&#39;,
  preview: true
});&lt;/code&gt;&lt;/pre&gt;

  &lt;hr style=&quot;border-color: rgb(226, 232, 240) currentcolor currentcolor; border-image: none; border-style: solid none none; border-top: 1px solid #e2e8f0; border-width: 1px 0px 0px; border: 0; margin: 30px 0px;&quot; /&gt;

  &lt;h2 style=&quot;border-left: 5px solid rgb(52, 152, 219); color: #2c3e50; font-size: 20px; padding-left: 12px;&quot;&gt;
    步驟三：儀表板卡片宣告
  &lt;/h2&gt;
  &lt;p&gt;在前端儀表板資源中引入 &lt;code&gt;/local/intercom/intercom-card.js&lt;/code&gt;（模組類型）後，卡片可直接加入任意視圖：&lt;/p&gt;

  &lt;pre style=&quot;background: rgb(30, 30, 30); border-radius: 8px; color: #d4d4d4; font-family: Consolas, Monaco, monospace; font-size: 13px; line-height: 1.5; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;type: custom:intercom-card&lt;/code&gt;&lt;/pre&gt;

  &lt;hr style=&quot;border-color: rgb(226, 232, 240) currentcolor currentcolor; border-image: none; border-style: solid none none; border-top: 1px solid #e2e8f0; border-width: 1px 0px 0px; border: 0; margin: 40px 0px 20px;&quot; /&gt;

  &lt;h3 style=&quot;color: #475569; font-size: 16px; margin-bottom: 8px;&quot;&gt;參考文獻 (References)&lt;/h3&gt;
  &lt;ol style=&quot;color: #64748b; font-size: 13px; line-height: 1.8;&quot;&gt;
    &lt;li&gt;&lt;strong&gt;Home Assistant Core Architecture &amp;amp; Shell Command Integration.&lt;/strong&gt; Home Assistant Official Documentation (2026). &lt;em&gt;Executing asynchronous payload ingestion and avoiding E2BIG system limits.&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Google Assistant SDK Integration for Home Assistant.&lt;/strong&gt; Home Assistant Core Components (2026). &lt;em&gt;Text-in / Multi-endpoint media_player array dispatching and conversational state handling.&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;W3C Audio Working Group.&lt;/strong&gt; Web Audio API Specifications (W3C Recommendation, 2021). &lt;em&gt;ScriptProcessorNode memory retention and dynamic client-side sample rate synthesis.&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;W3C Speech API Community Group.&lt;/strong&gt; Web Speech API Specification (Draft Report, 2023). &lt;em&gt;SpeechRecognition continuous stream tokenization and localized acoustic processing.&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;SqueezeLite &amp;amp; SlimProto Architecture.&lt;/strong&gt; Community Squeeze Open Documentation (2025). &lt;em&gt;Low-latency multi-room raw PCM streaming and dynamic endpoint synchronization.&lt;/em&gt;&lt;/li&gt;
  &lt;/ol&gt;

&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/7953336791960931168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/7953336791960931168'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/10/home-assistant-ai.html' title='Home Assistant「原聲廣播與 AI 對話」'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-9068930474613703972</id><published>2026-10-07T08:37:48.430+08:00</published><updated>2026-10-07T10:27:49.821+08:00</updated><title type='text'></title><content type='html'>&lt;style&gt;
  .esp-container { font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Helvetica, Arial, sans-serif; color: #333; line-height: 1.5; max-width: 800px; margin: 0 auto; }
  .esp-intro { font-size: 15px; margin-bottom: 20px; color: #555; }
  .esp-table { width: 100%; border-collapse: collapse; margin-top: 10px; background-color: #fff; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
  .esp-table th, .esp-table td { border: 1px solid #e0e0e0; padding: 10px 12px; text-align: left; vertical-align: middle; }
  .esp-table th { background-color: #f4f6f8; font-weight: bold; color: #2c3e50; font-size: 14px; }
  .esp-table td { font-size: 13px; }
  .esp-table tr:hover { background-color: #fafbfc; }
  .esp-link { color: #1a73e8; text-decoration: none; font-weight: 500; }
  .esp-link:hover { text-decoration: underline; }
  .size-tag { display: inline-block; padding: 2px 6px; background-color: #e8f0fe; color: #1a73e8; border-radius: 4px; font-weight: bold; font-size: 12px; }
  .addon-tag { display: inline-block; padding: 2px 6px; background-color: #fce8e6; color: #c5221f; border-radius: 4px; font-weight: bold; font-size: 12px; }
&lt;/style&gt;

&lt;div class=&quot;esp-container&quot;&gt;
  &lt;div _ngcontent-ng-c3547139851=&quot;&quot; aria-busy=&quot;false&quot; aria-live=&quot;off&quot; class=&quot;markdown markdown-main-panel md-content enable-luminous-fast-follows enable-updated-hr-color stronger&quot; dir=&quot;ltr&quot; id=&quot;model-response-message-contentr_bb7c20875e2b1d1d&quot; inline-copy-host=&quot;&quot; style=&quot;--animation-duration: 400ms; --fade-animation-function: ease-out; animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; color: #1f1f1f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 24px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;使用 &lt;b data-index-in-node=&quot;3&quot; data-path-to-node=&quot;2&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;ESP32-S3 (16MB Flash / 8MB PSRAM, 16R8)&lt;/b&gt; 打造隨身 Google / AI 語音終端並同時控制 Home Assistant，最佳的官方且免維護解法是透過 &lt;b data-index-in-node=&quot;100&quot; data-path-to-node=&quot;2&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;ESPHome 原生 Voice Assistant 管線&lt;/b&gt;，搭配 HA 已經架設好的 &lt;b data-index-in-node=&quot;143&quot; data-path-to-node=&quot;2&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Google Assistant SDK&lt;/b&gt; 與 &lt;b data-index-in-node=&quot;166&quot; data-path-to-node=&quot;2&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Assist 語音引擎&lt;/b&gt;。&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 24px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;8MB Octal PSRAM 能在本地提供充足的音訊雙向環形緩衝區，支援低延遲音訊串流與回音消除。&lt;/div&gt;&lt;br /&gt;&lt;h3 data-path-to-node=&quot;5&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 24px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;一、 核心硬體搭配建議&lt;/h3&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 24px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;隨身終端需具備雙向音訊功能：&lt;/div&gt;&lt;br /&gt;&lt;ul data-path-to-node=&quot;7&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding-inline-start: 32px; padding: 0px 24px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;核心晶片&lt;/b&gt;：ESP32-S3-WROOM-1 (16R8)&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;麥克風輸入&lt;/b&gt;：&lt;b data-index-in-node=&quot;6&quot; data-path-to-node=&quot;7,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;INMP441&lt;/b&gt; 或 &lt;b data-index-in-node=&quot;16&quot; data-path-to-node=&quot;7,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;MSM261S4030H0&lt;/b&gt;（I2S 數位麥克風）&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;音訊放大輸出&lt;/b&gt;：&lt;b data-index-in-node=&quot;7&quot; data-path-to-node=&quot;7,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;MAX98357A&lt;/b&gt;（I2S DAC 功放，接小喇叭）&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,3,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;實體按鍵&lt;/b&gt;：任一 GPIO（長按對講，類似對講機模式）或啟用 ESP-SR 本地喚醒詞（如「Okay Nabu」）&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-path-to-node=&quot;9&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 24px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;二、 系統架構流向（雙重路由架構）&lt;/h3&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 24px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;ESP32 不需要自行跑龐大的 AI 模型，而是將音訊串流直送 Home Assistant 擔任中央中樞：&lt;/div&gt;&lt;br /&gt;&lt;response-element class=&quot;no-md md-has-block-component&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 8px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;code-block _nghost-ng-c3484596924=&quot;&quot; class=&quot;ng-tns-c3484596924-40 enable-luminous-code-block ng-star-inserted&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;code-block ng-tns-c3484596924-40 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation&quot; data-hveid=&quot;0&quot; data-ved=&quot;0CAAQhtANahcKEwio0MKJy6aXAxUAAAAAHQAAAAAQHg&quot; decode-data-ved=&quot;1&quot; jslog=&quot;223238;track:impression,attention;BardVeMetadataKey:W1sicl9iYjdjMjA4NzVlMmIxZDFkIiwiY19kMzEwNmYyN2E1YTE3ZGQzIixudWxsLCJyY18xMjM3ZmVhMTc5OGRhZTNhIixudWxsLG51bGwsInpoIixudWxsLDEsbnVsbCxudWxsLDEsMV1d&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;formatted-code-block-internal-container ng-tns-c3484596924-40&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(0, 0, 0); border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 26px 0px 0px 32px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;animated-opacity ng-tns-c3484596924-40&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c3484596924-40 ng-star-inserted&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: -16px auto auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px 11px 0px 0px; page: auto; perspective: none; position: sticky; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;ng-tns-c3484596924-40&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Plaintext&lt;/span&gt;&lt;div _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;buttons ng-tns-c3484596924-40 ng-star-inserted&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;gem-icon-button _ngcontent-ng-c3484596924=&quot;&quot; _nghost-ng-c1686779544=&quot;&quot; aria-describedby=&quot;cdk-describedby-message-ng-1-18&quot; arialabel=&quot;下載程式碼&quot; cdk-describedby-host=&quot;ng-1&quot; class=&quot;mat-mdc-tooltip-trigger download-button ng-tns-c3484596924-40 gem-button gem-button-badge-size-small gem-button-size-small gem-button-type-on-surface lm-enabled is-mobile ng-star-inserted&quot; fonticonname=&quot;arrow_circle_down&quot; gemtooltip=&quot;下載程式碼&quot; size=&quot;small&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; tabindex=&quot;-1&quot; theme=&quot;lm&quot; type=&quot;onSurface&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;button _ngcontent-ng-c1686779544=&quot;&quot; aria-label=&quot;下載程式碼&quot; class=&quot;mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed _mat-animation-noopable mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted&quot; jslog=&quot;305704;track:generic_click,impression&quot; mat-ripple-loader-centered=&quot;&quot; mat-ripple-loader-class-name=&quot;mat-mdc-button-ripple&quot; mat-ripple-loader-uninitialized=&quot;&quot; matbadgeposition=&quot;after&quot; maticonbutton=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border-color: rgb(0, 0, 0); border-style: none; border-width: 0px; clear: none; clip: auto; color: black; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 24px; font-stretch: normal; font-style: normal; font-variation-settings: normal; font-weight: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 6px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: none; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;mat-mdc-button-persistent-ripple mdc-icon-button__ripple&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;gem-icon _ngcontent-ng-c1686779544=&quot;&quot; _nghost-ng-c496037088=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;mat-icon _ngcontent-ng-c496037088=&quot;&quot; aria-hidden=&quot;true&quot; class=&quot;mat-icon notranslate lm-icon-l lumi-symbols mat-ligature-font mat-icon-no-color ng-star-inserted&quot; data-mat-icon-name=&quot;arrow_circle_down&quot; data-mat-icon-namespace=&quot;lumi-symbols&quot; data-mat-icon-type=&quot;font&quot; fonticon=&quot;arrow_circle_down&quot; role=&quot;img&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(255, 255, 255); filter: none; flex-direction: row; flex: 0 0 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/mat-icon&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon&gt;&lt;!----&gt;&lt;span class=&quot;mat-focus-indicator&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mat-mdc-button-touch-target&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 17.9985px -30px -30px 17.9985px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: matrix(1, 0, 0, 1, -23.9993, -23.9993); transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon-button&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;gem-icon-button _ngcontent-ng-c3484596924=&quot;&quot; _nghost-ng-c1686779544=&quot;&quot; aria-describedby=&quot;cdk-describedby-message-ng-1-19&quot; arialabel=&quot;複製代碼&quot; cdk-describedby-host=&quot;ng-1&quot; class=&quot;mat-mdc-tooltip-trigger copy-button ng-tns-c3484596924-40 gem-button gem-button-badge-size-small gem-button-size-small gem-button-type-on-surface lm-enabled is-mobile ng-star-inserted&quot; data-test-id=&quot;gem-copy-button&quot; fonticonname=&quot;copy&quot; gemtooltip=&quot;複製代碼&quot; size=&quot;small&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; tabindex=&quot;-1&quot; theme=&quot;lm&quot; type=&quot;onSurface&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;button _ngcontent-ng-c1686779544=&quot;&quot; aria-label=&quot;複製代碼&quot; class=&quot;mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed _mat-animation-noopable mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted&quot; jslog=&quot;179062;track:generic_click,impression;BardVeMetadataKey:W1sicl9iYjdjMjA4NzVlMmIxZDFkIiwiY19kMzEwNmYyN2E1YTE3ZGQzIixudWxsLCJyY18xMjM3ZmVhMTc5OGRhZTNhIixudWxsLG51bGwsInpoIixudWxsLDEsbnVsbCxudWxsLDEsMV1d;mutable:true&quot; mat-ripple-loader-centered=&quot;&quot; mat-ripple-loader-class-name=&quot;mat-mdc-button-ripple&quot; mat-ripple-loader-uninitialized=&quot;&quot; matbadgeposition=&quot;after&quot; maticonbutton=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border-color: rgb(0, 0, 0); border-style: none; border-width: 0px; clear: none; clip: auto; color: black; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 24px; font-stretch: normal; font-style: normal; font-variation-settings: normal; font-weight: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 6px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: none; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;mat-mdc-button-persistent-ripple mdc-icon-button__ripple&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;gem-icon _ngcontent-ng-c1686779544=&quot;&quot; _nghost-ng-c496037088=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;mat-icon _ngcontent-ng-c496037088=&quot;&quot; aria-hidden=&quot;true&quot; class=&quot;mat-icon notranslate lm-icon-l lumi-symbols mat-ligature-font mat-icon-no-color ng-star-inserted&quot; data-mat-icon-name=&quot;copy&quot; data-mat-icon-namespace=&quot;lumi-symbols&quot; data-mat-icon-type=&quot;font&quot; fonticon=&quot;copy&quot; role=&quot;img&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(255, 255, 255); filter: none; flex-direction: row; flex: 0 0 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/mat-icon&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon&gt;&lt;!----&gt;&lt;span class=&quot;mat-focus-indicator&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mat-mdc-button-touch-target&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 17.9985px -30px -30px 17.9985px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: matrix(1, 0, 0, 1, -23.9993, -23.9993); transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon-button&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/div&gt;&lt;!----&gt;&lt;!----&gt;&lt;/div&gt;&lt;!----&gt;&lt;pre _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;ng-tns-c3484596924-40&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;code-container formatted ng-tns-c3484596924-40&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 16px 0px 32px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;[ESP32 麥克風] 
       │ (I2S 音訊串流 via WiFi)
       ▼
[Home Assistant Assist 語音管線] 
       │
       ├─►「開關客廳燈 / 查詢狀態」 ──► [HA 本地實體控制]
       │
       └─►「問天氣 / 知識 / 複雜問題」 ──► [Google Assistant SDK / Gemini] 
                                                  │
                                                  ▼ (合成音訊回傳)
                                           [ESP32 MAX98357A 喇叭發聲]
&lt;/code&gt;&lt;/pre&gt;&lt;!----&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/code-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;h3 data-path-to-node=&quot;13&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 24px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;三、 ESPHome 固件配置 (以 ESP32-S3 16R8 為基準)&lt;/h3&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 24px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;在 ESPHome 中為你的 ESP32-S3 建立如下配置，充分調用 8MB PSRAM 與 I2S 音訊通道：&lt;/div&gt;&lt;br /&gt;&lt;response-element class=&quot;no-md md-has-block-component&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 8px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;code-block _nghost-ng-c3484596924=&quot;&quot; class=&quot;ng-tns-c3484596924-41 enable-luminous-code-block ng-star-inserted&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;code-block ng-tns-c3484596924-41 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation&quot; data-hveid=&quot;0&quot; data-ved=&quot;0CAAQhtANahcKEwio0MKJy6aXAxUAAAAAHQAAAAAQHw&quot; decode-data-ved=&quot;1&quot; jslog=&quot;223238;track:impression,attention;BardVeMetadataKey:W1sicl9iYjdjMjA4NzVlMmIxZDFkIiwiY19kMzEwNmYyN2E1YTE3ZGQzIixudWxsLCJyY18xMjM3ZmVhMTc5OGRhZTNhIixudWxsLG51bGwsInpoIixudWxsLDEsbnVsbCxudWxsLDEsMV1d&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;formatted-code-block-internal-container ng-tns-c3484596924-41&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(0, 0, 0); border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 26px 0px 0px 32px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;animated-opacity ng-tns-c3484596924-41&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c3484596924-41 ng-star-inserted&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: -16px auto auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px 11px 0px 0px; page: auto; perspective: none; position: sticky; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;ng-tns-c3484596924-41&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;YAML&lt;/span&gt;&lt;div _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;buttons ng-tns-c3484596924-41 ng-star-inserted&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;gem-icon-button _ngcontent-ng-c3484596924=&quot;&quot; _nghost-ng-c1686779544=&quot;&quot; aria-describedby=&quot;cdk-describedby-message-ng-1-18&quot; arialabel=&quot;下載程式碼&quot; cdk-describedby-host=&quot;ng-1&quot; class=&quot;mat-mdc-tooltip-trigger download-button ng-tns-c3484596924-41 gem-button gem-button-badge-size-small gem-button-size-small gem-button-type-on-surface lm-enabled is-mobile ng-star-inserted&quot; fonticonname=&quot;arrow_circle_down&quot; gemtooltip=&quot;下載程式碼&quot; size=&quot;small&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; tabindex=&quot;-1&quot; theme=&quot;lm&quot; type=&quot;onSurface&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;button _ngcontent-ng-c1686779544=&quot;&quot; aria-label=&quot;下載程式碼&quot; class=&quot;mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed _mat-animation-noopable mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted&quot; jslog=&quot;305704;track:generic_click,impression&quot; mat-ripple-loader-centered=&quot;&quot; mat-ripple-loader-class-name=&quot;mat-mdc-button-ripple&quot; mat-ripple-loader-uninitialized=&quot;&quot; matbadgeposition=&quot;after&quot; maticonbutton=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border-color: rgb(0, 0, 0); border-style: none; border-width: 0px; clear: none; clip: auto; color: black; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 24px; font-stretch: normal; font-style: normal; font-variation-settings: normal; font-weight: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 6px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: none; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;mat-mdc-button-persistent-ripple mdc-icon-button__ripple&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;gem-icon _ngcontent-ng-c1686779544=&quot;&quot; _nghost-ng-c496037088=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;mat-icon _ngcontent-ng-c496037088=&quot;&quot; aria-hidden=&quot;true&quot; class=&quot;mat-icon notranslate lm-icon-l lumi-symbols mat-ligature-font mat-icon-no-color ng-star-inserted&quot; data-mat-icon-name=&quot;arrow_circle_down&quot; data-mat-icon-namespace=&quot;lumi-symbols&quot; data-mat-icon-type=&quot;font&quot; fonticon=&quot;arrow_circle_down&quot; role=&quot;img&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(255, 255, 255); filter: none; flex-direction: row; flex: 0 0 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/mat-icon&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon&gt;&lt;!----&gt;&lt;span class=&quot;mat-focus-indicator&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mat-mdc-button-touch-target&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 17.9985px -30px -30px 17.9985px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: matrix(1, 0, 0, 1, -23.9993, -23.9993); transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon-button&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;gem-icon-button _ngcontent-ng-c3484596924=&quot;&quot; _nghost-ng-c1686779544=&quot;&quot; aria-describedby=&quot;cdk-describedby-message-ng-1-19&quot; arialabel=&quot;複製代碼&quot; cdk-describedby-host=&quot;ng-1&quot; class=&quot;mat-mdc-tooltip-trigger copy-button ng-tns-c3484596924-41 gem-button gem-button-badge-size-small gem-button-size-small gem-button-type-on-surface lm-enabled is-mobile ng-star-inserted&quot; data-test-id=&quot;gem-copy-button&quot; fonticonname=&quot;copy&quot; gemtooltip=&quot;複製代碼&quot; size=&quot;small&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot; tabindex=&quot;-1&quot; theme=&quot;lm&quot; type=&quot;onSurface&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;button _ngcontent-ng-c1686779544=&quot;&quot; aria-label=&quot;複製代碼&quot; class=&quot;mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed _mat-animation-noopable mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted&quot; jslog=&quot;179062;track:generic_click,impression;BardVeMetadataKey:W1sicl9iYjdjMjA4NzVlMmIxZDFkIiwiY19kMzEwNmYyN2E1YTE3ZGQzIixudWxsLCJyY18xMjM3ZmVhMTc5OGRhZTNhIixudWxsLG51bGwsInpoIixudWxsLDEsbnVsbCxudWxsLDEsMV1d;mutable:true&quot; mat-ripple-loader-centered=&quot;&quot; mat-ripple-loader-class-name=&quot;mat-mdc-button-ripple&quot; mat-ripple-loader-uninitialized=&quot;&quot; matbadgeposition=&quot;after&quot; maticonbutton=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border-color: rgb(0, 0, 0); border-style: none; border-width: 0px; clear: none; clip: auto; color: black; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 24px; font-stretch: normal; font-style: normal; font-variation-settings: normal; font-weight: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 6px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: none; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;mat-mdc-button-persistent-ripple mdc-icon-button__ripple&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;gem-icon _ngcontent-ng-c1686779544=&quot;&quot; _nghost-ng-c496037088=&quot;&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 0 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;mat-icon _ngcontent-ng-c496037088=&quot;&quot; aria-hidden=&quot;true&quot; class=&quot;mat-icon notranslate lm-icon-l lumi-symbols mat-ligature-font mat-icon-no-color ng-star-inserted&quot; data-mat-icon-name=&quot;copy&quot; data-mat-icon-namespace=&quot;lumi-symbols&quot; data-mat-icon-type=&quot;font&quot; fonticon=&quot;copy&quot; role=&quot;img&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: flex; fill: rgb(255, 255, 255); filter: none; flex-direction: row; flex: 0 0 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/mat-icon&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon&gt;&lt;!----&gt;&lt;span class=&quot;mat-focus-indicator&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mat-mdc-button-touch-target&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(0, 0, 0); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: pointer; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: 17.9985px -30px -30px 17.9985px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(0, 0, 0) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: absolute; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(0, 0, 0); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: matrix(1, 0, 0, 1, -23.9993, -23.9993); transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/span&gt;&lt;/button&gt;&lt;!----&gt;&lt;!----&gt;&lt;/gem-icon-button&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/div&gt;&lt;!----&gt;&lt;!----&gt;&lt;/div&gt;&lt;!----&gt;&lt;pre _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;ng-tns-c3484596924-41&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code _ngcontent-ng-c3484596924=&quot;&quot; class=&quot;code-container formatted ng-tns-c3484596924-41&quot; data-test-id=&quot;code-content&quot; role=&quot;text&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 255, 255); clear: none; clip: auto; color: white; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: block; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans Text&amp;quot;, sans-serif; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 255, 255) none 2.85714px; overlay: none; padding: 16px 0px 32px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 255, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;esphome:&lt;/span&gt;
  &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;name:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;esp32-voice-terminal&lt;/span&gt;
  &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;friendly_name:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;隨身語音對講終端&quot;&lt;/span&gt;

&lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;esp32:&lt;/span&gt;
  &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;board:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;esp32-s3-devkitc-1&lt;/span&gt;
  &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;variant:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;esp32s3&lt;/span&gt;
  &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;framework:&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;type:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;esp-idf&lt;/span&gt;

&lt;span class=&quot;hljs-comment&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(128, 128, 128); clear: none; clip: auto; color: grey; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(128, 128, 128) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(128, 128, 128); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;# 啟用 16R8 的 Octal PSRAM (提供大音訊緩衝區，杜絕爆音中斷)&lt;/span&gt;
&lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;psram:&lt;/span&gt;
  &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;mode:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;octal&lt;/span&gt;
  &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;speed:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;80MHz&lt;/span&gt;

&lt;span class=&quot;hljs-comment&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(128, 128, 128); clear: none; clip: auto; color: grey; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(128, 128, 128) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(128, 128, 128); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;# I2S 雙向音訊匯流排&lt;/span&gt;
&lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;i2s_audio:&lt;/span&gt;
  &lt;span class=&quot;hljs-bullet&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(79, 160, 255); clear: none; clip: auto; color: #4fa0ff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(79, 160, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(79, 160, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;id:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;i2s_mic&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;i2s_lrclk_pin:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO4&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;i2s_bclk_pin:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO5&lt;/span&gt;
  &lt;span class=&quot;hljs-bullet&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(79, 160, 255); clear: none; clip: auto; color: #4fa0ff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(79, 160, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(79, 160, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;id:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;i2s_speaker&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;i2s_lrclk_pin:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO6&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;i2s_bclk_pin:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO7&lt;/span&gt;

&lt;span class=&quot;hljs-comment&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(128, 128, 128); clear: none; clip: auto; color: grey; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(128, 128, 128) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(128, 128, 128); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;# 麥克風 (INMP441)&lt;/span&gt;
&lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;microphone:&lt;/span&gt;
  &lt;span class=&quot;hljs-bullet&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(79, 160, 255); clear: none; clip: auto; color: #4fa0ff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(79, 160, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(79, 160, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;platform:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;i2s_audio&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;id:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;terminal_mic&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;i2s_audio_id:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;i2s_mic&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;i2s_din_pin:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO15&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;adc_type:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;external&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;pdm:&lt;/span&gt; &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;false&lt;/span&gt;

&lt;span class=&quot;hljs-comment&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(128, 128, 128); clear: none; clip: auto; color: grey; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(128, 128, 128) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(128, 128, 128); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;# 喇叭輸出 (MAX98357A)&lt;/span&gt;
&lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;speaker:&lt;/span&gt;
  &lt;span class=&quot;hljs-bullet&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(79, 160, 255); clear: none; clip: auto; color: #4fa0ff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(79, 160, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(79, 160, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;platform:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;i2s_audio&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;id:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;terminal_speaker&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;i2s_audio_id:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;i2s_speaker&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;i2s_dout_pin:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO16&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;dac_type:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;external&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;mode:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;mono&lt;/span&gt;

&lt;span class=&quot;hljs-comment&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(128, 128, 128); clear: none; clip: auto; color: grey; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(128, 128, 128) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(128, 128, 128); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;# Home Assistant 原生語音管線對接&lt;/span&gt;
&lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;voice_assistant:&lt;/span&gt;
  &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;microphone:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;terminal_mic&lt;/span&gt;
  &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;speaker:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;terminal_speaker&lt;/span&gt;
  &lt;span class=&quot;hljs-comment&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(128, 128, 128); clear: none; clip: auto; color: grey; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(128, 128, 128) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(128, 128, 128); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;# 實體長按發話按鍵，放開即發送&lt;/span&gt;
  &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;trigger_pin:&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;number:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;GPIO0&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;inverted:&lt;/span&gt; &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;true&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;mode:&lt;/span&gt;
      &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;input:&lt;/span&gt; &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;true&lt;/span&gt;
      &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;pullup:&lt;/span&gt; &lt;span class=&quot;hljs-literal&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;true&lt;/span&gt;

&lt;span class=&quot;hljs-comment&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(128, 128, 128); clear: none; clip: auto; color: grey; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(128, 128, 128) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(128, 128, 128); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;# 註冊為 HA 的 media_player (讓 HA 的其他自動化或廣播也能推播到此隨身機)&lt;/span&gt;
&lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;media_player:&lt;/span&gt;
  &lt;span class=&quot;hljs-bullet&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(79, 160, 255); clear: none; clip: auto; color: #4fa0ff; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(79, 160, 255) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(79, 160, 255); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;platform:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;speaker&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;name:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&quot;隨身語音終端喇叭&quot;&lt;/span&gt;
    &lt;span class=&quot;hljs-attr&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(255, 150, 218); clear: none; clip: auto; color: #ff96da; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(255, 150, 218) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(255, 150, 218); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;speaker:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px rgb(96, 214, 115); clear: none; clip: auto; color: #60d673; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(96, 214, 115) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(96, 214, 115); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;terminal_speaker&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;!----&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/code-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;&lt;h3 data-path-to-node=&quot;17&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-family: &amp;quot;Google Sans&amp;quot;, sans-serif; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 24px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;四、 Home Assistant 後端無縫銜接（同時控制設備與問 Google）&lt;/h3&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 24px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;當 ESP32 燒錄完成並連上 HA 後，它會被自動識別為一個原生 &lt;b data-index-in-node=&quot;34&quot; data-path-to-node=&quot;18&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Voice Assistant&lt;/b&gt; 與 &lt;b data-index-in-node=&quot;52&quot; data-path-to-node=&quot;18&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Media Player&lt;/b&gt;：&lt;/div&gt;&lt;br /&gt;&lt;ol data-path-to-node=&quot;19&quot; start=&quot;1&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding-inline-start: 32px; padding: 0px 24px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;控制 HA 設備&lt;/b&gt;：&lt;/div&gt;&lt;br /&gt;&lt;ul data-path-to-node=&quot;19,0,1&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding-inline-start: 32px; padding: 0px 0px 0px 3.36px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;前往 HA &lt;b data-index-in-node=&quot;6&quot; data-path-to-node=&quot;19,0,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;「設定」 -&amp;gt; 「語音助手（Voice Assistants）」&lt;/b&gt;。&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;將語音管線設定為 Home Assistant 預設引擎。&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;按下按鍵說「打開車庫燈」、「玄關冷氣設為 26 度」，HA 意圖引擎會直接執行指令。&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;問 Google / AI 對話&lt;/b&gt;：&lt;/div&gt;&lt;br /&gt;&lt;ul data-path-to-node=&quot;19,1,1&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding-inline-start: 32px; padding: 0px 0px 0px 3.36px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;在「語音助手」管線中，將「對話代理（Conversation agent）」指定為：&lt;/div&gt;&lt;br /&gt;&lt;ul data-path-to-node=&quot;19,1,1,0,1&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding-inline-start: 32px; padding: 0px 0px 0px 3.36px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;19,1,1,0,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Google Generative AI (Gemini)&lt;/b&gt;：處理百科問答、閒聊與邏輯推理。&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;或使用先前提到的 &lt;b data-index-in-node=&quot;9&quot; data-path-to-node=&quot;19,1,1,0,1,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Google Assistant SDK&lt;/b&gt; 作為 fallback。&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 36px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;div style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 2.85714px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 1.42857px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;當發問超出純開關控制的句子（如「今天台北天氣如何？」、「蕃茄炒蛋怎麼做？」），HA 會自動將問題轉給 AI，將回答音訊直接串流回 ESP32 的喇叭播放出來。&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;p class=&quot;esp-intro&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/9068930474613703972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/9068930474613703972'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/10/blog-post.html' title=''/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-8277922946966284170</id><published>2026-09-18T12:51:30.170+08:00</published><updated>2026-09-18T12:51:30.170+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="AI應用"/><title type='text'>雜項-AI應用 Windows 11 系統殘留清理</title><content type='html'>&lt;article style=&quot;color: #24292e; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; line-height: 1.6; margin: 0px auto; max-width: 860px; padding: 20px;&quot;&gt;
  &lt;header style=&quot;border-bottom: 2px solid rgb(234, 236, 239); margin-bottom: 24px; padding-bottom: 16px;&quot;&gt;
    &lt;h1 style=&quot;color: #1a1f2c; font-size: 28px; font-weight: 700; margin: 0px 0px 8px;&quot;&gt;🛠️ Windows 11 系統殘留清理與映像修復實戰指引&lt;/h1&gt;
    &lt;p style=&quot;color: #586069; font-size: 14px; margin: 0px;&quot;&gt;涵蓋無效驅動卸載、登錄檔孤兒項清理、DISM / SFC 修復與 PSModulePath 環境變數固化&lt;/p&gt;
  &lt;/header&gt;

  &lt;section style=&quot;margin-bottom: 28px;&quot;&gt;
    &lt;p style=&quot;font-size: 15px;&quot;&gt;在 Windows 11 長期使用或頻繁安裝/解除安裝大型軟體後，常在系統底層留下殘留驅動、失效的註冊表項、孤兒服務以及映像檔校驗異常。本篇整理一套標準、安全的逐項排查與修復流程，優先保護微軟與硬體晶片組核心 Runtime，精確清除純第三方殘留。&lt;/p&gt;
  &lt;/section&gt;

  &lt;section style=&quot;margin-bottom: 28px;&quot;&gt;
    &lt;h2 style=&quot;border-left: 4px solid rgb(3, 102, 214); font-size: 20px; margin-bottom: 14px; padding-left: 10px;&quot;&gt;一、 第三方儲存與介面卡驅動排查（DriverStore）&lt;/h2&gt;
    &lt;p style=&quot;font-size: 14px;&quot;&gt;Windows 內建的隨附驅動（如 &lt;code&gt;3ware.inf&lt;/code&gt;、&lt;code&gt;arcsas.inf&lt;/code&gt;、&lt;code&gt;iastorv.inf&lt;/code&gt; 等原生 Inbox 驅動）受 WRP 保護且無對應硬體時不耗用資源，無須也不可手動強制刪除。排查重點應放在由第三方軟體匯入的 &lt;code&gt;oem*.inf&lt;/code&gt; 套件。&lt;/p&gt;
    &lt;div style=&quot;background: rgb(246, 248, 250); border-radius: 6px; border: 1px solid rgb(225, 228, 232); font-family: Consolas, Monaco, monospace; font-size: 13px; margin: 10px 0px; overflow-x: auto; padding: 12px;&quot;&gt;
      &lt;span style=&quot;color: #6a737d;&quot;&gt;# 提升權限&lt;/span&gt;&lt;br /&gt;
      Get-WindowsDriver -Online -All | Where-Object { $_.ClassName -eq &#39;SCSIAdapter&#39; -and $_.Driver -like &#39;oem*.inf&#39; -and $_.ProviderName -notmatch &#39;AMD&#39; } | Select-Object Driver, ProviderName, ClassName, Date, Version | Format-Table -AutoSize
    &lt;/div&gt;
    &lt;ul style=&quot;font-size: 14px; margin: 8px 0px 0px 20px; padding: 0px;&quot;&gt;
      &lt;li&gt;&lt;b&gt;檢核方式：&lt;/b&gt;若輸出為空，代表驅動存放庫無多餘第三方陣列/儲存驅動；若有殘留項目，記錄其 &lt;code&gt;Driver&lt;/code&gt; 編號（例 &lt;code&gt;oemXX.inf&lt;/code&gt;）後執行 &lt;code&gt;pnputil /delete-driver oemXX.inf /force&lt;/code&gt; 卸載。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;

  &lt;section style=&quot;margin-bottom: 28px;&quot;&gt;
    &lt;h2 style=&quot;border-left: 4px solid rgb(3, 102, 214); font-size: 20px; margin-bottom: 14px; padding-left: 10px;&quot;&gt;二、 背景服務檔案有效性排查（Win32_Service）&lt;/h2&gt;
    &lt;p style=&quot;font-size: 14px;&quot;&gt;部分軟體解除安裝時未能正確註銷其 Windows Service，導致註冊表常駐但實體執行檔（&lt;code&gt;.exe&lt;/code&gt; / &lt;code&gt;.sys&lt;/code&gt;）已遺失。利用 WMI/CIM 檢查所有服務路徑的實體存在性：&lt;/p&gt;
    &lt;div style=&quot;background: rgb(246, 248, 250); border-radius: 6px; border: 1px solid rgb(225, 228, 232); font-family: Consolas, Monaco, monospace; font-size: 13px; margin: 10px 0px; overflow-x: auto; padding: 12px;&quot;&gt;
      &lt;span style=&quot;color: #6a737d;&quot;&gt;# 提升權限&lt;/span&gt;&lt;br /&gt;
      Get-CimInstance Win32_Service | Where-Object { $_.PathName -and -not (Test-Path ($_.PathName -replace &#39;^\s*&quot;([^&quot;]+)&quot;.*&#39;,&#39;$1&#39; -replace &#39;^(.*?)\s+[/|-].*$&#39;,&#39;$1&#39;).Trim()) } | Select-Object Name, DisplayName, State, StartMode, PathName | Format-Table -AutoSize
    &lt;/div&gt;
    &lt;ul style=&quot;font-size: 14px; margin: 8px 0px 0px 20px; padding: 0px;&quot;&gt;
      &lt;li&gt;&lt;b&gt;檢核方式：&lt;/b&gt;回傳空白代表全數服務檔案健全。若有遺失檔案的孤兒服務，可依序執行 &lt;code&gt;Stop-Service -Name &quot;服務名&quot; -Force&lt;/code&gt; 與 &lt;code&gt;sc.exe delete &quot;服務名&quot;&lt;/code&gt; 進行完全註銷。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;

  &lt;section style=&quot;margin-bottom: 28px;&quot;&gt;
    &lt;h2 style=&quot;border-left: 4px solid rgb(3, 102, 214); font-size: 20px; margin-bottom: 14px; padding-left: 10px;&quot;&gt;三、 開機自啟動無效登錄項稽核（Run 鍵值）&lt;/h2&gt;
    &lt;p style=&quot;font-size: 14px;&quot;&gt;稽核全域（&lt;code&gt;HKLM&lt;/code&gt;）、32位元相容區（&lt;code&gt;WOW6432Node&lt;/code&gt;）與目前使用者（&lt;code&gt;HKCU&lt;/code&gt;）下的啟動項，比對實體檔案是否仍存在。此處採純文字輸出，避免相依模組異常引發報錯：&lt;/p&gt;
    &lt;div style=&quot;background: rgb(246, 248, 250); border-radius: 6px; border: 1px solid rgb(225, 228, 232); font-family: Consolas, Monaco, monospace; font-size: 13px; margin: 10px 0px; overflow-x: auto; padding: 12px;&quot;&gt;
      &lt;span style=&quot;color: #6a737d;&quot;&gt;# 提升權限&lt;/span&gt;&lt;br /&gt;
      &quot;HKLM:\Software\Microsoft\Windows\CurrentVersion\Run&quot;, &quot;HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Run&quot;, &quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Run&quot; | ForEach-Object { $k = $_; if (Test-Path $k) { (Get-Item $k).GetValueNames() | ForEach-Object { $val = (Get-ItemProperty -Path $k -Name $_).$_; if ($val) { $raw = ($val -replace &#39;^\s*&quot;([^&quot;]+)&quot;.*&#39;,&#39;$1&#39; -replace &#39;^(.*?)\s+[/|-].*$&#39;,&#39;$1&#39;).Trim(); if (-not (Test-Path $raw)) { Write-Output &quot;[無效自啟動] 名稱: $_ | 路徑: $val | 登錄區: $k&quot; } } } } }
    &lt;/div&gt;
    &lt;ul style=&quot;font-size: 14px; margin: 8px 0px 0px 20px; padding: 0px;&quot;&gt;
      &lt;li&gt;&lt;b&gt;檢核方式：&lt;/b&gt;指令執行後直接換行且未輸出任何 &lt;code&gt;[無效自啟動]&lt;/code&gt;，即確認開機常駐無任何失效殘留。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;

  &lt;section style=&quot;margin-bottom: 28px;&quot;&gt;
    &lt;h2 style=&quot;border-left: 4px solid rgb(3, 102, 214); font-size: 20px; margin-bottom: 14px; padding-left: 10px;&quot;&gt;四、 底層映像庫快取清理與修復（DISM / SFC）&lt;/h2&gt;
    &lt;p style=&quot;font-size: 14px;&quot;&gt;針對 Windows 元件存放庫（WinSxS）進行舊版更新快取整合，並校驗核心系統映像：&lt;/p&gt;
    
    &lt;p style=&quot;font-size: 14px; font-weight: 600; margin: 12px 0px 4px;&quot;&gt;1. 清理舊版更新與驅動備份（釋放磁碟空間）&lt;/p&gt;
    &lt;div style=&quot;background: rgb(246, 248, 250); border-radius: 6px; border: 1px solid rgb(225, 228, 232); font-family: Consolas, Monaco, monospace; font-size: 13px; margin: 10px 0px; overflow-x: auto; padding: 12px;&quot;&gt;
      &lt;span style=&quot;color: #6a737d;&quot;&gt;# 提升權限&lt;/span&gt;&lt;br /&gt;
      dism.exe /online /cleanup-image /startcomponentcleanup /resetbase
    &lt;/div&gt;

    &lt;p style=&quot;font-size: 14px; font-weight: 600; margin: 12px 0px 4px;&quot;&gt;2. 檢查與線上修復映像檔&lt;/p&gt;
    &lt;div style=&quot;background: rgb(246, 248, 250); border-radius: 6px; border: 1px solid rgb(225, 228, 232); font-family: Consolas, Monaco, monospace; font-size: 13px; margin: 10px 0px; overflow-x: auto; padding: 12px;&quot;&gt;
      &lt;span style=&quot;color: #6a737d;&quot;&gt;# 提升權限&lt;/span&gt;&lt;br /&gt;
      dism.exe /online /cleanup-image /checkhealth&lt;br /&gt;
      dism.exe /online /cleanup-image /restorehealth
    &lt;/div&gt;
    &lt;ul style=&quot;font-size: 14px; margin: 8px 0px 0px 20px; padding: 0px;&quot;&gt;
      &lt;li&gt;&lt;b&gt;檢核方式：&lt;/b&gt;若 &lt;code&gt;checkhealth&lt;/code&gt; 提示「元件存放區是可修復的」，執行 &lt;code&gt;restorehealth&lt;/code&gt; 完成後再次檢測應轉為「未偵測到元件存放區損毀」。&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p style=&quot;font-size: 14px; font-weight: 600; margin: 12px 0px 4px;&quot;&gt;3. 本機系統檔案完整性檢查（SFC）&lt;/p&gt;
    &lt;div style=&quot;background: rgb(246, 248, 250); border-radius: 6px; border: 1px solid rgb(225, 228, 232); font-family: Consolas, Monaco, monospace; font-size: 13px; margin: 10px 0px; overflow-x: auto; padding: 12px;&quot;&gt;
      &lt;span style=&quot;color: #6a737d;&quot;&gt;# 提升權限&lt;/span&gt;&lt;br /&gt;
      sfc /scannow
    &lt;/div&gt;
    &lt;ul style=&quot;font-size: 14px; margin: 8px 0px 0px 20px; padding: 0px;&quot;&gt;
      &lt;li&gt;&lt;b&gt;檢核方式：&lt;/b&gt;日誌若出現「Repair complete」，可過濾 &lt;code&gt;CBS.log&lt;/code&gt; 確認具體變更。若日誌記載 &lt;code&gt;Repairing 0 components&lt;/code&gt;，代表僅為交易狀態校對，未有實體執行檔受損。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;

  &lt;section style=&quot;margin-bottom: 28px;&quot;&gt;
    &lt;h2 style=&quot;border-left: 4px solid rgb(3, 102, 214); font-size: 20px; margin-bottom: 14px; padding-left: 10px;&quot;&gt;五、 PowerShell 模組路徑環境變數修復（PSModulePath）&lt;/h2&gt;
    &lt;p style=&quot;font-size: 14px;&quot;&gt;若開啟 PowerShell 時原生 Cmdlet（如 &lt;code&gt;Format-Table&lt;/code&gt;、&lt;code&gt;Select-String&lt;/code&gt;）頻繁報錯 &lt;code&gt;CouldNotAutoloadMatchingModule&lt;/code&gt;，常見原因為第三方安裝程式覆蓋了全域環境變數，或 &lt;code&gt;%SystemRoot%&lt;/code&gt; 動態變數未能正確展開。可直接將展開後的官方實體路徑寫入系統層級變數：&lt;/p&gt;
    &lt;div style=&quot;background: rgb(246, 248, 250); border-radius: 6px; border: 1px solid rgb(225, 228, 232); font-family: Consolas, Monaco, monospace; font-size: 13px; margin: 10px 0px; overflow-x: auto; padding: 12px;&quot;&gt;
      &lt;span style=&quot;color: #6a737d;&quot;&gt;# 提升權限&lt;/span&gt;&lt;br /&gt;
      [Environment]::SetEnvironmentVariable(&quot;PSModulePath&quot;, &quot;C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules&quot;, &quot;Machine&quot;)
    &lt;/div&gt;
    &lt;ul style=&quot;font-size: 14px; margin: 8px 0px 0px 20px; padding: 0px;&quot;&gt;
      &lt;li&gt;&lt;b&gt;檢核方式：&lt;/b&gt;在 Windows Terminal 新增分頁或重新啟動 PowerShell，輸入 &lt;code&gt;Get-Command Format-Table&lt;/code&gt; 能正確輸出 &lt;code&gt;Cmdlet  Format-Table  Microsoft.PowerShell.Utility&lt;/code&gt; 且無紅字報錯。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;

  &lt;footer style=&quot;border-top: 1px solid rgb(234, 236, 239); color: #586069; font-size: 13px; padding-top: 14px;&quot;&gt;
    &lt;span&gt;✅ 結論：透過系統性盤點驅動、服務、啟動項與底層映像庫，能在零副作用前提下徹底清理系統殘留並確保 Windows 11 處於純淨健康基準。&lt;/span&gt;
  &lt;/footer&gt;
&lt;/article&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/8277922946966284170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/8277922946966284170'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/ai-windows-11.html' title='雜項-AI應用 Windows 11 系統殘留清理'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-7638010340772880903</id><published>2026-09-17T20:33:16.381+08:00</published><updated>2026-09-17T20:33:16.381+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="AI應用"/><title type='text'>雜項-AI應用 開源DNS</title><content type='html'>&lt;div style=&quot;color: #2d3748; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; line-height: 1.75; margin: 0px auto; max-width: 100%; padding: 12px;&quot;&gt;

  &lt;h2 style=&quot;border-bottom: 2px solid rgb(226, 232, 240); color: #1a202c; font-size: 1.5rem; font-weight: 700; margin-bottom: 20px; padding-bottom: 8px;&quot;&gt;
    🌐 公共 DNS 解析：主流與進階 DNS 特性全拆解
  &lt;/h2&gt;

  &lt;p style=&quot;font-size: 1rem; margin-bottom: 16px;&quot;&gt;
    選擇公共 DNS 伺服器時，除了網路實體延遲（Ping）外，核心差異主要在於「解析策略」、「威脅與內容過濾」以及「資安情報庫」。以下收錄 1.1.1.1 系列、9.9.9.9 以及其他值得採用的主流公共 DNS 進行深度拆解與橫向對比。
  &lt;/p&gt;

  &lt;h3 style=&quot;color: #2b6cb0; font-size: 1.25rem; font-weight: 600; margin-bottom: 12px; margin-top: 24px;&quot;&gt;
    ⚡ 1.1.1.1：極致低延遲與純隱私取向
  &lt;/h3&gt;
  &lt;ul style=&quot;list-style-type: none; margin-bottom: 16px; padding-left: 0px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🚀 &lt;strong&gt;核心定位&lt;/strong&gt;：極限提升網頁載入速度與連線反應時間。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🛡️ &lt;strong&gt;過濾機制&lt;/strong&gt;：❌ 無過濾。採完全放行原則，不論域名是否具有威脅性，皆忠實回傳原始 IP。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🔒 &lt;strong&gt;隱私保護&lt;/strong&gt;：由 Cloudflare 與 APNIC 合作營運，承諾不將使用者真實 IP 寫入永久日誌，且不販售任何瀏覽資料作為廣告分析。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🎯 &lt;strong&gt;適用族群&lt;/strong&gt;：線上遊戲玩家、追求 CDN 快顯極速載入、不希望任何域名解析受到干擾的純效能導向使用者。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3 style=&quot;color: #2b6cb0; font-size: 1.25rem; font-weight: 600; margin-bottom: 12px; margin-top: 24px;&quot;&gt;
    🛡️ 1.1.1.2：兼顧速度的主動惡意防護（1.1.1.1 for Families）
  &lt;/h3&gt;
  &lt;ul style=&quot;list-style-type: none; margin-bottom: 16px; padding-left: 0px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🚀 &lt;strong&gt;核心定位&lt;/strong&gt;：在維持 Cloudflare 本地節點低延遲的基礎上，提供第一線惡意域名阻斷。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🛡️ &lt;strong&gt;過濾機制&lt;/strong&gt;：✅ 自動阻擋惡意軟體、勒索病毒、釣魚網站及殭屍網路（C2）伺服器。攔截時直接將域名解析為 &lt;code&gt;0.0.0.0&lt;/code&gt;（IPv6 為 &lt;code&gt;::&lt;/code&gt;）。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🔞 &lt;strong&gt;內容限制&lt;/strong&gt;：僅針對惡意程式進行攔截，完全不干涉或過濾任何成人內容。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🎯 &lt;strong&gt;適用族群&lt;/strong&gt;：一般個人日常上網、常下載第三方模組或測試工具，希望享有極速瀏覽同時多一層資安護盾的使用者。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3 style=&quot;color: #2b6cb0; font-size: 1.25rem; font-weight: 600; margin-bottom: 12px; margin-top: 24px;&quot;&gt;
    👨‍👩‍👧‍👦 1.1.1.3：惡意軟體 ＋ 成人內容雙重過濾（家庭防護版）
  &lt;/h3&gt;
  &lt;ul style=&quot;list-style-type: none; margin-bottom: 16px; padding-left: 0px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🚀 &lt;strong&gt;核心定位&lt;/strong&gt;：專為家庭與孩童網路環境設計的綠色過濾節點。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🛡️ &lt;strong&gt;過濾機制&lt;/strong&gt;：✅ 包含 1.1.1.2 的所有惡意軟體攔截功能，並額外主動阻擋成人內容、色情網站及高風險露骨域名。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🔒 &lt;strong&gt;阻斷行為&lt;/strong&gt;：被判定為色情或惡意的域名同樣回傳 &lt;code&gt;0.0.0.0&lt;/code&gt;，阻斷瀏覽器存取。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🎯 &lt;strong&gt;適用族群&lt;/strong&gt;：家中有未成年孩童的家用路由器環境、學校或公共圖書館公用電腦。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3 style=&quot;color: #2b6cb0; font-size: 1.25rem; font-weight: 600; margin-bottom: 12px; margin-top: 24px;&quot;&gt;
    🏰 9.9.9.9：以資安威脅情報為本的深度防護（Quad9）
  &lt;/h3&gt;
  &lt;ul style=&quot;list-style-type: none; margin-bottom: 16px; padding-left: 0px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🚀 &lt;strong&gt;核心定位&lt;/strong&gt;：深度威脅阻斷與非營利中立資安防禦。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🛡️ &lt;strong&gt;過濾機制&lt;/strong&gt;：✅ 整合全球超過 20 家以上頂級網路安全威脅情報庫，若遭遇攻擊域名直接回傳 &lt;code&gt;NXDOMAIN&lt;/code&gt;。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;⚖️ &lt;strong&gt;非營利中立&lt;/strong&gt;：總部設於瑞士，嚴格遵循 GDPR 與瑞士隱私法規，無任何商業流量變現機制。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🎯 &lt;strong&gt;適用族群&lt;/strong&gt;：企業內網、對惡意連結與詐騙釣魚高度敏感，願以些微延遲換取權威資安防禦的使用者。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3 style=&quot;color: #2b6cb0; font-size: 1.25rem; font-weight: 600; margin-bottom: 12px; margin-top: 24px;&quot;&gt;
    🔍 8.8.8.8：高相容性與全球解析覆蓋（Google Public DNS）
  &lt;/h3&gt;
  &lt;ul style=&quot;list-style-type: none; margin-bottom: 16px; padding-left: 0px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🚀 &lt;strong&gt;核心定位&lt;/strong&gt;：業界標準參考系，具備極度龐大的全球節點容量與最佳解析相容性。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🛡️ &lt;strong&gt;過濾機制&lt;/strong&gt;：❌ 無過濾。不攔截惡意或成人內容，支援 ECS（EDNS-Client-Subnet）以實現更精準的 CDN 本地伺服器調度。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🎯 &lt;strong&gt;適用族群&lt;/strong&gt;：當其他新興 DNS 發生冷門網域解析異常時的最佳萬用備援、全球跨區開發者。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3 style=&quot;color: #2b6cb0; font-size: 1.25rem; font-weight: 600; margin-bottom: 12px; margin-top: 24px;&quot;&gt;
    🚫 94.140.14.14：系統級廣告與追蹤攔截（AdGuard DNS）
  &lt;/h3&gt;
  &lt;ul style=&quot;list-style-type: none; margin-bottom: 16px; padding-left: 0px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🚀 &lt;strong&gt;核心定位&lt;/strong&gt;：無需安裝外掛即可在全系統層級封鎖常見廣告與追蹤器。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🛡️ &lt;strong&gt;過濾機制&lt;/strong&gt;：✅ 自動阻擋網路廣告看板、分析計數器、追蹤代碼以及已知惡意網址。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🎯 &lt;strong&gt;適用族群&lt;/strong&gt;：智慧電視、遊戲主機等無法安裝擴充元件的設備，或希望全機阻擋擾人廣告的使用者。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3 style=&quot;color: #1a202c; font-size: 1.25rem; font-weight: 600; margin-bottom: 12px; margin-top: 28px;&quot;&gt;
    📊 熱門公共 DNS 規格與設定對照表
  &lt;/h3&gt;
  &lt;div style=&quot;margin-bottom: 24px; overflow-x: auto;&quot;&gt;
    &lt;table style=&quot;border-collapse: collapse; font-size: 0.9rem; text-align: left; width: 100%;&quot;&gt;
      &lt;thead&gt;
        &lt;tr style=&quot;background-color: #edf2f7; border-bottom: 2px solid rgb(203, 213, 224);&quot;&gt;
          &lt;th style=&quot;border: 1px solid rgb(226, 232, 240); padding: 10px 12px;&quot;&gt;服務名稱&lt;/th&gt;
          &lt;th style=&quot;border: 1px solid rgb(226, 232, 240); padding: 10px 12px;&quot;&gt;慣用 IPv4&lt;/th&gt;
          &lt;th style=&quot;border: 1px solid rgb(226, 232, 240); padding: 10px 12px;&quot;&gt;備援 IPv4&lt;/th&gt;
          &lt;th style=&quot;border: 1px solid rgb(226, 232, 240); padding: 10px 12px;&quot;&gt;惡意軟體阻擋&lt;/th&gt;
          &lt;th style=&quot;border: 1px solid rgb(226, 232, 240); padding: 10px 12px;&quot;&gt;成人內容過濾&lt;/th&gt;
          &lt;th style=&quot;border: 1px solid rgb(226, 232, 240); padding: 10px 12px;&quot;&gt;廣告追蹤阻擋&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr style=&quot;border-bottom: 1px solid rgb(226, 232, 240);&quot;&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); font-weight: 600; padding: 9px 12px;&quot;&gt;Cloudflare (純速度)&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;&lt;code&gt;1.1.1.1&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;&lt;code&gt;1.0.0.1&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;❌&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;❌&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;❌&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;background-color: #f7fafc; border-bottom: 1px solid rgb(226, 232, 240);&quot;&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); font-weight: 600; padding: 9px 12px;&quot;&gt;Cloudflare (安全防護)&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;&lt;code&gt;1.1.1.2&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;&lt;code&gt;1.0.0.2&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;✅&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;❌&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;❌&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;border-bottom: 1px solid rgb(226, 232, 240);&quot;&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); font-weight: 600; padding: 9px 12px;&quot;&gt;Cloudflare (家庭防護)&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;&lt;code&gt;1.1.1.3&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;&lt;code&gt;1.0.0.3&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;✅&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;✅&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;❌&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;background-color: #f7fafc; border-bottom: 1px solid rgb(226, 232, 240);&quot;&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); font-weight: 600; padding: 9px 12px;&quot;&gt;Quad9 (深度資安)&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;&lt;code&gt;9.9.9.9&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;&lt;code&gt;149.112.112.112&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;✅&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;❌&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;❌&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;border-bottom: 1px solid rgb(226, 232, 240);&quot;&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); font-weight: 600; padding: 9px 12px;&quot;&gt;Google Public DNS&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;&lt;code&gt;8.8.8.8&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;&lt;code&gt;8.8.4.4&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;❌&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;❌&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;❌&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;background-color: #f7fafc; border-bottom: 1px solid rgb(226, 232, 240);&quot;&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); font-weight: 600; padding: 9px 12px;&quot;&gt;AdGuard DNS&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;&lt;code&gt;94.140.14.14&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;&lt;code&gt;94.140.15.15&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;✅&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;❌&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 9px 12px;&quot;&gt;✅&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;h3 style=&quot;color: #1a202c; font-size: 1.25rem; font-weight: 600; margin-bottom: 12px; margin-top: 24px;&quot;&gt;
    💡 總結配置建議
  &lt;/h3&gt;
  &lt;ul style=&quot;list-style-type: none; margin-bottom: 16px; padding-left: 0px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;📌 &lt;strong&gt;極速防護平衡型&lt;/strong&gt;：慣用 &lt;code&gt;1.1.1.2&lt;/code&gt;，其他 &lt;code&gt;9.9.9.9&lt;/code&gt;。兼顧 Cloudflare 本地低延遲攔截與 Quad9 跨系統資安情資備援。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;📌 &lt;strong&gt;家庭與兒少保護型&lt;/strong&gt;：慣用 &lt;code&gt;1.1.1.3&lt;/code&gt;，其他 &lt;code&gt;1.0.0.3&lt;/code&gt;。直接在路由器端一鍵阻斷惡意與成人內容。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;📌 &lt;strong&gt;全域去廣告型&lt;/strong&gt;：慣用 &lt;code&gt;94.140.14.14&lt;/code&gt;，其他 &lt;code&gt;94.140.15.15&lt;/code&gt;。適合無法安裝擋廣告套件的設備。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;📌 &lt;strong&gt;極致連線穩定型&lt;/strong&gt;：慣用 &lt;code&gt;1.1.1.1&lt;/code&gt;，其他 &lt;code&gt;8.8.8.8&lt;/code&gt;。兼顧 Cloudflare 極限速度與 Google 龐大穩定的解析容錯能力。&lt;/li&gt;
  &lt;/ul&gt;

&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/7638010340772880903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/7638010340772880903'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/ai-dns.html' title='雜項-AI應用 開源DNS'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-1540809917222439595</id><published>2026-09-16T08:56:17.904+08:00</published><updated>2026-09-16T08:56:17.905+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="AI應用"/><title type='text'>雜項-AI應用 Windows 截圖</title><content type='html'>&lt;div style=&quot;font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, &#39;Helvetica Neue&#39;, Arial, sans-serif; line-height: 1.7; color: #333333; max-width: 800px; margin: 0 auto; padding: 15px;&quot;&gt;
  
  &lt;h2 style=&quot;color: #1a73e8; border-bottom: 2px solid #1a73e8; padding-bottom: 8px; margin-top: 20px; font-size: 1.5em;&quot;&gt;
    📌 導言：Windows 截圖到底存去哪了？
  &lt;/h2&gt;
  &lt;p style=&quot;margin-bottom: 16px;&quot;&gt;
    在 Windows 系統中，螢幕截圖的儲存行為依操作方式而異。許多人在使用快捷鍵框選截圖時，常遇到找不到存檔位置或不知道該去哪裡修改路徑的困擾。本文將完整說明如何更改預設存檔資料夾，以及剪取工具核心設定的差異。
  &lt;/p&gt;

  &lt;h2 style=&quot;color: #1a73e8; border-bottom: 2px solid #1a73e8; padding-bottom: 8px; margin-top: 30px; font-size: 1.5em;&quot;&gt;
    📂 方法一：修改「Win + PrintScreen」快捷鍵存檔路徑
  &lt;/h2&gt;
  &lt;p style=&quot;margin-bottom: 12px;&quot;&gt;
    使用鍵盤組合鍵 &lt;code&gt;Win + PrintScreen&lt;/code&gt; 進行全螢幕瞬間截圖時，圖檔會直接寫入系統預設資料夾，可依以下步驟搬移至其他磁碟槽：
  &lt;/p&gt;
  &lt;ul style=&quot;list-style-type: none; padding-left: 0; margin-bottom: 20px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;📁 &lt;strong&gt;開啟檔案總管&lt;/strong&gt;：按快捷鍵 &lt;code&gt;Win + E&lt;/code&gt;，展開左側導覽列的「圖片」資料夾。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;⚙️ &lt;strong&gt;進入內容設定&lt;/strong&gt;：在「螢幕擷取畫面（Screenshots）」資料夾上按滑鼠右鍵，點選「內容」。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;📍 &lt;strong&gt;切換位置分頁&lt;/strong&gt;：切換至視窗頂端的「位置」標籤頁。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;📦 &lt;strong&gt;變更儲存路徑&lt;/strong&gt;：點選「移動...」按鈕，選取目標硬碟目錄後點選「套用」。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;✅ &lt;strong&gt;確認搬移&lt;/strong&gt;：在系統跳出的提示視窗點選「是」，現有截圖將一併轉移至新目錄。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;color: #1a73e8; border-bottom: 2px solid #1a73e8; padding-bottom: 8px; margin-top: 30px; font-size: 1.5em;&quot;&gt;
    ✂️ 方法二：修改「剪取工具（Win + Shift + S）」預設儲存位置
  &lt;/h2&gt;
  &lt;div style=&quot;background-color: #fff8e1; border-left: 4px solid #ffb300; padding: 12px; margin-bottom: 16px; border-radius: 4px;&quot;&gt;
    ⚠️ &lt;strong&gt;注意：&lt;/strong&gt;按 &lt;code&gt;Win + Shift + S&lt;/code&gt; 彈出的「懸浮工具列」僅提供截圖模式切換（相機、錄影、框選），本身並不具備設定選單。必須啟動主程式方可調整。
  &lt;/div&gt;
  &lt;ul style=&quot;list-style-type: none; padding-left: 0; margin-bottom: 20px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🔍 &lt;strong&gt;開啟主程式&lt;/strong&gt;：按 &lt;code&gt;Win + S&lt;/code&gt; 搜尋「剪取工具」，按下 Enter 開啟完整應用程式視窗。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;⚙️ &lt;strong&gt;開啟設定&lt;/strong&gt;：點選視窗右上角選單「⋯（其他選項）」，進入「設定」。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;💾 &lt;strong&gt;指定存檔目錄&lt;/strong&gt;：展開「自動儲存原始螢幕擷取畫面」（需切換為開啟），點擊旁邊的「變更」按鈕指定目標資料夾。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;color: #1a73e8; border-bottom: 2px solid #1a73e8; padding-bottom: 8px; margin-top: 30px; font-size: 1.5em;&quot;&gt;
    ⚙️ 深入解析：剪取工具設定選項差異與影響
  &lt;/h2&gt;
  &lt;div style=&quot;overflow-x: auto; margin-bottom: 20px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: collapse; text-align: left; font-size: 0.95em;&quot;&gt;
      &lt;thead&gt;
        &lt;tr style=&quot;background-color: #f1f3f4; border-bottom: 2px solid #dadce0;&quot;&gt;
          &lt;th style=&quot;padding: 10px; border: 1px solid #dadce0;&quot;&gt;設定項目&lt;/th&gt;
          &lt;th style=&quot;padding: 10px; border: 1px solid #dadce0;&quot;&gt;功能說明&lt;/th&gt;
          &lt;th style=&quot;padding: 10px; border: 1px solid #dadce0;&quot;&gt;🟢 開啟狀態&lt;/th&gt;
          &lt;th style=&quot;padding: 10px; border: 1px solid #dadce0;&quot;&gt;⚪ 關閉狀態&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #dadce0; font-weight: bold;&quot;&gt;自動複製變更&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #dadce0;&quot;&gt;剪取工具內畫線、標註或裁切後，是否即時同步剪貼簿。&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #dadce0;&quot;&gt;標記後直接按 &lt;code&gt;Ctrl + V&lt;/code&gt; 即為最新版，省去手動複製步驟。&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #dadce0;&quot;&gt;剪貼簿僅保留原圖，需在編輯後手動點擊「📋 複製」圖示。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;background-color: #fafafa;&quot;&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #dadce0; font-weight: bold;&quot;&gt;自動儲存原始螢幕擷取畫面&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #dadce0;&quot;&gt;框選截圖完成時，是否即時於硬碟寫入未編輯圖檔。&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #dadce0;&quot;&gt;自動寫入硬碟資料夾備查，長期使用需定期整理檔案。&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #dadce0;&quot;&gt;不主動寫入硬碟，僅存在剪貼簿記憶體中，適合即用即貼。&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;h2 style=&quot;color: #1a73e8; border-bottom: 2px solid #1a73e8; padding-bottom: 8px; margin-top: 30px; font-size: 1.5em;&quot;&gt;
    💡 推薦設定組合
  &lt;/h2&gt;
  &lt;ul style=&quot;list-style-type: none; padding-left: 0; margin-bottom: 20px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;
      💬 &lt;strong&gt;通訊與即時文書（日常推薦）：&lt;/strong&gt;&lt;br&gt;
      啟用「自動複製變更」＋ 停用「自動儲存原始螢幕擷取畫面」。截圖編輯後可直接貼進通訊軟體或文件，避免硬碟累積多餘暫存圖。
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;
      🗄️ &lt;strong&gt;教學記錄與圖庫歸檔：&lt;/strong&gt;&lt;br&gt;
      啟用「自動儲存原始螢幕擷取畫面」，展開該項目設定存放磁區（例如非系統碟的大容量硬碟目錄），方便日後快速檢索。
    &lt;/li&gt;
  &lt;/ul&gt;

&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/1540809917222439595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/1540809917222439595'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/ai-windows.html' title='雜項-AI應用 Windows 截圖'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-3816119259046343899</id><published>2026-09-15T20:34:37.216+08:00</published><updated>2026-09-15T20:56:52.616+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="AI應用"/><title type='text'>雜項-AI應用 FFmpeg合併影片</title><content type='html'>&lt;div style=&quot;font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, &#39;Helvetica Neue&#39;, Arial, sans-serif; line-height: 1.7; color: #2d3748; max-width: 820px; margin: 0 auto; padding: 20px;&quot;&gt;

  &lt;h2 style=&quot;color: #1a202c; border-bottom: 2px solid #4a5568; padding-bottom: 8px; margin-top: 24px; margin-bottom: 16px;&quot;&gt;📌 實戰情境與核心目標&lt;/h2&gt;
  &lt;p style=&quot;margin-bottom: 16px;&quot;&gt;
    在 Windows 11 環境下為動態桌布（如 Lively Wallpaper）製作無縫輪播素材時，直接串接多支從網路（例如 Pexels）下載的 4K 60fps 影片，經常遇到時間戳錯位、片段過渡定格、音訊軌衝突，甚至片長異常膨脹的問題。
  &lt;/p&gt;
  &lt;p style=&quot;margin-bottom: 16px;&quot;&gt;
    本指南以真實除錯過程為範例，完整記錄如何正確部署 FFmpeg、解析多種合併策略的指令效用，克服 PowerShell 系統模組異常，並利用 Intel Arc 獨立顯卡（Quick Sync Video，QSV）硬體加速實現毫秒級無縫切換。
  &lt;/p&gt;

  &lt;h2 style=&quot;color: #1a202c; border-bottom: 2px solid #4a5568; padding-bottom: 8px; margin-top: 32px; margin-bottom: 16px;&quot;&gt;🛠️ 步驟一：Windows 11 終端機與 FFmpeg 快速部署&lt;/h2&gt;
  &lt;p style=&quot;margin-bottom: 16px;&quot;&gt;
    在指定資料夾內開啟終端機時，請避免直接在網址列輸入模糊指令以免誤開使用者設定目錄。正確且迅速的安裝與路徑開啟方式如下：
  &lt;/p&gt;

  &lt;h3 style=&quot;color: #2d3748; margin-top: 20px; margin-bottom: 12px;&quot;&gt;📂 精準開啟工作路徑之 PowerShell&lt;/h3&gt;
  &lt;ul style=&quot;list-style-type: none; padding-left: 0; margin-bottom: 16px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🔹 &lt;strong&gt;方法 A（檔案總管網址列）：&lt;/strong&gt;點擊資料夾路徑列，輸入 &lt;code&gt;powershell.exe&lt;/code&gt; 並按 Enter（加上 &lt;code&gt;.exe&lt;/code&gt; 可防止系統誤判為使用者文件目錄）。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🔹 &lt;strong&gt;方法 B（快捷選單）：&lt;/strong&gt;在資料夾空白處按住 &lt;kbd style=&quot;background: #edf2f7; padding: 2px 6px; border-radius: 4px; border: 1px solid #cbd5e0;&quot;&gt;Shift&lt;/kbd&gt; 鍵並點擊滑鼠右鍵，選擇「在終端機中開啟」。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;🔹 &lt;strong&gt;方法 C（CMD 原地切換）：&lt;/strong&gt;若目前處於命令提示字元，直接鍵入 &lt;code&gt;powershell&lt;/code&gt; 即可就地切換。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3 style=&quot;color: #2d3748; margin-top: 20px; margin-bottom: 12px;&quot;&gt;⚡ 一行指令安裝 FFmpeg&lt;/h3&gt;
  &lt;p style=&quot;margin-bottom: 8px;&quot;&gt;在 PowerShell 視窗內執行微軟官方套件管理工具：&lt;/p&gt;
  &lt;pre style=&quot;background: #1a202c; color: #edf2f7; padding: 14px; border-radius: 6px; overflow-x: auto; font-family: Consolas, Monaco, monospace; font-size: 14px; margin-bottom: 16px;&quot;&gt;&lt;code&gt;winget install Gyan.FFmpeg&lt;/code&gt;&lt;/pre&gt;
  &lt;p style=&quot;font-size: 14px; color: #718096; margin-bottom: 16px;&quot;&gt;
    ⚠️ 注意：安裝完成後必須&lt;strong&gt;關閉並重開終端機視窗&lt;/strong&gt;，新的系統環境變數（PATH）才會正式生效。
  &lt;/p&gt;

  &lt;h2 style=&quot;color: #1a202c; border-bottom: 2px solid #4a5568; padding-bottom: 8px; margin-top: 32px; margin-bottom: 16px;&quot;&gt;🔍 過程試誤與實例解說（Troubleshooting）&lt;/h2&gt;

  &lt;div style=&quot;background-color: #fff5f5; border-left: 4px solid #e53e3e; padding: 14px; margin-bottom: 16px; border-radius: 0 4px 4px 0;&quot;&gt;
    &lt;strong style=&quot;color: #c53030;&quot;&gt;❌ 試誤案例 1：PowerShell 核心模組無法載入（Out-File / Invoke-Expression）&lt;/strong&gt;
    &lt;p style=&quot;margin-top: 6px; margin-bottom: 6px; font-size: 14px;&quot;&gt;
      &lt;strong&gt;現象：&lt;/strong&gt;執行 &lt;code&gt;Out-File&lt;/code&gt; 或 &lt;code&gt;Invoke-Expression&lt;/code&gt; 動態字串時，拋出 &lt;code&gt;CouldNotAutoloadMatchingModule: Microsoft.PowerShell.Utility&lt;/code&gt; 錯誤。
    &lt;/p&gt;
    &lt;p style=&quot;margin-bottom: 0; font-size: 14px;&quot;&gt;
      &lt;strong&gt;原因與對策：&lt;/strong&gt;環境的系統工具模組受損或受群組原則限制。匯出文字檔時應改用純管線重導向 &lt;code&gt;&amp;gt;&lt;/code&gt;，執行字串命令時改用 &lt;code&gt;&amp;amp; cmd.exe /c $cmd&lt;/code&gt; 或直接貼上完整展開的指令。
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background-color: #fffaf0; border-left: 4px solid #dd6b20; padding: 14px; margin-bottom: 16px; border-radius: 0 4px 4px 0;&quot;&gt;
    &lt;strong style=&quot;color: #c05621;&quot;&gt;❌ 試誤案例 2：串接切換處「定格靜止」&lt;/strong&gt;
    &lt;p style=&quot;margin-top: 6px; margin-bottom: 6px; font-size: 14px;&quot;&gt;
      &lt;strong&gt;現象：&lt;/strong&gt;使用 &lt;code&gt;-c copy&lt;/code&gt; 進行無損串接，影片在 22 秒處畫面瞬間定格，直到下一個片段才恢復播放。
    &lt;/p&gt;
    &lt;p style=&quot;margin-bottom: 0; font-size: 14px;&quot;&gt;
      &lt;strong&gt;原因與對策：&lt;/strong&gt;各原始影片的關鍵影格（Keyframe / GOP）間隔不同，未重新編碼時解碼器無法在無 I 幀的銜接點解碼。必須利用 GPU 硬體編碼強制固定 &lt;code&gt;-g 60 -r 60&lt;/code&gt;。
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background-color: #ebf8ff; border-left: 4px solid #3182ce; padding: 14px; margin-bottom: 20px; border-radius: 0 4px 4px 0;&quot;&gt;
    &lt;strong style=&quot;color: #2b6cb0;&quot;&gt;❌ 試誤案例 3：總片長異常膨脹（50秒暴增至2分51秒）&lt;/strong&gt;
    &lt;p style=&quot;margin-top: 6px; margin-bottom: 6px; font-size: 14px;&quot;&gt;
      &lt;strong&gt;現象：&lt;/strong&gt;3 支影片時長分別為 22s、22s、6s，理論總長 50s，合併後卻拉長為 171s 且充斥靜止畫面。
    &lt;/p&gt;
    &lt;p style=&quot;margin-bottom: 0; font-size: 14px;&quot;&gt;
      &lt;strong&gt;原因與對策：&lt;/strong&gt;網路素材部分帶有隱藏無聲長音軌、部分無音軌，且直向（2160×3840）與橫向（3840×2160）尺寸衝突導致解碼器時間戳（PTS/DTS）失步。必須使用 &lt;code&gt;setpts=PTS-STARTPTS&lt;/code&gt; 重置時間戳並加上 &lt;code&gt;-an&lt;/code&gt; 剔除音軌。
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;h2 style=&quot;color: #1a202c; border-bottom: 2px solid #4a5568; padding-bottom: 8px; margin-top: 32px; margin-bottom: 16px;&quot;&gt;🚀 FFmpeg 常見指令與效用全覽&lt;/h2&gt;

  &lt;table style=&quot;width: 100%; border-collapse: collapse; margin-bottom: 20px; font-size: 14px;&quot;&gt;
    &lt;thead&gt;
      &lt;tr style=&quot;background-color: #edf2f7; text-align: left;&quot;&gt;
        &lt;th style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;指令／參數&lt;/th&gt;
        &lt;th style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;功能類型&lt;/th&gt;
        &lt;th style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;實際效用說明&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;&lt;code&gt;-f concat -safe 0&lt;/code&gt;&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;分離器調用&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;指定以清單模式合併檔案，&lt;code&gt;-safe 0&lt;/code&gt; 允許包含底線等特殊檔名與相對路徑。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;&lt;code&gt;-c copy&lt;/code&gt;&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;流複製模式&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;不經 CPU/GPU 轉碼直接拼裝。耗時僅 1 秒且畫質 100% 無損，但要求所有素材編碼與長寬完全一致。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;&lt;code&gt;-c:v h264_qsv&lt;/code&gt;&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;硬體加速編碼&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;調用 Intel Arc 顯卡之 Quick Sync 獨立硬體編碼單元，大幅降低 CPU 負擔並極速壓制。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;&lt;code&gt;-global_quality 20&lt;/code&gt;&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;畫質控制&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;QSV 專屬視覺無損品質模式。數值越低品質越高，20 可確保 4K 畫面維持清晰無色塊。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;&lt;code&gt;-g 60 -r 60&lt;/code&gt;&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;影格與 GOP 鎖定&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;鎖定每秒 60 幀，並每秒插入一個完整關鍵影格（I 幀），徹底消除場景過渡時的畫面定格。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;&lt;code&gt;setpts=PTS-STARTPTS&lt;/code&gt;&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;時間戳重置&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;將各片段播放時間戳從零重新計算，防止時間軸跳躍與異常膨脹。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;&lt;code&gt;scale ... pad&lt;/code&gt;&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;畫面適配濾鏡&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;自動將直向與橫向素材等比例縮放並置中填滿 3840×2160，避免畫面拉伸變形或解析度不一致崩潰。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;&lt;code&gt;-an&lt;/code&gt; / &lt;code&gt;a=0&lt;/code&gt;&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;音訊剔除&lt;/td&gt;
        &lt;td style=&quot;padding: 10px; border: 1px solid #cbd5e0;&quot;&gt;完全移除音軌。桌布影片不需要聲音，剔除音訊可 100% 杜絕影音不同步造成的切換停頓。&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

  &lt;h2 style=&quot;color: #1a202c; border-bottom: 2px solid #4a5568; padding-bottom: 8px; margin-top: 32px; margin-bottom: 16px;&quot;&gt;💡 最佳實踐指令範例&lt;/h2&gt;

  &lt;h3 style=&quot;color: #2d3748; margin-top: 20px; margin-bottom: 12px;&quot;&gt;情境 A：規格完全一致時之「極速無損串接」&lt;/h3&gt;
  &lt;p style=&quot;margin-bottom: 8px;&quot;&gt;首先建立 &lt;code&gt;files.txt&lt;/code&gt;，內容為：&lt;/p&gt;
  &lt;pre style=&quot;background: #1a202c; color: #edf2f7; padding: 12px; border-radius: 6px; font-family: Consolas, Monaco, monospace; font-size: 13px; margin-bottom: 12px;&quot;&gt;&lt;code&gt;file &#39;1.mp4&#39;
file &#39;2.mp4&#39;
file &#39;3.mp4&#39;&lt;/code&gt;&lt;/pre&gt;
  &lt;p style=&quot;margin-bottom: 8px;&quot;&gt;執行指令（耗時約 1~2 秒）：&lt;/p&gt;
  &lt;pre style=&quot;background: #1a202c; color: #edf2f7; padding: 14px; border-radius: 6px; overflow-x: auto; font-family: Consolas, Monaco, monospace; font-size: 14px; margin-bottom: 20px;&quot;&gt;&lt;code&gt;ffmpeg -f concat -safe 0 -i files.txt -fflags +genpts -c copy output_lossless.mp4&lt;/code&gt;&lt;/pre&gt;

  &lt;h3 style=&quot;color: #2d3748; margin-top: 20px; margin-bottom: 12px;&quot;&gt;情境 B：11 支素材跨長寬／時間戳／去音軌之「多片段 QSV 無縫合併」&lt;/h3&gt;
  &lt;p style=&quot;margin-bottom: 8px;&quot;&gt;
    將素材整理為 &lt;code&gt;1.mp4&lt;/code&gt; 至 &lt;code&gt;11.mp4&lt;/code&gt;，使用 Filter Complex 串接濾鏡，同時完成畫面自適應、時間戳重置並調用 Intel Arc QSV 硬體編碼：
  &lt;/p&gt;

  &lt;h4 style=&quot;color: #4a5568; margin-top: 16px; margin-bottom: 8px;&quot;&gt;寫法 1：PowerShell 陣列組裝（繞過模組限制執行）&lt;/h4&gt;
  &lt;pre style=&quot;background: #1a202c; color: #edf2f7; padding: 14px; border-radius: 6px; overflow-x: auto; font-family: Consolas, Monaco, monospace; font-size: 13px; margin-bottom: 16px;&quot;&gt;&lt;code&gt;$inputs = 1..11 | ForEach-Object { &quot;-i `&quot;$_.mp4`&quot;&quot; }
$filter_scale = 0..10 | ForEach-Object { &quot;[$_:v]setpts=PTS-STARTPTS,fps=60,scale=3840:2160:force_original_aspect_ratio=decrease,pad=3840:2160:(ow-iw)/2:(oh-ih)/2[v$_]&quot; }
$filter_concat = (0..10 | ForEach-Object { &quot;[v$_]&quot; }) -join &#39;&#39;
$filter_complex = ($filter_scale -join &#39;; &#39;) + &quot;; ${filter_concat}concat=n=11:v=1:a=0[v]&quot;
$cmd = &quot;ffmpeg $inputs -filter_complex `&quot;$filter_complex`&quot; -map `&quot;[v]`&quot; -c:v h264_qsv -global_quality 20 -an Combined_11_Seamless_4K.mp4&quot;

&amp;amp; cmd.exe /c $cmd&lt;/code&gt;&lt;/pre&gt;

  &lt;h4 style=&quot;color: #4a5568; margin-top: 16px; margin-bottom: 8px;&quot;&gt;寫法 2：單行直接展開指令（最穩健、免任何腳本語言環境）&lt;/h4&gt;
  &lt;pre style=&quot;background: #1a202c; color: #edf2f7; padding: 14px; border-radius: 6px; overflow-x: auto; font-family: Consolas, Monaco, monospace; font-size: 12px; margin-bottom: 20px;&quot;&gt;&lt;code&gt;ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.mp4 -i 5.mp4 -i 6.mp4 -i 7.mp4 -i 8.mp4 -i 9.mp4 -i 10.mp4 -i 11.mp4 -filter_complex &quot;[0:v]setpts=PTS-STARTPTS,fps=60,scale=3840:2160:force_original_aspect_ratio=decrease,pad=3840:2160:(ow-iw)/2:(oh-ih)/2[v0]; [1:v]setpts=PTS-STARTPTS,fps=60,scale=3840:2160:force_original_aspect_ratio=decrease,pad=3840:2160:(ow-iw)/2:(oh-ih)/2[v1]; [2:v]setpts=PTS-STARTPTS,fps=60,scale=3840:2160:force_original_aspect_ratio=decrease,pad=3840:2160:(ow-iw)/2:(oh-ih)/2[v2]; [3:v]setpts=PTS-STARTPTS,fps=60,scale=3840:2160:force_original_aspect_ratio=decrease,pad=3840:2160:(ow-iw)/2:(oh-ih)/2[v3]; [4:v]setpts=PTS-STARTPTS,fps=60,scale=3840:2160:force_original_aspect_ratio=decrease,pad=3840:2160:(ow-iw)/2:(oh-ih)/2[v4]; [5:v]setpts=PTS-STARTPTS,fps=60,scale=3840:2160:force_original_aspect_ratio=decrease,pad=3840:2160:(ow-iw)/2:(oh-ih)/2[v5]; [6:v]setpts=PTS-STARTPTS,fps=60,scale=3840:2160:force_original_aspect_ratio=decrease,pad=3840:2160:(ow-iw)/2:(oh-ih)/2[v6]; [7:v]setpts=PTS-STARTPTS,fps=60,scale=3840:2160:force_original_aspect_ratio=decrease,pad=3840:2160:(ow-iw)/2:(oh-ih)/2[v7]; [8:v]setpts=PTS-STARTPTS,fps=60,scale=3840:2160:force_original_aspect_ratio=decrease,pad=3840:2160:(ow-iw)/2:(oh-ih)/2[v8]; [9:v]setpts=PTS-STARTPTS,fps=60,scale=3840:2160:force_original_aspect_ratio=decrease,pad=3840:2160:(ow-iw)/2:(oh-ih)/2[v9]; [10:v]setpts=PTS-STARTPTS,fps=60,scale=3840:2160:force_original_aspect_ratio=decrease,pad=3840:2160:(ow-iw)/2:(oh-ih)/2[v10]; [v0][v1][v2][v3][v4][v5][v6][v7][v8][v9][v10]concat=n=11:v=1:a=0[v]&quot; -map &quot;[v]&quot; -c:v h264_qsv -global_quality 20 -an Combined_11_Seamless_4K.mp4&lt;/code&gt;&lt;/pre&gt;

  &lt;h2 style=&quot;color: #1a202c; border-bottom: 2px solid #4a5568; padding-bottom: 8px; margin-top: 32px; margin-bottom: 16px;&quot;&gt;📝 操作檢核清單（Checklist）&lt;/h2&gt;
  &lt;ul style=&quot;list-style-type: none; padding-left: 0; margin-bottom: 16px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;✅ 檔案命名是否簡化（如 &lt;code&gt;1.mp4&lt;/code&gt;～&lt;code&gt;11.mp4&lt;/code&gt;），避免引數解析時因空格或長檔名遺漏出錯。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;✅ 產出之 &lt;code&gt;Combined_11_Seamless_4K.mp4&lt;/code&gt; 總時長是否與各分段加總完全相符。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;✅ 隨機拖曳進度條至各銜接點，確認畫面無微卡頓、無定格等待且音軌已完全剝離。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;✅ 拖入 Lively Wallpaper 設為動態桌布後，確認顯卡 GPU 解碼器（Xe Media Engine）順暢接手運作。&lt;/li&gt;
  &lt;/ul&gt;

&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/3816119259046343899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/3816119259046343899'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/ai-ffmpeg.html' title='雜項-AI應用 FFmpeg合併影片'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-8661698605612828579</id><published>2026-09-15T11:38:45.642+08:00</published><updated>2026-09-15T12:24:10.764+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="AI應用"/><title type='text'>雜項-AI應用 PowerToys 項目功能</title><content type='html'>&lt;div style=&quot;font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, Helvetica, Arial, sans-serif; line-height: 1.7; color: #2d3748; max-width: 100%; margin: 0 auto; padding: 12px;&quot;&gt;

  &lt;h2 style=&quot;font-size: 1.6rem; color: #1a202c; border-bottom: 3px solid #3182ce; padding-bottom: 8px; margin-bottom: 18px;&quot;&gt;PowerToys (v0.101.2362) 系統工具分類與公用程式全功能圖文解析&lt;/h2&gt;

  &lt;p style=&quot;margin-bottom: 24px;&quot;&gt;本篇以側邊導覽列&lt;strong&gt;「系統工具」&lt;/strong&gt;的 10 項核心子模組為優先，進行深入圖文解析；第二部分則排除重疊項，完整收錄右側「公用程式」其餘 23 項獨立模組，各項目標題前均配有直觀對應的圖示符號。&lt;/p&gt;

  &lt;!-- 第一部分：左側「系統工具」分類 --&gt;
  &lt;h3 style=&quot;font-size: 1.3rem; color: #2b6cb0; border-left: 4px solid #3182ce; padding-left: 10px; margin-top: 28px; margin-bottom: 16px;&quot;&gt;一、 左側「系統工具」子項目深度解析 (共 10 項)&lt;/h3&gt;

  &lt;div style=&quot;display: flex; flex-direction: column; gap: 20px; margin-bottom: 32px;&quot;&gt;

    &lt;!-- 進階貼上 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-size: 1.1rem; font-weight: bold; color: #2d3748;&quot;&gt;📋 1. 進階貼上 (Advanced Paste)&lt;/span&gt;
        &lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 8px; font-size: 0.85rem;&quot;&gt;Win + Shift + V&lt;/kbd&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 12px; margin-bottom: 12px; font-family: monospace; font-size: 0.88rem; color: #4a5568;&quot;&gt;
          [剪貼簿文字] &amp;rarr; [進階貼上面板: 純文字 / Markdown / JSON / AI 轉換] &amp;rarr; [直接貼入目標]
        &lt;/div&gt;
        &lt;ul style=&quot;margin: 0; padding-left: 20px; font-size: 0.95rem; color: #4a5568;&quot;&gt;
          &lt;li&gt;&lt;strong&gt;核心功能&lt;/strong&gt;：剪貼簿格式轉換中樞，可一鍵轉為純文字、Markdown、JSON，或透過本機/雲端 AI 模型即時改寫、摘要。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;應用實例&lt;/strong&gt;：從排版混亂的網頁複製內文時，直接貼成乾淨純文字；或將 Excel 儲存格一鍵轉換為 Markdown 表格。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;配置建議&lt;/strong&gt;：&lt;strong style=&quot;color: #2b6cb0;&quot;&gt;強烈推薦開啟&lt;/strong&gt;（日常文書排版效率翻倍）。&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Awake --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-size: 1.1rem; font-weight: bold; color: #2d3748;&quot;&gt;☕ 2. Awake (喚醒)&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;工作列圖示常駐&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 12px; margin-bottom: 12px; font-family: monospace; font-size: 0.88rem; color: #4a5568;&quot;&gt;
          [工作列右鍵咖啡杯圖示] &amp;rarr; [設定: 保持喚醒 30 分 / 1 小時 / 無限期] &amp;rarr; [螢幕與主機不進入休眠]
        &lt;/div&gt;
        &lt;ul style=&quot;margin: 0; padding-left: 20px; font-size: 0.95rem; color: #4a5568;&quot;&gt;
          &lt;li&gt;&lt;strong&gt;核心功能&lt;/strong&gt;：在系統匣快速阻止電腦休眠或螢幕關閉，免進 Windows 設定頻繁修改電源計畫。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;應用實例&lt;/strong&gt;：掛機下載遊戲大檔、跑 batch 轉檔或跑本地 AI 模型運算時，防止休眠中斷。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;配置建議&lt;/strong&gt;：&lt;strong style=&quot;color: #2b6cb0;&quot;&gt;強烈推薦開啟&lt;/strong&gt;（長時間下載或轉檔必備）。&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 命令選擇區 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-size: 1.1rem; font-weight: bold; color: #2d3748;&quot;&gt;⚡ 3. 命令選擇區 (Command Palette)&lt;/span&gt;
        &lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 8px; font-size: 0.85rem;&quot;&gt;Win + Alt + Space&lt;/kbd&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 12px; margin-bottom: 12px; font-family: monospace; font-size: 0.88rem; color: #4a5568;&quot;&gt;
          [快捷鍵喚醒置中面板] &amp;rarr; [鍵入系統指令或功能關鍵字] &amp;rarr; [Enter 秒級直達設定]
        &lt;/div&gt;
        &lt;ul style=&quot;margin: 0; padding-left: 20px; font-size: 0.95rem; color: #4a5568;&quot;&gt;
          &lt;li&gt;&lt;strong&gt;核心功能&lt;/strong&gt;：現代化快速指令與全域搜尋中樞，透過鍵盤極速呼叫系統設定或切換模組。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;應用實例&lt;/strong&gt;：全鍵盤流直接切換深淺模式、關閉網路或啟動特定工具，免用滑鼠在控制台翻找。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;配置建議&lt;/strong&gt;：&lt;span style=&quot;color: #4a5568;&quot;&gt;建議開啟體驗&lt;/span&gt;（鍵盤流進階用戶推薦）。&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 顏色選擇器 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-size: 1.1rem; font-weight: bold; color: #2d3748;&quot;&gt;🎨 4. 顏色選擇器 (Color Picker)&lt;/span&gt;
        &lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 8px; font-size: 0.85rem;&quot;&gt;Win + Shift + C&lt;/kbd&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 12px; margin-bottom: 12px; font-family: monospace; font-size: 0.88rem; color: #4a5568;&quot;&gt;
          [啟動放大鏡游標] &amp;rarr; [目標像素點擊左鍵] &amp;rarr; [自動複製 #HEX 色碼並開啟調色盤]
        &lt;/div&gt;
        &lt;ul style=&quot;margin: 0; padding-left: 20px; font-size: 0.95rem; color: #4a5568;&quot;&gt;
          &lt;li&gt;&lt;strong&gt;核心功能&lt;/strong&gt;：全螢幕螢幕取色滴管工具，支援 HEX、RGB、CMYK 等格式轉換並內建歷史調色盤。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;應用實例&lt;/strong&gt;：在網站或投影片看見出色的配色，一鍵吸取色碼貼入簡報軟體使用。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;配置建議&lt;/strong&gt;：&lt;strong style=&quot;color: #2b6cb0;&quot;&gt;排版與設計必開&lt;/strong&gt;。&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Light Switch --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-size: 1.1rem; font-weight: bold; color: #2d3748;&quot;&gt;🌓 5. Light Switch&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;系統自動化排程&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 12px; margin-bottom: 12px; font-family: monospace; font-size: 0.88rem; color: #4a5568;&quot;&gt;
          [日間日出時間: 淺色高對比] &amp;rarr; [傍晚日落時間: 自動切換深色模式] &amp;rarr; [保護視力]
        &lt;/div&gt;
        &lt;ul style=&quot;margin: 0; padding-left: 20px; font-size: 0.95rem; color: #4a5568;&quot;&gt;
          &lt;li&gt;&lt;strong&gt;核心功能&lt;/strong&gt;：依排程時間或本機日出日落週期，自動無縫切換 Windows 系統深色/淺色外觀主題。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;應用實例&lt;/strong&gt;：白天維持清爽高對比介面，夜間自動切為深色模式降低雙眼疲勞。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;配置建議&lt;/strong&gt;：&lt;span style=&quot;color: #4a5568;&quot;&gt;推薦自動化開啟&lt;/span&gt;。&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- PowerToys Run --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-size: 1.1rem; font-weight: bold; color: #2d3748;&quot;&gt;🚀 6. PowerToys Run&lt;/span&gt;
        &lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 8px; font-size: 0.85rem;&quot;&gt;Alt + Space&lt;/kbd&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 12px; margin-bottom: 12px; font-family: monospace; font-size: 0.88rem; color: #4a5568;&quot;&gt;
          [Alt+Space 叫出搜尋框] &amp;rarr; [輸入: 45*88 或 程式名稱] &amp;rarr; [直接算數或瞬間啟動]
        &lt;/div&gt;
        &lt;ul style=&quot;margin: 0; padding-left: 20px; font-size: 0.95rem; color: #4a5568;&quot;&gt;
          &lt;li&gt;&lt;strong&gt;核心功能&lt;/strong&gt;：輕量級極速啟動器，整合應用搜尋、檔案查詢、快速計算機及單位換算。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;應用實例&lt;/strong&gt;：需要臨時計算時直接鍵入算式得結果，免開啟小算盤或開始功能表。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;配置建議&lt;/strong&gt;：&lt;strong style=&quot;color: #2b6cb0;&quot;&gt;強烈推薦開啟&lt;/strong&gt;（全面取代 Windows 內建搜尋列）。&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 螢幕尺規 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-size: 1.1rem; font-weight: bold; color: #2d3748;&quot;&gt;📏 7. 螢幕尺規 (Screen Ruler)&lt;/span&gt;
        &lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 8px; font-size: 0.85rem;&quot;&gt;Win + Ctrl + Shift + M&lt;/kbd&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 12px; margin-bottom: 12px; font-family: monospace; font-size: 0.88rem; color: #4a5568;&quot;&gt;
          [啟動尺規面板] &amp;rarr; [游標移至元素上方: 自動吸附測量] 或 [拖曳拉框量測 px 寬高]
        &lt;/div&gt;
        &lt;ul style=&quot;margin: 0; padding-left: 20px; font-size: 0.95rem; color: #4a5568;&quot;&gt;
          &lt;li&gt;&lt;strong&gt;核心功能&lt;/strong&gt;：螢幕像素級直觀測量工具，支援邊界自動偵測、水平/垂直間距與自訂框選量測。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;應用實例&lt;/strong&gt;：校對 PPT 圖文留白、驗證網頁按鈕邊界 (Padding/Margin) 是否精準。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;配置建議&lt;/strong&gt;：&lt;span style=&quot;color: #4a5568;&quot;&gt;前端/美編必備&lt;/span&gt;。&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 快捷鍵指南 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-size: 1.1rem; font-weight: bold; color: #2d3748;&quot;&gt;⌨️ 8. 快捷鍵指南 (Shortcut Guide)&lt;/span&gt;
        &lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 8px; font-size: 0.85rem;&quot;&gt;Win + Shift + /&lt;/kbd&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 12px; margin-bottom: 12px; font-family: monospace; font-size: 0.88rem; color: #4a5568;&quot;&gt;
          [長按快捷鍵] &amp;rarr; [全螢幕浮現半透明 HUD 疊加層] &amp;rarr; [顯示所有可用 Win+ 組合鍵提示]
        &lt;/div&gt;
        &lt;ul style=&quot;margin: 0; padding-left: 20px; font-size: 0.95rem; color: #4a5568;&quot;&gt;
          &lt;li&gt;&lt;strong&gt;核心功能&lt;/strong&gt;：系統快速鍵提示疊加層，依當前畫面狀態動態顯示可用的 Windows 組合鍵。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;應用實例&lt;/strong&gt;：忘記視窗貼齊、虛擬桌面切換或截圖熱鍵時，隨時按鍵呼叫速查。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;配置建議&lt;/strong&gt;：&lt;span style=&quot;color: #4a5568;&quot;&gt;新手必開&lt;/span&gt;。&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 文字擷取器 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-size: 1.1rem; font-weight: bold; color: #2d3748;&quot;&gt;🔤 9. 文字擷取器 (Text Extractor)&lt;/span&gt;
        &lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 8px; font-size: 0.85rem;&quot;&gt;Win + Shift + T&lt;/kbd&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 12px; margin-bottom: 12px; font-family: monospace; font-size: 0.88rem; color: #4a5568;&quot;&gt;
          [框選不可複製區域 (如影片/圖片)] &amp;rarr; [OCR 辨識] &amp;rarr; [文字自動存入剪貼簿]
        &lt;/div&gt;
        &lt;ul style=&quot;margin: 0; padding-left: 20px; font-size: 0.95rem; color: #4a5568;&quot;&gt;
          &lt;li&gt;&lt;strong&gt;核心功能&lt;/strong&gt;：螢幕光學字元辨識 (OCR) 工具，框選畫面任意區域即可直接提取文字。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;應用實例&lt;/strong&gt;：觀看教學影片時暫停，框選畫面中無法複製的程式碼、報表或錯誤訊息。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;配置建議&lt;/strong&gt;：&lt;strong style=&quot;color: #2b6cb0;&quot;&gt;強烈推薦開啟&lt;/strong&gt;（免去手動打字重抄）。&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- ZoomIt --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-size: 1.1rem; font-weight: bold; color: #2d3748;&quot;&gt;🔍 10. ZoomIt&lt;/span&gt;
        &lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 8px; font-size: 0.85rem;&quot;&gt;Ctrl + 1&lt;/kbd&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 12px; margin-bottom: 12px; font-family: monospace; font-size: 0.88rem; color: #4a5568;&quot;&gt;
          [Ctrl+1: 畫面無損放大] &amp;rarr; [Ctrl+2: 呼叫彩色畫筆箭頭] &amp;rarr; [Esc: 退出]
        &lt;/div&gt;
        &lt;ul style=&quot;margin: 0; padding-left: 20px; font-size: 0.95rem; color: #4a5568;&quot;&gt;
          &lt;li&gt;&lt;strong&gt;核心功能&lt;/strong&gt;：簡報展示神物，支援螢幕無損放大、畫筆箭頭標註、打字註記與倒數計時器。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;應用實例&lt;/strong&gt;：遠端會議或教學時，無損放大視窗局部細節，並拉出箭頭標記操作核心。&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;配置建議&lt;/strong&gt;：&lt;span style=&quot;color: #4a5568;&quot;&gt;簡報與教學者必備&lt;/span&gt;。&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;

  &lt;/div&gt;

  &lt;!-- 第二部分：右側其餘公用程式（排除系統工具後） --&gt;
  &lt;h3 style=&quot;font-size: 1.3rem; color: #2b6cb0; border-left: 4px solid #3182ce; padding-left: 10px; margin-top: 32px; margin-bottom: 16px;&quot;&gt;二、 右側其餘公用程式全項目圖文解析 (排除重疊後共 23 項)&lt;/h3&gt;

  &lt;div style=&quot;display: flex; flex-direction: column; gap: 20px; margin-bottom: 32px;&quot;&gt;

    &lt;!-- 視窗化與版面配置 --&gt;
    &lt;h4 style=&quot;font-size: 1.1rem; color: #2d3748; margin: 10px 0 0 0;&quot;&gt;🪟 視窗化與版面配置模組&lt;/h4&gt;

    &lt;!-- FancyZones --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;📑 FancyZones&lt;/span&gt;
        &lt;span&gt;吸附：&lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 6px; font-size: 0.85rem;&quot;&gt;按住 Shift&lt;/kbd&gt; | 編輯：&lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 6px; font-size: 0.85rem;&quot;&gt;Win + Shift + `&lt;/kbd&gt;&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [自訂多欄排版網格] &amp;rarr; [按住 Shift 拖曳視窗] &amp;rarr; [視窗自動吸附貼齊分區]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：突破系統預設貼齊限制。4K 或超寬螢幕自訂三欄等寬配置，拖曳視窗即刻自動對齊。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem;&quot;&gt;&lt;strong style=&quot;color: #2b6cb0;&quot;&gt;建議：多工與寬螢幕必備核心&lt;/strong&gt;。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 最上層顯示 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;📌 最上層顯示 (Always On Top)&lt;/span&gt;
        &lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 6px; font-size: 0.85rem;&quot;&gt;Win + Ctrl + T&lt;/kbd&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [選定目標視窗按快捷鍵] &amp;rarr; [視窗加上藍框置頂] &amp;rarr; [切換其他軟體不被覆蓋]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：強制視窗常駐置頂，支援調透明度。對帳時釘選計算機，或邊看教學邊敲代碼。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem;&quot;&gt;&lt;strong style=&quot;color: #2b6cb0;&quot;&gt;建議：強烈推薦開啟&lt;/strong&gt;。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 工作區 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;📦 工作區 (Workspaces)&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;一鍵工作流佈局&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [建立工作區捷徑] &amp;rarr; [點擊捷徑: 一鍵啟動多應用程式並定位雙螢幕]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：一鍵依預設尺寸與位置開啟一組應用程式。進入工作狀態免手動排列視窗。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;建議：多螢幕進階工作者選用。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 視窗分配區 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;🗂️ 視窗分配區 (New)&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;單鍵重整視窗&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [桌面視窗散亂重疊] &amp;rarr; [執行視窗分配] &amp;rarr; [所有開啟視窗秒級靠齊指定區塊]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：快捷將開啟中的混亂視窗依網格邏輯重整歸位至特定分區，適合視窗過多時快速整理。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;建議：視窗管理輔助選用。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 裁剪和鎖定 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;✂️ 裁剪和鎖定 (Crop And Lock)&lt;/span&gt;
        &lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 6px; font-size: 0.85rem;&quot;&gt;Win + Ctrl + Shift + T / R&lt;/kbd&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [框選目標視窗局部] &amp;rarr; [其餘邊框按鈕裁去] &amp;rarr; [化為迷你常駐監控窗]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：裁切目標視窗特定局部。只把股票看板特定數值或監視器畫面裁切釘選在桌面角落。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;建議：特定數值監控需求選用。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Grab And Move --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;🖐️ Grab And Move&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;全系統抓手平移&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [按住指定輔助鍵] &amp;rarr; [滑鼠轉為抓手游標] &amp;rarr; [拖曳平移長文件與網頁]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：將 PDF 的抓手平移功能擴展至全系統，免用滾輪即可任意拖動瀏覽超長內容。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;建議：依個人操作習慣選用。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 輸入與外接周邊控制模組 --&gt;
    &lt;h4 style=&quot;font-size: 1.1rem; color: #2d3748; margin: 16px 0 0 0;&quot;&gt;🖱️ 輸入與外接周邊控制模組&lt;/h4&gt;

    &lt;!-- 尋找我的滑鼠 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;🎯 尋找我的滑鼠 (Find My Mouse)&lt;/span&gt;
        &lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 6px; font-size: 0.85rem;&quot;&gt;連按兩次左 Ctrl 鍵&lt;/kbd&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [連按兩次左 Ctrl] &amp;rarr; [螢幕暗化 + 游標處亮起聚光燈] &amp;rarr; [晃動滑鼠自動恢復]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：游標定位神物。在 4K 螢幕或雙螢幕環境下游標迷失時，兩下 Ctrl 瞬間找到位置。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem;&quot;&gt;&lt;strong style=&quot;color: #2b6cb0;&quot;&gt;建議：大螢幕/多螢幕必開&lt;/strong&gt;。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 滑鼠跳轉 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;⏩ 滑鼠跳轉 (Mouse Jump)&lt;/span&gt;
        &lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 6px; font-size: 0.85rem;&quot;&gt;Win + Shift + D&lt;/kbd&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [快捷鍵呼叫全景縮圖] &amp;rarr; [點選副螢幕任意處] &amp;rarr; [游標跨螢幕瞬間到達]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：跨螢幕瞬移。4K 主螢幕與副螢幕長距離移動時，省去大幅滑動手腕或轉動軌跡球。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem;&quot;&gt;&lt;strong style=&quot;color: #2b6cb0;&quot;&gt;建議：多螢幕/寬螢幕必開&lt;/strong&gt;。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 滑鼠螢光筆 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;🖍️ 滑鼠螢光筆 (Mouse Highlighter)&lt;/span&gt;
        &lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 6px; font-size: 0.85rem;&quot;&gt;Win + Shift + H&lt;/kbd&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [左鍵點擊: 產生黃色光圈] | [右鍵點擊: 產生藍色光圈] &amp;rarr; [呈現點擊動作]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：點擊時產生彩色視覺光圈。線上會議、操作錄影或教學時突顯滑鼠點擊焦點。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;建議：教學/簡報展示者開啟。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 滑鼠指標交叉線 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;➕ 滑鼠指標交叉線 (Mouse Crosshairs)&lt;/span&gt;
        &lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 6px; font-size: 0.85rem;&quot;&gt;Win + Alt + P&lt;/kbd&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [以游標為中心在全螢幕拉出橫豎雙向十字線] &amp;rarr; [跨欄對位不失焦]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：全螢幕十字定位線。閱讀橫向極長的 Excel 跨欄對帳，或 CAD 比對基準點時防止看錯行。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;建議：財務對帳/工程設計選用。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- CursorWrap --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;🔄 CursorWrap&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;螢幕邊緣穿透&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [滑鼠滑出螢幕最右邊界] &amp;rarr; [自動從螢幕最左邊界穿出] &amp;rarr; [減少往返移動]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：游標穿透邊緣。寬螢幕操作時滑鼠直接穿透，縮短長距離拉動手部的負擔。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;建議：習慣邊緣穿透操作者選用。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 鍵盤管理器 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;⌨️ 鍵盤管理器 (Keyboard Manager)&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;實體按鍵映射&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [自訂規則: CapsLock &amp;rarr; Ctrl] | [自訂快捷鍵: Win+D &amp;rarr; 單鍵觸發]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：重新映射實體按鍵或組合鍵。把少用的 CapsLock 映射為 Ctrl，顯著提高打字效率。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;建議：客製鍵盤鍵位者開啟。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 無框線的滑鼠 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;🖥️ 無框線的滑鼠 (Mouse Without Borders)&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;跨主機控制&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [桌機滑鼠滑過邊界] &amp;rarr; [直接進入筆電螢幕] &amp;rarr; [鍵盤與剪貼簿即時共用]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：區網跨主機鍵鼠共用。桌面同時擺桌機與工作筆電時，一套鍵鼠無縫操控多台主機並拖曳傳檔。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;建議：多主機環境必開（單電腦用戶關閉）。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Power Display --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;🖥️ Power Display&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;螢幕喚醒管理&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [快速覆蓋顯示器睡眠策略] &amp;rarr; [指定副螢幕維持常亮不熄滅]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：針對個別螢幕做供電維持管理。在雙螢幕環境下讓副螢幕持續常駐儀表板或監看畫面。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;建議：多螢幕常亮需求者選用。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Quick Accent --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;🔤 Quick Accent&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;重音字元快速輸入&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [長按字母 e 同時按空格] &amp;rarr; [彈出 è, é, ê, ë 選單] &amp;rarr; [左右鍵選取輸入]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：外語特殊字母輸入。撰寫法語、德文等外語專有名詞時，免去切換外語輸入法。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;建議：外語輸入需求選用。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 檔案管理與檔案總管增強模組 --&gt;
    &lt;h4 style=&quot;font-size: 1.1rem; color: #2d3748; margin: 16px 0 0 0;&quot;&gt;📁 檔案管理與檔案總管增強模組&lt;/h4&gt;

    &lt;!-- 預覽 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;👁️ 預覽 (Peek)&lt;/span&gt;
        &lt;kbd style=&quot;background: #edf2f7; border: 1px solid #cbd5e0; border-radius: 4px; padding: 2px 6px; font-size: 0.85rem;&quot;&gt;Ctrl + Space&lt;/kbd&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [檔案總管選取檔案] &amp;rarr; [按 Ctrl+Space] &amp;rarr; [秒開浮動預覽視窗]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：媲美 macOS 的空白鍵快速預覽。免開啟龐大的 Word 或看圖軟體，直接速覽確認內文。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem;&quot;&gt;&lt;strong style=&quot;color: #2b6cb0;&quot;&gt;建議：強烈推薦開啟&lt;/strong&gt;。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- File Locksmith --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;🔒 File Locksmith&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;右鍵選單整合&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [刪除檔案顯示「正在使用」] &amp;rarr; [右鍵: 解除佔用] &amp;rarr; [結束進程並刪除]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：排查被佔用的檔案。刪除檔案或退出隨身碟遇到佔用報錯時，一秒找出程序並釋放。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem;&quot;&gt;&lt;strong style=&quot;color: #2b6cb0;&quot;&gt;建議：強烈推薦開啟&lt;/strong&gt;。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- PowerRename --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;🏷️ PowerRename&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;批次重新命名&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [選取 100 個檔案右鍵: PowerRename] &amp;rarr; [替換字串 + 加入序號] &amp;rarr; [一鍵套用]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：批次重新命名神器。支援正規表示式與編號規則，數百張照片一秒整理完成。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem;&quot;&gt;&lt;strong style=&quot;color: #2b6cb0;&quot;&gt;建議：強烈推薦開啟&lt;/strong&gt;。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 圖像大小調整器 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;🖼️ 圖像大小調整器 (Image Resizer)&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;右鍵批次縮圖&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [選取多張相片右鍵: 調整圖片大小] &amp;rarr; [選取 1080p] &amp;rarr; [秒轉出輕量副本]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：批次縮減圖片尺寸與轉檔。免開修圖軟體，直接在檔案總管將單眼大圖縮圖方便傳送。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem;&quot;&gt;&lt;strong style=&quot;color: #2b6cb0;&quot;&gt;建議：強烈推薦開啟&lt;/strong&gt;。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 新增+ --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;➕ 新增+ (New+)&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;自訂範本新增&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [右鍵: 新增+] &amp;rarr; [選取專案範本] &amp;rarr; [自動產生完整資料夾結構與範本檔]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：擴充右鍵選單範本庫。開新專案時一鍵產生包含設定檔與目錄樹的完整專案範本。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;建議：專案規劃者推薦。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 進階系統管理模組 --&gt;
    &lt;h4 style=&quot;font-size: 1.1rem; color: #2d3748; margin: 16px 0 0 0;&quot;&gt;🛠️ 進階系統管理與維護模組&lt;/h4&gt;

    &lt;!-- 主機檔案編輯器 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;🌐 主機檔案編輯器 (Hosts File Editor)&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;Hosts 視覺化管理&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [開啟圖形介面] &amp;rarr; [新增 IP 與 Domain] &amp;rarr; [開關切換導向]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：安全管理系統 hosts 導向條目。本地測試網站時免手動提權開記事本編輯系統檔。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;建議：開發與網管選用（一般用戶勿動）。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 環境變數 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;🔧 環境變數 (Environment Variables)&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;Path 變數視覺化&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [列表檢視系統與使用者 Path] &amp;rarr; [增刪路徑] &amp;rarr; [防範字串誤刪]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：圖形化管理系統變數。安裝開發環境時一目了然各個 Path，防止格式錯亂損壞。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;建議：開發者必備（一般用戶關閉）。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 登錄預覽 --&gt;
    &lt;div style=&quot;border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; background: #ffffff;&quot;&gt;
      &lt;div style=&quot;background: #f7fafc; padding: 10px 16px; border-bottom: 1px solid #e2e8f0; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;&quot;&gt;
        &lt;span style=&quot;font-weight: bold; color: #2d3748;&quot;&gt;🧩 登錄預覽 (Registry Preview)&lt;/span&gt;
        &lt;span style=&quot;color: #718096; font-size: 0.85rem;&quot;&gt;.reg 樹狀預覽&lt;/span&gt;
      &lt;/div&gt;
      &lt;div style=&quot;padding: 14px 16px;&quot;&gt;
        &lt;div style=&quot;background: #f8fafc; border: 1px dashed #cbd5e0; border-radius: 6px; padding: 10px; margin-bottom: 10px; font-family: monospace; font-size: 0.85rem; color: #4a5568;&quot;&gt;
          [右鍵 .reg 檔案: 預覽] &amp;rarr; [樹狀圖比對鍵值變更] &amp;rarr; [確認無誤後套用]
        &lt;/div&gt;
        &lt;p style=&quot;margin: 0 0 6px 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;&lt;strong&gt;功能與實例&lt;/strong&gt;：視覺化檢視註冊表檔案。套用網路上的註冊表優化前先比對異動內容，避免損壞系統。&lt;/p&gt;
        &lt;p style=&quot;margin: 0; font-size: 0.92rem; color: #4a5568;&quot;&gt;建議：進階維修選用。&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

  &lt;/div&gt;

  &lt;!-- 總結建議策略 --&gt;
  &lt;div style=&quot;background-color: #edf2f7; border-left: 4px solid #3182ce; padding: 16px; border-radius: 6px; margin-top: 24px;&quot;&gt;
    &lt;h3 style=&quot;font-size: 1.15rem; color: #1a202c; margin-top: 0; margin-bottom: 10px;&quot;&gt;三、 給一般用戶的最佳化配置指南&lt;/h3&gt;
    &lt;ul style=&quot;margin: 0; padding-left: 20px; color: #4a5568; font-size: 0.95rem;&quot;&gt;
      &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
        &lt;strong&gt;「系統工具」常駐核心&lt;/strong&gt;：
        🔤 &lt;strong&gt;文字擷取器&lt;/strong&gt;、📋 &lt;strong&gt;進階貼上&lt;/strong&gt;、🚀 &lt;strong&gt;PowerToys Run&lt;/strong&gt;、☕ &lt;strong&gt;Awake&lt;/strong&gt;。
      &lt;/li&gt;
      &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
        &lt;strong&gt;「公用程式」效率必開&lt;/strong&gt;：
        📑 &lt;strong&gt;FancyZones&lt;/strong&gt;、📌 &lt;strong&gt;最上層顯示&lt;/strong&gt;、👁️ &lt;strong&gt;預覽&lt;/strong&gt;、🔒 &lt;strong&gt;File Locksmith&lt;/strong&gt;、🏷️ &lt;strong&gt;PowerRename&lt;/strong&gt;、🖼️ &lt;strong&gt;圖像大小調整器&lt;/strong&gt;。
      &lt;/li&gt;
      &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
        &lt;strong&gt;多螢幕與寬螢幕專屬&lt;/strong&gt;：
        🎯 &lt;strong&gt;尋找我的滑鼠&lt;/strong&gt;、⏩ &lt;strong&gt;滑鼠跳轉&lt;/strong&gt;。
      &lt;/li&gt;
      &lt;li&gt;
        &lt;strong&gt;一般用戶建議保持關閉&lt;/strong&gt;：
        🌐 &lt;strong&gt;主機檔案編輯器&lt;/strong&gt;、🔧 &lt;strong&gt;環境變數&lt;/strong&gt;、🧩 &lt;strong&gt;登錄預覽&lt;/strong&gt;、🖥️ &lt;strong&gt;無框線的滑鼠&lt;/strong&gt;（無多主機環境），以節省系統資源並防範誤觸。
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;

&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/8661698605612828579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/8661698605612828579'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/ai-powertoys.html' title='雜項-AI應用 PowerToys 項目功能'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-3075631534498399331</id><published>2026-09-15T08:57:54.413+08:00</published><updated>2026-09-15T09:02:42.190+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="命理"/><category scheme="http://www.blogger.com/atom/ns#" term="天干地支"/><title type='text'>先天八卦（伏羲八卦）與後天八卦（文王八卦）</title><content type='html'>&lt;div style=&quot;color: #2d3748; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans TC&amp;quot;, sans-serif; line-height: 1.8; margin: 0px auto; max-width: 820px; padding: 20px;&quot;&gt;

  &lt;!--前言導讀--&gt;
  &lt;p style=&quot;color: #4a5568; font-size: 1.1em; margin-bottom: 24px;&quot;&gt;
    &lt;strong&gt;先天八卦（伏羲八卦）與後天八卦（文王八卦）&lt;/strong&gt;是易經哲理與術數應用的兩大核心體系。兩者並非對立，而是「體用互表」：先天為體，描繪宇宙初生與天地陰陽對待的本質規律；後天為用，詮釋萬物運行、四時流轉與人事變化的實時秩序。
  &lt;/p&gt;

  &lt;hr style=&quot;border-color: rgb(226, 232, 240) currentcolor currentcolor; border-image: none; border-style: solid none none; border-top: 1px solid #e2e8f0; border-width: 1px 0px 0px; border: 0; margin: 30px 0px;&quot; /&gt;

  &lt;!--核心對比總覽--&gt;
  &lt;h3 style=&quot;border-left: 5px solid rgb(49, 130, 206); color: #1a202c; margin-bottom: 16px; padding-left: 12px;&quot;&gt;先後天八卦核心對比總覽&lt;/h3&gt;
  
  &lt;div style=&quot;margin-bottom: 30px; overflow-x: auto;&quot;&gt;
    &lt;table style=&quot;border-collapse: collapse; font-size: 0.95em; text-align: left; width: 100%;&quot;&gt;
      &lt;thead&gt;
        &lt;tr style=&quot;background-color: #ebf8ff; border-bottom: 2px solid rgb(190, 227, 248);&quot;&gt;
          &lt;th style=&quot;color: #2b6cb0; padding: 12px 14px; width: 18%;&quot;&gt;維度&lt;/th&gt;
          &lt;th style=&quot;color: #2b6cb0; padding: 12px 14px; width: 41%;&quot;&gt;先天八卦（伏羲八卦）&lt;/th&gt;
          &lt;th style=&quot;color: #2b6cb0; padding: 12px 14px; width: 41%;&quot;&gt;後天八卦（文王八卦）&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr style=&quot;border-bottom: 1px solid rgb(226, 232, 240);&quot;&gt;
          &lt;td style=&quot;background-color: #f7fafc; font-weight: bold; padding: 12px 14px;&quot;&gt;哲學核心&lt;/td&gt;
          &lt;td style=&quot;padding: 12px 14px;&quot;&gt;&lt;strong&gt;為體&lt;/strong&gt;（空間對待、天地本質、平衡靜止）&lt;/td&gt;
          &lt;td style=&quot;padding: 12px 14px;&quot;&gt;&lt;strong&gt;為用&lt;/strong&gt;（時間流行、五行生剋、動態流行）&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;background-color: #f7fafc; border-bottom: 1px solid rgb(226, 232, 240);&quot;&gt;
          &lt;td style=&quot;font-weight: bold; padding: 12px 14px;&quot;&gt;創制傳說&lt;/td&gt;
          &lt;td style=&quot;padding: 12px 14px;&quot;&gt;伏羲氏觀河圖而劃&lt;/td&gt;
          &lt;td style=&quot;padding: 12px 14px;&quot;&gt;周文王察洛書而推&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;border-bottom: 1px solid rgb(226, 232, 240);&quot;&gt;
          &lt;td style=&quot;background-color: #f7fafc; font-weight: bold; padding: 12px 14px;&quot;&gt;排列法則&lt;/td&gt;
          &lt;td style=&quot;padding: 12px 14px;&quot;&gt;兩兩對待，陰陽對立互補&lt;/td&gt;
          &lt;td style=&quot;padding: 12px 14px;&quot;&gt;四時五行運轉，順應生長收藏&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;background-color: #f7fafc; border-bottom: 1px solid rgb(226, 232, 240);&quot;&gt;
          &lt;td style=&quot;font-weight: bold; padding: 12px 14px;&quot;&gt;主要方位&lt;/td&gt;
          &lt;td style=&quot;padding: 12px 14px;&quot;&gt;天地定位：&lt;strong&gt;乾南、坤北、離東、坎西&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 12px 14px;&quot;&gt;四方四時：&lt;strong&gt;離南、坎北、震東、兌西&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;border-bottom: 1px solid rgb(226, 232, 240);&quot;&gt;
          &lt;td style=&quot;background-color: #f7fafc; font-weight: bold; padding: 12px 14px;&quot;&gt;數理秩序&lt;/td&gt;
          &lt;td style=&quot;padding: 12px 14px;&quot;&gt;乾一、兌二、離三、震四、巽五、坎六、艮七、坤八&lt;/td&gt;
          &lt;td style=&quot;padding: 12px 14px;&quot;&gt;坎一、坤二、震三、巽四、中五、乾六、兌七、艮八、離九（洛書數）&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; font-weight: bold; padding: 12px 14px;&quot;&gt;主流應用&lt;/td&gt;
          &lt;td style=&quot;padding: 12px 14px;&quot;&gt;易數起卦（梅花易數）、本質推演、先天鏡化煞&lt;/td&gt;
          &lt;td style=&quot;padding: 12px 14px;&quot;&gt;地理風水（三元玄空、八宅）、奇門遁甲、紫微斗數、醫道養生&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;hr style=&quot;border-color: rgb(226, 232, 240) currentcolor currentcolor; border-image: none; border-style: solid none none; border-top: 1px solid #e2e8f0; border-width: 1px 0px 0px; border: 0; margin: 30px 0px;&quot; /&gt;

  &lt;!--符號象徵與口訣--&gt;
  &lt;h3 style=&quot;border-left: 5px solid rgb(49, 130, 206); color: #1a202c; margin-bottom: 16px; padding-left: 12px;&quot;&gt;符號象徵與八卦取象口訣&lt;/h3&gt;
  &lt;p style=&quot;margin-bottom: 12px;&quot;&gt;八卦符號以陽爻（—）與陰爻（--）三爻疊加而成，宋代朱熹所編的《八卦取象歌》精確概括了符號特徵：&lt;/p&gt;
  &lt;ul style=&quot;display: grid; gap: 10px; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); list-style-type: none; margin-bottom: 24px; padding-left: 0px;&quot;&gt;
    &lt;li style=&quot;background: rgb(247, 250, 252); border-radius: 6px; border: 1px solid rgb(237, 242, 247); padding: 10px 14px;&quot;&gt;&lt;strong&gt;乾三連（☰）：&lt;/strong&gt; 全陽之象，象徵天、父、剛健、首、君。&lt;/li&gt;
    &lt;li style=&quot;background: rgb(247, 250, 252); border-radius: 6px; border: 1px solid rgb(237, 242, 247); padding: 10px 14px;&quot;&gt;&lt;strong&gt;坤六斷（☷）：&lt;/strong&gt; 全陰之象，象徵地、母、柔順、腹、臣。&lt;/li&gt;
    &lt;li style=&quot;background: rgb(247, 250, 252); border-radius: 6px; border: 1px solid rgb(237, 242, 247); padding: 10px 14px;&quot;&gt;&lt;strong&gt;震仰盂（☳）：&lt;/strong&gt; 初爻陽，象徵雷、長男、震動、足、起。&lt;/li&gt;
    &lt;li style=&quot;background: rgb(247, 250, 252); border-radius: 6px; border: 1px solid rgb(237, 242, 247); padding: 10px 14px;&quot;&gt;&lt;strong&gt;艮覆碗（☶）：&lt;/strong&gt; 上爻陽，象徵山、少男、止伏、手、靜。&lt;/li&gt;
    &lt;li style=&quot;background: rgb(247, 250, 252); border-radius: 6px; border: 1px solid rgb(237, 242, 247); padding: 10px 14px;&quot;&gt;&lt;strong&gt;離中虛（☲）：&lt;/strong&gt; 中爻陰，象徵火、日、中女、明亮、目。&lt;/li&gt;
    &lt;li style=&quot;background: rgb(247, 250, 252); border-radius: 6px; border: 1px solid rgb(237, 242, 247); padding: 10px 14px;&quot;&gt;&lt;strong&gt;坎中滿（☵）：&lt;/strong&gt; 中爻陽，象徵水、月、中男、險陷、耳。&lt;/li&gt;
    &lt;li style=&quot;background: rgb(247, 250, 252); border-radius: 6px; border: 1px solid rgb(237, 242, 247); padding: 10px 14px;&quot;&gt;&lt;strong&gt;兌上缺（☱）：&lt;/strong&gt; 上爻陰，象徵澤、少女、愉悅、口、說。&lt;/li&gt;
    &lt;li style=&quot;background: rgb(247, 250, 252); border-radius: 6px; border: 1px solid rgb(237, 242, 247); padding: 10px 14px;&quot;&gt;&lt;strong&gt;巽下斷（☴）：&lt;/strong&gt; 初爻陰，象徵風、長女、深入、股、順。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;hr style=&quot;border-color: rgb(226, 232, 240) currentcolor currentcolor; border-image: none; border-style: solid none none; border-top: 1px solid #e2e8f0; border-width: 1px 0px 0px; border: 0; margin: 30px 0px;&quot; /&gt;

  &lt;!--先天八卦--&gt;
  &lt;h3 style=&quot;border-left: 5px solid rgb(49, 130, 206); color: #1a202c; margin-bottom: 16px; padding-left: 12px;&quot;&gt;先天八卦：空間平衡與本質對待&lt;/h3&gt;
  &lt;div style=&quot;background-color: #f7fafc; border-left: 4px solid rgb(74, 85, 104); border-radius: 0px 8px 8px 0px; margin-bottom: 20px; padding: 16px 20px;&quot;&gt;
    &lt;p style=&quot;margin: 0px 0px 8px;&quot;&gt;&lt;strong&gt;卦序口訣：&lt;/strong&gt;乾一、兌二、離三、震四、巽五、坎六、艮七、坤八。&lt;/p&gt;
    &lt;p style=&quot;margin: 0px;&quot;&gt;&lt;strong&gt;方位布局（坐北朝南視角）：&lt;/strong&gt;乾南、坤北、離東、坎西、震東北、巽西南、艮西北、兌東南。&lt;/p&gt;
  &lt;/div&gt;
  
  &lt;p style=&quot;font-weight: bold; margin-bottom: 8px;&quot;&gt;哲理內涵（《說卦傳》天地對待）：&lt;/p&gt;
  &lt;ul style=&quot;margin-bottom: 16px; padding-left: 20px;&quot;&gt;
    &lt;li&gt;&lt;strong&gt;天地定位：&lt;/strong&gt; 乾（南、天）與坤（北、地）上下相對，奠定宇宙基本框架。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;山澤通氣：&lt;/strong&gt; 艮（西北、山）與兌（東南、澤）遙相呼應，氣脈貫通。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;雷風相薄：&lt;/strong&gt; 震（東北、雷）與巽（西南、風）互相激盪，鼓動生機。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;水火不相射：&lt;/strong&gt; 坎（西、水）與離（東、火）互為制衡，水火既濟而不相害。&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p style=&quot;margin-bottom: 24px;&quot;&gt;&lt;strong&gt;數理特徵：&lt;/strong&gt;相對兩卦數值相加皆為九（1+8=9、2+7=9、3+6=9、4+5=9），且相對卦象陰陽爻完全相反（如乾三陽爻對坤三陰爻），展現出高度對稱、恆定平衡的宏觀宇宙幾何。&lt;/p&gt;

  &lt;hr style=&quot;border-color: rgb(226, 232, 240) currentcolor currentcolor; border-image: none; border-style: solid none none; border-top: 1px solid #e2e8f0; border-width: 1px 0px 0px; border: 0; margin: 30px 0px;&quot; /&gt;

  &lt;!--後天八卦--&gt;
  &lt;h3 style=&quot;border-left: 5px solid rgb(49, 130, 206); color: #1a202c; margin-bottom: 16px; padding-left: 12px;&quot;&gt;後天八卦：時間運行與流行轉化&lt;/h3&gt;
  &lt;div style=&quot;background-color: #f7fafc; border-left: 4px solid rgb(74, 85, 104); border-radius: 0px 8px 8px 0px; margin-bottom: 20px; padding: 16px 20px;&quot;&gt;
    &lt;p style=&quot;margin: 0px 0px 8px;&quot;&gt;&lt;strong&gt;洛書九宮數口訣：&lt;/strong&gt;戴九履一，左三右七，二四為肩，六八為足，五居中央。&lt;/p&gt;
    &lt;p style=&quot;margin: 0px 0px 8px;&quot;&gt;&lt;strong&gt;卦位配數：&lt;/strong&gt;坎一（北）、坤二（西南）、震三（東）、巽四（東南）、中宮五、乾六（西北）、兌七（西）、艮八（東北）、離九（南）。&lt;/p&gt;
    &lt;p style=&quot;margin: 0px;&quot;&gt;&lt;strong&gt;五行屬性：&lt;/strong&gt;坎水、震巽木、離火、兌乾金、坤艮中宮土。&lt;/p&gt;
  &lt;/div&gt;

  &lt;p style=&quot;font-weight: bold; margin-bottom: 8px;&quot;&gt;哲理內涵（《說卦傳》萬物出入流行）：&lt;/p&gt;
  &lt;ul style=&quot;margin-bottom: 24px; padding-left: 20px;&quot;&gt;
    &lt;li&gt;&lt;strong&gt;帝出乎震：&lt;/strong&gt; 萬物於東方震木萌發（春季）。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;齊乎巽：&lt;/strong&gt; 東南巽木，萬物生長整齊潔淨（春末夏初）。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;相見乎離：&lt;/strong&gt; 正南離火，光明普照，萬物顯現壯盛（盛夏）。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;致役乎坤：&lt;/strong&gt; 西南坤土，大地滋養萬物化育，役養生成（夏末秋初）。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;說言乎兌：&lt;/strong&gt; 正西兌金，秋季成熟收穫，眾生欣悅（秋分）。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;戰乎乾：&lt;/strong&gt; 西北乾金，陰陽相薄，萬物結實歸根（秋冬之交）。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;勞乎坎：&lt;/strong&gt; 正北坎水，勞憊藏伏，萬物歸藏休養（冬至）。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;成言乎艮：&lt;/strong&gt; 東北艮土，冬春之交，象徵終止與嶄新生機之始（立春）。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;hr style=&quot;border-color: rgb(226, 232, 240) currentcolor currentcolor; border-image: none; border-style: solid none none; border-top: 1px solid #e2e8f0; border-width: 1px 0px 0px; border: 0; margin: 30px 0px;&quot; /&gt;

  &lt;!--核心應用領域--&gt;
  &lt;h3 style=&quot;border-left: 5px solid rgb(49, 130, 206); color: #1a202c; margin-bottom: 16px; padding-left: 12px;&quot;&gt;核心應用領域&lt;/h3&gt;
  &lt;ul style=&quot;margin-bottom: 0px; padding-left: 20px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      &lt;strong&gt;起卦與數理運算（以先天數為主）：&lt;/strong&gt; 梅花易數凡以時間、字畫、聲音起卦，皆取&lt;strong&gt;先天八卦數&lt;/strong&gt;（乾一、兌二至坤八）轉化為卦象；定卦之後，再依據後天八卦的五行生剋推算吉凶應期。
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      &lt;strong&gt;空間方位與風水堪輿（先後天體用結合）：&lt;/strong&gt; 三元玄空風水羅盤以&lt;strong&gt;後天八卦&lt;/strong&gt;為坐向與九宮飛星基礎，推斷當運旺衰；以&lt;strong&gt;先天八卦&lt;/strong&gt;為「體」，檢查水法與氣場是否符合理氣法門。八宅風水則直接以後天卦位論東四宅與西四宅。
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;醫學與養生（後天臟腑五行）：&lt;/strong&gt; 中醫依據後天八卦之五行流行推演臟腑氣化：坎水應腎，離火應心，水火互濟為心腎相交；震木應肝，兌金應肺，坤艮土應脾胃，乾金應大腸與大腦。
    &lt;/li&gt;
  &lt;/ul&gt;

&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/3075631534498399331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/3075631534498399331'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/blog-post_15.html' title='先天八卦（伏羲八卦）與後天八卦（文王八卦）'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-6251228086511141503</id><published>2026-09-14T17:07:58.894+08:00</published><updated>2026-09-14T17:07:58.894+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="AI應用"/><title type='text'>雜項-AI應用 Windows 11 ReFS vs NTFS</title><content type='html'>&lt;div style=&quot;font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, Helvetica, Arial, sans-serif; line-height: 1.8; color: #2c3e50; max-width: 880px; margin: auto;&quot;&gt;

  &lt;!-- 文章標題與引言 --&gt;
  &lt;h1 style=&quot;font-size: 26px; color: #1a202c; border-bottom: 2px solid #3182ce; padding-bottom: 12px; margin-bottom: 16px;&quot;&gt;
    Windows 11 系統碟與資料碟全面解析：ReFS vs NTFS 在單碟與雙向鏡像下的量化優劣實測
  &lt;/h1&gt;
  &lt;p style=&quot;font-size: 15px; color: #4a5568;&quot;&gt;
    在建置 Windows 11 本地儲存架構時，磁碟的用途通常分為&lt;b&gt;「承載作業系統的系統碟（System/OS Drive）」&lt;/b&gt;與&lt;b&gt;「存放各類檔案的資料碟（Data Drive）」&lt;/b&gt;。面對微軟老牌成熟的 &lt;b&gt;NTFS&lt;/b&gt; 與新世代具備自癒能力的 &lt;b&gt;ReFS&lt;/b&gt;，搭配 Windows「儲存空間」的&lt;b&gt;雙向鏡像（Two-way Mirror）&lt;/b&gt;時，兩者在不同磁碟角色下的相容性、效能開銷與資料安全機制大不相同。本文將系統碟限制與資料碟需求合併納入考量，提供完整量化分析。
  &lt;/p&gt;

  &lt;!-- 系統碟與資料碟的底層限制與機制差異 --&gt;
  &lt;div style=&quot;background-color: #f7fafc; border-left: 4px solid #3182ce; padding: 16px 20px; border-radius: 0 8px 8px 0; margin: 24px 0;&quot;&gt;
    &lt;h2 style=&quot;font-size: 18px; margin-top: 0; color: #2d3748;&quot;&gt;一、 系統碟 vs 資料碟的核心限制與運作機制&lt;/h2&gt;
    &lt;ul style=&quot;margin: 0; padding-left: 20px; font-size: 14.5px; color: #4a5568;&quot;&gt;
      &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
        &lt;b style=&quot;color: #c53030;&quot;&gt;【系統碟關鍵限制】Windows 11 原生不支援 ReFS 開機：&lt;/b&gt;
        在一般終端環境中，Windows 11 系統開機磁區（C: 槽）&lt;b&gt;必須採用 NTFS 格式&lt;/b&gt;。ReFS 缺乏完整的開機引導鏈路與部分系統核心屬性支援，無法作為獨立作業系統啟動碟。因此系統碟若需要雙向鏡像高可用性，僅能採用「NTFS 鏡像」；ReFS 的舞台主要在於「次要資料碟（Data Drive）」。
      &lt;/li&gt;
      &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
        &lt;b&gt;【資料碟特性】大檔與虛擬機區塊複製（Block Cloning）：&lt;/b&gt;
        ReFS 在資料碟上展現強大優勢。若作為虛擬機映象檔（.vhdx）、測試環境或大型專案目錄，ReFS 內部複製數十 GB 檔案能&lt;b&gt;瞬間秒級完成（0 秒複製）&lt;/b&gt;，且不佔額外實體空間；NTFS 則受限於實體讀寫吞吐。
      &lt;/li&gt;
      &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
        &lt;b&gt;【資料碟特性】冷熱資料、碎片化與頻繁隨機寫入：&lt;/b&gt;
        長期封存的家庭照片與影片（冷資料）極易遭遇無聲位元腐蝕（Bit Rot），ReFS 在鏡像資料碟能靠 Integrity Streams 進行背景自動修復；但若是 BT/PT 高頻下載或頻繁修改的小檔案，ReFS 的寫入時複製（CoW）機制會造成嚴重的寫入放大與區塊碎片化，導致機械硬碟隨機 I/O 嚴重卡頓。
      &lt;/li&gt;
      &lt;li&gt;
        &lt;b&gt;第三方資料救援與維護鏈：&lt;/b&gt;
        NTFS 擁有極致完整的磁碟救援生態（Recuva、DiskGenius 等），檔案誤刪或磁區辨識錯誤時容易救回；ReFS 由於 B+ 樹結構封閉且版本更迭頻繁，常見一般救援軟體難以辨識，資料碟一旦意外格式化或誤刪，救援難度與代價極高。
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;

  &lt;!-- 四大情境量化矩陣表格 --&gt;
  &lt;h2 style=&quot;font-size: 20px; color: #2d3748; margin-top: 36px; border-left: 4px solid #48bb78; padding-left: 10px;&quot;&gt;
    二、 全情境量化效能與特性矩陣評比
  &lt;/h2&gt;
  &lt;p style=&quot;font-size: 14px; color: #718096;&quot;&gt;
    *以主流 7200 轉 SATA 企業級/NAS 傳統硬碟（單碟基準連續約 200 MB/s、隨機 4K 約 0.6～1.5 MB/s）於 Windows 11 下之典型實測綜合表現為基準：
  &lt;/p&gt;

  &lt;div style=&quot;overflow-x: auto; margin: 16px 0;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: collapse; font-size: 13.5px; text-align: left; background-color: #ffffff; border: 1px solid #e2e8f0;&quot;&gt;
      &lt;thead&gt;
        &lt;tr style=&quot;background-color: #edf2f7; color: #2d3748;&quot;&gt;
          &lt;th style=&quot;padding: 10px; border: 1px solid #e2e8f0; width: 17%;&quot;&gt;評比指標&lt;/th&gt;
          &lt;th style=&quot;padding: 10px; border: 1px solid #e2e8f0; width: 20%;&quot;&gt;單碟 + NTFS&lt;/th&gt;
          &lt;th style=&quot;padding: 10px; border: 1px solid #e2e8f0; width: 20%;&quot;&gt;單碟 + ReFS&lt;/th&gt;
          &lt;th style=&quot;padding: 10px; border: 1px solid #e2e8f0; width: 21%;&quot;&gt;雙向鏡像 + NTFS&lt;/th&gt;
          &lt;th style=&quot;padding: 10px; border: 1px solid #e2e8f0; width: 22%;&quot;&gt;雙向鏡像 + ReFS&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; font-weight: bold; background-color: #f7fafc;&quot;&gt;系統開機碟支援&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #22543d;&quot;&gt;&lt;b&gt;完全原生支援&lt;/b&gt;（預設標準）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #9b2c2c;&quot;&gt;&lt;b&gt;不支援&lt;/b&gt;（無法開機）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #22543d;&quot;&gt;&lt;b&gt;支援&lt;/b&gt;（可做動態鏡像開機）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #9b2c2c;&quot;&gt;&lt;b&gt;不支援&lt;/b&gt;（僅能做資料碟）&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; font-weight: bold; background-color: #f7fafc;&quot;&gt;資料碟大檔連續讀取&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0;&quot;&gt;單碟吞吐（~200 MB/s）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0;&quot;&gt;接近單碟（~195 MB/s）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #2b6cb0;&quot;&gt;&lt;b&gt;雙碟分流加速&lt;/b&gt;（~360-390 MB/s）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #2b6cb0;&quot;&gt;&lt;b&gt;雙碟分流加速&lt;/b&gt;（~350-380 MB/s）&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; font-weight: bold; background-color: #f7fafc;&quot;&gt;資料碟同區塊複製&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0;&quot;&gt;需實體讀寫（耗時長）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #22543d;&quot;&gt;&lt;b&gt;秒級瞬間完成&lt;/b&gt;（區塊複製）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0;&quot;&gt;需實體讀寫（耗時長）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #22543d;&quot;&gt;&lt;b&gt;秒級瞬間完成&lt;/b&gt;（區塊複製）&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; font-weight: bold; background-color: #f7fafc;&quot;&gt;BT下載 / 隨機 4K 寫入&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #2b6cb0;&quot;&gt;&lt;b&gt;最佳&lt;/b&gt;（就地覆寫損耗低）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #c05621;&quot;&gt;下降 25%~40%（CoW 放大）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0;&quot;&gt;下降 15%~25%（雙碟尋道延遲）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #9b2c2c;&quot;&gt;&lt;b&gt;最弱&lt;/b&gt;（多執行緒隨機寫入易卡頓）&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; font-weight: bold; background-color: #f7fafc;&quot;&gt;冷資料防腐蝕能力&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #9b2c2c;&quot;&gt;&lt;b&gt;無&lt;/b&gt;（無校驗機制）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #c05621;&quot;&gt;&lt;b&gt;僅能告警&lt;/b&gt;（無副本自癒）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #9b2c2c;&quot;&gt;&lt;b&gt;無&lt;/b&gt;（有副本但無法辨別對錯）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #22543d;&quot;&gt;&lt;b&gt;完整自癒&lt;/b&gt;（校驗自動修復受損區塊）&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; font-weight: bold; background-color: #f7fafc;&quot;&gt;異常斷電抗損性&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0;&quot;&gt;中等（需執行 chkdsk 修復）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0;&quot;&gt;極佳（CoW 機制永不需 chkdsk）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0;&quot;&gt;良好（容許一顆物理硬碟損壞）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #22543d;&quot;&gt;&lt;b&gt;極致&lt;/b&gt;（雙碟容錯 + 結構免檢修）&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; font-weight: bold; background-color: #f7fafc;&quot;&gt;誤刪救援與生態支援&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #22543d;&quot;&gt;&lt;b&gt;極佳&lt;/b&gt;（支援 EFS、Quota、救援工具）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #9b2c2c;&quot;&gt;&lt;b&gt;困難&lt;/b&gt;（一般救援工具無法解析）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #22543d;&quot;&gt;&lt;b&gt;極佳&lt;/b&gt;（相容性最高）&lt;/td&gt;
          &lt;td style=&quot;padding: 10px; border: 1px solid #e2e8f0; color: #9b2c2c;&quot;&gt;&lt;b&gt;困難&lt;/b&gt;（依賴專業企業工具）&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;!-- 系統碟與資料碟選型決策 --&gt;
  &lt;h2 style=&quot;font-size: 20px; color: #2d3748; margin-top: 36px; border-left: 4px solid #48bb78; padding-left: 10px;&quot;&gt;
    三、 系統碟與資料碟的最佳搭配策略
  &lt;/h2&gt;

  &lt;div style=&quot;display: grid; gap: 16px; margin: 16px 0;&quot;&gt;
    &lt;!-- 決策 1 --&gt;
    &lt;div style=&quot;background-color: #edf2f7; padding: 16px; border-radius: 8px;&quot;&gt;
      &lt;h3 style=&quot;margin-top: 0; color: #2b6cb0; font-size: 16px;&quot;&gt;1. 系統開機碟（C: 槽）最佳解 ➔ 固定使用 NTFS（搭配 NVMe SSD 單碟或軟體鏡像）&lt;/h3&gt;
      &lt;p style=&quot;margin-bottom: 0; font-size: 14.5px; color: #4a5568;&quot;&gt;
        微軟在架構上尚未開放消費者端以 ReFS 作為系統開機啟動磁區。系統碟有大量高頻隨機小檔案讀寫、系統還原點與安全權限控制，NTFS 的就地覆寫特性與超低系統負擔是作業系統平穩運行的唯一保障。
      &lt;/p&gt;
    &lt;/div&gt;

    &lt;!-- 決策 2 --&gt;
    &lt;div style=&quot;background-color: #f0fff4; border: 1px solid #c6f6d5; padding: 16px; border-radius: 8px;&quot;&gt;
      &lt;h3 style=&quot;margin-top: 0; color: #22543d; font-size: 16px;&quot;&gt;2. 資料碟情境 A（冷儲存/家庭回憶/虛擬機）➔ 首選「雙向鏡像 + ReFS」&lt;/h3&gt;
      &lt;p style=&quot;margin-bottom: 0; font-size: 14.5px; color: #2f855a;&quot;&gt;
        若資料碟主要是長期封存相片、家庭影片、重要備份或大型 Hyper-V 虛擬機器，這類資料鮮少進行隨機小檔頻繁修改。雙向鏡像結合 ReFS 能徹底杜絕&lt;b&gt;「靜態位元腐蝕」&lt;/b&gt;，十年後讀取仍能透過健全副本自動修復損壞區塊；虛擬機複製還能享受瞬間秒開的「區塊複製」優勢。
      &lt;/p&gt;
    &lt;/div&gt;

    &lt;!-- 決策 3 --&gt;
    &lt;div style=&quot;background-color: #fffaf0; border: 1px solid #feebc8; padding: 16px; border-radius: 8px;&quot;&gt;
      &lt;h3 style=&quot;margin-top: 0; color: #c05621; font-size: 16px;&quot;&gt;3. 資料碟情境 B（BT/PT下載/遊戲庫/頻繁解壓縮）➔ 首選「NTFS（單碟或鏡像）」&lt;/h3&gt;
      &lt;p style=&quot;margin-bottom: 0; font-size: 14.5px; color: #7b341e;&quot;&gt;
        若資料碟承擔重度 BT/PT 下載、Steam 遊戲安裝庫或解壓縮大型專案，ReFS 的寫入時複製會產生龐大的寫入放大與嚴重的區塊碎片化，導致傳統機械硬碟讀寫磁頭尋道崩潰、效能嚴重衰退。此時具備成熟就地覆寫機制的 NTFS 才是維持流暢度與通用性的最佳解答。
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/6251228086511141503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/6251228086511141503'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/ai-windows-11-refs-vs-ntfs.html' title='雜項-AI應用 Windows 11 ReFS vs NTFS'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-7538447980666287577</id><published>2026-09-14T16:36:36.500+08:00</published><updated>2026-09-14T17:12:12.751+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="AI應用"/><title type='text'>雜項-AI應用 硬體 RAID vs HBA vs 晶片組直通</title><content type='html'>&lt;div style=&quot;color: #2c3e50; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; line-height: 1.8; margin: auto; max-width: 860px;&quot;&gt;

  &lt;!--標題與前言--&gt;
  &lt;h1 style=&quot;border-bottom: 2px solid rgb(49, 130, 206); color: #1a202c; font-size: 26px; margin-bottom: 16px; padding-bottom: 12px;&quot;&gt;
    硬體 RAID vs HBA vs 晶片組直通：Win11 下三種 RAID 10 等效架構深度評比
  &lt;/h1&gt;
  &lt;p style=&quot;color: #4a5568; font-size: 15px;&quot;&gt;
    在建置本地大容量儲存陣列時，究竟該選擇傳統的硬體 RAID 卡、純直通的 HBA 卡，還是直接利用主機板晶片組搭配 Windows 內建的「儲存空間（Storage Spaces）」？本文排除建置成本考量，純粹從&lt;b&gt;軟硬體架構、資料安全、效能與平台適配度&lt;/b&gt;出發，針對特定運行環境，將磁碟配置嚴格一致化為 &lt;b&gt;4 顆 2TB（最低門檻）&lt;/b&gt; 與 &lt;b&gt;8 顆 2TB（最佳滿載）&lt;/b&gt; 進行深度解析。
  &lt;/p&gt;

  &lt;!--環境配置--&gt;
  &lt;div style=&quot;background-color: #f7fafc; border-left: 4px solid rgb(49, 130, 206); border-radius: 0px 8px 8px 0px; margin: 24px 0px; padding: 16px 20px;&quot;&gt;
    &lt;h2 style=&quot;color: #2d3748; font-size: 18px; margin-top: 0px;&quot;&gt;一、 測試與評估環境配置&lt;/h2&gt;
    &lt;ul style=&quot;color: #4a5568; font-size: 14.5px; margin: 0px; padding-left: 20px;&quot;&gt;
      &lt;li&gt;&lt;b&gt;處理器 (CPU)：&lt;/b&gt; AMD Ryzen 5 5600X (6C12T)&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;主機板 (MB)：&lt;/b&gt; ASUS TUF GAMING X570-PRO (WI-FI)&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;顯示卡 (GPU)：&lt;/b&gt; Intel Arc B580（佔用 CPU 直出 PCIe 4.0 x16 插槽）&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;記憶體 (RAM)：&lt;/b&gt; 64GB DDR4&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;作業系統 (OS)：&lt;/b&gt; Windows 11 專業版 / 工作站版&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;儲存硬碟 (HDD)：&lt;/b&gt; 2TB SATA 企業級/NAS 傳統硬碟（4 顆 / 8 顆）&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;機殼與散熱 (Cooling)：&lt;/b&gt; Fractal Design Define 7 搭配 6 顆 Delta AFB1212VH 暴力扇（解決被動散熱晶片高溫問題）&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;候選控制設備：&lt;/b&gt;
        &lt;ul&gt;
          &lt;li&gt;LSI MegaRAID 9271-8i（內建 1GB DDR3 快取，支援 CacheVault/BBU）&lt;/li&gt;
          &lt;li&gt;LSI HBA IT Mode 直通卡（如 9211-8i / 9300-8i 等級）&lt;/li&gt;
          &lt;li&gt;ASUS X570 原生 8 個 SATA 6Gbps 連接埠&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;

  &lt;!--磁碟基準--&gt;
  &lt;h2 style=&quot;border-left: 4px solid rgb(72, 187, 120); color: #2d3748; font-size: 20px; margin-top: 32px; padding-left: 10px;&quot;&gt;
    二、 磁碟配置基準一致化（RAID 10 等效架構）
  &lt;/h2&gt;
  &lt;p style=&quot;font-size: 15px;&quot;&gt;為確保對比公平，所有方案均配置為「雙向鏡像 + 條帶化（Striping）」模式：&lt;/p&gt;
  &lt;ul style=&quot;color: #4a5568; font-size: 15px; padding-left: 20px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;
      &lt;b&gt;最少配置（4 顆 2TB，可用容量 4TB）：&lt;/b&gt;
      &lt;ul style=&quot;margin-top: 4px;&quot;&gt;
        &lt;li&gt;&lt;b&gt;LSI 9271-8i (硬體 RAID 10)：&lt;/b&gt; 2 組 RAID 1 做 Striping (RAID 0)。&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;HBA 卡 (IT Mode) + Win11 儲存空間：&lt;/b&gt; 4 顆直通，建立 2 欄位（Columns=2）雙向鏡像。&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;X570 板載 SATA + Win11 儲存空間：&lt;/b&gt; 4 顆直連原生 SATA，軟體建立 2 欄位雙向鏡像。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;b&gt;最佳滿載配置（8 顆 2TB，可用容量 8TB）：&lt;/b&gt;
      &lt;ul style=&quot;margin-top: 4px;&quot;&gt;
        &lt;li&gt;&lt;b&gt;LSI 9271-8i：&lt;/b&gt; 4 組 RAID 1 做 Striping，插滿 2 組 SFF-8087 埠。&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;HBA 卡 (IT Mode) + Win11 儲存空間：&lt;/b&gt; 8 顆直通，建立 4 欄位（Columns=4）雙向鏡像，具備 4 碟併發頻寬。&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;X570 板載 SATA + Win11 儲存空間：&lt;/b&gt; 插滿主機板原生 8 個 SATA 埠，走晶片組頻寬聚合。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;!--比較表格--&gt;
  &lt;h2 style=&quot;border-left: 4px solid rgb(72, 187, 120); color: #2d3748; font-size: 20px; margin-top: 36px; padding-left: 10px;&quot;&gt;
    三、 三方軟硬體優劣詳細比較
  &lt;/h2&gt;
  &lt;div style=&quot;margin: 20px 0px; overflow-x: auto;&quot;&gt;
    &lt;table style=&quot;background-color: white; border-collapse: collapse; border: 1px solid rgb(226, 232, 240); font-size: 14px; text-align: left; width: 100%;&quot;&gt;
      &lt;thead&gt;
        &lt;tr style=&quot;background-color: #edf2f7; color: #2d3748;&quot;&gt;
          &lt;th style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px; width: 18%;&quot;&gt;評比維度&lt;/th&gt;
          &lt;th style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px; width: 27%;&quot;&gt;LSI 9271-8i (硬體 RAID 10)&lt;/th&gt;
          &lt;th style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px; width: 27%;&quot;&gt;HBA (IT Mode) + Win11 儲存空間&lt;/th&gt;
          &lt;th style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px; width: 28%;&quot;&gt;X570 原生 SATA + Win11 儲存空間&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; border: 1px solid rgb(226, 232, 240); font-weight: bold; padding: 12px;&quot;&gt;運作架構&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;純硬體運算&lt;/b&gt;&lt;br /&gt;ROC 晶片排程，對系統包裝成單一虛擬磁區。&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;硬體通道 + 軟體陣列&lt;/b&gt;&lt;br /&gt;純訊號轉接，由 Windows 掌控實體碟與排程。&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;晶片組通道 + 軟體陣列&lt;/b&gt;&lt;br /&gt;直走 X570 匯流排，由 Windows 掌控實體碟與排程。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; border: 1px solid rgb(226, 232, 240); font-weight: bold; padding: 12px;&quot;&gt;隨機/小檔寫入&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); color: #2b6cb0; padding: 12px;&quot;&gt;&lt;b&gt;極佳（大幅領先）&lt;/b&gt;&lt;br /&gt;1GB DDR3 快取合併隨機寫入，有效消弭尋道延遲。&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;普通偏弱&lt;/b&gt;&lt;br /&gt;受限於 Windows 中繼資料寫入機制，無快取防護。&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;普通偏弱&lt;/b&gt;&lt;br /&gt;與 HBA 相同，效能受限於軟體排程而非頻寬。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; border: 1px solid rgb(226, 232, 240); font-weight: bold; padding: 12px;&quot;&gt;大檔連續讀寫&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;高&lt;/b&gt;&lt;br /&gt;條帶化架構純熟，8 碟配置下吞吐飽和穩定。&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;高&lt;/b&gt;&lt;br /&gt;多碟併發分流能力強，8 碟配置下傳輸極限高。&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;高&lt;/b&gt;&lt;br /&gt;與 HBA 表現相當，8 顆原生 SATA 並行讀寫順暢。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; border: 1px solid rgb(226, 232, 240); font-weight: bold; padding: 12px;&quot;&gt;資料自癒與校驗&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;一般&lt;/b&gt;&lt;br /&gt;僅依賴傳統 Patrol Read 巡檢壞軌，無檔案級自癒。&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); color: #22543d; padding: 12px;&quot;&gt;&lt;b&gt;優秀（搭配 ReFS）&lt;/b&gt;&lt;br /&gt;回傳完整 SMART，具備 Checksum 自動修復靜態資料損壞。&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); color: #22543d; padding: 12px;&quot;&gt;&lt;b&gt;優秀（搭配 ReFS）&lt;/b&gt;&lt;br /&gt;具備 ReFS 檔案自癒與完整原生硬碟健康監控。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; border: 1px solid rgb(226, 232, 240); font-weight: bold; padding: 12px;&quot;&gt;PCIe 通道與主機負擔&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;需佔用 PCIe 插槽&lt;/b&gt;&lt;br /&gt;插於第二槽（PCIe 3.0 x4 頻寬），但 &lt;b&gt;0 CPU 負擔&lt;/b&gt;。&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;需佔用 PCIe 插槽&lt;/b&gt;&lt;br /&gt;佔用第二槽，I/O 消耗部分 5600X CPU 與 RAM。&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); color: #22543d; padding: 12px;&quot;&gt;&lt;b&gt;最優（無額外匯流排瓶頸）&lt;/b&gt;&lt;br /&gt;直走板載 SATA，不搶占 PCIe 插槽。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; border: 1px solid rgb(226, 232, 240); font-weight: bold; padding: 12px;&quot;&gt;發熱與電源管理&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;苛刻&lt;/b&gt;&lt;br /&gt;高發熱（需暴力扇壓制）。硬碟無法休眠停轉。&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;中等&lt;/b&gt;&lt;br /&gt;發熱量略低，硬碟支援原生休眠指令。&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); color: #22543d; padding: 12px;&quot;&gt;&lt;b&gt;極低&lt;/b&gt;&lt;br /&gt;無擴充卡積熱，支援原生完整閒置休眠停轉。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; border: 1px solid rgb(226, 232, 240); font-weight: bold; padding: 12px;&quot;&gt;災難復原與可攜性&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); color: #9b2c2c; padding: 12px;&quot;&gt;&lt;b&gt;極差&lt;/b&gt;&lt;br /&gt;卡故障時必須尋找相容 LSI 卡方能讀取資料。&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); color: #22543d; padding: 12px;&quot;&gt;&lt;b&gt;極佳&lt;/b&gt;&lt;br /&gt;資訊寫在硬碟上，硬碟換到任何 Windows 主機均可辨識。&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); color: #22543d; padding: 12px;&quot;&gt;&lt;b&gt;極佳&lt;/b&gt;&lt;br /&gt;完全不依賴特定介面卡，隨插即用遷移最便利。&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;!--結論與建議--&gt;
  &lt;h2 style=&quot;border-left: 4px solid rgb(72, 187, 120); color: #2d3748; font-size: 20px; margin-top: 36px; padding-left: 10px;&quot;&gt;
    四、 方案選型建議
  &lt;/h2&gt;
  &lt;div style=&quot;display: grid; gap: 16px; margin-top: 16px;&quot;&gt;
    &lt;div style=&quot;background-color: #edf2f7; border-radius: 8px; padding: 16px;&quot;&gt;
      &lt;h3 style=&quot;color: #2b6cb0; font-size: 16px; margin-top: 0px;&quot;&gt;1. 選擇「LSI 9271-8i 硬體 RAID 10」：追求高併發 I/O 與效能極限&lt;/h3&gt;
      &lt;p style=&quot;font-size: 14.5px; margin-bottom: 0px;&quot;&gt;適合頻繁資料庫交易、虛擬機磁碟讀寫或持續隨機小檔吞吐。在 6 顆 Delta 暴力扇的強效風道下已根除過熱隱憂。&lt;i&gt;（注意：務必搭配 CacheVault/BBU 以安全啟用 Write-Back 回寫快取）&lt;/i&gt;。&lt;/p&gt;
    &lt;/div&gt;
    &lt;div style=&quot;background-color: #f0fff4; border-radius: 8px; border: 1px solid rgb(198, 246, 213); padding: 16px;&quot;&gt;
      &lt;h3 style=&quot;color: #22543d; font-size: 16px; margin-top: 0px;&quot;&gt;2. 選擇「X570 原生 SATA + Win11 儲存空間」：最平衡且維護極簡（推薦）&lt;/h3&gt;
      &lt;p style=&quot;font-size: 14.5px; margin-bottom: 0px;&quot;&gt;ASUS TUF X570-PRO 本身已提供 8 個原生 SATA 埠，不佔用次要 PCIe 插槽。搭配 ReFS 檔案系統具備 Checksum 自癒防靜態資料損壞能力，硬碟閒置可正常休眠省電，換機復原性極佳。&lt;/p&gt;
    &lt;/div&gt;
    &lt;div style=&quot;background-color: floralwhite; border-radius: 8px; border: 1px solid rgb(254, 235, 200); padding: 16px;&quot;&gt;
      &lt;h3 style=&quot;color: #c05621; font-size: 16px; margin-top: 0px;&quot;&gt;3. 關於「HBA 直通卡」的定位&lt;/h3&gt;
      &lt;p style=&quot;font-size: 14.5px; margin-bottom: 0px;&quot;&gt;本配置下定位較為尷尬。由於板載 SATA 已有 8 個，插 HBA 卡不僅多佔一組 PCIe 插槽並增加廢熱，效能上限依然受限於 Windows 儲存空間演算法，除非板載埠已被其他設備佔滿，否則無須額外添購。&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;/div&gt;

&lt;div style=&quot;color: #2c3e50; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; line-height: 1.8; margin: auto; max-width: 860px;&quot;&gt;

  &lt;!--標題與前言--&gt;
  &lt;h1 style=&quot;border-bottom: 2px solid rgb(49, 130, 206); color: #1a202c; font-size: 26px; margin-bottom: 16px; padding-bottom: 12px;&quot;&gt;
    跨代升級有感嗎？LSI MegaRAID 9361-8i vs 9271-8i 深度對比與平台實務解析
  &lt;/h1&gt;
  &lt;p style=&quot;color: #4a5568; font-size: 15px;&quot;&gt;
    在規劃硬體 RAID 儲存陣列時，LSI MegaRAID 9271-8i 與 9361-8i 都是二手市場或自建儲存池常見的經典陣列卡。兩者表面上是 &lt;b&gt;6Gb/s SAS-2 世代與 12Gb/s SAS-3 世代&lt;/b&gt;的交替，但在現代主流平台（如 AMD X570、Win11）搭配多顆傳統 SATA 機械硬碟的環境下，這項升級是否真正具備效益？本文將針對硬體規格、平台適配度與實際效能差異進行全盤剖析。
  &lt;/p&gt;

  &lt;!--硬體規格對比表格--&gt;
  &lt;h2 style=&quot;border-left: 4px solid rgb(49, 130, 206); color: #2d3748; font-size: 20px; margin-top: 32px; padding-left: 10px;&quot;&gt;
    一、 核心硬體規格規格差異一覽
  &lt;/h2&gt;
  &lt;div style=&quot;margin: 20px 0px; overflow-x: auto;&quot;&gt;
    &lt;table style=&quot;background-color: white; border-collapse: collapse; border: 1px solid rgb(226, 232, 240); font-size: 14px; text-align: left; width: 100%;&quot;&gt;
      &lt;thead&gt;
        &lt;tr style=&quot;background-color: #edf2f7; color: #2d3748;&quot;&gt;
          &lt;th style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px; width: 22%;&quot;&gt;規格項目&lt;/th&gt;
          &lt;th style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px; width: 39%;&quot;&gt;LSI MegaRAID 9271-8i (SAS-2)&lt;/th&gt;
          &lt;th style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px; width: 39%;&quot;&gt;LSI MegaRAID 9361-8i (SAS-3)&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; border: 1px solid rgb(226, 232, 240); font-weight: bold; padding: 12px;&quot;&gt;主控 ROC 晶片&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;LSI SAS2208（雙核 800MHz PowerPC）&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); color: #2b6cb0; padding: 12px;&quot;&gt;&lt;b&gt;LSI SAS3108（雙核 1.2GHz PowerPC）&lt;/b&gt;&lt;br /&gt;&lt;small style=&quot;color: #718096;&quot;&gt;算力提升約 50%，重建與校驗吞吐更強&lt;/small&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; border: 1px solid rgb(226, 232, 240); font-weight: bold; padding: 12px;&quot;&gt;通道協定頻寬&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;SAS-2 (6Gbps) / SATA 3.0 (6Gbps)&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;SAS-3 (12Gbps)&lt;/b&gt; / SATA 3.0 (6Gbps)&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; border: 1px solid rgb(226, 232, 240); font-weight: bold; padding: 12px;&quot;&gt;連接線接頭規格&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;SFF-8087&lt;/b&gt; (Mini-SAS)&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); color: #c05621; padding: 12px;&quot;&gt;&lt;b&gt;SFF-8643&lt;/b&gt; (Mini-SAS HD)&lt;br /&gt;&lt;small style=&quot;color: #718096;&quot;&gt;線材規格不相容，需重新配置線材&lt;/small&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; border: 1px solid rgb(226, 232, 240); font-weight: bold; padding: 12px;&quot;&gt;內建快取記憶體&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;1GB DDR3-1333&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); color: #2b6cb0; padding: 12px;&quot;&gt;&lt;b&gt;1GB 或 2GB DDR3-1866&lt;/b&gt;（常見為 2GB）&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; border: 1px solid rgb(226, 232, 240); font-weight: bold; padding: 12px;&quot;&gt;斷電保護配件&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;CacheVault CV02 或 BBU09 電池模組&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;&lt;b&gt;CacheVault CV03 (LSICVM02)&lt;/b&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; border: 1px solid rgb(226, 232, 240); font-weight: bold; padding: 12px;&quot;&gt;UEFI / 主機板相容&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); color: #9b2c2c; padding: 12px;&quot;&gt;傳統 Legacy BIOS 為主（現代主機板易有衝突）&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); color: #22543d; padding: 12px;&quot;&gt;&lt;b&gt;完整原生 UEFI 支援（HII 配置介面）&lt;/b&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; border: 1px solid rgb(226, 232, 240); font-weight: bold; padding: 12px;&quot;&gt;Windows 11 驅動&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); color: #9b2c2c; padding: 12px;&quot;&gt;官方早已停更，需手動掛載舊版 Legacy 驅動&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); color: #22543d; padding: 12px;&quot;&gt;&lt;b&gt;官方與系統維護良好&lt;/b&gt;，隨插即用支援度高&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;background-color: #f7fafc; border: 1px solid rgb(226, 232, 240); font-weight: bold; padding: 12px;&quot;&gt;發熱量與功耗&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;約 14～16W（SAS2208 高溫）&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(226, 232, 240); padding: 12px;&quot;&gt;約 16～20W（SAS3108 發熱量更大）&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;!--實際運作環境影響剖析--&gt;
  &lt;h2 style=&quot;border-left: 4px solid rgb(72, 187, 120); color: #2d3748; font-size: 20px; margin-top: 36px; padding-left: 10px;&quot;&gt;
    二、 在特定硬體平台下的真實體驗解析
  &lt;/h2&gt;
  &lt;p style=&quot;color: #4a5568; font-size: 15px;&quot;&gt;
    若將兩張卡置於主流硬體平台（如 AMD Ryzen 5600X / ASUS TUF X570-PRO / 搭配多顆 2TB SATA 傳統硬碟）中實際運行，差異主要體現在以下層面：
  &lt;/p&gt;

  &lt;div style=&quot;display: grid; gap: 16px; margin: 16px 0px;&quot;&gt;
    &lt;!--點 1--&gt;
    &lt;div style=&quot;background-color: #f7fafc; border-radius: 8px; border: 1px solid rgb(226, 232, 240); padding: 16px;&quot;&gt;
      &lt;h3 style=&quot;color: #2d3748; font-size: 16px; margin-top: 0px;&quot;&gt;1. 傳統硬碟（2TB SATA）讀寫速度：實質無差別&lt;/h3&gt;
      &lt;p style=&quot;color: #4a5568; font-size: 14.5px; margin-bottom: 0px;&quot;&gt;
        傳統機械硬碟單顆連續讀寫上限約在 150～220 MB/s，遠未觸碰 SATA 6Gbps 通道天花板。9361-8i 的 12Gb/s SAS-3 頻寬優勢在傳統 SATA 硬碟上&lt;b&gt;完全無法體現&lt;/b&gt;（除非日後更換為企業級 12G SAS 硬碟或 SATA/SAS SSD 陣列）。
      &lt;/p&gt;
    &lt;/div&gt;

    &lt;!--點 2--&gt;
    &lt;div style=&quot;background-color: #f7fafc; border-radius: 8px; border: 1px solid rgb(226, 232, 240); padding: 16px;&quot;&gt;
      &lt;h3 style=&quot;color: #2d3748; font-size: 16px; margin-top: 0px;&quot;&gt;2. 隨機寫入耐受力：2GB 快取版具備優勢&lt;/h3&gt;
      &lt;p style=&quot;color: #4a5568; font-size: 14.5px; margin-bottom: 0px;&quot;&gt;
        市面上的 9361-8i 多為 2GB DDR3-1866 快取版本（9271-8i 為 1GB DDR3-1333）。在面對持續不斷的隨機小檔寫入或多工併發排程時，翻倍的快取容量與更高頻寬能吸收更大的突發寫入峰值，減少傳統硬碟尋道停頓的時間。
      &lt;/p&gt;
    &lt;/div&gt;

    &lt;!--點 3--&gt;
    &lt;div style=&quot;background-color: #f7fafc; border-radius: 8px; border: 1px solid rgb(226, 232, 240); padding: 16px;&quot;&gt;
      &lt;h3 style=&quot;color: #2d3748; font-size: 16px; margin-top: 0px;&quot;&gt;3. 平台插槽頻寬（PCIe 3.0 x4 瓶頸）：兩者表現一致&lt;/h3&gt;
      &lt;p style=&quot;color: #4a5568; font-size: 14.5px; margin-bottom: 0px;&quot;&gt;
        兩張卡皆為 PCIe 3.0 x8 介面。當主力顯卡佔用 CPU 直出的第一根插槽時，陣列卡插在 X570 第二根長插槽（晶片組提供 PCIe 4.0 x4 通道），實質皆以 &lt;b&gt;PCIe 3.0 x4 速率運作（頻寬上限約 3.9 GB/s）&lt;/b&gt;。這對 8 顆傳統硬碟（總連續吞吐約 1.6 GB/s）來說皆能完全餵飽，匯流排不會構成瓶頸。
      &lt;/p&gt;
    &lt;/div&gt;

    &lt;!--點 4--&gt;
    &lt;div style=&quot;background-color: #f0fff4; border-radius: 8px; border: 1px solid rgb(198, 246, 213); padding: 16px;&quot;&gt;
      &lt;h3 style=&quot;color: #22543d; font-size: 16px; margin-top: 0px;&quot;&gt;4. 現代系統穩定性與相容性：9361-8i 壓倒性勝出&lt;/h3&gt;
      &lt;p style=&quot;color: #2f855a; font-size: 14.5px; margin-bottom: 0px;&quot;&gt;
        這是跨代最核心的實質差異。9271-8i 在現代 AMD AM4/X570 主機板上，容易出現 UEFI 開機自檢凍結、Option ROM 無法正確載入（常需強開 CSM）以及 Win11 驅動維護脫節等問題。&lt;b&gt;9361-8i 原生具備完整的 UEFI 支援與更健全的系統相容性&lt;/b&gt;，免去了維護老硬體的排錯困擾。
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;!--結論與選購提醒--&gt;
  &lt;h2 style=&quot;border-left: 4px solid rgb(72, 187, 120); color: #2d3748; font-size: 20px; margin-top: 36px; padding-left: 10px;&quot;&gt;
    三、 總結與替換注意事項
  &lt;/h2&gt;
  &lt;div style=&quot;background-color: #edf2f7; border-radius: 8px; color: #2d3748; font-size: 14.5px; padding: 18px 20px;&quot;&gt;
    &lt;p style=&quot;margin-top: 0px;&quot;&gt;
      單論&lt;b&gt;「多顆傳統機械硬碟能跑多快」&lt;/b&gt;，9361-8i 與 9271-8i 的傳輸極限幾乎一模一樣。然而，升級 9361-8i 的核心價值在於&lt;b&gt;「買省心與長期穩定度」&lt;/b&gt;——避免了現代主機板的 UEFI 相容障礙，並帶來更健全的 Win11 驅動支援與雙倍寫入快取空間。
    &lt;/p&gt;
    &lt;p style=&quot;color: #c05621; font-weight: bold; margin-bottom: 0px;&quot;&gt;
      ⚠️ 替換注意事項：9361-8i 採用 Mini-SAS HD (SFF-8643) 介面，原先 9271-8i 使用的 SFF-8087 訊號線無法通用，升級時必須同步更換為 SFF-8643 轉 SATA 傳輸線。
    &lt;/p&gt;
  &lt;/div&gt;

&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/7538447980666287577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/7538447980666287577'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/ai-raid-vs-hba-vs.html' title='雜項-AI應用 硬體 RAID vs HBA vs 晶片組直通'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-1878037324359171124</id><published>2026-09-14T07:09:40.935+08:00</published><updated>2026-09-14T16:34:58.254+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="AI應用"/><title type='text'>雜項-AI應用 BIOS 設定</title><content type='html'>&lt;div style=&quot;font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, Helvetica, Arial, sans-serif; line-height: 1.6; color: #202124; max-width: 860px; margin: 0 auto; padding: 16px;&quot;&gt;

  &lt;h2 style=&quot;color: #1a73e8; border-bottom: 2px solid #e8eaed; padding-bottom: 8px; margin-bottom: 16px;&quot;&gt;ASUS TUF GAMING X570-PRO (WI-FI) BIOS 設定對照手冊&lt;/h2&gt;
  
  &lt;p style=&quot;background: #f8f9fa; border-left: 4px solid #1a73e8; padding: 12px 16px; margin: 16px 0; border-radius: 0 8px 8px 0;&quot;&gt;
    &lt;strong&gt;硬體環境：&lt;/strong&gt;AMD Ryzen 5 5600X ｜ Intel Arc B580 12GB ｜ Crucial 64GB DDR4-3200 ｜ BIOS 版本 5044[cite: 1]&lt;br&gt;
    &lt;strong&gt;用途：&lt;/strong&gt;日後若執行「載入最佳化預設值（Load Optimized Defaults）」時，可直接對照以下 4 大核心分區進行參數還原。
  &lt;/p&gt;

  &lt;h3 style=&quot;color: #202124; margin-top: 28px;&quot;&gt;1. 顯示卡效能必備設定（Intel Arc B580）&lt;/h3&gt;
  &lt;p style=&quot;font-size: 14px; color: #d93025; margin-bottom: 8px;&quot;&gt;&lt;strong&gt;⚠️ 警告：&lt;/strong&gt;未開啟此區兩項設定，Intel Arc 顯卡在遊戲與各類運算效能將衰退 20% 以上。&lt;/p&gt;
  
  &lt;div style=&quot;overflow-x: auto; margin-bottom: 24px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: collapse; text-align: left; font-size: 14px;&quot;&gt;
      &lt;thead&gt;
        &lt;tr style=&quot;background-color: #f1f3f4; border-bottom: 2px solid #dadce0;&quot;&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;BIOS 路徑 / 選項名稱&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;目前狀態 (記錄值)&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;重設後預設值&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px; color: #1a73e8;&quot;&gt;恢復後應調整為&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;功能說明&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr style=&quot;border-bottom: 1px solid #e8eaed;&quot;&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;&lt;strong&gt;Advanced \ PCI Subsystem Settings&lt;/strong&gt;&lt;br&gt;&lt;code&gt;Above 4G Decoding&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold; color: #188038;&quot;&gt;Enabled&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;Disabled / Auto&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold; color: #d93025;&quot;&gt;Enabled&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;開啟 64 位元位址空間，為 ReBAR 前提條件。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;border-bottom: 1px solid #e8eaed; background-color: #fafafa;&quot;&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;&lt;strong&gt;Advanced \ PCI Subsystem Settings&lt;/strong&gt;&lt;br&gt;&lt;code&gt;Re-Size BAR Support&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold; color: #188038;&quot;&gt;Enabled&lt;br&gt;&lt;span style=&quot;font-size: 12px; color: #5f6368;&quot;&gt;(尺寸: 16 GB)[cite: 1]&lt;/span&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;Disabled&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold; color: #d93025;&quot;&gt;Enabled / Auto&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;啟用 Resizable BAR，CPU 即可直接存取顯卡全域顯存。&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;h3 style=&quot;color: #202124; margin-top: 28px;&quot;&gt;2. 記憶體超頻與時序設定（Crucial 64GB 雙通道）&lt;/h3&gt;
  &lt;p style=&quot;font-size: 14px; color: #5f6368; margin-bottom: 8px;&quot;&gt;插滿 4 條 16GB[cite: 1]，已套用 原廠 XMP 2.0 運作於 3200 MT/s[cite: 1]。&lt;/p&gt;
  
  &lt;div style=&quot;overflow-x: auto; margin-bottom: 24px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: collapse; text-align: left; font-size: 14px;&quot;&gt;
      &lt;thead&gt;
        &lt;tr style=&quot;background-color: #f1f3f4; border-bottom: 2px solid #dadce0;&quot;&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;BIOS 路徑 / 選項名稱&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;目前狀態 (記錄值)&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;重設後預設值&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px; color: #1a73e8;&quot;&gt;恢復後應調整為&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;功能說明&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr style=&quot;border-bottom: 1px solid #e8eaed;&quot;&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;&lt;strong&gt;Ai Tweaker&lt;/strong&gt;&lt;br&gt;&lt;code&gt;Ai Overclock Tuner&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold; color: #188038;&quot;&gt;D.O.C.P. (Profile 1)&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;Auto&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold; color: #d93025;&quot;&gt;D.O.C.P.&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;自動套用原廠 XMP 參數檔[cite: 1]。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;border-bottom: 1px solid #e8eaed; background-color: #fafafa;&quot;&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;&lt;strong&gt;Ai Tweaker&lt;/strong&gt;&lt;br&gt;&lt;code&gt;Memory Frequency&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;DDR4-3200 MHz[cite: 1]&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;Auto (2400/2666)&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold;&quot;&gt;DDR4-3200MHz&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;由 D.O.C.P. 自動帶出。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;border-bottom: 1px solid #e8eaed;&quot;&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;&lt;strong&gt;Ai Tweaker&lt;/strong&gt;&lt;br&gt;&lt;code&gt;FCLK Frequency&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;1600 MHz&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;Auto&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold;&quot;&gt;1600 MHz (或 Auto)&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;保持 Infinity Fabric 與記憶體 1:1 運作以降低延遲。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;border-bottom: 1px solid #e8eaed; background-color: #fafafa;&quot;&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;&lt;strong&gt;Ai Tweaker&lt;/strong&gt;&lt;br&gt;&lt;code&gt;DRAM Voltage&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;1.35 V[cite: 1]&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;1.20 V[cite: 1]&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold;&quot;&gt;1.35 V&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;維持 4 條雙面顆粒穩定供電。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;border-bottom: 1px solid #e8eaed;&quot;&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;&lt;strong&gt;Ai Tweaker \ DRAM Timing Control&lt;/strong&gt;&lt;br&gt;主要時序 (Primary Timings)&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;16-18-18-36[cite: 1]&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;Auto&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold;&quot;&gt;16-18-18-36&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;D.O.C.P. 套用後自動生效。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;border-bottom: 1px solid #e8eaed; background-color: #fafafa;&quot;&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;&lt;strong&gt;Ai Tweaker \ DRAM Timing Control&lt;/strong&gt;&lt;br&gt;&lt;code&gt;Command Rate (CR)&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;1T[cite: 1]&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;Auto&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold;&quot;&gt;1T / Auto&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;維持 1T 延遲最低，若遇極端不穩再放寬至 2T。&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;h3 style=&quot;color: #202124; margin-top: 28px;&quot;&gt;3. 開機與安全防護設定（Windows 11 必要條件）&lt;/h3&gt;
  
  &lt;div style=&quot;overflow-x: auto; margin-bottom: 24px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: collapse; text-align: left; font-size: 14px;&quot;&gt;
      &lt;thead&gt;
        &lt;tr style=&quot;background-color: #f1f3f4; border-bottom: 2px solid #dadce0;&quot;&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;BIOS 路徑 / 選項名稱&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;目前狀態 (記錄值)&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;重設後預設值&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px; color: #1a73e8;&quot;&gt;恢復後應調整為&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;功能說明&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr style=&quot;border-bottom: 1px solid #e8eaed;&quot;&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;&lt;strong&gt;Advanced \ AMD fTPM configuration&lt;/strong&gt;&lt;br&gt;&lt;code&gt;Firmware TPM&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold; color: #188038;&quot;&gt;Enabled[cite: 1]&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;Enabled&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold;&quot;&gt;Enabled&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;啟用 AMD 處理器內建 TPM 2.0[cite: 1]。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;border-bottom: 1px solid #e8eaed; background-color: #fafafa;&quot;&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;&lt;strong&gt;Boot \ Secure Boot&lt;/strong&gt;&lt;br&gt;&lt;code&gt;OS Type&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold; color: #188038;&quot;&gt;Windows UEFI mode[cite: 1]&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;Windows UEFI mode&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold;&quot;&gt;Windows UEFI mode&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;安全開機（Secure Boot）認證機制[cite: 1]。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;border-bottom: 1px solid #e8eaed;&quot;&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;&lt;strong&gt;Boot \ CSM (Compatibility Support Module)&lt;/strong&gt;&lt;br&gt;&lt;code&gt;Launch CSM&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold; color: #188038;&quot;&gt;Disabled&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;Disabled&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold; color: #d93025;&quot;&gt;Disabled&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;關閉相容模式，確保純 UEFI 開機並支援 ReBAR。&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;h3 style=&quot;color: #202124; margin-top: 28px;&quot;&gt;4. CPU 與晶片組設定（Ryzen 5 5600X）&lt;/h3&gt;
  
  &lt;div style=&quot;overflow-x: auto; margin-bottom: 24px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: collapse; text-align: left; font-size: 14px;&quot;&gt;
      &lt;thead&gt;
        &lt;tr style=&quot;background-color: #f1f3f4; border-bottom: 2px solid #dadce0;&quot;&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;BIOS 路徑 / 選項名稱&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;目前狀態 (記錄值)&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;重設後預設值&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px; color: #1a73e8;&quot;&gt;恢復後應調整為&lt;/th&gt;
          &lt;th style=&quot;padding: 10px 12px;&quot;&gt;功能說明&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr style=&quot;border-bottom: 1px solid #e8eaed;&quot;&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;&lt;strong&gt;Advanced \ CPU Configuration&lt;/strong&gt;&lt;br&gt;&lt;code&gt;SVM Mode&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold; color: #188038;&quot;&gt;Enabled[cite: 1]&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;Disabled&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold; color: #d93025;&quot;&gt;Enabled&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;CPU 虛擬化技術，WSL2 與 Hyper-V 必備[cite: 1]。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;border-bottom: 1px solid #e8eaed; background-color: #fafafa;&quot;&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;&lt;strong&gt;Ai Tweaker \ Precision Boost Overdrive&lt;/strong&gt;&lt;br&gt;&lt;code&gt;PBO&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;Auto / Enabled[cite: 1]&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;Auto&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold;&quot;&gt;Auto&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;維持 CPU 單核心最高 4.65 GHz 動態超頻[cite: 1]。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;border-bottom: 1px solid #e8eaed;&quot;&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;&lt;strong&gt;Advanced \ SATA Configuration&lt;/strong&gt;&lt;br&gt;&lt;code&gt;SATA Mode&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;AHCI[cite: 1]&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;AHCI&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold;&quot;&gt;AHCI&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;標準硬碟通訊協定，切勿誤切 RAID。&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;border-bottom: 1px solid #e8eaed; background-color: #fafafa;&quot;&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;&lt;strong&gt;Advanced \ PCI Subsystem Settings&lt;/strong&gt;&lt;br&gt;&lt;code&gt;PCIEX16_1 Link Speed&lt;/code&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;Auto / Gen 4[cite: 1]&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;Auto&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px; font-weight: bold;&quot;&gt;Auto / Gen 4&lt;/td&gt;
          &lt;td style=&quot;padding: 10px 12px;&quot;&gt;確認以 PCIe 4.0 頻寬與顯卡溝通[cite: 1]。&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background-color: #e8f0fe; border-radius: 8px; padding: 16px; margin-top: 32px; border: 1px solid #d2e3fc;&quot;&gt;
    &lt;h4 style=&quot;margin: 0 0 12px 0; color: #1967d2;&quot;&gt;📌 快速回復操作流程 (SOP)&lt;/h4&gt;
    &lt;ol style=&quot;margin: 0; padding-left: 20px; color: #3c4043; font-size: 14px; line-height: 1.8;&quot;&gt;
      &lt;li&gt;開機按 &lt;code&gt;Del&lt;/code&gt; 進入 BIOS，先按 &lt;code&gt;F5&lt;/code&gt;（載入最佳化預設值），按 Enter 確認。&lt;/li&gt;
      &lt;li&gt;前往 &lt;strong&gt;Ai Tweaker&lt;/strong&gt;：將 &lt;code&gt;Ai Overclock Tuner&lt;/code&gt; 改為 &lt;strong&gt;D.O.C.P.&lt;/strong&gt;[cite: 1]。&lt;/li&gt;
      &lt;li&gt;前往 &lt;strong&gt;Advanced \ PCI Subsystem Settings&lt;/strong&gt;：將 &lt;code&gt;Above 4G Decoding&lt;/code&gt; 與 &lt;code&gt;Re-Size BAR Support&lt;/code&gt; 皆設為 &lt;strong&gt;Enabled&lt;/strong&gt;。&lt;/li&gt;
      &lt;li&gt;前往 &lt;strong&gt;Advanced \ CPU Configuration&lt;/strong&gt;：將 &lt;code&gt;SVM Mode&lt;/code&gt; 設為 &lt;strong&gt;Enabled&lt;/strong&gt;。&lt;/li&gt;
      &lt;li&gt;前往 &lt;strong&gt;Boot \ CSM&lt;/strong&gt;：確認 &lt;code&gt;Launch CSM&lt;/code&gt; 維持 &lt;strong&gt;Disabled&lt;/strong&gt;。&lt;/li&gt;
      &lt;li&gt;按 &lt;code&gt;F10&lt;/code&gt; 儲存並重新開機進入 Windows。&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/div&gt;

&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/1878037324359171124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/1878037324359171124'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/ai_02092845961.html' title='雜項-AI應用 BIOS 設定'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-3442262502492204356</id><published>2026-09-13T09:22:56.184+08:00</published><updated>2026-09-13T10:02:52.410+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="AI應用"/><title type='text'>雜項-AI應用 文章整理發布</title><content type='html'>&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 14pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 13pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;一、 日常發布新文章 SOP（日常全自動）&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;日後在現有的分類（Sony、3C、皮革、天干地支等）發布新文章時：&lt;/span&gt;&lt;/p&gt;&lt;ol style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;撰寫文章&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：在 Blogger 編輯器撰寫新貼文。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;勾選標籤&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：在右側邊欄設定好對應標籤（例如：&lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;3c類&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; 或 &lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;手工皮件/手縫皮革&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; 等）。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;發布文章&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：點擊發布即可。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: circle; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;完成！&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; 對應的專題網頁（如&lt;/span&gt;&lt;a href=&quot;https://silywuns.blogspot.com/p/3c.html&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: black; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #1155cc; font-size: 11pt; font-variant: normal; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;3C 科技&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; 或&lt;/span&gt;&lt;a href=&quot;https://silywuns.blogspot.com/p/blog-page_630.html&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: black; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #1155cc; font-size: 11pt; font-variant: normal; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;手縫皮革&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;）會&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;自動讀取並顯示該篇新文章與正確連結&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;，您完全不需要做任何額外動作。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 14pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 13pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;二、 新增「全新分類」SOP（例如建立「某某某」專題）&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;若日後新增了前所未有的全新主題大分類（例如「某某某」），只需執行以下 &lt;/span&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;3 個步驟&lt;/span&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 2pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;步驟 1：建立全新分類的專題網頁&lt;/span&gt;&lt;/h4&gt;&lt;ol style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;進入 Blogger 後台 -&amp;gt; &lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;「網頁 (Pages)」&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; -&amp;gt; &lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;「新增網頁」&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;標題&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：輸入該分類名稱（例如：&lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;某某某 專題目錄&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;切換為 &lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;「&amp;lt; &amp;gt; HTML 檢視」&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;，複製貼上下方的【專題網頁公版代碼】。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;將代碼中標示 &lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;【...】&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; 的地方替換為您的專題名稱與標籤名稱後，點擊 &lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;「發布」&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;點擊該網頁旁的眼睛圖示（查看），複製該網頁的公開網址（例如 &lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;[https://silywuns.blogspot.com/p/xxx.html](https://silywuns.blogspot.com/p/xxx.html)&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 2pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;【專題網頁 HTML 公版代碼（一鍵複製）】&lt;/span&gt;&lt;/h4&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;HTML&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;lt;style&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;.topic-index {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;max-width: 760px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin: 0 auto;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;PingFang TC&quot;, &quot;Microsoft JhengHei&quot;, sans-serif;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: #2c3e50;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;line-height: 1.6;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;.topic-badge {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display: inline-block;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;background: #e8f0fe;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: #1967d2;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding: 4px 10px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border-radius: 12px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size: 13px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-weight: bold;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-bottom: 12px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;.topic-desc {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size: 14px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: #5f6368;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-bottom: 20px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;/* 獨立系列文導讀卡片（保留原系列文架構） */&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;.series-card {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;background: #f8f9fa;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border: 1px solid #dadce0;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border-left: 4px solid #1a73e8;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border-radius: 6px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding: 14px 18px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-bottom: 24px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;.series-title {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size: 16px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-weight: 700;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: #202124;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-bottom: 8px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;.series-steps {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin: 0;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding-left: 20px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size: 14px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: #3c4043;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;.series-steps li {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-bottom: 4px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;/* 自動讀取文章列表樣式 */&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;.auto-section-title {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size: 16px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-weight: 700;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: #202124;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding-bottom: 6px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-bottom: 10px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border-bottom: 2px solid #e8eaed;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;.post-list {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list-style: none;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding: 0;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin: 0;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;background: #ffffff;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border: 1px solid #e0e0e0;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border-radius: 8px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;overflow: hidden;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;.post-item {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border-bottom: 1px solid #f1f3f4;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;.post-item:last-child {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border-bottom: none;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;.post-item a {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display: flex;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;justify-content: space-between;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;align-items: center;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding: 12px 16px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: #1a73e8;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text-decoration: none;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size: 15px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transition: background-color 0.15s;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;.post-item a:hover {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;background-color: #f1f8ff;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: #0d47a1;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;.post-tag {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size: 12px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;background: #f1f3f4;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: #5f6368;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding: 2px 8px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border-radius: 4px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin-left: 8px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;white-space: nowrap;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;.loading-hint {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding: 16px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text-align: center;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: #70757a;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size: 14px;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;lt;div class=&quot;topic-index&quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;div class=&quot;topic-badge&quot;&amp;gt;雜項-AI應用&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;h2&amp;gt;【雜項-AI應用 專題全目錄&amp;lt;/h2&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;div class=&quot;topic-desc&quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;收錄關於【雜項-AI應用】領域的心得、技術筆記。&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 1. 獨立系列導讀與閱讀順序 --&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;div class=&quot;series-card&quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div class=&quot;series-title&quot;&amp;gt;🧭 系列核心導讀&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ol class=&quot;series-steps&quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;單元一&amp;lt;/b&amp;gt;：基礎概念與前置說明&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;單元二&amp;lt;/b&amp;gt;：核心流程與實作重點&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;單元三&amp;lt;/b&amp;gt;：進階應用與疑難排解&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/ol&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 2. 自動讀取該標籤下的全部真實文章 --&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;div class=&quot;auto-section-title&quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;span&amp;gt;📚 本主題所有相關文章（即時自動更新）&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;div id=&quot;category-posts-container&quot; class=&quot;loading-hint&quot;&amp;gt;文章載入中...&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;lt;script&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;function renderCategoryPosts(json) {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;var container = document.getElementById(&#39;category-posts-container&#39;);&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;if (!json || !json.feed || !json.feed.entry || json.feed.entry.length === 0) {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;container.innerHTML = &#39;&amp;lt;div style=&quot;padding:15px;background:#f8f9fa;border-radius:6px;color:#5f6368;&quot;&amp;gt;目前該標籤尚無文章，發文時請確認有勾選對應標籤。&amp;lt;/div&amp;gt;&#39;;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;var entries = json.feed.entry;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;var html = &#39;&amp;lt;ul class=&quot;post-list&quot;&amp;gt;&#39;;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;for (var i = 0; i &amp;lt; entries.length; i++) {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var entry = entries[i];&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var title = entry.title.$t;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var postUrl = &quot;&quot;;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (entry.link) {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var j = 0; j &amp;lt; entry.link.length; j++) {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (entry.link[j].rel === &quot;alternate&quot;) {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;postUrl = entry.link[j].href;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var pubDate = entry.published ? entry.published.$t.substring(0, 10) : &quot;&quot;;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += &#39;&amp;lt;li class=&quot;post-item&quot;&amp;gt;&#39;;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += &#39;&amp;lt;a href=&quot;&#39; + postUrl + &#39;&quot; target=&quot;_blank&quot;&amp;gt;&#39;;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += &#39;&amp;lt;span&amp;gt;&#39; + title + &#39;&amp;lt;/span&amp;gt;&#39;;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (pubDate) {&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += &#39;&amp;lt;span class=&quot;post-tag&quot;&amp;gt;&#39; + pubDate + &#39;&amp;lt;/span&amp;gt;&#39;;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += &#39;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#39;;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;html += &#39;&amp;lt;/ul&amp;gt;&#39;;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;container.innerHTML = html;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;lt;!-- 注意：請將下方網址中的「AI應用」替換為您在 Blogger 設定的實際標籤名稱 --&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;lt;script src=&quot;/feeds/posts/default/-/AI應用?alt=json-in-script&amp;amp;callback=renderCategoryPosts&amp;amp;max-results=100&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 2pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;步驟 2：將新網頁掛入「總覽」樹狀導覽選單&lt;/span&gt;&lt;/h4&gt;&lt;ol style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;前往 Blogger 後台 &lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;「版面配置 (Layout)」&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; -&amp;gt; 開啟 &lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;HTML/JavaScript 小工具&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;找到 &lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;lt;ul class=&quot;first-level&quot;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; 清單，在最後一項（天干地支）的下方加入新分類，並將符號維持為「非最後一項用 &lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;├─&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;，最後一項用 &lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;└─&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;」：&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;HTML&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;lt;ul class=&quot;first-level&quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;a href=&quot;https://silywuns.blogspot.com/p/sony-xz1-g8342.html&quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;span class=&quot;tree-branch&quot;&amp;gt;├─&amp;lt;/span&amp;gt; Sony XZ1 (G8342)&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;a href=&quot;https://silywuns.blogspot.com/p/3c.html&quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;span class=&quot;tree-branch&quot;&amp;gt;├─&amp;lt;/span&amp;gt; 3C 科技&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;a href=&quot;https://silywuns.blogspot.com/p/blog-page_630.html&quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;span class=&quot;tree-branch&quot;&amp;gt;├─&amp;lt;/span&amp;gt; 手縫皮革&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 原最後一項改為 ├─ --&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;a href=&quot;https://silywuns.blogspot.com/p/blog-page_713.html&quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;span class=&quot;tree-branch&quot;&amp;gt;├─&amp;lt;/span&amp;gt; 天干地支&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 新增的分類排在最後，使用 └─，貼上步驟1取得的網址 --&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;a href=&quot;https://silywuns.blogspot.com/p/xxx.html&quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;span class=&quot;tree-branch&quot;&amp;gt;└─&amp;lt;/span&amp;gt; 某某某&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/ul&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol start=&quot;3&quot; style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;儲存小工具，並點選版面配置右下角 &lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;「儲存圖示（磁碟片）」&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 14pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 13pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;步驟 3：後續日常發布&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 12pt; margin-top: 12pt;&quot;&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;完成上述一次性設定後，日後只要撰寫屬於「某某某」的新文章並勾選 &lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;某某某&lt;/span&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; 標籤，新文章就會自動出現在該獨立網頁的目錄列表中，完全不需再次修改任何代碼。&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span face=&quot;Arial, sans-serif&quot; style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/3442262502492204356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/3442262502492204356'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/ai.html' title='雜項-AI應用 文章整理發布'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-827354684335751067</id><published>2026-09-13T06:42:24.777+08:00</published><updated>2026-09-17T20:27:19.742+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="AI應用"/><title type='text'>Windows DNS生效方式</title><content type='html'>&lt;p&gt;# 電腦設定多組 DNS 真的有用嗎？Windows 生效機制與推薦的安全開源 DNS 清單&lt;/p&gt;&lt;p&gt;在設定網路連線時，我們常在 Windows 的網路介面中看到「慣用 DNS 伺服器」與「其他 DNS 伺服器」，甚至在進階設定中還能填入第三組、第四組。&lt;/p&gt;&lt;p&gt;很多人會好奇：**「設定多組 DNS 是同時查詢加速？還是輪流分流？」**&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;本篇將帶你釐清 Windows DNS 的背後運作邏輯，並整理 4 款兼具安全、隱私與開源可靠的優質 DNS 推薦。&lt;/p&gt;&lt;p&gt;---&lt;/p&gt;&lt;p&gt;## 一、設定多組 DNS 的生效與切換機制&lt;/p&gt;&lt;p&gt;Windows 對多組 DNS 的處理方式是 **「嚴格優先級 + 故障容錯切換（Failover）」**，而不是頻寬合併或負載平衡：&lt;/p&gt;&lt;p&gt;1. **嚴格優先查詢**&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;系統發起網址解析時，永遠優先詢問清單中的**第一順位（慣用 DNS）**。只要該伺服器能正常回應（即使回應內容是「找不到該網址 NXDOMAIN」），系統就視為解析完成，**絕對不會**再去向第二組查詢。&lt;/p&gt;&lt;p&gt;2. **逾時容錯切換（Timeout Failover）**&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;只有當第一順位的伺服器發生**連線超時、宕機或斷線**（通常等待約 1 秒無反應）時，Windows 才會自動將請求轉往第二順位（其他 DNS）或後續清單中的伺服器。&lt;/p&gt;&lt;p&gt;3. **暫時記憶狀態**&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;一旦觸發備援機制切換至第二組 DNS，Windows 會在短時間內持續向該備援伺服器發送請求，經過一段時間後才會再次嘗試回復至第一順位。&lt;/p&gt;&lt;p&gt;&amp;gt; **重點結論：**&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;gt; 第二組 DNS 的角色是「備胎」，平時並不會加速你的網路，但在主要伺服器故障時能確保網路不中斷。&lt;/p&gt;&lt;p&gt;---&lt;/p&gt;&lt;p&gt;## 二、推薦 4 款可靠、安全且注重隱私的公共 DNS&lt;/p&gt;&lt;p&gt;若不想使用 ISP 預設的 DNS（容易有劫持廣告或日誌記錄隱憂），推薦以下幾款注重隱私、開源透明且具備資安防禦能力的服務：&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhuQtr8rD__yLD4SpTD0QKb6bpqmlYJZBnkRBEvbqofHQQ9yRAfKkdYfVRub9XPmsGHzquJCptw6cAEKLKeb4hVaMe9_D1VwFxgRt-8bn2GivdkS2mo1i6OsOx2O911Jprs6mPjhxjq85H7kJgaVQ1AOVgQoS8BP15irxjWM-_9OdPALd5TRJU6iUrAoBc&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1508&quot; data-original-width=&quot;1572&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhuQtr8rD__yLD4SpTD0QKb6bpqmlYJZBnkRBEvbqofHQQ9yRAfKkdYfVRub9XPmsGHzquJCptw6cAEKLKeb4hVaMe9_D1VwFxgRt-8bn2GivdkS2mo1i6OsOx2O911Jprs6mPjhxjq85H7kJgaVQ1AOVgQoS8BP15irxjWM-_9OdPALd5TRJU6iUrAoBc&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;&lt;/div&gt;| 服務名稱 | 主要 IPv4 / 備用 IPv4 |主要特色與優勢 |&amp;nbsp;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;hljs-strong&quot;&gt;**Quad9**&lt;/span&gt; &lt;span class=&quot;hljs-emphasis&quot;&gt;*(最推薦)*&lt;/span&gt; | &lt;span class=&quot;hljs-code&quot;&gt;`9.9.9.9`&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;hljs-code&quot;&gt;`149.112.112.112`&lt;/span&gt; | &lt;span class=&quot;hljs-strong&quot;&gt;**非營利安全防護**&lt;/span&gt;：瑞士非營利組織營運，符合嚴格隱私法規。整合全球十數家威脅情報，可自動在 DNS 端封鎖釣魚網址與惡意程式，不記錄個人查詢日誌。&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;hljs-strong&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;hljs-strong&quot;&gt;**AdGuard DNS**&lt;/span&gt; | &lt;span class=&quot;hljs-code&quot;&gt;`94.140.14.14`&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;hljs-code&quot;&gt;`94.140.15.15`&lt;/span&gt; | &lt;span class=&quot;hljs-strong&quot;&gt;**廣告與追蹤攔截**&lt;/span&gt;：核心解析代碼開源，預設攔截惡意網站、線上廣告與追蹤器，適合希望改善瀏覽體驗的使用者。 |&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;span class=&quot;hljs-strong&quot;&gt;**Cloudflare**&lt;/span&gt; | &lt;span class=&quot;hljs-code&quot;&gt;`1.1.1.1`&lt;/span&gt;&lt;span class=&quot;hljs-code&quot;&gt;`1.0.0.1`&lt;/span&gt; | &lt;span class=&quot;hljs-strong&quot;&gt;**全球極速解析**&lt;/span&gt;：全球節點密度極高，查詢延遲最低。承諾 24 小時內清除日誌，支援 DNSSEC。若需內建惡意軟體過濾，可改設為 &lt;span class=&quot;hljs-code&quot;&gt;`1.1.1.2`&lt;/span&gt; / &lt;span class=&quot;hljs-code&quot;&gt;`1.0.0.2`&lt;/span&gt;。&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;span class=&quot;hljs-strong&quot;&gt;**Mullvad DNS**&lt;/span&gt; | &lt;span class=&quot;hljs-code&quot;&gt;`194.242.2.2`&lt;/span&gt;&lt;span class=&quot;hljs-code&quot;&gt;`194.242.2.3`&lt;/span&gt; | &lt;span class=&quot;hljs-strong&quot;&gt;**極致隱私保護**&lt;/span&gt;：由知名無日誌 VPN 團隊提供，所有節點皆為 RAM 運行，完全不儲存任何解析紀錄，高度透明可靠。&amp;nbsp;&lt;br /&gt;&lt;p&gt;## 三、最佳配置建議&lt;/p&gt;&lt;p&gt;在配置網路時，建議採用 **「主過濾 + 備極速」** 的雙保險策略：&lt;/p&gt;&lt;p&gt;* **慣用 DNS 伺服器（第一順位）：** 設定具備安全防護或過濾功能的 DNS（例如 **Quad9 `9.9.9.9`** 或 **AdGuard**）。&lt;/p&gt;&lt;p&gt;* **其他 DNS 伺服器（第二順位）：** 設定全球響應速度最快的備援 DNS（例如 **Cloudflare `1.1.1.1`**）。&lt;/p&gt;&lt;p&gt;&amp;gt; **進階提醒：**&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;gt; 傳統 UDP 埠號 53 的 DNS 查詢未經加密，容易遭到區域網路或電信商嗅探。若作業系統或瀏覽器支援，建議開啟 **DoH (DNS over HTTPS)** 或 **DoT (DNS over TLS)**，以確保查詢內容全程加密。&lt;/p&gt;&lt;p data-path-to-node=&quot;0&quot;&gt;未將 Google Public DNS（&lt;code data-index-in-node=&quot;21&quot; data-path-to-node=&quot;0&quot;&gt;8.8.8.8&lt;/code&gt; / &lt;code data-index-in-node=&quot;31&quot; data-path-to-node=&quot;0&quot;&gt;8.8.4.4&lt;/code&gt;）列入前述推薦清單，主要基於以下四個考量：&lt;/p&gt;&lt;ul data-path-to-node=&quot;1&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;1,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;1,0,0&quot;&gt;非開源透明（Non-Open Source）：&lt;/b&gt;
Google Public DNS 是專有封閉架構，核心解析程式碼並未開源，外界無法檢驗其底層日誌處理與請求轉發的實際程式行為。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;1,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;1,1,0&quot;&gt;隱私與日誌收集政策（Data Collection）：&lt;/b&gt;
Google 是全球最大廣告與數據導向公司。其隱私條款載明：&lt;/p&gt;&lt;ul data-path-to-node=&quot;1,1,1&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;1,1,1,0,0&quot;&gt;用戶的 IP 位址會被記錄並暫存 24 至 48 小時。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;1,1,1,1,0&quot;&gt;關聯的城市層級地理位置、AS 號碼與查詢網域名稱會被抽樣留存至永久儲存庫，作為分析與改進用途。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;1,1,1,2,0&quot;&gt;相比之下，Quad9 或 Mullvad 等服務提供完全零日誌（No-Log）或極短暫記憶體快取承諾。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;1,2,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;1,2,0&quot;&gt;缺乏主動資安防禦（No Threat Filtering）：&lt;/b&gt;
Google Public DNS 是純中立遞迴解析器，&lt;b data-index-in-node=&quot;59&quot; data-path-to-node=&quot;1,2,0&quot;&gt;不具備阻擋釣魚、惡意軟體或木馬中繼站的功能&lt;/b&gt;。若造訪惡意網址，它依然會忠實解析，無法提供像 Quad9 或 AdGuard 的被動安全攔截。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;1,3,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;1,3,0&quot;&gt;單一巨頭網路壟斷風險（Centralization）：&lt;/b&gt;
全球有極大比例的終端設備預設或手動指向 &lt;code data-index-in-node=&quot;48&quot; data-path-to-node=&quot;1,3,0&quot;&gt;8.8.8.8&lt;/code&gt;。從去中心化與網路抗審查角度來看，將整體 DNS 查詢流量分散至非營利組織或隱私導向機構，能降低單一科技巨頭對全球網路解析流量的集中監控。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-path-to-node=&quot;3&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3&quot;&gt;何時仍適合使用 Google DNS？&lt;/b&gt;
若使用場景是追求&lt;b data-index-in-node=&quot;28&quot; data-path-to-node=&quot;3&quot;&gt;極致的全球可用性、穩定的 CDN 本地節點路由（EDNS Client Subnet 支援佳）&lt;/b&gt;，或單純用於路由器排錯測試，&lt;code data-index-in-node=&quot;89&quot; data-path-to-node=&quot;3&quot;&gt;8.8.8.8&lt;/code&gt; 依然是可靠的備用工具；但若以「開源、安全防禦、高隱私」為首要評選標準，它並非最優解。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/827354684335751067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/827354684335751067'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/windows-dns.html' title='Windows DNS生效方式'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhuQtr8rD__yLD4SpTD0QKb6bpqmlYJZBnkRBEvbqofHQQ9yRAfKkdYfVRub9XPmsGHzquJCptw6cAEKLKeb4hVaMe9_D1VwFxgRt-8bn2GivdkS2mo1i6OsOx2O911Jprs6mPjhxjq85H7kJgaVQ1AOVgQoS8BP15irxjWM-_9OdPALd5TRJU6iUrAoBc=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-3623807760421803655</id><published>2026-09-12T22:10:30.735+08:00</published><updated>2026-09-13T10:02:41.030+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="AI應用"/><title type='text'>電商商品價格監測與回報規則整合規範</title><content type='html'>&lt;p&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 16pt; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 16pt; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 16pt; white-space: pre-wrap;&quot;&gt;一、 監測標的與動態讀取規範&lt;/span&gt;&lt;/p&gt;&lt;span id=&quot;docs-internal-guid-06643000-7fff-d760-92e9-8c1c79cb0397&quot;&gt;&lt;ol style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;資料來源&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;試算表連結：&lt;/span&gt;&lt;a href=&quot;xxxxxxxxx&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: #1155cc; font-size: 11pt; font-variant: normal; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;電商商品價格監測清單範本&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgFQuZJjqrfRmkjWmjycHZu2XkIZxe-z7NiZlqFgjg-4wEJUXbjeGkk9zi1rT3o6I1zmSOBy_wmmJrXQnDN5SEmCUN472nOTfQk_iuLxuBl38Yx2HYCd22A7dBcnjH-e8I75tqfH3hKmNbr9knb0js3HjuxbMbjIzibWaAUjvr6wUNzge1fEcVsW0UEhmE&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;844&quot; data-original-width=&quot;2120&quot; height=&quot;127&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgFQuZJjqrfRmkjWmjycHZu2XkIZxe-z7NiZlqFgjg-4wEJUXbjeGkk9zi1rT3o6I1zmSOBy_wmmJrXQnDN5SEmCUN472nOTfQk_iuLxuBl38Yx2HYCd22A7dBcnjH-e8I75tqfH3hKmNbr9knb0js3HjuxbMbjIzibWaAUjvr6wUNzge1fEcVsW0UEhmE&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;動態讀取標的&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;每次執行監測與排程觸發時，動態讀取試算表中狀態標註為「正式監測品」之所有項目。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;納入未來新增的商品列，嚴禁將商品名單寫死於程式或指令中。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 6pt; margin-top: 18pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 16pt; font-variant: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;二、 核心執行原則&lt;/span&gt;&lt;/h2&gt;&lt;ol style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;即時最新數據&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;每次執行皆必須連線至官方專屬商品詳細頁抓取即時售價。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;嚴禁使用伺服器快取、過期存檔或搜尋摘要。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;官方專屬詳細頁規範&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;所有回報、通知與排程所附之連結，必須嚴格使用官方商品專屬詳細頁（例如 PChome 為 &lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;/prod/&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;、Amazon 為 &lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;/dp/&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;嚴禁使用 Google 搜尋結果頁或電商站內關鍵字搜尋清單頁。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 6pt; margin-top: 18pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 16pt; font-variant: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;三、 自癒防呆與自主修復機制（Self-Healing）&lt;/span&gt;&lt;/h2&gt;&lt;ol style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;網址清洗與正規化&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;讀取表格時自動檢查「官方專屬商品網址」欄位。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;若帶有站內分類篩選、追蹤或搜尋參數（如 PChome 之 &lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;?fq=...&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;、Amazon 之 &lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;?ref=...&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; 等），自動剔除多餘參數，萃取為純淨標準之官方商品詳細頁網址。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;自主回寫修復&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;若檢測到網址格式有瑕疵或帶有多餘參數，且經清洗後可成功連線，直接更新回 Google 試算表對應儲存格完成自主修復。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;於後續回報中明確列出已修正的項目。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 6pt; margin-top: 18pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 16pt; font-variant: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;四、 價格監測與回報排程設定&lt;/span&gt;&lt;/h2&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;共配置 3 組定時排程，均內嵌動態讀取與自癒清洗機制：&lt;/span&gt;&lt;/p&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;color: #434343; font-family: Arial, sans-serif; font-size: 14pt; font-variant: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;1.【即時降價警示】&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;執行頻率&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：每 8 小時監測一次（Cron：&lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;0 */8 * * *&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;觸發機制&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：比對最新即時售價與目標門檻價格，當任一商品售價低於目標門檻時，立即發送降價警示通知。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;通知內容&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：商品名稱、當前最新售價、目標門檻價格及官方專屬詳細頁連結。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;color: #434343; font-family: Arial, sans-serif; font-size: 14pt; font-variant: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;2.【降價總表寄送】&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;執行頻率&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：每天約 8:00 AM 與 6:00 PM 各檢查一次（Cron：&lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;0 8,18 * * *&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;觸發機制&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：若有商品達標降價，彙整並發送降價總表；若皆未達標則不需發送總表。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;通知內容&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：平台、商品名稱、目標價格、當前最新售價、差額及官方專屬詳細頁連結。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 16pt;&quot;&gt;&lt;span style=&quot;color: #434343; font-family: Arial, sans-serif; font-size: 14pt; font-variant: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;3.【每日定時價格回報】&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;執行頻率&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：每天約 11:00 AM 執行一次（Cron：&lt;/span&gt;&lt;span style=&quot;color: #188038; font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;0 11 * * *&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;價格變動判斷規則（無變化靜默／有變化才回報）&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul style=&quot;margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;無變化靜默&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：若當日（如 Day 2）各商品最新售價與前一日（Day 1）相比均無任何變化（連續多日相同如 Day 2 = Day 3 = Day 4 時），當日保持靜默，不發送回報。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;有變化才回報&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：僅在檢測到商品售價與前次相比出現變化時，才於當日 11:00 AM 發送最新售價清單（例如第 5 天有變化才回報 Day 5；第 6 天無變化不回報，直到第 7 天又有變化才發送 Day 7 回報）。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11pt; font-variant: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;回報內容&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;：列出所有監測商品之平台、名稱、規格、當日最新售價、目標門檻、價格漲跌狀態及官方專屬詳細頁連結。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/3623807760421803655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/3623807760421803655'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/blog-post_12.html' title='電商商品價格監測與回報規則整合規範'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgFQuZJjqrfRmkjWmjycHZu2XkIZxe-z7NiZlqFgjg-4wEJUXbjeGkk9zi1rT3o6I1zmSOBy_wmmJrXQnDN5SEmCUN472nOTfQk_iuLxuBl38Yx2HYCd22A7dBcnjH-e8I75tqfH3hKmNbr9knb0js3HjuxbMbjIzibWaAUjvr6wUNzge1fEcVsW0UEhmE=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-2104761062145368547</id><published>2026-09-11T21:47:35.852+08:00</published><updated>2026-09-23T21:45:42.012+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="(G8342 / poplar_dsds)"/><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="Sony Xperia XZ1"/><title type='text'>Sony Xperia XZ1  (G8342 / poplar_dsds) 系列一 擋廣告AdAway 部署</title><content type='html'>&lt;div style=&quot;font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, &#39;Helvetica Neue&#39;, Arial, sans-serif; line-height: 1.6; color: #2c3e50; max-width: 860px; margin: 0 auto; padding: 20px;&quot;&gt;

  &lt;h1 style=&quot;color: #1a365d; border-bottom: 2px solid #3182ce; padding-bottom: 10px; margin-bottom: 24px;&quot;&gt;🛠️ Android 14 (LineageOS 21) + SukiSU 環境下 AdAway 部署與深度調優指南&lt;/h1&gt;

  &lt;h2 style=&quot;color: #2b6cb0; border-left: 4px solid #3182ce; padding-left: 10px; margin-top: 30px; margin-bottom: 16px;&quot;&gt;📌 一、必要運行環境與先決條件&lt;/h2&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 20px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;內核級 Root 環境&lt;/strong&gt;：SukiSU 或 KernelSU。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;系統分區限制突破&lt;/strong&gt;：Android 14 採用唯讀（EROFS/ext4 read-only）機制，AdAway 直寫 hosts 會觸發 &lt;code&gt;Unable to copy hosts file to /system partition&lt;/code&gt; 錯誤，必須掛載 Systemless Hosts 模組實現內核層虛擬掛載（OverlayFS/Bind mount）。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;運作模式&lt;/strong&gt;：採用「Root 模式（修改 hosts）」，避免常駐 VPN 模式，達成零背景程序與零額外電量損耗。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;color: #2b6cb0; border-left: 4px solid #3182ce; padding-left: 10px; margin-top: 30px; margin-bottom: 16px;&quot;&gt;📦 二、必備檔案與模組來源&lt;/h2&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 20px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;AdAway 客戶端 (F-Droid 開源版)&lt;/strong&gt;：&lt;br&gt;
      🌐 官方網站：&lt;a href=&quot;https://adaway.org&quot; style=&quot;color: #3182ce; text-decoration: none;&quot;&gt;https://adaway.org&lt;/a&gt;&lt;br&gt;
      📦 F-Droid 專案頁：&lt;a href=&quot;https://f-droid.org/packages/org.adaway/&quot; style=&quot;color: #3182ce; text-decoration: none;&quot;&gt;https://f-droid.org/packages/org.adaway/&lt;/a&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;Systemless Hosts 模組 (KernelSU / APatch / Magisk 通用)&lt;/strong&gt;：&lt;br&gt;
      ⚡ gloeyisk 版本（推薦）：&lt;a href=&quot;https://github.com/gloeyisk/systemless-hosts/releases/tag/17.2&quot; style=&quot;color: #3182ce; text-decoration: none;&quot;&gt;https://github.com/gloeyisk/systemless-hosts/releases/tag/17.2&lt;/a&gt;&lt;br&gt;
      ⚡ Zackptg5 通用版：&lt;a href=&quot;https://github.com/Zackptg5/Systemless-Hosts-KSU-Apatch-Magisk/releases/latest&quot; style=&quot;color: #3182ce; text-decoration: none;&quot;&gt;https://github.com/Zackptg5/Systemless-Hosts-KSU-Apatch-Magisk/releases/latest&lt;/a&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;台灣在地化過濾規則 (Anti-AD AdAway 專用版)&lt;/strong&gt;：&lt;br&gt;
      🔗 規則直連 URL：&lt;br&gt;
      &lt;code style=&quot;background: #edf2f7; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; word-break: break-all;&quot;&gt;https://raw.githubusercontent.com/mrchi/adaway-hosts/main/anti-ad-adaway.txt&lt;/code&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;color: #2b6cb0; border-left: 4px solid #3182ce; padding-left: 10px; margin-top: 30px; margin-bottom: 16px;&quot;&gt;⚙️ 三、完整安裝與配置流程&lt;/h2&gt;
  
  &lt;h3 style=&quot;color: #2d3748; margin-top: 20px; margin-bottom: 10px;&quot;&gt;步驟 1：安裝 Systemless Hosts 模組&lt;/h3&gt;
  &lt;ol style=&quot;padding-left: 20px; margin-bottom: 16px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;下載 &lt;code&gt;systemless-hosts.zip&lt;/code&gt; 模組套件。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;開啟 SukiSU 管理器，切換至「模組 (Modules)」分頁。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;選取該 zip 套件進行刷入（或透過電腦 &lt;code&gt;adb push&lt;/code&gt; 後手動安裝）。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;重新啟動裝置，確認 SukiSU 模組清單中「Systemless Hosts」顯示為啟用狀態。&lt;/li&gt;
  &lt;/ol&gt;

  &lt;h3 style=&quot;color: #2d3748; margin-top: 20px; margin-bottom: 10px;&quot;&gt;步驟 2：安裝 AdAway 並指派權限&lt;/h3&gt;
  &lt;ol style=&quot;padding-left: 20px; margin-bottom: 16px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;安裝 AdAway APK 並啟動。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;運作模式選取 &lt;strong&gt;Root 模式&lt;/strong&gt;。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;在 SukiSU 權限提示視窗中，永久授予 Superuser 權限。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;系統通知權限直接設定為「不允許」，無須保持常駐。&lt;/li&gt;
  &lt;/ol&gt;

  &lt;h3 style=&quot;color: #2d3748; margin-top: 20px; margin-bottom: 10px;&quot;&gt;步驟 3：導入台灣在地過濾來源&lt;/h3&gt;
  &lt;ol style=&quot;padding-left: 20px; margin-bottom: 16px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;進入 AdAway「來源 (Hosts sources)」分頁，點擊右下角「+」新增來源：
      &lt;ul style=&quot;list-style-type: circle; padding-left: 20px; margin-top: 4px;&quot;&gt;
        &lt;li&gt;名稱：&lt;code&gt;Taiwan&lt;/code&gt;&lt;/li&gt;
        &lt;li&gt;網址 (URL)：&lt;code&gt;https://raw.githubusercontent.com/mrchi/adaway-hosts/main/anti-ad-adaway.txt&lt;/code&gt;&lt;/li&gt;
        &lt;li&gt;Apply redirected hosts：保持「未勾選」。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;點擊右上角勾選圖示儲存。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;（ADB 填寫命令）：
      &lt;pre style=&quot;background: #1a202c; color: #e2e8f0; padding: 12px; border-radius: 6px; overflow-x: auto; margin-top: 6px; font-family: Consolas, monospace;&quot;&gt;&lt;code&gt;adb shell input text &quot;https://raw.githubusercontent.com/mrchi/adaway-hosts/main/anti-ad-adaway.txt&quot;&lt;/code&gt;&lt;/pre&gt;
    &lt;/li&gt;
  &lt;/ol&gt;

  &lt;h3 style=&quot;color: #2d3748; margin-top: 20px; margin-bottom: 10px;&quot;&gt;步驟 4：下載、去重並套用規則&lt;/h3&gt;
  &lt;ol style=&quot;padding-left: 20px; margin-bottom: 16px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;返回 AdAway 首頁。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;點擊「向下的箭頭（下載並套用）」圖示。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;下載與去重完成後，總 Blocked 規則數將超過 100,000 至 150,000 條。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;手動關閉並劃掉 AdAway 後台，底層規則持續生效。&lt;/li&gt;
  &lt;/ol&gt;

  &lt;h2 style=&quot;color: #2b6cb0; border-left: 4px solid #3182ce; padding-left: 10px; margin-top: 30px; margin-bottom: 16px;&quot;&gt;💻 四、電腦端 ADB 驗證指令&lt;/h2&gt;
  &lt;p style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;1. 驗證 anti-AD 規則是否成功寫入底層：&lt;/strong&gt;&lt;/p&gt;
  &lt;pre style=&quot;background: #1a202c; color: #e2e8f0; padding: 12px; border-radius: 6px; overflow-x: auto; margin-bottom: 16px; font-family: Consolas, monospace;&quot;&gt;&lt;code&gt;adb shell &quot;grep -m 3 &#39;anti-ad&#39; /system/etc/hosts&quot;&lt;/code&gt;&lt;/pre&gt;

  &lt;p style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;2. 檢查總規則行數（基準值應突破 100,000 行）：&lt;/strong&gt;&lt;/p&gt;
  &lt;pre style=&quot;background: #1a202c; color: #e2e8f0; padding: 12px; border-radius: 6px; overflow-x: auto; margin-bottom: 16px; font-family: Consolas, monospace;&quot;&gt;&lt;code&gt;adb shell &quot;wc -l /system/etc/hosts&quot;&lt;/code&gt;&lt;/pre&gt;

  &lt;h2 style=&quot;color: #2b6cb0; border-left: 4px solid #3182ce; padding-left: 10px; margin-top: 30px; margin-bottom: 16px;&quot;&gt;🔍 五、AdAway 運作機制與底層行為釋疑&lt;/h2&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 20px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;導向位址為 127.0.0.1 而非 0.0.0.0&lt;/strong&gt;：屬正常行為。兩者皆為本地阻斷手段，請求在本地環回端直接終止，不產生對外流量。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;UI 顯示「3 up-to-date sources」而非 4&lt;/strong&gt;：點擊「檢查更新（旋轉箭頭）」時，AdAway 僅能檢驗具備 E-Tag / Last-Modified 標頭的官方來源；第三方自訂來源會呈現「Unknown update status」，不影響規則合併。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;套用方式&lt;/strong&gt;：變更來源後，需點擊首頁「向下的箭頭（下載並套用）」，非旋轉箭頭。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;權限與模組保留原則&lt;/strong&gt;：
      &lt;ul style=&quot;list-style-type: circle; padding-left: 20px; margin-top: 4px;&quot;&gt;
        &lt;li&gt;&lt;strong&gt;Systemless Hosts 模組&lt;/strong&gt;：&lt;strong&gt;嚴禁停用或移除&lt;/strong&gt;。Android 14 依賴此模組於開機時虛擬掛載 hosts；關閉將導致阻斷完全失效。模組屬純內核掛載，無記憶體佔用與電力消耗。&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;AdAway Superuser 授權&lt;/strong&gt;：維持允許即可。未啟動時無背景行程，不產生安全性漏洞或電量消耗。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;color: #2b6cb0; border-left: 4px solid #3182ce; padding-left: 10px; margin-top: 30px; margin-bottom: 16px;&quot;&gt;🌐 六、Cromite 瀏覽器協同配置（隱藏空白框架與防指紋）&lt;/h2&gt;
  &lt;p style=&quot;margin-bottom: 12px;&quot;&gt;AdAway 負責阻斷網域解析，前端由 Cromite 移除空白廣告框，達成互補。&lt;/p&gt;

  &lt;h3 style=&quot;color: #2d3748; margin-top: 16px; margin-bottom: 10px;&quot;&gt;1. 避免繞過底層 Hosts 解析&lt;/h3&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 12px;&quot;&gt;
    &lt;li&gt;&lt;strong&gt;路徑&lt;/strong&gt;：&lt;code&gt;Settings&lt;/code&gt; ➔ &lt;code&gt;Privacy and security&lt;/code&gt; ➔ &lt;code&gt;Use secure DNS&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;配置&lt;/strong&gt;：設為 &lt;strong&gt;Off (關閉)&lt;/strong&gt; 或 &lt;strong&gt;With your current service provider (使用目前服務供應商)&lt;/strong&gt;。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;原理&lt;/strong&gt;：手動指定第三方 DoH 會繞過本地 hosts 檔案，造成 AdAway 攔截失效。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3 style=&quot;color: #2d3748; margin-top: 16px; margin-bottom: 10px;&quot;&gt;2. 廣告過濾引擎 (Adblock Plus settings)&lt;/h3&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 12px;&quot;&gt;
    &lt;li&gt;&lt;strong&gt;路徑&lt;/strong&gt;：&lt;code&gt;Settings&lt;/code&gt; ➔ &lt;code&gt;Adblock Plus settings&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Enable Adblock Plus&lt;/strong&gt;：&lt;strong&gt;On (開啟)&lt;/strong&gt;，抹除廣告空白框。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Filter lists 規則收斂（針對 Snapdragon 835 最佳化負載）&lt;/strong&gt;：
      &lt;ul style=&quot;list-style-type: circle; padding-left: 20px; margin-top: 4px;&quot;&gt;
        &lt;li&gt;&lt;strong&gt;保留勾選&lt;/strong&gt;：&lt;code&gt;EasyList&lt;/code&gt;、&lt;code&gt;ABP filters&lt;/code&gt;、&lt;code&gt;Cromite experimental filters&lt;/code&gt;。&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;取消勾選&lt;/strong&gt;：&lt;code&gt;badmojr/1Hosts&lt;/code&gt;、&lt;code&gt;Celenity/BadBlock Lite&lt;/code&gt;（屬網域黑名單，與 AdAway 高度重疊，減少記憶體浪費）。&lt;/li&gt;
        &lt;li&gt;&lt;strong&gt;自由選用&lt;/strong&gt;：&lt;code&gt;I don&#39;t care about cookies&lt;/code&gt;（屏蔽 Cookie 授權彈窗）。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Enable anti-circumvention and snippets&lt;/strong&gt;：&lt;strong&gt;Off (關閉)&lt;/strong&gt;（避免每個頁面注入額外 JavaScript，確保渲染速度與節能）。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Check for updates now&lt;/strong&gt;：配置完成後執行一次更新。&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Legacy Adblock settings&lt;/strong&gt;：維持 &lt;code&gt;Filters URL: about:blank&lt;/code&gt; 不變。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3 style=&quot;color: #2d3748; margin-top: 16px; margin-bottom: 10px;&quot;&gt;3. 隱私防追蹤與權限管控&lt;/h3&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 16px;&quot;&gt;
    &lt;li&gt;&lt;strong&gt;路徑&lt;/strong&gt;：&lt;code&gt;Settings&lt;/code&gt; ➔ &lt;code&gt;Privacy and security&lt;/code&gt;
      &lt;ul style=&quot;list-style-type: circle; padding-left: 20px; margin-top: 4px;&quot;&gt;
        &lt;li&gt;Fingerprinting protection：&lt;strong&gt;On (開啟)&lt;/strong&gt;。&lt;/li&gt;
        &lt;li&gt;WebRTC IP handling policy：調整為 &lt;strong&gt;Disable non-proxied UDP&lt;/strong&gt;（杜絕內網 IP 洩漏）。&lt;/li&gt;
        &lt;li&gt;Do Not Track：&lt;strong&gt;On (開啟)&lt;/strong&gt;。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;路徑&lt;/strong&gt;：&lt;code&gt;Settings&lt;/code&gt; ➔ &lt;code&gt;Site settings&lt;/code&gt;
      &lt;ul style=&quot;list-style-type: circle; padding-left: 20px; margin-top: 4px;&quot;&gt;
        &lt;li&gt;Location (位置)：&lt;strong&gt;Blocked (封鎖)&lt;/strong&gt;。&lt;/li&gt;
        &lt;li&gt;Notifications (通知)：&lt;strong&gt;Blocked (封鎖)&lt;/strong&gt;。&lt;/li&gt;
        &lt;li&gt;Background sync (背景同步)：&lt;strong&gt;Blocked (封鎖)&lt;/strong&gt;。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;color: #2b6cb0; border-left: 4px solid #3182ce; padding-left: 10px; margin-top: 30px; margin-bottom: 16px;&quot;&gt;🔒 七、終端安全收尾&lt;/h2&gt;
  &lt;ol style=&quot;padding-left: 20px; margin-bottom: 20px;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;撤銷 Shell Root 權限&lt;/strong&gt;：進入 SukiSU 管理器 ➔「超級使用者」分頁 ➔ 關閉 &lt;code&gt;com.android.shell&lt;/code&gt;（或終端機/ADB Shell）之授權。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;關閉偵錯介面&lt;/strong&gt;：進入「設定」➔「系統」➔「開發人員選項」➔ 關閉「已取得 Root 權限的偵錯」及「USB 偵錯」。&lt;/li&gt;
  &lt;/ol&gt;

&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/2104761062145368547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/2104761062145368547'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/sony-xperia-xz1-g8342-poplardsds-adaway.html' title='Sony Xperia XZ1  (G8342 / poplar_dsds) 系列一 擋廣告AdAway 部署'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-1095563687077874738</id><published>2026-09-11T13:18:23.844+08:00</published><updated>2026-09-23T22:02:11.957+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="(G8342 / poplar_dsds)"/><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="Sony Xperia XZ1"/><title type='text'>Sony Xperia XZ1  (G8342 / poplar_dsds) 系列一 LineageOS重刷成去Google 服務的開源純 Wi-Fi機</title><content type='html'>&lt;div style=&quot;font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, &#39;Helvetica Neue&#39;, Arial, sans-serif; line-height: 1.6; color: #1f2937; max-width: 820px; margin: 0 auto; padding: 24px; background-color: #ffffff; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05);&quot;&gt;

  &lt;h1 style=&quot;font-size: 26px; font-weight: 700; color: #111827; border-bottom: 2px solid #e5e7eb; padding-bottom: 12px; margin-top: 0;&quot;&gt;📱 極簡無 GApps 隱私副機打造計畫：Sony Xperia XZ1 (LineageOS 21 + ReSukiSU)&lt;/h1&gt;

  &lt;p style=&quot;font-size: 15px; color: #4b5563; margin-bottom: 24px;&quot;&gt;
    將剛接手、尚未重刷的空白背景 Android 設備，改造為極度輕量、零 Google 服務（No GApps）、專注開源與隱私導向的純 Wi-Fi 工具機。以下為完整軟硬體規格、刷機準備與軟體分發鏈規劃。
  &lt;/p&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #1f2937; margin-top: 28px; margin-bottom: 12px;&quot;&gt;⚙️ 1. 設備型號與目標環境&lt;/h2&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 20px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;設備型號&lt;/strong&gt;：Sony Xperia XZ1 Dual (G8342 / 內部代號 poplar_dsds)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;目標系統&lt;/strong&gt;：LineageOS 21 (Android 14)，完全不刷入 GApps 與 microG。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;Root 方案&lt;/strong&gt;：ReSukiSU 核心鏡像 (&lt;code&gt;ReSukiSU-34781-poplar_dsds&lt;/code&gt;，基於 KernelSU 架構)。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #1f2937; margin-top: 28px; margin-bottom: 12px;&quot;&gt;🛠️ 2. 重置與刷機事前準備工具 (PC 端與底層)&lt;/h2&gt;
  
  &lt;p style=&quot;font-weight: 600; color: #374151; margin-bottom: 6px;&quot;&gt;💻 電腦端工具與驅動：&lt;/p&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 16px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;Android SDK Platform-Tools（Windows 版，含 &lt;code&gt;adb.exe&lt;/code&gt; / &lt;code&gt;fastboot.exe&lt;/code&gt;）&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;Sony Mobile / Google USB Driver（確保 Fastboot 模式與 ADB 介面正常辨識）&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p style=&quot;font-weight: 600; color: #374151; margin-bottom: 6px;&quot;&gt;📦 底層刷機映像檔：&lt;/p&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 16px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;TWRP Recovery (適用於 poplar / poplar_dsds)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;LineageOS 21 系統底包 (poplar_dsds)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;ReSukiSU 內核鏡像 (&lt;code&gt;ReSukiSU-34781-poplar_dsds.img&lt;/code&gt; 或對應 &lt;code&gt;boot.img&lt;/code&gt;)&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p style=&quot;font-weight: 600; color: #374151; margin-bottom: 6px;&quot;&gt;🔧 刷完開機後手機端必設項目（開發人員選項）：&lt;/p&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 20px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;開啟「Android 偵錯 (USB Debugging)」&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;
      開啟「已取得 Root 權限的偵錯 (Rooted debugging / ADB Root)」，確保電腦端執行 &lt;code&gt;adb shell &quot;su -c &#39;id&#39;&quot;&lt;/code&gt; 能直接回傳 &lt;code&gt;uid=0(root) groups=0(root) context=u:r:ksu:s0&lt;/code&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #1f2937; margin-top: 28px; margin-bottom: 12px;&quot;&gt;📦 3. 預備安裝之核心 App 清單與可靠來源&lt;/h2&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 24px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      🏪 &lt;strong&gt;軟體分發中心&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;Neo Store&lt;/strong&gt; (現代化 F-Droid 開源應用商店)：&lt;a href=&quot;https://github.com/NeoApplications/Neo-Store/releases&quot; target=&quot;_blank&quot; style=&quot;color: #2563eb; text-decoration: none;&quot;&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;Aurora Store&lt;/strong&gt; (Google Play 匿名客戶端，不安裝大型 OBB 遊戲時保持預設拒絕全局儲存權限)：&lt;a href=&quot;https://auroraoss.com/&quot; target=&quot;_blank&quot; style=&quot;color: #2563eb; text-decoration: none;&quot;&gt;官方網站&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      ⌨️ &lt;strong&gt;輸入法&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li&gt;&lt;strong&gt;Sweet-LIME&lt;/strong&gt; (純本地開源繁體注音/倉頡輸入法，零聯網權限)：F-Droid 或 GitHub Releases&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      🛡️ &lt;strong&gt;系統級擋廣告&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li&gt;&lt;strong&gt;AdAway&lt;/strong&gt; (透過 SukiSU Root 權限直接掛載寫入系統 Hosts 擋廣告)：&lt;a href=&quot;https://github.com/AdAway/AdAway/releases&quot; target=&quot;_blank&quot; style=&quot;color: #2563eb; text-decoration: none;&quot;&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      🌐 &lt;strong&gt;主力瀏覽器與 WebApp&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li&gt;&lt;strong&gt;Cromite&lt;/strong&gt; (隱私強化 Chromium 分支，自帶廣告與追蹤攔截)：&lt;a href=&quot;https://github.com/uazo/cromite/releases&quot; target=&quot;_blank&quot; style=&quot;color: #2563eb; text-decoration: none;&quot;&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      🔄 &lt;strong&gt;跨平台檔案傳輸&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li&gt;&lt;strong&gt;LocalSend&lt;/strong&gt; (開源區域網路互傳工具)：&lt;a href=&quot;https://github.com/localsend/localsend/releases&quot; target=&quot;_blank&quot; style=&quot;color: #2563eb; text-decoration: none;&quot;&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      🗺️ &lt;strong&gt;離線與在線地圖分工策略&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;Cromite 網頁版捷徑 (主力)&lt;/strong&gt;：使用 &lt;code&gt;https://www.google.com/maps?force=pwa&amp;amp;nogapps=1&lt;/code&gt;，免登入即可順暢查看店家資訊、即時路況與 360 度街景，關閉分頁即徹底休眠，零背景常駐、零快取膨脹。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;Organic Maps (備用)&lt;/strong&gt;：完全離線向量導航，透過 Neo Store 安裝，作為無網路環境下的離線應急。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      🤖 &lt;strong&gt;AI 助手&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li&gt;&lt;strong&gt;duck.ai&lt;/strong&gt;：透過 Cromite 設為首頁，或使用 Neo Store 的 Native Alpha 封裝為獨立視窗（可調整 125%~150% 頁面縮放以解決字體偏小問題）。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;div style=&quot;background-color: #f3f4f6; border-left: 4px solid #3b82f6; padding: 12px 16px; margin-top: 24px; border-radius: 4px; font-size: 14px; color: #374151;&quot;&gt;
    💡 &lt;strong&gt;協作模式已啟動&lt;/strong&gt;：後續將採分段流程推進，每次提供單一步驟、操作指令與自檢驗證點，確認回報後再進入下一階段。
  &lt;/div&gt;

&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/1095563687077874738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/1095563687077874738'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/sony-xperia-xz1-g8342-poplardsds_0743483395.html' title='Sony Xperia XZ1  (G8342 / poplar_dsds) 系列一 LineageOS重刷成去Google 服務的開源純 Wi-Fi機'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-8869862486910345077</id><published>2026-09-10T18:52:19.999+08:00</published><updated>2026-09-23T22:15:15.781+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="(G8342 / poplar_dsds)"/><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="Sony Xperia XZ1"/><title type='text'>Sony Xperia XZ1  (G8342 / poplar_dsds) 系列一Whatsapp驗證的操作(三)</title><content type='html'>&lt;div style=&quot;font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, &#39;Helvetica Neue&#39;, Arial, sans-serif; line-height: 1.65; color: #1f2937; max-width: 860px; margin: 0 auto; padding: 28px; background-color: #ffffff; border-radius: 12px; box-shadow: 0 4px 16px rgba(0,0,0,0.06);&quot;&gt;

  &lt;h1 style=&quot;font-size: 26px; font-weight: 700; color: #111827; border-bottom: 2px solid #e5e7eb; padding-bottom: 14px; margin-top: 0;&quot;&gt;📱 設備環境與當前技術配置進展 (Environment &amp;amp; Context State)&lt;/h1&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #1f2937; margin-top: 28px; margin-bottom: 12px;&quot;&gt;⚙️ 1. 硬體與作業系統基礎&lt;/h2&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 20px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;設備型號&lt;/strong&gt;：Sony Xperia XZ1 (Snapdragon 835 / MSM8998 / poplar_dsds / G8342)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;作業系統&lt;/strong&gt;：LineageOS 21 (Android 14 / SDK 34)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;底層核心&lt;/strong&gt;：4.4.x Legacy Kernel（舊核心移植至 Android 14 存在嚴重的 Binder 與 SELinux 相容限制）&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;GApps 套件&lt;/strong&gt;：MindTheGapps 14.0 (arm64)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;Root 方案&lt;/strong&gt;：SukiSU Ultra (KernelSU 分支，版本 34781)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;開機必要條件&lt;/strong&gt;：開機後 SELinux 必須切換為 &lt;code&gt;Permissive&lt;/code&gt; 狀態 (&lt;code&gt;setenforce 0&lt;/code&gt;)，否則系統服務會被 SELinux 攔截。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;hr style=&quot;border: 0; border-top: 1px solid #e5e7eb; margin: 24px 0;&quot; /&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #047857; margin-top: 28px; margin-bottom: 12px;&quot;&gt;✅ 2. 已確認解決與排除的核心問題 (Resolved Pitfalls)&lt;/h2&gt;
  &lt;ol style=&quot;padding-left: 20px; margin-bottom: 20px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 14px;&quot;&gt;
      &lt;strong&gt;WhatsApp 啟動卡死（Deadlock / ANR）真兇已鎖定並解決&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;日誌抓出關鍵報錯：&lt;code&gt;E Parcel : Expecting header 0x53595354 but found 0x2e006d. Mixing copies of libbinder?&lt;/code&gt; 以及 &lt;code&gt;LSPosed-Bridge: ... (ZygoteArgsHook) @startViaZygote force mount data: ... com.whatsapp&lt;/code&gt;。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;根因&lt;/strong&gt;：LSPosed 在 4.4 舊核心上 Hook 進程時引發底層 Binder IPC 通訊死鎖。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;處置&lt;/strong&gt;：已將 LSPosed 完全停用 (&lt;code&gt;/data/adb/modules/zygisk_lsposed/disable&lt;/code&gt;)，WhatsApp 現已可&lt;strong&gt;完全流暢啟動秒開&lt;/strong&gt;，不再死鎖。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 14px;&quot;&gt;
      &lt;strong&gt;指紋庫真實性已確認&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;捨棄了三星 S9 等公開黑名單指紋，已成功自一台原廠無 Root 的 Android 9 實體 Sony XZ1 (G8342) 提取乾淨私有指紋並寫入 &lt;code&gt;pif.json&lt;/code&gt; 與 &lt;code&gt;pif.prop&lt;/code&gt;：&lt;/li&gt;
      &lt;/ul&gt;
      &lt;pre style=&quot;background-color: #f8fafc; border: 1px solid #e2e8f0; border-radius: 6px; padding: 12px 16px; font-size: 13px; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; overflow-x: auto; color: #0f172a; margin: 8px 0 12px 20px;&quot;&gt;MANUFACTURER=Sony
BRAND=Sony
DEVICE=G8342
PRODUCT=G8342
MODEL=G8342
FINGERPRINT=Sony/G8342/G8342:9/47.2.A.11.228/3311891731:user/release-keys
SECURITY_PATCH=2019-09-01
FIRST_API_LEVEL=26&lt;/pre&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 14px;&quot;&gt;
      &lt;strong&gt;系統屬性 (Props) 已完成 Sony 原廠偽裝&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;code&gt;ro.build.fingerprint&lt;/code&gt; 已被覆蓋為官方 Sony 原廠指紋。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;code&gt;ro.product.model&lt;/code&gt; 顯示為 &lt;code&gt;G8342&lt;/code&gt;。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;透過 Windows 推送 Linux 腳本時產生的 CRLF 換行符問題已透過 &lt;code&gt;tr -d &quot;\r&quot;&lt;/code&gt; 解決，並成功執行 &lt;code&gt;resetprop -d ro.lineage.version&lt;/code&gt; 等清空指令（&lt;code&gt;getprop ro.lineage.version&lt;/code&gt; 已為空）。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ol&gt;

  &lt;hr style=&quot;border: 0; border-top: 1px solid #e5e7eb; margin: 24px 0;&quot; /&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #b91c1c; margin-top: 28px; margin-bottom: 12px;&quot;&gt;⚠️ 3. 當前剩餘瓶頸與核心現象 (Current Bottleneck)&lt;/h2&gt;
  &lt;div style=&quot;background-color: #fef2f2; border-left: 4px solid #ef4444; padding: 14px 18px; border-radius: 4px; margin-bottom: 16px;&quot;&gt;
    &lt;p style=&quot;font-weight: 600; color: #991b1b; margin-top: 0; margin-bottom: 8px;&quot;&gt;現存核心異常現象：&lt;/p&gt;
    &lt;ol style=&quot;padding-left: 20px; margin-bottom: 0; color: #7f1d1d;&quot;&gt;
      &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;strong&gt;Play Integrity API 檢測&lt;/strong&gt;：依然維持 &lt;strong&gt;「三紅」&lt;/strong&gt;（BASIC、DEVICE、STRONG 均未通過）。&lt;/li&gt;
      &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;strong&gt;WhatsApp 啟動行為&lt;/strong&gt;：介面秒開不再死鎖，但會直接彈出 &lt;strong&gt;「You need the official WhatsApp to log in」或 Custom ROM / 未認證設備警告&lt;/strong&gt;，阻止簡訊註冊。&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/div&gt;
  
  &lt;p style=&quot;font-weight: 600; color: #374151; margin-bottom: 8px;&quot;&gt;🔍 原因診斷：&lt;/p&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 20px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;當前安裝的 &lt;code&gt;PlayIntegrityFix&lt;/code&gt; (PIF) 在純 Permissive + 4.4 核心環境下，&lt;strong&gt;未能成功將偽裝 Hook 進 GMS 的 Key Attestation / DroidGuard 進程&lt;/strong&gt;。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;系統內部依然有其他未被清乾淨的 LineageOS / 自訂 ROM 屬性（例如系統 Settings 資料庫標記、Build Display ID、內核版本字串、或是缺少有效的硬體金鑰偽裝）。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;hr style=&quot;border: 0; border-top: 1px solid #e5e7eb; margin: 24px 0;&quot; /&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #2563eb; margin-top: 28px; margin-bottom: 12px;&quot;&gt;🧭 4. 下一步待排查方向 (Next Troubleshooting Steps)&lt;/h2&gt;
  &lt;ol style=&quot;padding-left: 20px; margin-bottom: 24px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;
      &lt;strong&gt;確認 PIF 是否真正注入 GMS&lt;/strong&gt;：
      &lt;div style=&quot;color: #4b5563; font-size: 14px; margin-top: 2px;&quot;&gt;抓取 GMS 進程啟動時的日誌，確認 PIF 動態庫是否被 &lt;code&gt;com.google.android.gms.unstable&lt;/code&gt; 載入。&lt;/div&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;
      &lt;strong&gt;檢查系統殘留特徵&lt;/strong&gt;：
      &lt;div style=&quot;color: #4b5563; font-size: 14px; margin-top: 2px;&quot;&gt;檢查 &lt;code&gt;ro.build.display.id&lt;/code&gt;、&lt;code&gt;ro.build.flavor&lt;/code&gt; 等是否依然含有 &lt;code&gt;lineage&lt;/code&gt; 字樣；檢查內核版本字串 (&lt;code&gt;/proc/version&lt;/code&gt;) 是否暴露自編譯核心特徵。&lt;/div&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;
      &lt;strong&gt;更換相容的 Play Integrity 方案&lt;/strong&gt;：
      &lt;div style=&quot;color: #4b5563; font-size: 14px; margin-top: 2px;&quot;&gt;評估在不安裝 LSPosed 的前提下，改用原生相容的 PlayIntegrityFix 或配合 boot-time resetprop 腳本進行純屬性偽裝。&lt;/div&gt;
    &lt;/li&gt;
  &lt;/ol&gt;

&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/8869862486910345077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/8869862486910345077'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/sony-xperia-xz1-g8342-poplardsds_01208299357.html' title='Sony Xperia XZ1  (G8342 / poplar_dsds) 系列一Whatsapp驗證的操作(三)'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-6246718400534247571</id><published>2026-09-10T17:58:54.713+08:00</published><updated>2026-09-23T22:16:34.318+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="(G8342 / poplar_dsds)"/><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="Sony Xperia XZ1"/><title type='text'>Sony Xperia XZ1  (G8342 / poplar_dsds) 系列一Whatsapp驗證的操作(二)</title><content type='html'>&lt;div style=&quot;font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, &#39;Helvetica Neue&#39;, Arial, sans-serif; line-height: 1.65; color: #1f2937; max-width: 860px; margin: 0 auto; padding: 28px; background-color: #ffffff; border-radius: 12px; box-shadow: 0 4px 16px rgba(0,0,0,0.06);&quot;&gt;

  &lt;h1 style=&quot;font-size: 26px; font-weight: 700; color: #111827; border-bottom: 2px solid #e5e7eb; padding-bottom: 14px; margin-top: 0;&quot;&gt;📱 設備環境與當前完整技術配置 (System State &amp;amp; Migration Context)&lt;/h1&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #1f2937; margin-top: 28px; margin-bottom: 12px;&quot;&gt;⚙️ 1. 硬體與作業系統基礎&lt;/h2&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 20px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;設備型號&lt;/strong&gt;：Sony Xperia XZ1 (Snapdragon 835 / MSM8998 / poplar_dsds / G8342)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;作業系統&lt;/strong&gt;：LineageOS 21 (Android 14 / SDK 34)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;底層核心&lt;/strong&gt;：4.4.x Legacy Kernel（舊核心搭配 Android 14 存在 Binder 與 SELinux 相容限制）&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;GApps 套件&lt;/strong&gt;：MindTheGapps 14.0 (arm64)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;Root 方案&lt;/strong&gt;：SukiSU Ultra (KernelSU 分支，版本 34781)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;SELinux 運行要求&lt;/strong&gt;：因舊核心限制，重啟後必須處於 &lt;code&gt;Permissive&lt;/code&gt; 狀態 (&lt;code&gt;setenforce 0&lt;/code&gt;)，否則 &lt;code&gt;system_server&lt;/code&gt; 與動態注入層將被 SELinux 攔截。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;hr style=&quot;border: 0; border-top: 1px solid #e5e7eb; margin: 24px 0;&quot; /&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #047857; margin-top: 28px; margin-bottom: 12px;&quot;&gt;🟢 2. 已驗證成功點亮的核心組件 (Baseline Verified)&lt;/h2&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 20px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      &lt;strong&gt;Zygisk 注入器&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;使用 &lt;code&gt;Zygisk-Next-1.5.0-843-5217106-release.zip&lt;/code&gt;。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;雙架構注入正常（&lt;code&gt;zygote 64&lt;/code&gt; 與 &lt;code&gt;zygote_secondary 32&lt;/code&gt; 均顯示綠色 Injected）。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      &lt;strong&gt;LSPosed 框架&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;使用 &lt;code&gt;LSPosed-v1.9.3_mod-7244-zygisk-release.zip&lt;/code&gt;（寄生管理器模式）。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;狀態：&lt;strong&gt;Activated (綠燈)&lt;/strong&gt;。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;關鍵設定&lt;/strong&gt;：&lt;strong&gt;LSPosed 設定中的 &lt;code&gt;Xposed API call protection&lt;/code&gt; 必須關閉 (Off)&lt;/strong&gt;，否則所有模組 IPC 通訊判定皆會失效。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      &lt;strong&gt;應用隱藏隔離 (HMA)&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;使用 &lt;strong&gt;Hide My Applist (HMA) v3.2&lt;/strong&gt;（v3.8.3 在此 4.4 核心環境下不穩定）。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;作用域：勾選 &lt;code&gt;System Framework (系統框架)&lt;/code&gt;。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;狀態：&lt;strong&gt;&lt;code&gt;Module Activated [3.2-410]&lt;/code&gt; 且 &lt;code&gt;System service running [96]&lt;/code&gt; (亮青色正常運作)&lt;/strong&gt;。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;模式：黑名單模式，已封鎖 Root、LSPosed、HMA 本體及檢測工具。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;hr style=&quot;border: 0; border-top: 1px solid #e5e7eb; margin: 24px 0;&quot; /&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #b45309; margin-top: 28px; margin-bottom: 12px;&quot;&gt;🛠️ 3. 已知踩坑與關鍵經驗總結 (Pitfalls Avoided)&lt;/h2&gt;
  &lt;ol style=&quot;padding-left: 20px; margin-bottom: 20px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 14px;&quot;&gt;
      &lt;strong&gt;HMA 出現「System service not running」的根因與解法&lt;/strong&gt;：
      &lt;div style=&quot;margin-top: 4px;&quot;&gt;若設備開機時 SELinux 處於 &lt;code&gt;Enforcing&lt;/code&gt;，&lt;code&gt;system_server&lt;/code&gt; 早期註冊服務會失敗；即使開機後手動補下 &lt;code&gt;setenforce 0&lt;/code&gt; 亦無效。&lt;/div&gt;
      &lt;div style=&quot;margin-top: 6px; font-weight: 600;&quot;&gt;標準恢復流程（在寬鬆狀態下重啟 Zygote 讓系統層重孵化）：&lt;/div&gt;
      &lt;pre style=&quot;background-color: #f8fafc; border: 1px solid #e2e8f0; border-radius: 6px; padding: 10px 14px; font-size: 13px; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; overflow-x: auto; color: #0f172a; margin: 6px 0 0 0;&quot;&gt;adb shell &quot;su -c &#39;setenforce 0 &amp;amp;&amp;amp; killall -9 zygote zygote64&#39;&quot;&lt;/pre&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 14px;&quot;&gt;
      &lt;strong&gt;Play Integrity「三紅」的排查結論&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;原先使用的三星 S9 (SM-G9600) 公開指紋已被 Google 伺服器端全面封禁。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;code&gt;Tricky Store&lt;/code&gt; 因無實體 &lt;code&gt;keybox.xml&lt;/code&gt;，目前已在 SukiSU 中&lt;strong&gt;手動停用 (disable)&lt;/strong&gt;，避免空白金鑰干擾。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;GSF ID 雖然已手動向 Google 註冊白名單（確保帳號登入與商店正常），但對 Play Integrity 的 &lt;code&gt;MEETS_DEVICE_INTEGRITY&lt;/code&gt; 挑戰無直接放行效果。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 14px;&quot;&gt;
      &lt;strong&gt;WhatsApp 原生防護原則&lt;/strong&gt;：
      &lt;div style=&quot;margin-top: 4px;&quot;&gt;WhatsApp &lt;strong&gt;嚴禁&lt;/strong&gt;加入 LSPosed 的作用範圍（防止進程被 Hook 觸發反竄改機制）；僅需透過 HMA 進行環境隱藏。&lt;/div&gt;
    &lt;/li&gt;
  &lt;/ol&gt;

  &lt;hr style=&quot;border: 0; border-top: 1px solid #e5e7eb; margin: 24px 0;&quot; /&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #2563eb; margin-top: 28px; margin-bottom: 12px;&quot;&gt;🔑 4. 當前指紋配置 (Sourced from Genuine Stock XZ1)&lt;/h2&gt;
  &lt;p style=&quot;margin-bottom: 12px; color: #374151;&quot;&gt;
    為徹底解決被 Google 封殺的問題，已從另一台未 Root 的原廠 Android 9 Sony XZ1 (G8342) 提取未被公開濫用的乾淨官方指紋，並已生成寫入手機的 &lt;code&gt;pif.json&lt;/code&gt;：
  &lt;/p&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 20px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;檔案已放置於 &lt;code&gt;/data/adb/pif.json&lt;/code&gt; 與 &lt;code&gt;/data/adb/modules/playintegrityfix/pif.json&lt;/code&gt;。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;舊版相衝突的 &lt;code&gt;pif.prop&lt;/code&gt; 已自手機端刪除。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;hr style=&quot;border: 0; border-top: 1px solid #e5e7eb; margin: 24px 0;&quot; /&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #7c3aed; margin-top: 28px; margin-bottom: 12px;&quot;&gt;⏳ 5. 當前停滯點與待執行的下一步 (Current Task)&lt;/h2&gt;
  
  &lt;div style=&quot;background-color: #fef3c7; border-left: 4px solid #f59e0b; padding: 12px 16px; border-radius: 4px; margin-bottom: 16px; font-size: 14px; color: #92400e;&quot;&gt;
    &lt;strong&gt;當前狀態&lt;/strong&gt;：在推送專屬 &lt;code&gt;pif.json&lt;/code&gt; 並執行 &lt;code&gt;killall -9 zygote zygote64&lt;/code&gt; 期間，ADB 暫時斷開，導致最後一步清空快取的指令未成功執行 (&lt;code&gt;pm clear com.google.android.gms&lt;/code&gt;)。
  &lt;/div&gt;

  &lt;p style=&quot;font-weight: 600; color: #374151; margin-bottom: 8px;&quot;&gt;📋 接續動作：&lt;/p&gt;
  &lt;ol style=&quot;padding-left: 20px; margin-bottom: 0; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;連接手機執行 &lt;code&gt;adb shell &quot;pm clear com.google.android.gms&quot;&lt;/code&gt; 重置快取。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;確認 HMA 依然維持 &lt;code&gt;System service running&lt;/code&gt;。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;打開 Play Integrity API Checker 驗證是否順利通過 &lt;code&gt;MEETS_DEVICE_INTEGRITY&lt;/code&gt; (雙綠)。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;通過後立即開啟官方原版 WhatsApp 完成簡訊認證與註冊。&lt;/li&gt;
  &lt;/ol&gt;

&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/6246718400534247571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/6246718400534247571'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/sony-xperia-xz1-g8342-poplardsds_0862391300.html' title='Sony Xperia XZ1  (G8342 / poplar_dsds) 系列一Whatsapp驗證的操作(二)'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-5184942936109843712</id><published>2026-09-10T14:56:07.866+08:00</published><updated>2026-09-23T22:17:27.795+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="(G8342 / poplar_dsds)"/><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="Sony Xperia XZ1"/><title type='text'>Sony Xperia XZ1  (G8342 / poplar_dsds) 系列一Whatsapp驗證的操作(一)</title><content type='html'>&lt;div style=&quot;font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, &#39;Helvetica Neue&#39;, Arial, sans-serif; line-height: 1.65; color: #1f2937; max-width: 860px; margin: 0 auto; padding: 28px; background-color: #ffffff; border-radius: 12px; box-shadow: 0 4px 16px rgba(0,0,0,0.06);&quot;&gt;

  &lt;h1 style=&quot;font-size: 26px; font-weight: 700; color: #111827; border-bottom: 2px solid #e5e7eb; padding-bottom: 14px; margin-top: 0;&quot;&gt;📱 設備環境與目前已驗證成功的基準配置 (Baseline Working State)&lt;/h1&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #1f2937; margin-top: 28px; margin-bottom: 12px;&quot;&gt;⚙️ 1. 硬體與系統環境&lt;/h2&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 20px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;設備型號&lt;/strong&gt;：Sony Xperia XZ1 (Snapdragon 835 / MSM8998 / poplar_dsds)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;作業系統&lt;/strong&gt;：LineageOS 21 (Android 14 / SDK 34 / 4.4.x Legacy Kernel)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;GApps&lt;/strong&gt;：MindTheGapps 14.0 (arm64)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;Root 方案&lt;/strong&gt;：SukiSU Ultra (KernelSU 分支，核心版本 34781)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;SELinux 狀態&lt;/strong&gt;：開機後需切換為 &lt;code&gt;Permissive&lt;/code&gt; (&lt;code&gt;setenforce 0&lt;/code&gt;)，避免舊核心阻斷 Android 14 的 Binder 通訊與動態庫加載。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;hr style=&quot;border: 0; border-top: 1px solid #e5e7eb; margin: 24px 0;&quot; /&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #047857; margin-top: 28px; margin-bottom: 12px;&quot;&gt;🟢 2. 已驗證成功點亮的核心組件與關鍵設定&lt;/h2&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 20px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 14px;&quot;&gt;
      &lt;strong&gt;Zygisk 注入器&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;組件&lt;/strong&gt;：&lt;code&gt;Zygisk-Next-1.5.0-843-5217106-release.zip&lt;/code&gt;（安裝後在 SukiSU 模組目錄顯示為 &lt;code&gt;/data/adb/modules/zygisksu/&lt;/code&gt;）。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;狀態&lt;/strong&gt;：已確認雙架構注入成功（&lt;code&gt;zygote 64&lt;/code&gt;、&lt;code&gt;zygote_secondary 32&lt;/code&gt; 均顯示綠色 Injected）。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;注意點&lt;/strong&gt;：SukiSU Ultra 本身&lt;strong&gt;無內建 Zygisk&lt;/strong&gt;，僅提供隱藏狀態切換，必須依賴獨立模組。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 14px;&quot;&gt;
      &lt;strong&gt;Xposed 框架&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;版本&lt;/strong&gt;：&lt;code&gt;LSPosed-v1.9.3_mod-7244-zygisk-release.zip&lt;/code&gt;（寄生管理器模式，撥號代碼 &lt;code&gt;*#*#5776733#*#*&lt;/code&gt;）。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;當前狀態&lt;/strong&gt;：&lt;strong&gt;Activated (已啟動，綠燈)&lt;/strong&gt;。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;關鍵設定（破局點）&lt;/strong&gt;：&lt;strong&gt;必須在 LSPosed 設定中將 &lt;code&gt;Xposed API call protection&lt;/code&gt; 切換為關閉（Off）&lt;/strong&gt;，否則會阻斷模組的動態 IPC，導致所有模組判定失效。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 14px;&quot;&gt;
      &lt;strong&gt;隔離模組 (HMA)&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;版本&lt;/strong&gt;：&lt;strong&gt;Hide My Applist (HMA) v3.2&lt;/strong&gt;（實測 v3.8.3 在此 4.4 核心/Android 14 環境下相容性不佳，v3.2 為唯一驗證通過版本）。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;當前狀態&lt;/strong&gt;：&lt;strong&gt;Working (運作中，綠燈)&lt;/strong&gt;。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;作用域 (Scope)&lt;/strong&gt;：在 LSPosed 中勾選 &lt;code&gt;System Framework (系統框架)&lt;/code&gt;。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;配置模式&lt;/strong&gt;：採用 &lt;strong&gt;Blacklist (黑名單模式)&lt;/strong&gt;，建立包含 SukiSU、LSPosed、HMA 本身及各類檢測工具的防偵測範本，並套用至目標應用。&lt;code&gt;Excluded system apps&lt;/code&gt; 在黑名單下預設反灰放行。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;hr style=&quot;border: 0; border-top: 1px solid #e5e7eb; margin: 24px 0;&quot; /&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #b45309; margin-top: 28px; margin-bottom: 12px;&quot;&gt;🛠️ 3. 排除的無效路徑與踩坑記錄 (Pitfalls Avoided)&lt;/h2&gt;
  &lt;ol style=&quot;padding-left: 20px; margin-bottom: 20px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 14px;&quot;&gt;
      &lt;strong&gt;Toybox 相容問題與 service.d 腳本&lt;/strong&gt;：
      &lt;div style=&quot;margin-top: 4px;&quot;&gt;曾嘗試手動建立 &lt;code&gt;/data/adb/service.d/run_lspd.sh&lt;/code&gt; 來啟動守護進程，但因時序落後於 &lt;code&gt;system_server&lt;/code&gt; 啟動，且容易造成重複佔用與死鎖，&lt;strong&gt;目前已徹底刪除&lt;/strong&gt;。現階段由 Zygisk Next 與 SukiSU 標準流程直接拉起。&lt;/div&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 14px;&quot;&gt;
      &lt;strong&gt;日誌排查差異&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;Zygisk Next 模組在當前環境下的實際 ID 為 &lt;code&gt;zygisksu&lt;/code&gt;，查詢日誌需使用 &lt;code&gt;adb logcat -d -s Zygisk ZygiskSU&lt;/code&gt; 或 &lt;code&gt;ZygiskNext&lt;/code&gt;。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;Windows CMD 環境不支援原生 Linux &lt;code&gt;grep&lt;/code&gt;，需在手機端 &lt;code&gt;adb shell&lt;/code&gt; 內執行或使用 Windows 原生 &lt;code&gt;findstr&lt;/code&gt;。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 14px;&quot;&gt;
      &lt;strong&gt;WhatsApp 隔離原則&lt;/strong&gt;：
      &lt;div style=&quot;margin-top: 4px;&quot;&gt;WhatsApp &lt;strong&gt;嚴禁&lt;/strong&gt;加入 LSPosed 的作用域，否則進程被直接注入 Xposed 動態庫會觸發客戶端完整性防護；僅需在 HMA 的應用管理中開啟黑名單隱藏。&lt;/div&gt;
    &lt;/li&gt;
  &lt;/ol&gt;

  &lt;hr style=&quot;border: 0; border-top: 1px solid #e5e7eb; margin: 24px 0;&quot; /&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #2563eb; margin-top: 28px; margin-bottom: 12px;&quot;&gt;⏳ 4. 當前待解進展 (Current Progress &amp;amp; Next Step)&lt;/h2&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 16px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;當前進度&lt;/strong&gt;：LSPosed (Activated) 與 HMA 3.2 (Working) 已全部恢復正常運作。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;
      &lt;strong&gt;進行中任務&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;目標為原版官方 WhatsApp 註冊，需通過 Google Play Integrity 驗證（至少 &lt;code&gt;MEETS_BASIC_INTEGRITY&lt;/code&gt; 與 &lt;code&gt;MEETS_DEVICE_INTEGRITY&lt;/code&gt;）。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;剛在 SukiSU 中重新啟用 &lt;strong&gt;Play Integrity Fix&lt;/strong&gt; 與 &lt;strong&gt;Tricky Store&lt;/strong&gt;，並已執行 &lt;code&gt;echo &quot;com.google.android.gms&quot; &amp;gt; /data/adb/tricky_store/target.txt&lt;/code&gt;。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;div style=&quot;background-color: #fef3c7; border-left: 4px solid #f59e0b; padding: 12px 16px; border-radius: 4px; font-size: 14px; color: #92400e;&quot;&gt;
    ⚠️ &lt;strong&gt;目前卡點&lt;/strong&gt;：上述 Zygisk 模組啟用後尚未完整重啟手機載入注入代碼，且重啟後需確保 &lt;code&gt;setenforce 0&lt;/code&gt; 生效與清理 GMS 快取，以驗證 Play Integrity 是否由三紅轉為雙綠/三綠。
  &lt;/div&gt;

&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/5184942936109843712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/5184942936109843712'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/sony-xperia-xz1-g8342-poplardsds_0392964985.html' title='Sony Xperia XZ1  (G8342 / poplar_dsds) 系列一Whatsapp驗證的操作(一)'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry><entry><id>tag:blogger.com,1999:blog-562640272081991521.post-4715648772687467705</id><published>2026-09-10T14:32:45.423+08:00</published><updated>2026-09-23T22:32:04.743+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="(G8342 / poplar_dsds)"/><category scheme="http://www.blogger.com/atom/ns#" term="AI對話"/><category scheme="http://www.blogger.com/atom/ns#" term="Sony Xperia XZ1"/><title type='text'>Sony Xperia XZ1  (G8342 / poplar_dsds) 系列一Whatsapp驗證的事前準備</title><content type='html'>&lt;div style=&quot;font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, &#39;Helvetica Neue&#39;, Arial, sans-serif; line-height: 1.65; color: #1f2937; max-width: 860px; margin: 0 auto; padding: 28px; background-color: #ffffff; border-radius: 12px; box-shadow: 0 4px 16px rgba(0,0,0,0.06);&quot;&gt;

  &lt;h1 style=&quot;font-size: 26px; font-weight: 700; color: #111827; border-bottom: 2px solid #e5e7eb; padding-bottom: 14px; margin-top: 0;&quot;&gt;📱 Sony Xperia XZ1 (Android 14 / LineageOS 21) WhatsApp 註冊與防偵測環境搭建指南&lt;/h1&gt;

  &lt;p style=&quot;font-size: 15px; color: #4b5563; margin-bottom: 24px;&quot;&gt;
    本文記錄在舊款旗艦機（Sony Xperia XZ1）刷入 Android 14 客製化韌體並完成 GApps 刷入後，同時成功運行 &lt;strong&gt;LSPosed&lt;/strong&gt;、&lt;strong&gt;Hide My Applist (HMA)&lt;/strong&gt; 與 &lt;strong&gt;Zygisk&lt;/strong&gt; 的狀態，避開 Android 14 底層死鎖陷阱，順利通過 WhatsApp 官方嚴格環境驗證的完整部署指南。
  &lt;/p&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #1f2937; margin-top: 28px; margin-bottom: 12px;&quot;&gt;⚙️ 設備規格與運行環境&lt;/h2&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 20px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;裝置型號&lt;/strong&gt;：Sony Xperia XZ1 (G8341 / G8342 / SO-01K)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;核心晶片&lt;/strong&gt;：Qualcomm Snapdragon 835 (MSM8998)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;作業系統&lt;/strong&gt;：LineageOS 21 (Android 14 / SDK 34)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;底層核心&lt;/strong&gt;：Linux 4.4.x（舊架構核心適配 Android 14）&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;Root 方案&lt;/strong&gt;：SukiSU (KernelSU 分支，基於核心 Hook 實現)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;Google 服務包&lt;/strong&gt;：MindTheGapps 14.0 (arm64)&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;strong&gt;目標應用&lt;/strong&gt;：WhatsApp Official (官方原版，嚴格依賴 Play Integrity 與環境純淨度)&lt;/li&gt;
  &lt;/ul&gt;

  &lt;hr style=&quot;border: 0; border-top: 1px solid #e5e7eb; margin: 24px 0;&quot; /&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #047857; margin-top: 28px; margin-bottom: 12px;&quot;&gt;🟢 曾成功同時運行的核心運行環境與版本組合&lt;/h2&gt;
  &lt;p style=&quot;margin-bottom: 12px; color: #374151;&quot;&gt;先前系統能成功點亮「Activated」與「Working」的核心配置組合如下：&lt;/p&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 20px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      &lt;strong&gt;Zygisk 運行環境&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;採用相容 SukiSU 的 Zygisk 實作（如 &lt;strong&gt;Zygisk Next&lt;/strong&gt; 或 SukiSU 內建 Zygisk 支援）。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;狀態：開機自動掛載注入，提供 Zygote 運行時 Hook 基礎。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      &lt;strong&gt;LSPosed 模組版本&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;版本號&lt;/strong&gt;：v1.9.3 (Build 7244) Zygisk 版。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;運行模式&lt;/strong&gt;：寄生管理器（Parasitic Manager / 寄生至系統框架），避開獨立 APK 通訊時的 Binder NPE 異常。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;撥號快捷入口&lt;/strong&gt;：&lt;code&gt;*#*#5776733#*#*&lt;/code&gt;（即 &lt;code&gt;*#*#LSPOS#*#*&lt;/code&gt;）。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      &lt;strong&gt;Hide My Applist (HMA) 版本&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;版本&lt;/strong&gt;：HMA v3.2 穩定版。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;作用域綁定&lt;/strong&gt;：已在 LSPosed 中同時勾選 &lt;strong&gt;System Framework（系統框架 / android）&lt;/strong&gt; 與 &lt;strong&gt;WhatsApp&lt;/strong&gt;。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 12px;&quot;&gt;
      &lt;strong&gt;安全策略模式 (關鍵)&lt;/strong&gt;：
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;SELinux 狀態&lt;/strong&gt;：&lt;strong&gt;Permissive（寬鬆模式）&lt;/strong&gt;。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;必要性&lt;/strong&gt;：Android 14 的 SELinux 策略會嚴格阻斷未簽名的 Binder 跨進程通訊。先前成功運行時，底層必須維持寬鬆模式，模組與 &lt;code&gt;system_server&lt;/code&gt; 才能完成 IPC 掛鉤。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;hr style=&quot;border: 0; border-top: 1px solid #e5e7eb; margin: 24px 0;&quot; /&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #b45309; margin-top: 28px; margin-bottom: 12px;&quot;&gt;🛠️ 關鍵技術故障與排除經驗（重要避坑點）&lt;/h2&gt;
  &lt;ol style=&quot;padding-left: 20px; margin-bottom: 20px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 16px;&quot;&gt;
      &lt;strong&gt;Toybox &lt;code&gt;unshare&lt;/code&gt; 參數導致開機中斷&lt;/strong&gt;
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;問題&lt;/strong&gt;：LineageOS 21 內建的 &lt;code&gt;toybox&lt;/code&gt; 指令集不支援 &lt;code&gt;--propagation slave&lt;/code&gt; 參數，官方 &lt;code&gt;service.sh&lt;/code&gt; 執行時會報錯 &lt;code&gt;Unknown option &#39;propagation&#39;&lt;/code&gt;，導致守護進程開機未能自啟。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;修復&lt;/strong&gt;：將模組啟動指令修正為 Toybox 相容的 &lt;code&gt;unshare -m sh -c &quot;...&quot;&lt;/code&gt;，或透過 &lt;code&gt;/data/adb/service.d/&lt;/code&gt; 開機腳本延遲啟動。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 16px;&quot;&gt;
      &lt;strong&gt;SELinux Enforcing 覆蓋導致的 Binder NPE&lt;/strong&gt;
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;問題&lt;/strong&gt;：系統若在開機時被 SukiSU 自動拉回 &lt;code&gt;Enforcing&lt;/code&gt;，LSPosed 守護服務（&lt;code&gt;lspd&lt;/code&gt;）向 &lt;code&gt;system_server&lt;/code&gt; 註冊時會拿到空的 Binder 物件，觸發 &lt;code&gt;NullPointerException: IBinder.linkToDeath&lt;/code&gt; 崩潰，造成 HMA 永遠顯示「Not running」。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;修復&lt;/strong&gt;：必須確保系統維持在 &lt;code&gt;Permissive&lt;/code&gt;，讓 Binder IPC 正常掛載。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 16px;&quot;&gt;
      &lt;strong&gt;WhatsApp 雙重偵測防禦&lt;/strong&gt;
      &lt;ul style=&quot;padding-left: 20px; margin-top: 6px;&quot;&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;第一層（Play Integrity）&lt;/strong&gt;：未通過 &lt;code&gt;MEETS_DEVICE_INTEGRITY&lt;/code&gt; 時，WhatsApp 會在驗證碼階段阻擋並提示「需要官方應用」。&lt;/li&gt;
        &lt;li style=&quot;margin-bottom: 4px;&quot;&gt;&lt;strong&gt;第二層（套件清單讀取）&lt;/strong&gt;：若 WhatsApp 透過系統 API 掃描到 SukiSU、Magisk、LSPosed 或各類模組 APK，會在註冊後直接觸發臨時封禁。&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ol&gt;

  &lt;hr style=&quot;border: 0; border-top: 1px solid #e5e7eb; margin: 24px 0;&quot; /&gt;

  &lt;h2 style=&quot;font-size: 20px; font-weight: 600; color: #2563eb; margin-top: 28px; margin-bottom: 12px;&quot;&gt;📦 必備套件與模組清單&lt;/h2&gt;
  
  &lt;p style=&quot;font-weight: 600; color: #374151; margin-bottom: 8px;&quot;&gt;1. Root 與框架模組 (於 SukiSU Manager 刷入)：&lt;/p&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 16px; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;strong&gt;Zygisk Next&lt;/strong&gt;：提供穩定的 Android 14 Zygote 注入環境。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;strong&gt;Play Integrity Fix (PIF)&lt;/strong&gt;：修復 Basic 與 Device Integrity。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;strong&gt;LSPosed (v1.9.3-7244 相容版)&lt;/strong&gt;：支援 Android 14 Binder 架構的 Zygisk 模組包。&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p style=&quot;font-weight: 600; color: #374151; margin-bottom: 8px;&quot;&gt;2. 應用程式 (APK 安裝)：&lt;/p&gt;
  &lt;ul style=&quot;padding-left: 20px; margin-bottom: 0; color: #374151;&quot;&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;strong&gt;Play Integrity API Checker&lt;/strong&gt;：檢測 Play 服務環境指標。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;strong&gt;Hide My Applist (HMA)&lt;/strong&gt;：套件清單攔截模組。&lt;/li&gt;
    &lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;strong&gt;WhatsApp 官方安裝包&lt;/strong&gt;：直接自 Google Play Store 下載安裝。&lt;/li&gt;
  &lt;/ul&gt;

&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/4715648772687467705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/562640272081991521/posts/default/4715648772687467705'/><link rel='alternate' type='text/html' href='http://silywuns.blogspot.com/2026/09/sony-xperia-xz1-g8342-poplardsds_0644063992.html' title='Sony Xperia XZ1  (G8342 / poplar_dsds) 系列一Whatsapp驗證的事前準備'/><author><name>西里吾斯(Silywuns)</name><uri>http://www.blogger.com/profile/13251669058887194726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6VNV-47xx5givg2_HsuNiyYmx8XFp-PvKWp2BlZb1KrJv-CT4VUJMBSC8I3tG8UWgEiojN28NXIyMKwuO5y_Tihf_LtX9n7Ktb157yoHojEJL_vJHLgz9fx1JQBGm3A/s1600/*'/></author></entry></feed>