diff --git a/404.html b/404.html index e5313f16..c7cf5698 100644 --- a/404.html +++ b/404.html @@ -15,13 +15,13 @@ - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/assets/js/935f2afb.df376853.js b/assets/js/935f2afb.3ea0c8ae.js similarity index 99% rename from assets/js/935f2afb.df376853.js rename to assets/js/935f2afb.3ea0c8ae.js index d2966583..ea4aff31 100644 --- a/assets/js/935f2afb.df376853.js +++ b/assets/js/935f2afb.3ea0c8ae.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmanual=self.webpackChunkmanual||[]).push([[8581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Installation","href":"/docs/installation","docId":"installation"},{"type":"link","label":"How to use this app","href":"/docs/how_to_use_this_app","docId":"how_to_use_this_app"},{"type":"category","label":"Profile format","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs/profile-format/overview","docId":"profile-format/overview"},{"type":"link","label":"// Comment","href":"/docs/profile-format/comment","docId":"profile-format/comment"},{"type":"link","label":"#!MANAGED-CONFIG","href":"/docs/profile-format/managed_config","docId":"profile-format/managed_config"},{"type":"category","label":"[General]","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"dns-server","href":"/docs/profile-format/general/dns_server","docId":"profile-format/general/dns_server"},{"type":"link","label":"doh-server","href":"/docs/profile-format/general/doh_server","docId":"profile-format/general/doh_server"},{"type":"link","label":"skip-proxy","href":"/docs/profile-format/general/skip_proxy","docId":"profile-format/general/skip_proxy"},{"type":"link","label":"proxy-test-url","href":"/docs/profile-format/general/proxy_test_url","docId":"profile-format/general/proxy_test_url"},{"type":"link","label":"internet-test-url","href":"/docs/profile-format/general/internet_test_url","docId":"profile-format/general/internet_test_url"},{"type":"link","label":"always-real-ip","href":"/docs/profile-format/general/always_real_ip","docId":"profile-format/general/always_real_ip"},{"type":"link","label":"http-listen","href":"/docs/profile-format/general/http_listen","docId":"profile-format/general/http_listen"},{"type":"link","label":"socks5-listen","href":"/docs/profile-format/general/socks5_listen","docId":"profile-format/general/socks5_listen"},{"type":"link","label":"udp-policy-not-supported-behaviour","href":"/docs/profile-format/general/udp_policy_not_supported_behaviour","docId":"profile-format/general/udp_policy_not_supported_behaviour"},{"type":"link","label":"test-timeout","href":"/docs/profile-format/general/test_timeout","docId":"profile-format/general/test_timeout"}]},{"type":"category","label":"[Host]","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Exact Mapping","href":"/docs/profile-format/host/exact","docId":"profile-format/host/exact"},{"type":"link","label":"Wildcard mapping","href":"/docs/profile-format/host/wildcard","docId":"profile-format/host/wildcard"},{"type":"link","label":"Domain alias","href":"/docs/profile-format/host/alias","docId":"profile-format/host/alias"},{"type":"link","label":"Assign dns server for specified domain","href":"/docs/profile-format/host/server","docId":"profile-format/host/server"}],"href":"/docs/profile-format/host/"},{"type":"category","label":"[Proxy]","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Built-in proxy","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Direct","href":"/docs/profile-format/proxy/built-in-proxy/direct","docId":"profile-format/proxy/built-in-proxy/direct"},{"type":"link","label":"Reject","href":"/docs/profile-format/proxy/built-in-proxy/reject","docId":"profile-format/proxy/built-in-proxy/reject"}]},{"type":"category","label":"External proxy","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"HTTP/HTTPS","href":"/docs/profile-format/proxy/external-proxy/http","docId":"profile-format/proxy/external-proxy/http"},{"type":"link","label":"SOCKS5/SOCKS5-TLS","href":"/docs/profile-format/proxy/external-proxy/socks5","docId":"profile-format/proxy/external-proxy/socks5"},{"type":"link","label":"Shadowsocks","href":"/docs/profile-format/proxy/external-proxy/shadowsocks","docId":"profile-format/proxy/external-proxy/shadowsocks"},{"type":"link","label":"VMESS","href":"/docs/profile-format/proxy/external-proxy/vmess","docId":"profile-format/proxy/external-proxy/vmess"},{"type":"link","label":"Trojan","href":"/docs/profile-format/proxy/external-proxy/trojan","docId":"profile-format/proxy/external-proxy/trojan"},{"type":"link","label":"Wireguard","href":"/docs/profile-format/proxy/external-proxy/wireguard","docId":"profile-format/proxy/external-proxy/wireguard"}]}],"href":"/docs/profile-format/proxy/"},{"type":"category","label":"[Proxy Group]","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Manually select","href":"/docs/profile-format/proxygroup/select","docId":"profile-format/proxygroup/select"},{"type":"link","label":"Auto select","href":"/docs/profile-format/proxygroup/auto","docId":"profile-format/proxygroup/auto"},{"type":"link","label":"Fallback","href":"/docs/profile-format/proxygroup/fallback","docId":"profile-format/proxygroup/fallback"},{"type":"link","label":"Load balance","href":"/docs/profile-format/proxygroup/load-balance","docId":"profile-format/proxygroup/load-balance"}],"href":"/docs/profile-format/proxygroup/"},{"type":"category","label":"[Rule]","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Domain","href":"/docs/profile-format/rule/domain","docId":"profile-format/rule/domain"},{"type":"link","label":"IP","href":"/docs/profile-format/rule/ip","docId":"profile-format/rule/ip"},{"type":"link","label":"Process","href":"/docs/profile-format/rule/process","docId":"profile-format/rule/process"},{"type":"link","label":"Rule Set","href":"/docs/profile-format/rule/ruleset","docId":"profile-format/rule/ruleset"},{"type":"link","label":"Domain Set","href":"/docs/profile-format/rule/domainset","docId":"profile-format/rule/domainset"},{"type":"link","label":"Subnet","href":"/docs/profile-format/rule/subnet","docId":"profile-format/rule/subnet"},{"type":"link","label":"Misc","href":"/docs/profile-format/rule/misc","docId":"profile-format/rule/misc"},{"type":"link","label":"Final","href":"/docs/profile-format/rule/final","docId":"profile-format/rule/final"}],"href":"/docs/profile-format/rule/"},{"type":"category","label":"[Panel]","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Static panel","href":"/docs/profile-format/panel/static","docId":"profile-format/panel/static"}]}]},{"type":"category","label":"Profile Example","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Global Proxy","href":"/docs/profile-example/global","docId":"profile-example/global"},{"type":"link","label":"Local Server","href":"/docs/profile-example/local_server","docId":"profile-example/local_server"},{"type":"link","label":"Firewall bypassing","href":"/docs/profile-example/gfw","docId":"profile-example/gfw"},{"type":"link","label":"ADBlock","href":"/docs/profile-example/adblock","docId":"profile-example/adblock"}]},{"type":"link","label":"ChangeLog","href":"/docs/changelog","docId":"changelog"},{"type":"link","label":"FAQ","href":"/docs/faq","docId":"faq"},{"type":"link","label":"Deeplink","href":"/docs/deeplink","docId":"deeplink"},{"type":"link","label":"Bypass config","href":"/docs/bypass","docId":"bypass"},{"type":"link","label":"Location Permission","href":"/docs/location_permision","docId":"location_permision"},{"type":"category","label":"Agreement","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Privacy Policy","href":"/docs/agreement/privacy_policy","docId":"agreement/privacy_policy"},{"type":"link","label":"Terms & Conditions","href":"/docs/agreement/terms_and_conditions","docId":"agreement/terms_and_conditions"}]}]},"docs":{"agreement/privacy_policy":{"id":"agreement/privacy_policy","title":"Privacy Policy","description":"Last updated: December 06, 2023","sidebar":"tutorialSidebar"},"agreement/terms_and_conditions":{"id":"agreement/terms_and_conditions","title":"Terms & Conditions","description":"By downloading or using the app, these terms will automatically apply to you \u2013 you should make sure therefore that you read them carefully before using the app. You\u2019re not allowed to copy or modify the app, any part of the app, or our trademarks in any way. You\u2019re not allowed to attempt to extract the source code of the app, and you also shouldn\u2019t try to translate the app into other languages or make derivative versions. The app itself, and all the trademarks, copyright, database rights, and other intellectual property rights related to it, still belong to Surfboard.","sidebar":"tutorialSidebar"},"bypass":{"id":"bypass","title":"Bypass config","description":"Export/Import format","sidebar":"tutorialSidebar"},"changelog":{"id":"changelog","title":"ChangeLog","description":"mobile-2.24.6","sidebar":"tutorialSidebar"},"deeplink":{"id":"deeplink","title":"Deeplink","description":"Import profile from url","sidebar":"tutorialSidebar"},"faq":{"id":"faq","title":"FAQ","description":"Update profile automatically?","sidebar":"tutorialSidebar"},"how_to_use_this_app":{"id":"how_to_use_this_app","title":"How to use this app","description":"Get profile file","sidebar":"tutorialSidebar"},"installation":{"id":"installation","title":"Installation","description":"You can get the Surfboard application from these sources:","sidebar":"tutorialSidebar"},"location_permision":{"id":"location_permision","title":"Location Permission","description":"Our application requests background location permission(BACKGROUND_LOCATION) to support specific advanced network rule functionalities, as detailed below:","sidebar":"tutorialSidebar"},"profile-example/adblock":{"id":"profile-example/adblock","title":"ADBlock","description":"","sidebar":"tutorialSidebar"},"profile-example/gfw":{"id":"profile-example/gfw","title":"Firewall bypassing","description":"Due to the complexity of the situation, the following examples are not guaranteed to solve all problems and are for reference only","sidebar":"tutorialSidebar"},"profile-example/global":{"id":"profile-example/global","title":"Global Proxy","description":"All traffic on device will be redirected to specified proxy","sidebar":"tutorialSidebar"},"profile-example/local_server":{"id":"profile-example/local_server","title":"Local Server","description":"Bind domain to a local server ip without configuring DNS resolution","sidebar":"tutorialSidebar"},"profile-format/comment":{"id":"profile-format/comment","title":"// Comment","description":"Currently only following comment format is supported:","sidebar":"tutorialSidebar"},"profile-format/general/always_real_ip":{"id":"profile-format/general/always_real_ip","title":"always-real-ip","description":"In some scenarios, domain DNS query will response with a fake ip which match 198.18.0.0/16. Generally it will not cause any issues.","sidebar":"tutorialSidebar"},"profile-format/general/dns_server":{"id":"profile-format/general/dns_server","title":"dns-server","description":"Specify dns server used by application","sidebar":"tutorialSidebar"},"profile-format/general/doh_server":{"id":"profile-format/general/doh_server","title":"doh-server","description":"Specify DoH(DNS over HTTPS) server used by application","sidebar":"tutorialSidebar"},"profile-format/general/http_listen":{"id":"profile-format/general/http_listen","title":"http-listen","description":"Establish a http proxy server on your device and provide proxy service in specified ip","sidebar":"tutorialSidebar"},"profile-format/general/internet_test_url":{"id":"profile-format/general/internet_test_url","title":"internet-test-url","description":"Test url used by DIRECT proxy","sidebar":"tutorialSidebar"},"profile-format/general/proxy_test_url":{"id":"profile-format/general/proxy_test_url","title":"proxy-test-url","description":"Test url used by url-test and manually node speed test.","sidebar":"tutorialSidebar"},"profile-format/general/skip_proxy":{"id":"profile-format/general/skip_proxy","title":"skip-proxy","description":"Specify route rule and domain rule, matching traffic will not be redirected or rejected.","sidebar":"tutorialSidebar"},"profile-format/general/socks5_listen":{"id":"profile-format/general/socks5_listen","title":"socks5-listen","description":"Establish a socks5 proxy server on your device and provide proxy service in specified ip","sidebar":"tutorialSidebar"},"profile-format/general/test_timeout":{"id":"profile-format/general/test_timeout","title":"test-timeout","description":"Timeout used for all connectivity test","sidebar":"tutorialSidebar"},"profile-format/general/udp_policy_not_supported_behaviour":{"id":"profile-format/general/udp_policy_not_supported_behaviour","title":"udp-policy-not-supported-behaviour","description":"If proxy not support udp relay, use DIRECT or REJECT instead, default value is REJECT","sidebar":"tutorialSidebar"},"profile-format/host/alias":{"id":"profile-format/host/alias","title":"Domain alias","description":"Sample","sidebar":"tutorialSidebar"},"profile-format/host/exact":{"id":"profile-format/host/exact","title":"Exact Mapping","description":"Sample","sidebar":"tutorialSidebar"},"profile-format/host/index":{"id":"profile-format/host/index","title":"[Host]","description":"Host section mostly deal with DNS query/response, it is very useful if you want to test a local server with custom domain,","sidebar":"tutorialSidebar"},"profile-format/host/server":{"id":"profile-format/host/server","title":"Assign dns server for specified domain","description":"Sample","sidebar":"tutorialSidebar"},"profile-format/host/wildcard":{"id":"profile-format/host/wildcard","title":"Wildcard mapping","description":"Sample","sidebar":"tutorialSidebar"},"profile-format/managed_config":{"id":"profile-format/managed_config","title":"#!MANAGED-CONFIG","description":"!MANAGED-CONFIG`","sidebar":"tutorialSidebar"},"profile-format/overview":{"id":"profile-format/overview","title":"Overview","description":"Surfboard follow Surge\'s profile format","sidebar":"tutorialSidebar"},"profile-format/panel/static":{"id":"profile-format/panel/static","title":"Static panel","description":"Display panel info as profile menu entries, multiple panel can be put into a panel section, panel content will be refreshed as profile refreshed.","sidebar":"tutorialSidebar"},"profile-format/proxy/built-in-proxy/direct":{"id":"profile-format/proxy/built-in-proxy/direct","title":"Direct","description":"Traffic match Direct proxy will be sent directly, without any redirection or modification.","sidebar":"tutorialSidebar"},"profile-format/proxy/built-in-proxy/reject":{"id":"profile-format/proxy/built-in-proxy/reject","title":"Reject","description":"Traffic match Reject proxy will not be sent:","sidebar":"tutorialSidebar"},"profile-format/proxy/external-proxy/http":{"id":"profile-format/proxy/external-proxy/http","title":"HTTP/HTTPS","description":"Protocol standard","sidebar":"tutorialSidebar"},"profile-format/proxy/external-proxy/shadowsocks":{"id":"profile-format/proxy/external-proxy/shadowsocks","title":"Shadowsocks","description":"Protocol standard","sidebar":"tutorialSidebar"},"profile-format/proxy/external-proxy/socks5":{"id":"profile-format/proxy/external-proxy/socks5","title":"SOCKS5/SOCKS5-TLS","description":"Protocol standard","sidebar":"tutorialSidebar"},"profile-format/proxy/external-proxy/trojan":{"id":"profile-format/proxy/external-proxy/trojan","title":"Trojan","description":"Protocol standard","sidebar":"tutorialSidebar"},"profile-format/proxy/external-proxy/vmess":{"id":"profile-format/proxy/external-proxy/vmess","title":"VMESS","description":"Protocol standard","sidebar":"tutorialSidebar"},"profile-format/proxy/external-proxy/wireguard":{"id":"profile-format/proxy/external-proxy/wireguard","title":"Wireguard","description":"Protocol standard","sidebar":"tutorialSidebar"},"profile-format/proxy/index":{"id":"profile-format/proxy/index","title":"[Proxy]","description":"Proxy is a proxy service definition which can be used as network traffic\'s destination.","sidebar":"tutorialSidebar"},"profile-format/proxygroup/auto":{"id":"profile-format/proxygroup/auto","title":"Auto select","description":"A group of proxies with a test url in it.","sidebar":"tutorialSidebar"},"profile-format/proxygroup/fallback":{"id":"profile-format/proxygroup/fallback","title":"Fallback","description":"A group of proxies with a test url in it, just like Auto select group.","sidebar":"tutorialSidebar"},"profile-format/proxygroup/index":{"id":"profile-format/proxygroup/index","title":"[Proxy Group]","description":"Proxy Group is a group of proxies, with a selection to a proxy inside.","sidebar":"tutorialSidebar"},"profile-format/proxygroup/load-balance":{"id":"profile-format/proxygroup/load-balance","title":"Load balance","description":"A group of proxies, selection will be randomly chosen.","sidebar":"tutorialSidebar"},"profile-format/proxygroup/select":{"id":"profile-format/proxygroup/select","title":"Manually select","description":"A group of proxies, user can change selected proxy manually, only when VPN is started.","sidebar":"tutorialSidebar"},"profile-format/rule/domain":{"id":"profile-format/rule/domain","title":"Domain","description":"Sample","sidebar":"tutorialSidebar"},"profile-format/rule/domainset":{"id":"profile-format/rule/domainset","title":"Domain Set","description":"Domain Set is a remote url configuration, whose content is a collection of Domain rules, but without target definition in it.","sidebar":"tutorialSidebar"},"profile-format/rule/final":{"id":"profile-format/rule/final","title":"Final","description":"Traffic doesn\'t match any other rules will match final rule if defined.","sidebar":"tutorialSidebar"},"profile-format/rule/index":{"id":"profile-format/rule/index","title":"[Rule]","description":"Rule is a collection of rules which will apply on network traffic.","sidebar":"tutorialSidebar"},"profile-format/rule/ip":{"id":"profile-format/rule/ip","title":"IP","description":"CIDR","sidebar":"tutorialSidebar"},"profile-format/rule/misc":{"id":"profile-format/rule/misc","title":"Misc","description":"Sample","sidebar":"tutorialSidebar"},"profile-format/rule/process":{"id":"profile-format/rule/process","title":"Process","description":"Sample","sidebar":"tutorialSidebar"},"profile-format/rule/ruleset":{"id":"profile-format/rule/ruleset","title":"Rule Set","description":"Rule Set is a remote url configuration, whose content is a collection of Rule, but without target definition in it.","sidebar":"tutorialSidebar"},"profile-format/rule/subnet":{"id":"profile-format/rule/subnet","title":"Subnet","description":"Sample","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmanual=self.webpackChunkmanual||[]).push([[8581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Installation","href":"/docs/installation","docId":"installation"},{"type":"link","label":"How to use this app","href":"/docs/how_to_use_this_app","docId":"how_to_use_this_app"},{"type":"category","label":"Profile format","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs/profile-format/overview","docId":"profile-format/overview"},{"type":"link","label":"// Comment","href":"/docs/profile-format/comment","docId":"profile-format/comment"},{"type":"link","label":"#!MANAGED-CONFIG","href":"/docs/profile-format/managed_config","docId":"profile-format/managed_config"},{"type":"category","label":"[General]","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"dns-server","href":"/docs/profile-format/general/dns_server","docId":"profile-format/general/dns_server"},{"type":"link","label":"doh-server","href":"/docs/profile-format/general/doh_server","docId":"profile-format/general/doh_server"},{"type":"link","label":"skip-proxy","href":"/docs/profile-format/general/skip_proxy","docId":"profile-format/general/skip_proxy"},{"type":"link","label":"proxy-test-url","href":"/docs/profile-format/general/proxy_test_url","docId":"profile-format/general/proxy_test_url"},{"type":"link","label":"internet-test-url","href":"/docs/profile-format/general/internet_test_url","docId":"profile-format/general/internet_test_url"},{"type":"link","label":"always-real-ip","href":"/docs/profile-format/general/always_real_ip","docId":"profile-format/general/always_real_ip"},{"type":"link","label":"http-listen","href":"/docs/profile-format/general/http_listen","docId":"profile-format/general/http_listen"},{"type":"link","label":"socks5-listen","href":"/docs/profile-format/general/socks5_listen","docId":"profile-format/general/socks5_listen"},{"type":"link","label":"udp-policy-not-supported-behaviour","href":"/docs/profile-format/general/udp_policy_not_supported_behaviour","docId":"profile-format/general/udp_policy_not_supported_behaviour"},{"type":"link","label":"test-timeout","href":"/docs/profile-format/general/test_timeout","docId":"profile-format/general/test_timeout"}]},{"type":"category","label":"[Host]","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Exact Mapping","href":"/docs/profile-format/host/exact","docId":"profile-format/host/exact"},{"type":"link","label":"Wildcard mapping","href":"/docs/profile-format/host/wildcard","docId":"profile-format/host/wildcard"},{"type":"link","label":"Domain alias","href":"/docs/profile-format/host/alias","docId":"profile-format/host/alias"},{"type":"link","label":"Assign dns server for specified domain","href":"/docs/profile-format/host/server","docId":"profile-format/host/server"}],"href":"/docs/profile-format/host/"},{"type":"category","label":"[Proxy]","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Built-in proxy","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Direct","href":"/docs/profile-format/proxy/built-in-proxy/direct","docId":"profile-format/proxy/built-in-proxy/direct"},{"type":"link","label":"Reject","href":"/docs/profile-format/proxy/built-in-proxy/reject","docId":"profile-format/proxy/built-in-proxy/reject"}]},{"type":"category","label":"External proxy","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"HTTP/HTTPS","href":"/docs/profile-format/proxy/external-proxy/http","docId":"profile-format/proxy/external-proxy/http"},{"type":"link","label":"SOCKS5/SOCKS5-TLS","href":"/docs/profile-format/proxy/external-proxy/socks5","docId":"profile-format/proxy/external-proxy/socks5"},{"type":"link","label":"Shadowsocks","href":"/docs/profile-format/proxy/external-proxy/shadowsocks","docId":"profile-format/proxy/external-proxy/shadowsocks"},{"type":"link","label":"VMESS","href":"/docs/profile-format/proxy/external-proxy/vmess","docId":"profile-format/proxy/external-proxy/vmess"},{"type":"link","label":"Trojan","href":"/docs/profile-format/proxy/external-proxy/trojan","docId":"profile-format/proxy/external-proxy/trojan"},{"type":"link","label":"Wireguard","href":"/docs/profile-format/proxy/external-proxy/wireguard","docId":"profile-format/proxy/external-proxy/wireguard"}]}],"href":"/docs/profile-format/proxy/"},{"type":"category","label":"[Proxy Group]","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Manually select","href":"/docs/profile-format/proxygroup/select","docId":"profile-format/proxygroup/select"},{"type":"link","label":"Auto select","href":"/docs/profile-format/proxygroup/auto","docId":"profile-format/proxygroup/auto"},{"type":"link","label":"Fallback","href":"/docs/profile-format/proxygroup/fallback","docId":"profile-format/proxygroup/fallback"},{"type":"link","label":"Load balance","href":"/docs/profile-format/proxygroup/load-balance","docId":"profile-format/proxygroup/load-balance"}],"href":"/docs/profile-format/proxygroup/"},{"type":"category","label":"[Rule]","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Domain","href":"/docs/profile-format/rule/domain","docId":"profile-format/rule/domain"},{"type":"link","label":"IP","href":"/docs/profile-format/rule/ip","docId":"profile-format/rule/ip"},{"type":"link","label":"Process","href":"/docs/profile-format/rule/process","docId":"profile-format/rule/process"},{"type":"link","label":"Rule Set","href":"/docs/profile-format/rule/ruleset","docId":"profile-format/rule/ruleset"},{"type":"link","label":"Domain Set","href":"/docs/profile-format/rule/domainset","docId":"profile-format/rule/domainset"},{"type":"link","label":"Subnet","href":"/docs/profile-format/rule/subnet","docId":"profile-format/rule/subnet"},{"type":"link","label":"Misc","href":"/docs/profile-format/rule/misc","docId":"profile-format/rule/misc"},{"type":"link","label":"Final","href":"/docs/profile-format/rule/final","docId":"profile-format/rule/final"}],"href":"/docs/profile-format/rule/"},{"type":"category","label":"[Panel]","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Static panel","href":"/docs/profile-format/panel/static","docId":"profile-format/panel/static"}]}]},{"type":"category","label":"Profile Example","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Global Proxy","href":"/docs/profile-example/global","docId":"profile-example/global"},{"type":"link","label":"Local Server","href":"/docs/profile-example/local_server","docId":"profile-example/local_server"},{"type":"link","label":"Firewall bypassing","href":"/docs/profile-example/gfw","docId":"profile-example/gfw"},{"type":"link","label":"ADBlock","href":"/docs/profile-example/adblock","docId":"profile-example/adblock"}]},{"type":"link","label":"ChangeLog","href":"/docs/changelog","docId":"changelog"},{"type":"link","label":"FAQ","href":"/docs/faq","docId":"faq"},{"type":"link","label":"Deeplink","href":"/docs/deeplink","docId":"deeplink"},{"type":"link","label":"Bypass config","href":"/docs/bypass","docId":"bypass"},{"type":"link","label":"Location Permission","href":"/docs/location_permision","docId":"location_permision"},{"type":"category","label":"Agreement","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Privacy Policy","href":"/docs/agreement/privacy_policy","docId":"agreement/privacy_policy"},{"type":"link","label":"Terms & Conditions","href":"/docs/agreement/terms_and_conditions","docId":"agreement/terms_and_conditions"}]}]},"docs":{"agreement/privacy_policy":{"id":"agreement/privacy_policy","title":"Privacy Policy","description":"Last updated: December 06, 2023","sidebar":"tutorialSidebar"},"agreement/terms_and_conditions":{"id":"agreement/terms_and_conditions","title":"Terms & Conditions","description":"By downloading or using the app, these terms will automatically apply to you \u2013 you should make sure therefore that you read them carefully before using the app. You\u2019re not allowed to copy or modify the app, any part of the app, or our trademarks in any way. You\u2019re not allowed to attempt to extract the source code of the app, and you also shouldn\u2019t try to translate the app into other languages or make derivative versions. The app itself, and all the trademarks, copyright, database rights, and other intellectual property rights related to it, still belong to Surfboard.","sidebar":"tutorialSidebar"},"bypass":{"id":"bypass","title":"Bypass config","description":"Export/Import format","sidebar":"tutorialSidebar"},"changelog":{"id":"changelog","title":"ChangeLog","description":"mobile-2.24.7","sidebar":"tutorialSidebar"},"deeplink":{"id":"deeplink","title":"Deeplink","description":"Import profile from url","sidebar":"tutorialSidebar"},"faq":{"id":"faq","title":"FAQ","description":"Update profile automatically?","sidebar":"tutorialSidebar"},"how_to_use_this_app":{"id":"how_to_use_this_app","title":"How to use this app","description":"Get profile file","sidebar":"tutorialSidebar"},"installation":{"id":"installation","title":"Installation","description":"You can get the Surfboard application from these sources:","sidebar":"tutorialSidebar"},"location_permision":{"id":"location_permision","title":"Location Permission","description":"Our application requests background location permission(BACKGROUND_LOCATION) to support specific advanced network rule functionalities, as detailed below:","sidebar":"tutorialSidebar"},"profile-example/adblock":{"id":"profile-example/adblock","title":"ADBlock","description":"","sidebar":"tutorialSidebar"},"profile-example/gfw":{"id":"profile-example/gfw","title":"Firewall bypassing","description":"Due to the complexity of the situation, the following examples are not guaranteed to solve all problems and are for reference only","sidebar":"tutorialSidebar"},"profile-example/global":{"id":"profile-example/global","title":"Global Proxy","description":"All traffic on device will be redirected to specified proxy","sidebar":"tutorialSidebar"},"profile-example/local_server":{"id":"profile-example/local_server","title":"Local Server","description":"Bind domain to a local server ip without configuring DNS resolution","sidebar":"tutorialSidebar"},"profile-format/comment":{"id":"profile-format/comment","title":"// Comment","description":"Currently only following comment format is supported:","sidebar":"tutorialSidebar"},"profile-format/general/always_real_ip":{"id":"profile-format/general/always_real_ip","title":"always-real-ip","description":"In some scenarios, domain DNS query will response with a fake ip which match 198.18.0.0/16. Generally it will not cause any issues.","sidebar":"tutorialSidebar"},"profile-format/general/dns_server":{"id":"profile-format/general/dns_server","title":"dns-server","description":"Specify dns server used by application","sidebar":"tutorialSidebar"},"profile-format/general/doh_server":{"id":"profile-format/general/doh_server","title":"doh-server","description":"Specify DoH(DNS over HTTPS) server used by application","sidebar":"tutorialSidebar"},"profile-format/general/http_listen":{"id":"profile-format/general/http_listen","title":"http-listen","description":"Establish a http proxy server on your device and provide proxy service in specified ip","sidebar":"tutorialSidebar"},"profile-format/general/internet_test_url":{"id":"profile-format/general/internet_test_url","title":"internet-test-url","description":"Test url used by DIRECT proxy","sidebar":"tutorialSidebar"},"profile-format/general/proxy_test_url":{"id":"profile-format/general/proxy_test_url","title":"proxy-test-url","description":"Test url used by url-test and manually node speed test.","sidebar":"tutorialSidebar"},"profile-format/general/skip_proxy":{"id":"profile-format/general/skip_proxy","title":"skip-proxy","description":"Specify route rule and domain rule, matching traffic will not be redirected or rejected.","sidebar":"tutorialSidebar"},"profile-format/general/socks5_listen":{"id":"profile-format/general/socks5_listen","title":"socks5-listen","description":"Establish a socks5 proxy server on your device and provide proxy service in specified ip","sidebar":"tutorialSidebar"},"profile-format/general/test_timeout":{"id":"profile-format/general/test_timeout","title":"test-timeout","description":"Timeout used for all connectivity test","sidebar":"tutorialSidebar"},"profile-format/general/udp_policy_not_supported_behaviour":{"id":"profile-format/general/udp_policy_not_supported_behaviour","title":"udp-policy-not-supported-behaviour","description":"If proxy not support udp relay, use DIRECT or REJECT instead, default value is REJECT","sidebar":"tutorialSidebar"},"profile-format/host/alias":{"id":"profile-format/host/alias","title":"Domain alias","description":"Sample","sidebar":"tutorialSidebar"},"profile-format/host/exact":{"id":"profile-format/host/exact","title":"Exact Mapping","description":"Sample","sidebar":"tutorialSidebar"},"profile-format/host/index":{"id":"profile-format/host/index","title":"[Host]","description":"Host section mostly deal with DNS query/response, it is very useful if you want to test a local server with custom domain,","sidebar":"tutorialSidebar"},"profile-format/host/server":{"id":"profile-format/host/server","title":"Assign dns server for specified domain","description":"Sample","sidebar":"tutorialSidebar"},"profile-format/host/wildcard":{"id":"profile-format/host/wildcard","title":"Wildcard mapping","description":"Sample","sidebar":"tutorialSidebar"},"profile-format/managed_config":{"id":"profile-format/managed_config","title":"#!MANAGED-CONFIG","description":"!MANAGED-CONFIG`","sidebar":"tutorialSidebar"},"profile-format/overview":{"id":"profile-format/overview","title":"Overview","description":"Surfboard follow Surge\'s profile format","sidebar":"tutorialSidebar"},"profile-format/panel/static":{"id":"profile-format/panel/static","title":"Static panel","description":"Display panel info as profile menu entries, multiple panel can be put into a panel section, panel content will be refreshed as profile refreshed.","sidebar":"tutorialSidebar"},"profile-format/proxy/built-in-proxy/direct":{"id":"profile-format/proxy/built-in-proxy/direct","title":"Direct","description":"Traffic match Direct proxy will be sent directly, without any redirection or modification.","sidebar":"tutorialSidebar"},"profile-format/proxy/built-in-proxy/reject":{"id":"profile-format/proxy/built-in-proxy/reject","title":"Reject","description":"Traffic match Reject proxy will not be sent:","sidebar":"tutorialSidebar"},"profile-format/proxy/external-proxy/http":{"id":"profile-format/proxy/external-proxy/http","title":"HTTP/HTTPS","description":"Protocol standard","sidebar":"tutorialSidebar"},"profile-format/proxy/external-proxy/shadowsocks":{"id":"profile-format/proxy/external-proxy/shadowsocks","title":"Shadowsocks","description":"Protocol standard","sidebar":"tutorialSidebar"},"profile-format/proxy/external-proxy/socks5":{"id":"profile-format/proxy/external-proxy/socks5","title":"SOCKS5/SOCKS5-TLS","description":"Protocol standard","sidebar":"tutorialSidebar"},"profile-format/proxy/external-proxy/trojan":{"id":"profile-format/proxy/external-proxy/trojan","title":"Trojan","description":"Protocol standard","sidebar":"tutorialSidebar"},"profile-format/proxy/external-proxy/vmess":{"id":"profile-format/proxy/external-proxy/vmess","title":"VMESS","description":"Protocol standard","sidebar":"tutorialSidebar"},"profile-format/proxy/external-proxy/wireguard":{"id":"profile-format/proxy/external-proxy/wireguard","title":"Wireguard","description":"Protocol standard","sidebar":"tutorialSidebar"},"profile-format/proxy/index":{"id":"profile-format/proxy/index","title":"[Proxy]","description":"Proxy is a proxy service definition which can be used as network traffic\'s destination.","sidebar":"tutorialSidebar"},"profile-format/proxygroup/auto":{"id":"profile-format/proxygroup/auto","title":"Auto select","description":"A group of proxies with a test url in it.","sidebar":"tutorialSidebar"},"profile-format/proxygroup/fallback":{"id":"profile-format/proxygroup/fallback","title":"Fallback","description":"A group of proxies with a test url in it, just like Auto select group.","sidebar":"tutorialSidebar"},"profile-format/proxygroup/index":{"id":"profile-format/proxygroup/index","title":"[Proxy Group]","description":"Proxy Group is a group of proxies, with a selection to a proxy inside.","sidebar":"tutorialSidebar"},"profile-format/proxygroup/load-balance":{"id":"profile-format/proxygroup/load-balance","title":"Load balance","description":"A group of proxies, selection will be randomly chosen.","sidebar":"tutorialSidebar"},"profile-format/proxygroup/select":{"id":"profile-format/proxygroup/select","title":"Manually select","description":"A group of proxies, user can change selected proxy manually, only when VPN is started.","sidebar":"tutorialSidebar"},"profile-format/rule/domain":{"id":"profile-format/rule/domain","title":"Domain","description":"Sample","sidebar":"tutorialSidebar"},"profile-format/rule/domainset":{"id":"profile-format/rule/domainset","title":"Domain Set","description":"Domain Set is a remote url configuration, whose content is a collection of Domain rules, but without target definition in it.","sidebar":"tutorialSidebar"},"profile-format/rule/final":{"id":"profile-format/rule/final","title":"Final","description":"Traffic doesn\'t match any other rules will match final rule if defined.","sidebar":"tutorialSidebar"},"profile-format/rule/index":{"id":"profile-format/rule/index","title":"[Rule]","description":"Rule is a collection of rules which will apply on network traffic.","sidebar":"tutorialSidebar"},"profile-format/rule/ip":{"id":"profile-format/rule/ip","title":"IP","description":"CIDR","sidebar":"tutorialSidebar"},"profile-format/rule/misc":{"id":"profile-format/rule/misc","title":"Misc","description":"Sample","sidebar":"tutorialSidebar"},"profile-format/rule/process":{"id":"profile-format/rule/process","title":"Process","description":"Sample","sidebar":"tutorialSidebar"},"profile-format/rule/ruleset":{"id":"profile-format/rule/ruleset","title":"Rule Set","description":"Rule Set is a remote url configuration, whose content is a collection of Rule, but without target definition in it.","sidebar":"tutorialSidebar"},"profile-format/rule/subnet":{"id":"profile-format/rule/subnet","title":"Subnet","description":"Sample","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/9beb87c2.1b2e93e1.js b/assets/js/9beb87c2.1b2e93e1.js deleted file mode 100644 index 11479d90..00000000 --- a/assets/js/9beb87c2.1b2e93e1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmanual=self.webpackChunkmanual||[]).push([[3539],{5680:(e,l,a)=>{a.d(l,{xA:()=>g,yg:()=>s});var i=a(6540);function t(e,l,a){return l in e?Object.defineProperty(e,l,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[l]=a,e}function n(e,l){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);l&&(i=i.filter((function(l){return Object.getOwnPropertyDescriptor(e,l).enumerable}))),a.push.apply(a,i)}return a}function r(e){for(var l=1;l=0||(t[a]=e[a]);return t}(e,l);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(t[a]=e[a])}return t}var p=i.createContext({}),o=function(e){var l=i.useContext(p),a=l;return e&&(a="function"==typeof e?e(l):r(r({},l),e)),a},g=function(e){var l=o(e.components);return i.createElement(p.Provider,{value:l},e.children)},d="mdxType",y={inlineCode:"code",wrapper:function(e){var l=e.children;return i.createElement(i.Fragment,{},l)}},m=i.forwardRef((function(e,l){var a=e.components,t=e.mdxType,n=e.originalType,p=e.parentName,g=u(e,["components","mdxType","originalType","parentName"]),d=o(a),m=t,s=d["".concat(p,".").concat(m)]||d[m]||y[m]||n;return a?i.createElement(s,r(r({ref:l},g),{},{components:a})):i.createElement(s,r({ref:l},g))}));function s(e,l){var a=arguments,t=l&&l.mdxType;if("string"==typeof e||t){var n=a.length,r=new Array(n);r[0]=m;var u={};for(var p in l)hasOwnProperty.call(l,p)&&(u[p]=l[p]);u.originalType=e,u[d]="string"==typeof e?e:t,r[1]=u;for(var o=2;o{a.r(l),a.d(l,{assets:()=>p,contentTitle:()=>r,default:()=>y,frontMatter:()=>n,metadata:()=>u,toc:()=>o});var i=a(8168),t=(a(6540),a(5680));const n={sidebar_position:5},r="ChangeLog",u={unversionedId:"changelog",id:"changelog",title:"ChangeLog",description:"mobile-2.24.6",source:"@site/docs/changelog.md",sourceDirName:".",slug:"/changelog",permalink:"/docs/changelog",draft:!1,editUrl:"https://github.com/getsurfboard/manual/edit/main/docs/changelog.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"ADBlock",permalink:"/docs/profile-example/adblock"},next:{title:"FAQ",permalink:"/docs/faq"}},p={},o=[{value:"mobile-2.24.6",id:"mobile-2246",level:3},{value:"mobile-2.24.5",id:"mobile-2245",level:3},{value:"tv-1.0.3",id:"tv-103",level:3},{value:"tv-1.0.2",id:"tv-102",level:3},{value:"tv-1.0.1",id:"tv-101",level:3},{value:"mobile-2.24.4",id:"mobile-2244",level:3},{value:"tv-1.0.0",id:"tv-100",level:3},{value:"2.24.3",id:"2243",level:3},{value:"2.24.2",id:"2242",level:3},{value:"2.24.1",id:"2241",level:3},{value:"2.24.0",id:"2240",level:3},{value:"2.23.4",id:"2234",level:3},{value:"2.23.3",id:"2233",level:3},{value:"2.23.2",id:"2232",level:3},{value:"2.23.1",id:"2231",level:3},{value:"2.23.0",id:"2230",level:3},{value:"2.22.9",id:"2229",level:3},{value:"2.22.8",id:"2228",level:3},{value:"2.22.7",id:"2227",level:3},{value:"2.22.6",id:"2226",level:3},{value:"2.22.5",id:"2225",level:3},{value:"2.22.4",id:"2224",level:3},{value:"2.22.3",id:"2223",level:3},{value:"2.22.2",id:"2222",level:3},{value:"2.22.1",id:"2221",level:3},{value:"2.22.0",id:"2220",level:3},{value:"2.21.5",id:"2215",level:3},{value:"2.21.4",id:"2214",level:3},{value:"2.21.3",id:"2213",level:3},{value:"2.21.2",id:"2212",level:3},{value:"2.21.1",id:"2211",level:3},{value:"2.21.0",id:"2210",level:3},{value:"2.20.10",id:"22010",level:3},{value:"2.20.9",id:"2209",level:3},{value:"2.20.8",id:"2208",level:3},{value:"2.20.7",id:"2207",level:3},{value:"2.20.6",id:"2206",level:3},{value:"2.20.5",id:"2205",level:3},{value:"2.20.4",id:"2204",level:3},{value:"2.20.3",id:"2203",level:3},{value:"2.20.2",id:"2202",level:3},{value:"2.20.1",id:"2201",level:3},{value:"2.20.0",id:"2200",level:3},{value:"2.19.4",id:"2194",level:3},{value:"2.19.3",id:"2193",level:3},{value:"2.19.2",id:"2192",level:3},{value:"2.19.1",id:"2191",level:3},{value:"2.19.0",id:"2190",level:3},{value:"2.18.8",id:"2188",level:3},{value:"2.18.7",id:"2187",level:3},{value:"2.18.6",id:"2186",level:3},{value:"2.18.5",id:"2185",level:3},{value:"2.18.4",id:"2184",level:3},{value:"2.18.3",id:"2183",level:3},{value:"2.18.2",id:"2182",level:3},{value:"2.18.1",id:"2181",level:3},{value:"2.18.0",id:"2180",level:3},{value:"2.17.6",id:"2176",level:3},{value:"2.17.5",id:"2175",level:3},{value:"2.17.4",id:"2174",level:3},{value:"2.17.3",id:"2173",level:3},{value:"2.17.2",id:"2172",level:3},{value:"2.17.1",id:"2171",level:3},{value:"2.17.0",id:"2170",level:3},{value:"2.16.5",id:"2165",level:3},{value:"2.16.4",id:"2164",level:3},{value:"2.16.3",id:"2163",level:3},{value:"2.16.2",id:"2162",level:3},{value:"2.16.1",id:"2161",level:3},{value:"2.16.0",id:"2160",level:3},{value:"2.15.3",id:"2153",level:3},{value:"2.15.2",id:"2152",level:3},{value:"2.15.1",id:"2151",level:3},{value:"2.15.0",id:"2150",level:3},{value:"2.14.0",id:"2140",level:3},{value:"2.13.4",id:"2134",level:3},{value:"2.13.3",id:"2133",level:3},{value:"2.13.2",id:"2132",level:3},{value:"2.13.1",id:"2131",level:3},{value:"2.13.0",id:"2130",level:3},{value:"2.12.6",id:"2126",level:3},{value:"2.12.5",id:"2125",level:3},{value:"2.12.4",id:"2124",level:3},{value:"2.12.3",id:"2123",level:3},{value:"2.12.2",id:"2122",level:3},{value:"2.12.1",id:"2121",level:3},{value:"2.12.0",id:"2120",level:3},{value:"2.11.4",id:"2114",level:3},{value:"2.11.3",id:"2113",level:3},{value:"2.11.2",id:"2112",level:3},{value:"2.11.1",id:"2111",level:3},{value:"2.11.0",id:"2110",level:3},{value:"2.10.2",id:"2102",level:3},{value:"2.10.1",id:"2101",level:3},{value:"2.10.0",id:"2100",level:3},{value:"2.9.12",id:"2912",level:3},{value:"2.9.11",id:"2911",level:3},{value:"2.9.10",id:"2910",level:3},{value:"2.9.9",id:"299",level:3},{value:"2.9.8",id:"298",level:3},{value:"2.9.7",id:"297",level:3},{value:"2.9.6",id:"296",level:3},{value:"2.9.5",id:"295",level:3},{value:"2.9.4",id:"294",level:3},{value:"2.9.3",id:"293",level:3},{value:"2.9.2",id:"292",level:3},{value:"2.9.1",id:"291",level:3},{value:"2.9.0",id:"290",level:3},{value:"2.8.9",id:"289",level:3},{value:"2.8.8",id:"288",level:3},{value:"2.8.7",id:"287",level:3},{value:"2.8.6",id:"286",level:3},{value:"2.8.5",id:"285",level:3},{value:"2.8.4",id:"284",level:3},{value:"2.8.3",id:"283",level:3},{value:"2.8.2",id:"282",level:3},{value:"2.8.1",id:"281",level:3},{value:"2.8.0",id:"280",level:3},{value:"2.7.9",id:"279",level:3},{value:"2.7.8",id:"278",level:3},{value:"2.7.7",id:"277",level:3},{value:"2.7.6",id:"276",level:3},{value:"2.7.5",id:"275",level:3},{value:"2.7.4",id:"274",level:3},{value:"2.7.3",id:"273",level:3},{value:"2.7.2",id:"272",level:3},{value:"2.7.1",id:"271",level:3},{value:"2.7.0",id:"270",level:3},{value:"2.6.9",id:"269",level:3},{value:"2.6.8",id:"268",level:3},{value:"2.6.7",id:"267",level:3},{value:"2.6.6",id:"266",level:3},{value:"2.6.5",id:"265",level:3},{value:"2.6.4",id:"264",level:3},{value:"2.6.3",id:"263",level:3},{value:"2.6.1",id:"261",level:3},{value:"2.6.0",id:"260",level:3},{value:"2.5.9",id:"259",level:3},{value:"2.5.8",id:"258",level:3},{value:"2.5.7",id:"257",level:3},{value:"2.5.6",id:"256",level:3},{value:"2.5.5",id:"255",level:3},{value:"2.5.4",id:"254",level:3},{value:"2.5.3",id:"253",level:3},{value:"2.5.2",id:"252",level:3},{value:"2.5.1",id:"251",level:3},{value:"2.5.0",id:"250",level:3},{value:"2.4.9",id:"249",level:3},{value:"2.4.8",id:"248",level:3},{value:"2.4.7",id:"247",level:3},{value:"2.4.6",id:"246",level:3},{value:"2.4.5",id:"245",level:3},{value:"2.4.4",id:"244",level:3},{value:"2.4.3",id:"243",level:3},{value:"2.4.2",id:"242",level:3},{value:"2.4.1",id:"241",level:3},{value:"2.4.0",id:"240",level:3},{value:"2.3.5",id:"235",level:3},{value:"2.3.4",id:"234",level:3},{value:"2.3.3",id:"233",level:3},{value:"2.3.2",id:"232",level:3},{value:"2.3.1",id:"231",level:3},{value:"2.3.0",id:"230",level:3},{value:"2.2.1",id:"221",level:3},{value:"2.2.0",id:"220",level:3},{value:"2.1.0",id:"210",level:3},{value:"2.0.2",id:"202",level:3},{value:"0.9.19",id:"0919",level:3},{value:"0.9.18",id:"0918",level:3},{value:"0.9.16",id:"0916",level:3},{value:"0.9.14",id:"0914",level:3},{value:"0.9.13",id:"0913",level:3}],g={toc:o},d="wrapper";function y(e){let{components:l,...a}=e;return(0,t.yg)(d,(0,i.A)({},g,a,{components:l,mdxType:"MDXLayout"}),(0,t.yg)("h1",{id:"changelog"},"ChangeLog"),(0,t.yg)("h3",{id:"mobile-2246"},"mobile-2.24.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix wireshark sshdump crash")),(0,t.yg)("h3",{id:"mobile-2245"},"mobile-2.24.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix Android 15 crash in some subpages"),(0,t.yg)("li",{parentName:"ul"},"Update geoip library file"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"tv-103"},"tv-1.0.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support profile fetch timeout config")),(0,t.yg)("h3",{id:"tv-102"},"tv-1.0.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix setting crash on Android 8.0"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"tv-101"},"tv-1.0.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add launcher entrance for non leanback devices"),(0,t.yg)("li",{parentName:"ul"},"Add public IP display support"),(0,t.yg)("li",{parentName:"ul"},"Fix delete last profile crash")),(0,t.yg)("h3",{id:"mobile-2244"},"mobile-2.24.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add location permission explanation to meet google play policy requirement"),(0,t.yg)("li",{parentName:"ul"},"Adapt to Android 15"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"tv-100"},"tv-1.0.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"First version")),(0,t.yg)("h3",{id:"2243"},"2.24.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Display proxy group name in log"),(0,t.yg)("li",{parentName:"ul"},"Support modify profile fetch timeout in setting"),(0,t.yg)("li",{parentName:"ul"},"Support temporarily disable bypass mode and remember config"),(0,t.yg)("li",{parentName:"ul"},"Bypass list sort mode config now will be remember"),(0,t.yg)("li",{parentName:"ul"},"Improve profile compatibility"),(0,t.yg)("li",{parentName:"ul"},"Reduce apk size"),(0,t.yg)("li",{parentName:"ul"},"Remove GMS qrcode scanner"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2242"},"2.24.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Display proxy group name in log"),(0,t.yg)("li",{parentName:"ul"},"Support modify profile fetch timeout in setting"),(0,t.yg)("li",{parentName:"ul"},"Support temporarily disable bypass mode and remember config"),(0,t.yg)("li",{parentName:"ul"},"Bypass list sort mode config now will be remember"),(0,t.yg)("li",{parentName:"ul"},"Improve profile compatibility"),(0,t.yg)("li",{parentName:"ul"},"Reduce apk size"),(0,t.yg)("li",{parentName:"ul"},"Remove GMS qrcode scanner"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2241"},"2.24.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix VPN start failed if include wireguard proxy"),(0,t.yg)("li",{parentName:"ul"},"Add compatible mode in bypass config list, fix list item click issue"),(0,t.yg)("li",{parentName:"ul"},"Add more profile content checking"),(0,t.yg)("li",{parentName:"ul"},"Replace some toast with snackbar"),(0,t.yg)("li",{parentName:"ul"},"Include hidden proxy group proxies in global mode by default"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2240"},"2.24.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix DoH not working issue"),(0,t.yg)("li",{parentName:"ul"},"Fix tablet not display profile content in landscape"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2234"},"2.23.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Make recursive ",(0,t.yg)("inlineCode",{parentName:"li"},"include-other-group")," not rely on defined sequence"),(0,t.yg)("li",{parentName:"ul"},"Fix dialog transition"),(0,t.yg)("li",{parentName:"ul"},"Fix LAN multicast sometime not working if ",(0,t.yg)("inlineCode",{parentName:"li"},"udp-policy-not-supported-behaviour")," set to ",(0,t.yg)("inlineCode",{parentName:"li"},"REJECT")),(0,t.yg)("li",{parentName:"ul"},"Fix external resource manually fetch failed cause crash")),(0,t.yg)("h3",{id:"2233"},"2.23.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add manually edit host ui"),(0,t.yg)("li",{parentName:"ul"},"Improve dns response printing"),(0,t.yg)("li",{parentName:"ul"},"Change accessibility mode back to manually ")),(0,t.yg)("h3",{id:"2232"},"2.23.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support ",(0,t.yg)("inlineCode",{parentName:"li"},"preshared-key")," param in wireguard"),(0,t.yg)("li",{parentName:"ul"},"Improve profile compatibility"),(0,t.yg)("li",{parentName:"ul"},"Improve accessibility compatibility")),(0,t.yg)("h3",{id:"2231"},"2.23.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve profile compatibility"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2230"},"2.23.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add ARMv8 crypto extension support to improve ss throughput performance"),(0,t.yg)("li",{parentName:"ul"},"Add udp label in proxy list to indicate udp relay support"),(0,t.yg)("li",{parentName:"ul"},"Support Android 12L+ activity embedding"),(0,t.yg)("li",{parentName:"ul"},"Update Japanese/Korean language translation"),(0,t.yg)("li",{parentName:"ul"},"Improve profile compatibility, make include-all-proxies only include proxies under ","[Proxy]"," section"),(0,t.yg)("li",{parentName:"ul"},"Improve profile import error prompt"),(0,t.yg)("li",{parentName:"ul"},"Fix simple-obfs slightly memory leak"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2229"},"2.22.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve accessibility compatibility"),(0,t.yg)("li",{parentName:"ul"},"Improve profile compatibility"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2228"},"2.22.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix public ip value issue"),(0,t.yg)("li",{parentName:"ul"},"Fix theme display issue")),(0,t.yg)("h3",{id:"2227"},"2.22.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Use DNS over HTTPS in profile fetcher to handle dns pollution issues"),(0,t.yg)("li",{parentName:"ul"},"Add masked from recent task option"),(0,t.yg)("li",{parentName:"ul"},"Add hide from recent task option"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2226"},"2.22.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add NAT detection tool"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2225"},"2.22.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support sort mode in bypass config"),(0,t.yg)("li",{parentName:"ul"},"Fix tile issue"),(0,t.yg)("li",{parentName:"ul"},"Add mtu option in settings"),(0,t.yg)("li",{parentName:"ul"},"Fix ssid/bssid issue when surfboard is in background"),(0,t.yg)("li",{parentName:"ul"},"Make ",(0,t.yg)("inlineCode",{parentName:"li"},"policy-regex-filter")," support partial match with ",(0,t.yg)("inlineCode",{parentName:"li"},"include-all-proxies")," and ",(0,t.yg)("inlineCode",{parentName:"li"},"include-other-group"))),(0,t.yg)("h3",{id:"2224"},"2.22.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix dns query issue on Android 14"),(0,t.yg)("li",{parentName:"ul"},"Fix proxy group speedtest not working issue"),(0,t.yg)("li",{parentName:"ul"},"Fix some vmess proxy not working issue")),(0,t.yg)("p",null,"Issue above was introduced in 2.22.1 and 2.22.3"),(0,t.yg)("h3",{id:"2223"},"2.22.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Make dynamic color theme support pure dark"),(0,t.yg)("li",{parentName:"ul"},"Improve profile compatibility"),(0,t.yg)("li",{parentName:"ul"},"Synchronize proxy test result in different proxy group "),(0,t.yg)("li",{parentName:"ul"},"Bug fix")),(0,t.yg)("h3",{id:"2222"},"2.22.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2221"},"2.22.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add pure dark theme support"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2220"},"2.22.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add wireguard proxy support"),(0,t.yg)("li",{parentName:"ul"},"Add ",(0,t.yg)("inlineCode",{parentName:"li"},"include-other-group")," support"),(0,t.yg)("li",{parentName:"ul"},"Ignore ponte proxy"),(0,t.yg)("li",{parentName:"ul"},"Update embedded geoip library"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2215"},"2.21.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix change theme not working on some devices"),(0,t.yg)("li",{parentName:"ul"},"Fix public ip card display ipv6 format address"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Fix window background color error"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2214"},"2.21.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix switch media import crash introduced in previous version"),(0,t.yg)("li",{parentName:"ul"},"Improve vpn open speed"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2213"},"2.21.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support use ftp to modify profiles list"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2212"},"2.21.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support auto zoom in gms qrcode scanner"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2211"},"2.21.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support ",(0,t.yg)("inlineCode",{parentName:"li"},"force-remote-dns")," and ",(0,t.yg)("inlineCode",{parentName:"li"},"enhanced-mode")," in ",(0,t.yg)("inlineCode",{parentName:"li"},"PROCESS-NAME")," rules"),(0,t.yg)("li",{parentName:"ul"},"Fix tile click not working on Android 14"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2210"},"2.21.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support some misc rule. ",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"with ",(0,t.yg)("inlineCode",{parentName:"li"},"IN-PORT")," and ",(0,t.yg)("inlineCode",{parentName:"li"},"SRC-IP"),", now you can control traffic from lan proxy more easily."),(0,t.yg)("li",{parentName:"ul"},"For more info, please check ",(0,t.yg)("a",{parentName:"li",href:"https://getsurfboard.com/docs/profile-format/rule/misc"},"manual")))),(0,t.yg)("li",{parentName:"ul"},"Add compact profile list support"),(0,t.yg)("li",{parentName:"ul"},"Unify menu icon ui"),(0,t.yg)("li",{parentName:"ul"},"Update bottom sheet peek height"),(0,t.yg)("li",{parentName:"ul"},"Display remote client info from lan proxy in logcat"),(0,t.yg)("li",{parentName:"ul"},"Adapt to Android 14")),(0,t.yg)("h3",{id:"22010"},"2.20.10"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Ignore invalid proxy when importing multiple uri"),(0,t.yg)("li",{parentName:"ul"},"Remove sponsor entrance")),(0,t.yg)("h3",{id:"2209"},"2.20.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Display private ip in sshdump card"),(0,t.yg)("li",{parentName:"ul"},"Improve vmess uri compatibility")),(0,t.yg)("h3",{id:"2208"},"2.20.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix import profile compatibility issue"),(0,t.yg)("li",{parentName:"ul"},"Avoid close ui when toggle tile"),(0,t.yg)("li",{parentName:"ul"},"Fix update profile notify issue"),(0,t.yg)("li",{parentName:"ul"},"Fix private ip and dns not display when starting vpn from tile"),(0,t.yg)("li",{parentName:"ul"},"Improve geoip compatibility"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2207"},"2.20.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2206"},"2.20.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support bypass TLS verification when fetching profiles and external resources"),(0,t.yg)("li",{parentName:"ul"},"Print package name in dns log"),(0,t.yg)("li",{parentName:"ul"},"Avoid toasting when starting vpn"),(0,t.yg)("li",{parentName:"ul"},"Fix subnet rule bugs"),(0,t.yg)("li",{parentName:"ul"},"Bug fix")),(0,t.yg)("h3",{id:"2205"},"2.20.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fix")),(0,t.yg)("h3",{id:"2204"},"2.20.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix in app update crashing")),(0,t.yg)("h3",{id:"2203"},"2.20.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add changelog entrance in app"),(0,t.yg)("li",{parentName:"ul"},"Allow to be installed in sdcard"),(0,t.yg)("li",{parentName:"ul"},"Bug fix")),(0,t.yg)("h3",{id:"2202"},"2.20.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Profile content: add ",(0,t.yg)("a",{parentName:"li",href:"https://getsurfboard.com/docs/profile-format/rule/subnet"},"subnet type rules")," support"),(0,t.yg)("li",{parentName:"ul"},"About settings: add new version checking in non-googleplay installation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2201"},"2.20.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Profile content: add subnet type rules support"),(0,t.yg)("li",{parentName:"ul"},"About settings: add new version checking in non-googleplay installation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2200"},"2.20.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Update profile list ui:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Add suggestion chip"),(0,t.yg)("li",{parentName:"ul"},"Add sponsors entrance in footer"),(0,t.yg)("li",{parentName:"ul"},"Add manual entrance when empty"))),(0,t.yg)("li",{parentName:"ul"},"Add app widget support: public ip, dns and private ip"),(0,t.yg)("li",{parentName:"ul"},"Update app shortcut icon"),(0,t.yg)("li",{parentName:"ul"},"GeoIP library now support auto update"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2194"},"2.19.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support query ip location on tool list"),(0,t.yg)("li",{parentName:"ul"},"Support scan qrcode from gallery"),(0,t.yg)("li",{parentName:"ul"},"Catch WebView core missing exception"),(0,t.yg)("li",{parentName:"ul"},"Automatically restart VPN when switching selected profile"),(0,t.yg)("li",{parentName:"ul"},"Change QRCode library to reduce APK size"),(0,t.yg)("li",{parentName:"ul"},"Support display external resource timeout message when fetching profile"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Allow copy url in settings"),(0,t.yg)("li",{parentName:"ul"},"Fix UI issues"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2193"},"2.19.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix profile item menu not focusable on tv devices"),(0,t.yg)("li",{parentName:"ul"},"Update profile editor library version"),(0,t.yg)("li",{parentName:"ul"},"Add detection for TLS handshake failure due to Client/Server time mismatch"),(0,t.yg)("li",{parentName:"ul"},"Add divider for toolbar"),(0,t.yg)("li",{parentName:"ul"},"Update handler ui for bottom sheet"),(0,t.yg)("li",{parentName:"ul"},"Always show label in bottom navigation bar (as you wish)"),(0,t.yg)("li",{parentName:"ul"},"Support use editor to view external resource content(policy path/rule set/domain set)"),(0,t.yg)("li",{parentName:"ul"},"Fix vpn time ticker got running when vpn is not started"),(0,t.yg)("li",{parentName:"ul"},"Update some ui detail for android tv devices"),(0,t.yg)("li",{parentName:"ul"},"Fix duplicated notification action"),(0,t.yg)("li",{parentName:"ul"},"Fix proxy list align issue"),(0,t.yg)("li",{parentName:"ul"},"Add cloudflare speed test entrance in tools list")),(0,t.yg)("h3",{id:"2192"},"2.19.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve trojan/vmess uri compatibility"),(0,t.yg)("li",{parentName:"ul"},"Fix UI overlay issue"),(0,t.yg)("li",{parentName:"ul"},"Upload bypass vpn setting description for better understanding"),(0,t.yg)("li",{parentName:"ul"},"Fix Android TV speed test icon not focusable"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2191"},"2.19.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add batch update profiles support"),(0,t.yg)("li",{parentName:"ul"},"Add pin profiles support"),(0,t.yg)("li",{parentName:"ul"},"Add back bypass vpn toggle setting"),(0,t.yg)("li",{parentName:"ul"},"Support display network error info when import profile failed due to fetch external resource failure"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Fix some translation")),(0,t.yg)("h3",{id:"2190"},"2.19.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix fd leak causeb by IPC protect"),(0,t.yg)("li",{parentName:"ul"},"Fix OOM caused by editor"),(0,t.yg)("li",{parentName:"ul"},"Enlarge proxy list item maximum width"),(0,t.yg)("li",{parentName:"ul"},"Bypass list support case-insensitive search"),(0,t.yg)("li",{parentName:"ul"},"Support detect multiple proxies with the same name but not equals to each other"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2188"},"2.18.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix Android 13+ issue introduce in 2.18.7")),(0,t.yg)("h3",{id:"2187"},"2.18.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support test-timeout param"),(0,t.yg)("li",{parentName:"ul"},"DomainSet use binary search list instead of hashMap, search speed will be slower, but memory consumption will also be lower"),(0,t.yg)("li",{parentName:"ul"},"Apply some skip-proxy rules on tun interface on Android 13+"),(0,t.yg)("li",{parentName:"ul"},"Re-enable recent request entrance"),(0,t.yg)("li",{parentName:"ul"},"Fix some ui issue on 7 inch tablet"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Fix ss proxy server domain not query through DOH"),(0,t.yg)("li",{parentName:"ul"},"Fix DNS query log error")),(0,t.yg)("h3",{id:"2186"},"2.18.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2185"},"2.18.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix TCP KeepAlive toggle not working"),(0,t.yg)("li",{parentName:"ul"},"Add session id in logcat"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Improve profile import")),(0,t.yg)("h3",{id:"2184"},"2.18.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"include-all-proxies")," now will include all proxies in ",(0,t.yg)("inlineCode",{parentName:"li"},"[Proxy]")," and ",(0,t.yg)("inlineCode",{parentName:"li"},"[Proxy Group]"),", including external proxies"),(0,t.yg)("li",{parentName:"ul"},"Add TCP keep alive toggle for proxy in settings"),(0,t.yg)("li",{parentName:"ul"},"Display last exit reason in developer options ui"),(0,t.yg)("li",{parentName:"ul"},"Catch profile decode exception instead of returning success"),(0,t.yg)("li",{parentName:"ul"},"Reduce APK size"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2183"},"2.18.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve embedded profile editor performance on huge profile"),(0,t.yg)("li",{parentName:"ul"},"Fix crash"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2182"},"2.18.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support share profile via qrcode"),(0,t.yg)("li",{parentName:"ul"},"Dashboard ui support dynamic column size, add back NavigationRailView"),(0,t.yg)("li",{parentName:"ul"},"Try to fix 'too many open files' issue"),(0,t.yg)("li",{parentName:"ul"},"Add fd count display in developer options ui"),(0,t.yg)("li",{parentName:"ul"},"Reduce APK size"),(0,t.yg)("li",{parentName:"ul"},"Support unofficial allowInsecure param in trojan uri"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2181"},"2.18.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix STUN NAT"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2180"},"2.18.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support UTLS"),(0,t.yg)("li",{parentName:"ul"},"Support bypass config import/export")),(0,t.yg)("h3",{id:"2176"},"2.17.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Modify some setting entrance"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2175"},"2.17.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2174"},"2.17.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix no network sometime switch from mobile to wifi"),(0,t.yg)("li",{parentName:"ul"},"Fix ProxyGroup tabs scrolling issue introduced in 2.17.3"),(0,t.yg)("li",{parentName:"ul"},"Rerun url-test/fallback group speedometer when network changed"),(0,t.yg)("li",{parentName:"ul"},"Improve save profile error message display"),(0,t.yg)("li",{parentName:"ul"},"Fix speedometer direct test failed"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2173"},"2.17.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Rewrite speedometer module",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Support synchronize test result between different tabs"),(0,t.yg)("li",{parentName:"ul"},"Support sort by default/delay/name"),(0,t.yg)("li",{parentName:"ul"},"Support auto sort after test finished")))),(0,t.yg)("h3",{id:"2172"},"2.17.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support ",(0,t.yg)("inlineCode",{parentName:"li"},"fallback")," group type"),(0,t.yg)("li",{parentName:"ul"},"Improve Android TV experience"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2171"},"2.17.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support ",(0,t.yg)("inlineCode",{parentName:"li"},"include-all-proxies")," standard in proxy group"),(0,t.yg)("li",{parentName:"ul"},"Improve UI compatibility with Samsung tablet sidebar"),(0,t.yg)("li",{parentName:"ul"},"Improve UI compatibility with Android 13 foldable phone bottom bar"),(0,t.yg)("li",{parentName:"ul"},"Add bottomBar support in profile editor"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2170"},"2.17.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Dashboard: now you can long press to hide card, or toggle card visibility in the top right menu"),(0,t.yg)("li",{parentName:"ul"},"Add public ip visibility toggle animation"),(0,t.yg)("li",{parentName:"ul"},"Update some displayed text"),(0,t.yg)("li",{parentName:"ul"},"Remove some profile url format checking for better compatibility")),(0,t.yg)("h3",{id:"2165"},"2.16.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix OOM issue cause by doh function"),(0,t.yg)("li",{parentName:"ul"},"Adapt to Android 13 per-app language settings"),(0,t.yg)("li",{parentName:"ul"},"Fix empty local proxy card issue"),(0,t.yg)("li",{parentName:"ul"},"Add OOM monitor debug function"),(0,t.yg)("li",{parentName:"ul"},"Make panel dialog content url and email clickable"),(0,t.yg)("li",{parentName:"ul"},"Reduce apk size"),(0,t.yg)("li",{parentName:"ul"},"Disable hide vpn notification setting on MIUI"),(0,t.yg)("li",{parentName:"ul"},"Support click sshdump bar in dashboard to open vpn settings")),(0,t.yg)("h3",{id:"2164"},"2.16.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix some oom issue"),(0,t.yg)("li",{parentName:"ul"},"Fix speed curve frozen when speed is zero"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Update embedded geoip library"),(0,t.yg)("li",{parentName:"ul"},"Display LAN ip in local ip card ui"),(0,t.yg)("li",{parentName:"ul"},"Respect ruleSet/domainSet sequence")),(0,t.yg)("h3",{id:"2163"},"2.16.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Add vmess username format validate"),(0,t.yg)("li",{parentName:"ul"},"Update switch preference ui")),(0,t.yg)("h3",{id:"2162"},"2.16.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add profile sub menu support"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Adapt to Android 13 excludeRoute method"),(0,t.yg)("li",{parentName:"ul"},"Add so library missing detect"),(0,t.yg)("li",{parentName:"ul"},"Reduce suffix domain rule memory usage"),(0,t.yg)("li",{parentName:"ul"},"Fix miui gesture bar color"),(0,t.yg)("li",{parentName:"ul"},"Support long press ip card to copy ip"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2161"},"2.16.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support ",(0,t.yg)("a",{parentName:"li",href:"https://getsurfboard.com/docs/profile-format/panel/static"},"panel")),(0,t.yg)("li",{parentName:"ul"},"Fix shadowsocks protocol crash issue")),(0,t.yg)("h3",{id:"2160"},"2.16.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix connection count issue"),(0,t.yg)("li",{parentName:"ul"},"Adapt to Android 13 notification permission request"),(0,t.yg)("li",{parentName:"ul"},"Update start when boot logic")),(0,t.yg)("h3",{id:"2153"},"2.15.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix some memory leak issues"),(0,t.yg)("li",{parentName:"ul"},"Fix bugs")),(0,t.yg)("h3",{id:"2152"},"2.15.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Try fix connection count issue by not using protect api"),(0,t.yg)("li",{parentName:"ul"},"Add unsupported YAML format profile detection"),(0,t.yg)("li",{parentName:"ul"},"Compatible with number value with unit suffix in profile content"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2151"},"2.15.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Display native process memory consumption in developer ui"),(0,t.yg)("li",{parentName:"ul"},"Add Nintendo Switch media import support(Android 10+)"),(0,t.yg)("li",{parentName:"ul"},"Update shortcut icon shape"),(0,t.yg)("li",{parentName:"ul"},"Move sshdump into vpn setting"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Bugfix")),(0,t.yg)("h3",{id:"2150"},"2.15.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add new traffic list ui"),(0,t.yg)("li",{parentName:"ul"},"Support websocket in trojan protocol"),(0,t.yg)("li",{parentName:"ul"},"Revert to previous dark icon")),(0,t.yg)("h3",{id:"2140"},"2.14.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Reduce VPN CPU usage"),(0,t.yg)("li",{parentName:"ul"},"Add more notification settings"),(0,t.yg)("li",{parentName:"ul"},"Add recommend doh server list"),(0,t.yg)("li",{parentName:"ul"},"Add export log in tool list"),(0,t.yg)("li",{parentName:"ul"},"Update embedded geoip library"),(0,t.yg)("li",{parentName:"ul"},"Add document entry in external resources ui"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2134"},"2.13.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix tile not working on color os"),(0,t.yg)("li",{parentName:"ul"},"Hide VPN notification badge icon"),(0,t.yg)("li",{parentName:"ul"},"Fix timeout when applying 'force-remote-dns' on direct rule domain"),(0,t.yg)("li",{parentName:"ul"},"Support decode 'persistent' param in load balanced group")),(0,t.yg)("h3",{id:"2133"},"2.13.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add custom geoip database support")),(0,t.yg)("h3",{id:"2132"},"2.13.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Optimize DOMAIN-SET memory usage ")),(0,t.yg)("h3",{id:"2131"},"2.13.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve DOMAIN-SET performance"),(0,t.yg)("li",{parentName:"ul"},"Improve proxy group ui performance")),(0,t.yg)("h3",{id:"2130"},"2.13.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support DOMAIN-SET rule"),(0,t.yg)("li",{parentName:"ul"},"Fix force-remote-dns setting not working for domain rules in RULE-SET"),(0,t.yg)("li",{parentName:"ul"},"Add korean language support")),(0,t.yg)("h3",{id:"2126"},"2.12.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"update public ip batch fetch"),(0,t.yg)("li",{parentName:"ul"},"support display flag emoji on public ip card"),(0,t.yg)("li",{parentName:"ul"},"try to fix traffic loop is proxy host is ip format"),(0,t.yg)("li",{parentName:"ul"},"better handle horizontal orientation")),(0,t.yg)("h3",{id:"2125"},"2.12.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix setting crash issue")),(0,t.yg)("h3",{id:"2124"},"2.12.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve tablet ui"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2123"},"2.12.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support load-balance proxy group"),(0,t.yg)("li",{parentName:"ul"},"Process rule support wildcard match"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2122"},"2.12.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Move google api checking to tools list"),(0,t.yg)("li",{parentName:"ul"},"Update tools list ui")),(0,t.yg)("h3",{id:"2121"},"2.12.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix google api availability checking crash")),(0,t.yg)("h3",{id:"2120"},"2.12.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add google api availability checking"),(0,t.yg)("li",{parentName:"ul"},"Add invalid managed config url faq entrance"),(0,t.yg)("li",{parentName:"ul"},"Disable sshdump on android 7 and lower"),(0,t.yg)("li",{parentName:"ul"},"Support dynamic change ui translation on the fly")),(0,t.yg)("h3",{id:"2114"},"2.11.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add GMS QRCode scanner support"),(0,t.yg)("li",{parentName:"ul"},"Improve dns ip display outside mainland China"),(0,t.yg)("li",{parentName:"ul"},"Fix public ip display issue"),(0,t.yg)("li",{parentName:"ul"},"Update profile menu item sequence"),(0,t.yg)("li",{parentName:"ul"},"Fix DoH server verify exception"),(0,t.yg)("li",{parentName:"ul"},"Add Android TV App entrance(still using mobile ui)"),(0,t.yg)("li",{parentName:"ul"},"Add private ip card in dashboard"),(0,t.yg)("li",{parentName:"ul"},"Update GEOIP library"),(0,t.yg)("li",{parentName:"ul"},"Add more theme support")),(0,t.yg)("h3",{id:"2113"},"2.11.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support drag and drop feature in profile list ui"),(0,t.yg)("li",{parentName:"ul"},"Add wireshark sshdump support in tools list"),(0,t.yg)("li",{parentName:"ul"},"Add DnsPod DoH server in embedded profile template"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2112"},"2.11.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bring better wildcard match for skip-proxy, always-real-ip and host rule"),(0,t.yg)("li",{parentName:"ul"},"Add vpn toggle toast"),(0,t.yg)("li",{parentName:"ul"},"Improve public ip api usability"),(0,t.yg)("li",{parentName:"ul"},"Change editor newline symbol for better compatibility"),(0,t.yg)("li",{parentName:"ul"},"Fix theme setting crash on lower version devies"),(0,t.yg)("li",{parentName:"ul"},"Fix change theme not working on lower version devices"),(0,t.yg)("li",{parentName:"ul"},"Fix self traffic handle error")),(0,t.yg)("h3",{id:"2111"},"2.11.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add allowing bypass VPN setting"),(0,t.yg)("li",{parentName:"ul"},"Disable text highlight in embedded profile editor to improve performance"),(0,t.yg)("li",{parentName:"ul"},"New theme setting ui, support devices lower than Android 12"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2110"},"2.11.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support change theme palette(If you have better color recommended, please contact me)"),(0,t.yg)("li",{parentName:"ul"},"Support override ",(0,t.yg)("a",{parentName:"li",href:"https://getsurfboard.com/docs/profile-format/general/doh_server"},"doh-server")," config in setting"),(0,t.yg)("li",{parentName:"ul"},"Improve VPN start speed when using huge profile"),(0,t.yg)("li",{parentName:"ul"},"Support toggle offline/disabled app display in bypass app list"),(0,t.yg)("li",{parentName:"ul"},"Fix fetch profile timeout if contains self url as policy path url"),(0,t.yg)("li",{parentName:"ul"},"Improve recent requests list performance, support fast scroll"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2102"},"2.10.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Change default vmess-aead value to true")),(0,t.yg)("h3",{id:"2101"},"2.10.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support profile url as policy path url"),(0,t.yg)("li",{parentName:"ul"},"Fix profile editor save failed still show as success"),(0,t.yg)("li",{parentName:"ul"},"Fix network unavailable if use global outbound with zero proxies profile"),(0,t.yg)("li",{parentName:"ul"},"Remove override vmess aead setting, please use ",(0,t.yg)("a",{parentName:"li",href:"/docs/profile-format/proxy/external-proxy/vmess"},"vmess-aead")," in profile instead "),(0,t.yg)("li",{parentName:"ul"},"Change profile list sort to natural order"),(0,t.yg)("li",{parentName:"ul"},"Add more protocol recognize in logcat and recent requests"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2100"},"2.10.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add ",(0,t.yg)("inlineCode",{parentName:"li"},"doh-server")," support"),(0,t.yg)("li",{parentName:"ul"},"Add fcm diagnostics entrance in developer options"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2912"},"2.9.12"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix public ip card random crash issue"),(0,t.yg)("li",{parentName:"ul"},"Fix devices without camera can not install issue")),(0,t.yg)("h3",{id:"2911"},"2.9.11"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Use mlkit qrcode scanning instead of zxing"),(0,t.yg)("li",{parentName:"ul"},"Add Developer Options UI",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Support viewing memory usage, trigger garbage collect and export memory snapshot"),(0,t.yg)("li",{parentName:"ul"},"Support exporting log file"))),(0,t.yg)("li",{parentName:"ul"},"Unify browser open method"),(0,t.yg)("li",{parentName:"ul"},"Add translate contributor list"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Fix some vmess uri import failed"),(0,t.yg)("li",{parentName:"ul"},"Support HTTP 301 in external resource management"),(0,t.yg)("li",{parentName:"ul"},"Support Android 13 themed app icon")),(0,t.yg)("h3",{id:"2910"},"2.9.10"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support override ",(0,t.yg)("inlineCode",{parentName:"li"},"http-listen")," and ",(0,t.yg)("inlineCode",{parentName:"li"},"socks5-listen")," in profiles"),(0,t.yg)("li",{parentName:"ul"},"Support HTTP 30X redirection when fetching external resource")),(0,t.yg)("h3",{id:"299"},"2.9.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix SS url base64 decode error"),(0,t.yg)("li",{parentName:"ul"},"Add Google Play AAB support"),(0,t.yg)("li",{parentName:"ul"},"Use online sponsor page"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"298"},"2.9.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"297"},"2.9.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add ",(0,t.yg)("inlineCode",{parentName:"li"},"udp-policy-not-supported-behaviour")," support"),(0,t.yg)("li",{parentName:"ul"},"Rewrite external resource manager")),(0,t.yg)("h3",{id:"296"},"2.9.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Profile editor: performance improve, add more highlight support"),(0,t.yg)("li",{parentName:"ul"},"add ",(0,t.yg)("inlineCode",{parentName:"li"},"internet-test-url")," support"),(0,t.yg)("li",{parentName:"ul"},"Compatible with vmess proxy whose ws header value wrapped with quotes"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"295"},"2.9.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add traffic statistics card in dashboard(only count a single session)"),(0,t.yg)("li",{parentName:"ul"},"Add traffic statistics mode in setting, affect notifications, traffic card "),(0,t.yg)("li",{parentName:"ul"},"Toggle notification tile without closing panel"),(0,t.yg)("li",{parentName:"ul"},"Support Google Play In App Update"),(0,t.yg)("li",{parentName:"ul"},"Update libuv to 1.44.1"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"294"},"2.9.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add AppCenter & breakpad"),(0,t.yg)("li",{parentName:"ul"},"Revert outbound UI"),(0,t.yg)("li",{parentName:"ul"},"Add new manual entrance"),(0,t.yg)("li",{parentName:"ul"},"Change public ip fetching api"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"293"},"2.9.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix local proxy address in use crash"),(0,t.yg)("li",{parentName:"ul"},"Update outbound mode card UI"),(0,t.yg)("li",{parentName:"ul"},"Fix crash when upgrade from v1.2.4")),(0,t.yg)("h3",{id:"292"},"2.9.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add local proxy support: http and socks5"),(0,t.yg)("li",{parentName:"ul"},"Update dashboard UI"),(0,t.yg)("li",{parentName:"ul"},"Enable lan traffic filter setting")),(0,t.yg)("h3",{id:"291"},"2.9.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Refetch public ip info when changing outbound mode"),(0,t.yg)("li",{parentName:"ul"},"Fix change global proxy not update public ip info"),(0,t.yg)("li",{parentName:"ul"},"Fix crash cause by vpn quick start twice"),(0,t.yg)("li",{parentName:"ul"},"Fix crash when viewing huge ruleSet/policyPath list"),(0,t.yg)("li",{parentName:"ul"},"Add ChangeLog dialog when click version code"),(0,t.yg)("li",{parentName:"ul"},"Fix random GEOIP crash on Android 5/6"),(0,t.yg)("li",{parentName:"ul"},"Add sponsors list")),(0,t.yg)("h3",{id:"290"},"2.9.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add DNS poisoning auto fix support"),(0,t.yg)("li",{parentName:"ul"},"Fix tile not working on some devices"),(0,t.yg)("li",{parentName:"ul"},"Small UI change"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"289"},"2.8.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix profile serializable crash"),(0,t.yg)("li",{parentName:"ul"},"Remove flurry"),(0,t.yg)("li",{parentName:"ul"},"Use Crashlytics instead of Sentry")),(0,t.yg)("h3",{id:"288"},"2.8.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Fix splash screen top left corner frame"),(0,t.yg)("li",{parentName:"ul"},"Optimize memory usage cause by huge profile/ruleSet/policyPath"),(0,t.yg)("li",{parentName:"ul"},"Add quick change proxygroup selection ui"),(0,t.yg)("li",{parentName:"ul"},"Improve editor launch performance"),(0,t.yg)("li",{parentName:"ul"},"Add update profiles after vpn established toggle in settings"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"287"},"2.8.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Avoid open vpn cause adb wifi reconnect"),(0,t.yg)("li",{parentName:"ul"},"Update all profiles after vpn started"),(0,t.yg)("li",{parentName:"ul"},"Fix crash"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"286"},"2.8.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"285"},"2.8.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add app shortcut support"),(0,t.yg)("li",{parentName:"ul"},"Add deeplink support:"),(0,t.yg)("li",{parentName:"ul"},"surfboard:///toggle"),(0,t.yg)("li",{parentName:"ul"},"surfboard:///start"),(0,t.yg)("li",{parentName:"ul"},"surfboard:///stop"),(0,t.yg)("li",{parentName:"ul"},"surfboard:///install-config?url=","[encoded_profile_url]"),(0,t.yg)("li",{parentName:"ul"},"Bypass config support batch operation"),(0,t.yg)("li",{parentName:"ul"},"Support setting to use external editor"),(0,t.yg)("li",{parentName:"ul"},"Fix manually update profile no refresh last modified time"),(0,t.yg)("li",{parentName:"ul"},"Add change language animation")),(0,t.yg)("h3",{id:"284"},"2.8.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"add more transition animation"),(0,t.yg)("li",{parentName:"ul"},"make language change take effect without restart"),(0,t.yg)("li",{parentName:"ul"},"update editor font"),(0,t.yg)("li",{parentName:"ul"},"fix navigationbar overlay issue in some ui"),(0,t.yg)("li",{parentName:"ul"},"update translation"),(0,t.yg)("li",{parentName:"ul"},"bug fixed")),(0,t.yg)("h3",{id:"283"},"2.8.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"editor support some emacs key map: Ctrl + ","[Shift]"," + N/P/F/B/A/E"),(0,t.yg)("li",{parentName:"ul"},"proxy list support scroll to selected proxy"),(0,t.yg)("li",{parentName:"ul"},"update translation"),(0,t.yg)("li",{parentName:"ul"},"fix menu item repeat issue")),(0,t.yg)("h3",{id:"282"},"2.8.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("p",{parentName:"li"},"Profile Editor"),(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Add highlight support"),(0,t.yg)("li",{parentName:"ul"},"Add redo/undo support"),(0,t.yg)("li",{parentName:"ul"},"Add new empty profile support")))),(0,t.yg)("h3",{id:"281"},"2.8.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support embeded editor"),(0,t.yg)("li",{parentName:"ul"},"Small UI change")),(0,t.yg)("h3",{id:"280"},"2.8.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Material Design 3"),(0,t.yg)("li",{parentName:"ul"},"This version may be buggy and won't be release on Google Play until stable. Use on your own risk.")),(0,t.yg)("h3",{id:"279"},"2.7.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"278"},"2.7.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Multiple proxy import now only support dividing with newline, space and vertical bar no longer supported"),(0,t.yg)("li",{parentName:"ul"},"Update vietnamese translation"),(0,t.yg)("li",{parentName:"ul"},"Fix crash")),(0,t.yg)("h3",{id:"277"},"2.7.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Rewrite webdav synchronize module"),(0,t.yg)("li",{parentName:"ul"},"Show profile update option even managed config url is invalid"),(0,t.yg)("li",{parentName:"ul"},"Change vmess/trojan proxy default udp-relay value to false"),(0,t.yg)("li",{parentName:"ul"},"Fix crash when updating invalid profile"),(0,t.yg)("li",{parentName:"ul"},"Fix vmess uri compatibility"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"276"},"2.7.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Remove direct/reject proxy in global proxy group"),(0,t.yg)("li",{parentName:"ul"},"Clone profile as editable profile with managed config removed"),(0,t.yg)("li",{parentName:"ul"},"Exclude unsupported proxy uri (like vless://xxx) when importing"),(0,t.yg)("li",{parentName:"ul"},"Change default proxy column size to middle")),(0,t.yg)("h3",{id:"275"},"2.7.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix SAF editing not trigger profile list refresh"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed.")),(0,t.yg)("h3",{id:"274"},"2.7.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support vmess-aead param in vmess proxy config."),(0,t.yg)("li",{parentName:"ul"},"Add DoH detect."),(0,t.yg)("li",{parentName:"ul"},"Bug fixed."),(0,t.yg)("li",{parentName:"ul"},"Use vmess-aead param to define per-proxy AEAD setting, if param not defined in the profile, default value in the settings will be used."),(0,t.yg)("li",{parentName:"ul"},"For profile format detail, please check the sample profile in the top right corner of profile list.")),(0,t.yg)("h3",{id:"273"},"2.7.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support Always-ON-VPN setting"),(0,t.yg)("li",{parentName:"ul"},"Generate new profile name when reimporting existed profile"),(0,t.yg)("li",{parentName:"ul"},"Improve ICMP/UDP traffic handle efficiency when using profile with tons of rules"),(0,t.yg)("li",{parentName:"ul"},"Support hiding system apps in bypass config"),(0,t.yg)("li",{parentName:"ul"},"Prompt restart VPN after bypass config changed"),(0,t.yg)("li",{parentName:"ul"},"Add disable notification checking in settings"),(0,t.yg)("li",{parentName:"ul"},"Fix active count flicking issue"),(0,t.yg)("li",{parentName:"ul"},"Enable force-remote-dns by default"),(0,t.yg)("li",{parentName:"ul"},"New profile update strategy")),(0,t.yg)("h3",{id:"272"},"2.7.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support always-real-ip"),(0,t.yg)("li",{parentName:"ul"},"Support decoding sni param and proxy name from trojan uri"),(0,t.yg)("li",{parentName:"ul"},"Enable udp-relay in vmess/trojan proxy by default"),(0,t.yg)("li",{parentName:"ul"},"Block DoT traffic by default"),(0,t.yg)("li",{parentName:"ul"},"Update all profile when app launch"),(0,t.yg)("li",{parentName:"ul"},"Support decoding internal.example.com = server:syslib in ","[Host]"," section"),(0,t.yg)("li",{parentName:"ul"},"Support domain suffix in skip-proxy config"),(0,t.yg)("li",{parentName:"ul"},"Improve import profile error prompt"),(0,t.yg)("li",{parentName:"ul"},"Add always-real-ip = stun.l.google.com in ","[General]"," section to fix Google Voice Dialing issue, proxy must support relaying UDP traffic.")),(0,t.yg)("h3",{id:"271"},"2.7.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Keep proxy order from proxygroup which contains policy path and normal proxies"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"270"},"2.7.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve profile name guessing when import from url"),(0,t.yg)("li",{parentName:"ul"},"Fix rule count error when include multiple ruleset with same source"),(0,t.yg)("li",{parentName:"ul"},"Remove disk cache when removing external resource"),(0,t.yg)("li",{parentName:"ul"},"Fix ip type trojan proxy import issue")),(0,t.yg)("h3",{id:"269"},"2.6.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve huge profile compatibility"),(0,t.yg)("li",{parentName:"ul"},"Improve TLS proxy compatibility"),(0,t.yg)("li",{parentName:"ul"},"Improve profile decode speed"),(0,t.yg)("li",{parentName:"ul"},"Treat REJECT-TINYGIF as REJECT rule (due to android not support MITM)"),(0,t.yg)("li",{parentName:"ul"},"Add Surge manual entrance in tools tab")),(0,t.yg)("h3",{id:"268"},"2.6.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix global group sequence not follow the profile content"),(0,t.yg)("li",{parentName:"ul"},"Fix network speed display issue on 32bit devices"),(0,t.yg)("li",{parentName:"ul"},"Reset all tcp connection when changing outbounds mode"),(0,t.yg)("li",{parentName:"ul"},"Fix proxy count error in some policy path profiles"),(0,t.yg)("li",{parentName:"ul"},"Fix some crashing when upgrade from GP version"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"267"},"2.6.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix ruleSet/policyPath too huge cause crashing"),(0,t.yg)("li",{parentName:"ul"},"Fix network error cause crashing"),(0,t.yg)("li",{parentName:"ul"},"Fix custom uri scheme not working")),(0,t.yg)("h3",{id:"266"},"2.6.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Allow display invalid profiles, now you are free to delete or modify them"),(0,t.yg)("li",{parentName:"ul"},"Change external resource manager entrance to lower location"),(0,t.yg)("li",{parentName:"ul"},"Use force-remote-dns in global outbound mode by default"),(0,t.yg)("li",{parentName:"ul"},"Cache dns cache when toggle vpn, change outbound mode and change proxy group selection"),(0,t.yg)("li",{parentName:"ul"},"Support batch delete unused external resources"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"265"},"2.6.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add external resources manage ui"),(0,t.yg)("li",{parentName:"ul"},"Speed up notification bar tile toggle initial time"),(0,t.yg)("li",{parentName:"ul"},"Use ",(0,t.yg)("a",{parentName:"li",href:"https://github.com/Loyalsoldier/geoip"},"https://github.com/Loyalsoldier/geoip")," as embedded geoip library"),(0,t.yg)("li",{parentName:"ul"},"Update url format validator"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"264"},"2.6.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add Force remote dns toggle in settings"),(0,t.yg)("li",{parentName:"ul"},"Scroll to new position when clone/rename profile"),(0,t.yg)("li",{parentName:"ul"},"Check invalid vmess url format"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"263"},"2.6.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add 'NEW' badge for new profile"),(0,t.yg)("li",{parentName:"ul"},"Use FINAL rule to fetch public IP info if FINAL rule defined"),(0,t.yg)("li",{parentName:"ul"},"ICMP: return fake ICMP reply if match FORWARD policy, return dest unreachable if match REJECT policy"),(0,t.yg)("li",{parentName:"ul"},"Print debug info in logcat if click connection count card when VPN is opened"),(0,t.yg)("li",{parentName:"ul"},"Little UI update")),(0,t.yg)("h3",{id:"261"},"2.6.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Traffic with not supported proto will be reject by default"),(0,t.yg)("li",{parentName:"ul"},"UDP reject will be handled by return ICMP port unreachable by default"),(0,t.yg)("li",{parentName:"ul"},"Warning invalid profile url when importing profile"),(0,t.yg)("li",{parentName:"ul"},"Fix some connection count issue"),(0,t.yg)("li",{parentName:"ul"},"Add more restart vpn prompt"),(0,t.yg)("li",{parentName:"ul"},"Hide network speed statusbar icon toggle on MIUI devices"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"260"},"2.6.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"fix crash"),(0,t.yg)("li",{parentName:"ul"},"Support disable logcat output in settings")),(0,t.yg)("h3",{id:"259"},"2.5.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix some memory/connection leak issue")),(0,t.yg)("h3",{id:"258"},"2.5.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix vmess/netflix compatibility issue cause by ipv6"),(0,t.yg)("li",{parentName:"ul"},"Fix crashes"),(0,t.yg)("li",{parentName:"ul"},"Print warning log when reject traffic"),(0,t.yg)("li",{parentName:"ul"},"Support scan ss/vmess/trojan/http/https/surfboard/surge/surge3 format qrcode")),(0,t.yg)("h3",{id:"257"},"2.5.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix crashes"),(0,t.yg)("li",{parentName:"ul"},"Improve vmess websocket compatibility"),(0,t.yg)("li",{parentName:"ul"},"Update persian language")),(0,t.yg)("h3",{id:"256"},"2.5.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix speedtest issue"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"255"},"2.5.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"update persian language"),(0,t.yg)("li",{parentName:"ul"},"fix telegram using direct rule issue")),(0,t.yg)("h3",{id:"254"},"2.5.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix auto group speed test not working"),(0,t.yg)("li",{parentName:"ul"},"Reset all existed tcp connection when change proxy group selection"),(0,t.yg)("li",{parentName:"ul"},"Avoid forward proxy traffic dead lock"),(0,t.yg)("li",{parentName:"ul"},"Fix crash cause by long file name")),(0,t.yg)("h3",{id:"253"},"2.5.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix speed test issue"),(0,t.yg)("li",{parentName:"ul"},"Support basic auth in profile url")),(0,t.yg)("h3",{id:"252"},"2.5.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix speedtest issue")),(0,t.yg)("h3",{id:"251"},"2.5.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix speed test not stable issue"),(0,t.yg)("li",{parentName:"ul"},"Fix fetching public IP error when use with other VPN"),(0,t.yg)("li",{parentName:"ul"},"Add VMESS AEAD hint when first use"),(0,t.yg)("li",{parentName:"ul"},"Add warning when new profile subscribe url is from localhost")),(0,t.yg)("h3",{id:"250"},"2.5.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix WebDAV synchronize issue with box.com"),(0,t.yg)("li",{parentName:"ul"},"Update dashboard UI"),(0,t.yg)("li",{parentName:"ul"},"Update maxmind geoip2lite library"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"249"},"2.4.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add WebDAV synchronize support"),(0,t.yg)("li",{parentName:"ul"},"Fix crash when restart VPN after rename profile"),(0,t.yg)("li",{parentName:"ul"},"Fix fetch ip info failed after VPN established"),(0,t.yg)("li",{parentName:"ul"},"Improve save profile speed"),(0,t.yg)("li",{parentName:"ul"},"Fix update profile last modify time no changing")),(0,t.yg)("h3",{id:"248"},"2.4.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve ui compatibility with tablet devices"),(0,t.yg)("li",{parentName:"ul"},"Add network speed display on status bar icon"),(0,t.yg)("li",{parentName:"ul"},"Add Public IP visibility toggle"),(0,t.yg)("li",{parentName:"ul"},"Prompt to restart VPN when selecting profile"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"247"},"2.4.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix profile import issue cause by policy-regex-filter"),(0,t.yg)("li",{parentName:"ul"},"Improve profile name guess imported by url"),(0,t.yg)("li",{parentName:"ul"},"Fix UI tab double click issue"),(0,t.yg)("li",{parentName:"ul"},"Fix profile name contains slash cause crash"),(0,t.yg)("li",{parentName:"ul"},"Update sample.conf"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"246"},"2.4.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"245"},"2.4.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support policy-regex-filter and hidden in proxy group"),(0,t.yg)("li",{parentName:"ul"},"Fix global outbound make network unavailable"),(0,t.yg)("li",{parentName:"ul"},"Hide notification in lockscreen"),(0,t.yg)("li",{parentName:"ul"},"Make VMESS AEAD disable by default"),(0,t.yg)("li",{parentName:"ul"},"Update UI"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"244"},"2.4.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support udp-relay in socks5/shadowsocks/vmess/trojan proxy"),(0,t.yg)("li",{parentName:"ul"},"Fix import vmess url failed if contains slash"),(0,t.yg)("li",{parentName:"ul"},"Fix some crash issue")),(0,t.yg)("h3",{id:"243"},"2.4.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve traffic throughput"),(0,t.yg)("li",{parentName:"ul"},"Update bypass apps ui, add search support"),(0,t.yg)("li",{parentName:"ul"},"Fix ss proxy with domain cause stop VPN failed"),(0,t.yg)("li",{parentName:"ul"},"Update UI")),(0,t.yg)("h3",{id:"242"},"2.4.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix policy path issue"),(0,t.yg)("li",{parentName:"ul"},"Add Indonesian support"),(0,t.yg)("li",{parentName:"ul"},"Improve profile decode performance"),(0,t.yg)("li",{parentName:"ul"},"Fix huge profile cause crash"),(0,t.yg)("li",{parentName:"ul"},"Only use English app entrance name")),(0,t.yg)("h3",{id:"241"},"2.4.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix gradle 7.0.1 cause R8 error"),(0,t.yg)("li",{parentName:"ul"},"Update libuv/v2fly library")),(0,t.yg)("h3",{id:"240"},"2.4.0"),(0,t.yg)("p",null,"Fix socks5 proxy not working without authorization\nAdd policy-path support\nSupport surge3:///install-config?url=xxx\nSupport enhanced mode domain rules\nSupport decode http/socks5 proxy as TLS-based proxy\nUpdate GEOIP library"),(0,t.yg)("h3",{id:"235"},"2.3.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix some profile import issue, support more import format"),(0,t.yg)("li",{parentName:"ul"},"Fix column size not synchronize between proxy group tabs"),(0,t.yg)("li",{parentName:"ul"},"Fix notification click not working"),(0,t.yg)("li",{parentName:"ul"},"Don't count speedometer into active tcp connection count"),(0,t.yg)("li",{parentName:"ul"},"Change UI back to 4 tabs in main ui")),(0,t.yg)("h3",{id:"234"},"2.3.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add fuzzy search in recent requests ui"),(0,t.yg)("li",{parentName:"ul"},"Update item ui in recent requests"),(0,t.yg)("li",{parentName:"ul"},"Sort bypass app by toggle state"),(0,t.yg)("li",{parentName:"ul"},"Support trojan:// proxy url"),(0,t.yg)("li",{parentName:"ul"},"Support import multiple proxy url divided by space, vertical line and enter"),(0,t.yg)("li",{parentName:"ul"},"Support switch app launcher title to english"),(0,t.yg)("li",{parentName:"ul"},"Support proxy column size switch")),(0,t.yg)("h3",{id:"233"},"2.3.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add active connection count display in dashboard"),(0,t.yg)("li",{parentName:"ul"},"Support vmess:// and ss:// url"),(0,t.yg)("li",{parentName:"ul"},"Add Profile FileProvider support"),(0,t.yg)("li",{parentName:"ul"},"Add VMESS AEAD support settings")),(0,t.yg)("h3",{id:"232"},"2.3.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support vmess AEAD"),(0,t.yg)("li",{parentName:"ul"},"Support long press to copy traffic info in recent request list"),(0,t.yg)("li",{parentName:"ul"},"Fix update profile last modify time not changing"),(0,t.yg)("li",{parentName:"ul"},"Fix profile modify not working"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"231"},"2.3.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix open vpn failed with rule-set profile")),(0,t.yg)("h3",{id:"230"},"2.3.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add skip-proxy config support"),(0,t.yg)("li",{parentName:"ul"},"Fix change global proxy not working when VPN is on"),(0,t.yg)("li",{parentName:"ul"},"Add direct proxy in global outbound mode"),(0,t.yg)("li",{parentName:"ul"},"Add tools tab"),(0,t.yg)("li",{parentName:"ul"},"Support custom dns server port in dns-server config"),(0,t.yg)("li",{parentName:"ul"},"Support decode 1/0 as Boolean in profile"),(0,t.yg)("li",{parentName:"ul"},"Fix long profile list selection duplicate issue"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"221"},"2.2.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add skip TLS verify setting"),(0,t.yg)("li",{parentName:"ul"},"Fix whitelist mode not working issue")),(0,t.yg)("h3",{id:"220"},"2.2.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add bypass config support"),(0,t.yg)("li",{parentName:"ul"},"Reduce APK size"),(0,t.yg)("li",{parentName:"ul"},"Add proxy_test_url support"),(0,t.yg)("li",{parentName:"ul"},"Add profile sample in profile list menu")),(0,t.yg)("h3",{id:"210"},"2.1.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add recent request support"),(0,t.yg)("li",{parentName:"ul"},"Add profile viewer(not support editing yet)"),(0,t.yg)("li",{parentName:"ul"},"Integrate QRCode scanner, not need to download zxing scanner")),(0,t.yg)("h3",{id:"202"},"2.0.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Update all locale app name to ","[Surfboard]"),(0,t.yg)("li",{parentName:"ul"},"Fix crash issue on Android 7.0 and lower version"),(0,t.yg)("li",{parentName:"ul"},"Update light theme UI, support switch theme in settings"),(0,t.yg)("li",{parentName:"ul"},"Fix global outbound speed test not working"),(0,t.yg)("li",{parentName:"ul"},"Fix crash when vmess proxy name boxed with double quote"),(0,t.yg)("li",{parentName:"ul"},"Fix UI issue")),(0,t.yg)("h3",{id:"0919"},"0.9.19"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix network metered issue on Android 10"),(0,t.yg)("li",{parentName:"ul"},"Fix speed test issue"),(0,t.yg)("li",{parentName:"ul"},"Allow fetching profile using current profile"),(0,t.yg)("li",{parentName:"ul"},"Add test-timeout/internet-test-url/proxy-test-url support"),(0,t.yg)("li",{parentName:"ul"},"Remember proxygroup toggle state"),(0,t.yg)("li",{parentName:"ul"},"Avoid displaying toast when fetch toast failed")),(0,t.yg)("h3",{id:"0918"},"0.9.18"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Rewrite tcp handler for better memory usage"),(0,t.yg)("li",{parentName:"ul"},"Add proxygroup toggle function"),(0,t.yg)("li",{parentName:"ul"},"Add Notification Channel Setting entrance"),(0,t.yg)("li",{parentName:"ul"},"Bug fix")),(0,t.yg)("h3",{id:"0916"},"0.9.16"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix ss tcp speedtest issue"),(0,t.yg)("li",{parentName:"ul"},"Add Tile and app shortcut support"),(0,t.yg)("li",{parentName:"ul"},"Fix email feedback crash"),(0,t.yg)("li",{parentName:"ul"},"Update speedtest ui"),(0,t.yg)("li",{parentName:"ul"},"Bugs fixed")),(0,t.yg)("h3",{id:"0914"},"0.9.14"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve throughput performance(Up to 300Mbps+)"),(0,t.yg)("li",{parentName:"ul"},"Bugs fixed")),(0,t.yg)("h3",{id:"0913"},"0.9.13"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix second launch crash issue"),(0,t.yg)("li",{parentName:"ul"},"Update proxy group grid ui")))}y.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9beb87c2.5d2f3243.js b/assets/js/9beb87c2.5d2f3243.js new file mode 100644 index 00000000..27b168c1 --- /dev/null +++ b/assets/js/9beb87c2.5d2f3243.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmanual=self.webpackChunkmanual||[]).push([[3539],{5680:(e,l,a)=>{a.d(l,{xA:()=>g,yg:()=>s});var i=a(6540);function t(e,l,a){return l in e?Object.defineProperty(e,l,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[l]=a,e}function n(e,l){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);l&&(i=i.filter((function(l){return Object.getOwnPropertyDescriptor(e,l).enumerable}))),a.push.apply(a,i)}return a}function r(e){for(var l=1;l=0||(t[a]=e[a]);return t}(e,l);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(t[a]=e[a])}return t}var p=i.createContext({}),o=function(e){var l=i.useContext(p),a=l;return e&&(a="function"==typeof e?e(l):r(r({},l),e)),a},g=function(e){var l=o(e.components);return i.createElement(p.Provider,{value:l},e.children)},d="mdxType",y={inlineCode:"code",wrapper:function(e){var l=e.children;return i.createElement(i.Fragment,{},l)}},m=i.forwardRef((function(e,l){var a=e.components,t=e.mdxType,n=e.originalType,p=e.parentName,g=u(e,["components","mdxType","originalType","parentName"]),d=o(a),m=t,s=d["".concat(p,".").concat(m)]||d[m]||y[m]||n;return a?i.createElement(s,r(r({ref:l},g),{},{components:a})):i.createElement(s,r({ref:l},g))}));function s(e,l){var a=arguments,t=l&&l.mdxType;if("string"==typeof e||t){var n=a.length,r=new Array(n);r[0]=m;var u={};for(var p in l)hasOwnProperty.call(l,p)&&(u[p]=l[p]);u.originalType=e,u[d]="string"==typeof e?e:t,r[1]=u;for(var o=2;o{a.r(l),a.d(l,{assets:()=>p,contentTitle:()=>r,default:()=>y,frontMatter:()=>n,metadata:()=>u,toc:()=>o});var i=a(8168),t=(a(6540),a(5680));const n={sidebar_position:5},r="ChangeLog",u={unversionedId:"changelog",id:"changelog",title:"ChangeLog",description:"mobile-2.24.7",source:"@site/docs/changelog.md",sourceDirName:".",slug:"/changelog",permalink:"/docs/changelog",draft:!1,editUrl:"https://github.com/getsurfboard/manual/edit/main/docs/changelog.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"ADBlock",permalink:"/docs/profile-example/adblock"},next:{title:"FAQ",permalink:"/docs/faq"}},p={},o=[{value:"mobile-2.24.7",id:"mobile-2247",level:3},{value:"mobile-2.24.6",id:"mobile-2246",level:3},{value:"mobile-2.24.5",id:"mobile-2245",level:3},{value:"tv-1.0.3",id:"tv-103",level:3},{value:"tv-1.0.2",id:"tv-102",level:3},{value:"tv-1.0.1",id:"tv-101",level:3},{value:"mobile-2.24.4",id:"mobile-2244",level:3},{value:"tv-1.0.0",id:"tv-100",level:3},{value:"2.24.3",id:"2243",level:3},{value:"2.24.2",id:"2242",level:3},{value:"2.24.1",id:"2241",level:3},{value:"2.24.0",id:"2240",level:3},{value:"2.23.4",id:"2234",level:3},{value:"2.23.3",id:"2233",level:3},{value:"2.23.2",id:"2232",level:3},{value:"2.23.1",id:"2231",level:3},{value:"2.23.0",id:"2230",level:3},{value:"2.22.9",id:"2229",level:3},{value:"2.22.8",id:"2228",level:3},{value:"2.22.7",id:"2227",level:3},{value:"2.22.6",id:"2226",level:3},{value:"2.22.5",id:"2225",level:3},{value:"2.22.4",id:"2224",level:3},{value:"2.22.3",id:"2223",level:3},{value:"2.22.2",id:"2222",level:3},{value:"2.22.1",id:"2221",level:3},{value:"2.22.0",id:"2220",level:3},{value:"2.21.5",id:"2215",level:3},{value:"2.21.4",id:"2214",level:3},{value:"2.21.3",id:"2213",level:3},{value:"2.21.2",id:"2212",level:3},{value:"2.21.1",id:"2211",level:3},{value:"2.21.0",id:"2210",level:3},{value:"2.20.10",id:"22010",level:3},{value:"2.20.9",id:"2209",level:3},{value:"2.20.8",id:"2208",level:3},{value:"2.20.7",id:"2207",level:3},{value:"2.20.6",id:"2206",level:3},{value:"2.20.5",id:"2205",level:3},{value:"2.20.4",id:"2204",level:3},{value:"2.20.3",id:"2203",level:3},{value:"2.20.2",id:"2202",level:3},{value:"2.20.1",id:"2201",level:3},{value:"2.20.0",id:"2200",level:3},{value:"2.19.4",id:"2194",level:3},{value:"2.19.3",id:"2193",level:3},{value:"2.19.2",id:"2192",level:3},{value:"2.19.1",id:"2191",level:3},{value:"2.19.0",id:"2190",level:3},{value:"2.18.8",id:"2188",level:3},{value:"2.18.7",id:"2187",level:3},{value:"2.18.6",id:"2186",level:3},{value:"2.18.5",id:"2185",level:3},{value:"2.18.4",id:"2184",level:3},{value:"2.18.3",id:"2183",level:3},{value:"2.18.2",id:"2182",level:3},{value:"2.18.1",id:"2181",level:3},{value:"2.18.0",id:"2180",level:3},{value:"2.17.6",id:"2176",level:3},{value:"2.17.5",id:"2175",level:3},{value:"2.17.4",id:"2174",level:3},{value:"2.17.3",id:"2173",level:3},{value:"2.17.2",id:"2172",level:3},{value:"2.17.1",id:"2171",level:3},{value:"2.17.0",id:"2170",level:3},{value:"2.16.5",id:"2165",level:3},{value:"2.16.4",id:"2164",level:3},{value:"2.16.3",id:"2163",level:3},{value:"2.16.2",id:"2162",level:3},{value:"2.16.1",id:"2161",level:3},{value:"2.16.0",id:"2160",level:3},{value:"2.15.3",id:"2153",level:3},{value:"2.15.2",id:"2152",level:3},{value:"2.15.1",id:"2151",level:3},{value:"2.15.0",id:"2150",level:3},{value:"2.14.0",id:"2140",level:3},{value:"2.13.4",id:"2134",level:3},{value:"2.13.3",id:"2133",level:3},{value:"2.13.2",id:"2132",level:3},{value:"2.13.1",id:"2131",level:3},{value:"2.13.0",id:"2130",level:3},{value:"2.12.6",id:"2126",level:3},{value:"2.12.5",id:"2125",level:3},{value:"2.12.4",id:"2124",level:3},{value:"2.12.3",id:"2123",level:3},{value:"2.12.2",id:"2122",level:3},{value:"2.12.1",id:"2121",level:3},{value:"2.12.0",id:"2120",level:3},{value:"2.11.4",id:"2114",level:3},{value:"2.11.3",id:"2113",level:3},{value:"2.11.2",id:"2112",level:3},{value:"2.11.1",id:"2111",level:3},{value:"2.11.0",id:"2110",level:3},{value:"2.10.2",id:"2102",level:3},{value:"2.10.1",id:"2101",level:3},{value:"2.10.0",id:"2100",level:3},{value:"2.9.12",id:"2912",level:3},{value:"2.9.11",id:"2911",level:3},{value:"2.9.10",id:"2910",level:3},{value:"2.9.9",id:"299",level:3},{value:"2.9.8",id:"298",level:3},{value:"2.9.7",id:"297",level:3},{value:"2.9.6",id:"296",level:3},{value:"2.9.5",id:"295",level:3},{value:"2.9.4",id:"294",level:3},{value:"2.9.3",id:"293",level:3},{value:"2.9.2",id:"292",level:3},{value:"2.9.1",id:"291",level:3},{value:"2.9.0",id:"290",level:3},{value:"2.8.9",id:"289",level:3},{value:"2.8.8",id:"288",level:3},{value:"2.8.7",id:"287",level:3},{value:"2.8.6",id:"286",level:3},{value:"2.8.5",id:"285",level:3},{value:"2.8.4",id:"284",level:3},{value:"2.8.3",id:"283",level:3},{value:"2.8.2",id:"282",level:3},{value:"2.8.1",id:"281",level:3},{value:"2.8.0",id:"280",level:3},{value:"2.7.9",id:"279",level:3},{value:"2.7.8",id:"278",level:3},{value:"2.7.7",id:"277",level:3},{value:"2.7.6",id:"276",level:3},{value:"2.7.5",id:"275",level:3},{value:"2.7.4",id:"274",level:3},{value:"2.7.3",id:"273",level:3},{value:"2.7.2",id:"272",level:3},{value:"2.7.1",id:"271",level:3},{value:"2.7.0",id:"270",level:3},{value:"2.6.9",id:"269",level:3},{value:"2.6.8",id:"268",level:3},{value:"2.6.7",id:"267",level:3},{value:"2.6.6",id:"266",level:3},{value:"2.6.5",id:"265",level:3},{value:"2.6.4",id:"264",level:3},{value:"2.6.3",id:"263",level:3},{value:"2.6.1",id:"261",level:3},{value:"2.6.0",id:"260",level:3},{value:"2.5.9",id:"259",level:3},{value:"2.5.8",id:"258",level:3},{value:"2.5.7",id:"257",level:3},{value:"2.5.6",id:"256",level:3},{value:"2.5.5",id:"255",level:3},{value:"2.5.4",id:"254",level:3},{value:"2.5.3",id:"253",level:3},{value:"2.5.2",id:"252",level:3},{value:"2.5.1",id:"251",level:3},{value:"2.5.0",id:"250",level:3},{value:"2.4.9",id:"249",level:3},{value:"2.4.8",id:"248",level:3},{value:"2.4.7",id:"247",level:3},{value:"2.4.6",id:"246",level:3},{value:"2.4.5",id:"245",level:3},{value:"2.4.4",id:"244",level:3},{value:"2.4.3",id:"243",level:3},{value:"2.4.2",id:"242",level:3},{value:"2.4.1",id:"241",level:3},{value:"2.4.0",id:"240",level:3},{value:"2.3.5",id:"235",level:3},{value:"2.3.4",id:"234",level:3},{value:"2.3.3",id:"233",level:3},{value:"2.3.2",id:"232",level:3},{value:"2.3.1",id:"231",level:3},{value:"2.3.0",id:"230",level:3},{value:"2.2.1",id:"221",level:3},{value:"2.2.0",id:"220",level:3},{value:"2.1.0",id:"210",level:3},{value:"2.0.2",id:"202",level:3},{value:"0.9.19",id:"0919",level:3},{value:"0.9.18",id:"0918",level:3},{value:"0.9.16",id:"0916",level:3},{value:"0.9.14",id:"0914",level:3},{value:"0.9.13",id:"0913",level:3}],g={toc:o},d="wrapper";function y(e){let{components:l,...a}=e;return(0,t.yg)(d,(0,i.A)({},g,a,{components:l,mdxType:"MDXLayout"}),(0,t.yg)("h1",{id:"changelog"},"ChangeLog"),(0,t.yg)("h3",{id:"mobile-2247"},"mobile-2.24.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support display panel entrance in profile list actions"),(0,t.yg)("li",{parentName:"ul"},"Update proxy group select ui")),(0,t.yg)("h3",{id:"mobile-2246"},"mobile-2.24.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix wireshark sshdump crash")),(0,t.yg)("h3",{id:"mobile-2245"},"mobile-2.24.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix Android 15 crash in some subpages"),(0,t.yg)("li",{parentName:"ul"},"Update geoip library file"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"tv-103"},"tv-1.0.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support profile fetch timeout config")),(0,t.yg)("h3",{id:"tv-102"},"tv-1.0.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix setting crash on Android 8.0"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"tv-101"},"tv-1.0.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add launcher entrance for non leanback devices"),(0,t.yg)("li",{parentName:"ul"},"Add public IP display support"),(0,t.yg)("li",{parentName:"ul"},"Fix delete last profile crash")),(0,t.yg)("h3",{id:"mobile-2244"},"mobile-2.24.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add location permission explanation to meet google play policy requirement"),(0,t.yg)("li",{parentName:"ul"},"Adapt to Android 15"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"tv-100"},"tv-1.0.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"First version")),(0,t.yg)("h3",{id:"2243"},"2.24.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Display proxy group name in log"),(0,t.yg)("li",{parentName:"ul"},"Support modify profile fetch timeout in setting"),(0,t.yg)("li",{parentName:"ul"},"Support temporarily disable bypass mode and remember config"),(0,t.yg)("li",{parentName:"ul"},"Bypass list sort mode config now will be remember"),(0,t.yg)("li",{parentName:"ul"},"Improve profile compatibility"),(0,t.yg)("li",{parentName:"ul"},"Reduce apk size"),(0,t.yg)("li",{parentName:"ul"},"Remove GMS qrcode scanner"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2242"},"2.24.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Display proxy group name in log"),(0,t.yg)("li",{parentName:"ul"},"Support modify profile fetch timeout in setting"),(0,t.yg)("li",{parentName:"ul"},"Support temporarily disable bypass mode and remember config"),(0,t.yg)("li",{parentName:"ul"},"Bypass list sort mode config now will be remember"),(0,t.yg)("li",{parentName:"ul"},"Improve profile compatibility"),(0,t.yg)("li",{parentName:"ul"},"Reduce apk size"),(0,t.yg)("li",{parentName:"ul"},"Remove GMS qrcode scanner"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2241"},"2.24.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix VPN start failed if include wireguard proxy"),(0,t.yg)("li",{parentName:"ul"},"Add compatible mode in bypass config list, fix list item click issue"),(0,t.yg)("li",{parentName:"ul"},"Add more profile content checking"),(0,t.yg)("li",{parentName:"ul"},"Replace some toast with snackbar"),(0,t.yg)("li",{parentName:"ul"},"Include hidden proxy group proxies in global mode by default"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2240"},"2.24.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix DoH not working issue"),(0,t.yg)("li",{parentName:"ul"},"Fix tablet not display profile content in landscape"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2234"},"2.23.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Make recursive ",(0,t.yg)("inlineCode",{parentName:"li"},"include-other-group")," not rely on defined sequence"),(0,t.yg)("li",{parentName:"ul"},"Fix dialog transition"),(0,t.yg)("li",{parentName:"ul"},"Fix LAN multicast sometime not working if ",(0,t.yg)("inlineCode",{parentName:"li"},"udp-policy-not-supported-behaviour")," set to ",(0,t.yg)("inlineCode",{parentName:"li"},"REJECT")),(0,t.yg)("li",{parentName:"ul"},"Fix external resource manually fetch failed cause crash")),(0,t.yg)("h3",{id:"2233"},"2.23.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add manually edit host ui"),(0,t.yg)("li",{parentName:"ul"},"Improve dns response printing"),(0,t.yg)("li",{parentName:"ul"},"Change accessibility mode back to manually ")),(0,t.yg)("h3",{id:"2232"},"2.23.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support ",(0,t.yg)("inlineCode",{parentName:"li"},"preshared-key")," param in wireguard"),(0,t.yg)("li",{parentName:"ul"},"Improve profile compatibility"),(0,t.yg)("li",{parentName:"ul"},"Improve accessibility compatibility")),(0,t.yg)("h3",{id:"2231"},"2.23.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve profile compatibility"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2230"},"2.23.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add ARMv8 crypto extension support to improve ss throughput performance"),(0,t.yg)("li",{parentName:"ul"},"Add udp label in proxy list to indicate udp relay support"),(0,t.yg)("li",{parentName:"ul"},"Support Android 12L+ activity embedding"),(0,t.yg)("li",{parentName:"ul"},"Update Japanese/Korean language translation"),(0,t.yg)("li",{parentName:"ul"},"Improve profile compatibility, make include-all-proxies only include proxies under ","[Proxy]"," section"),(0,t.yg)("li",{parentName:"ul"},"Improve profile import error prompt"),(0,t.yg)("li",{parentName:"ul"},"Fix simple-obfs slightly memory leak"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2229"},"2.22.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve accessibility compatibility"),(0,t.yg)("li",{parentName:"ul"},"Improve profile compatibility"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2228"},"2.22.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix public ip value issue"),(0,t.yg)("li",{parentName:"ul"},"Fix theme display issue")),(0,t.yg)("h3",{id:"2227"},"2.22.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Use DNS over HTTPS in profile fetcher to handle dns pollution issues"),(0,t.yg)("li",{parentName:"ul"},"Add masked from recent task option"),(0,t.yg)("li",{parentName:"ul"},"Add hide from recent task option"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2226"},"2.22.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add NAT detection tool"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2225"},"2.22.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support sort mode in bypass config"),(0,t.yg)("li",{parentName:"ul"},"Fix tile issue"),(0,t.yg)("li",{parentName:"ul"},"Add mtu option in settings"),(0,t.yg)("li",{parentName:"ul"},"Fix ssid/bssid issue when surfboard is in background"),(0,t.yg)("li",{parentName:"ul"},"Make ",(0,t.yg)("inlineCode",{parentName:"li"},"policy-regex-filter")," support partial match with ",(0,t.yg)("inlineCode",{parentName:"li"},"include-all-proxies")," and ",(0,t.yg)("inlineCode",{parentName:"li"},"include-other-group"))),(0,t.yg)("h3",{id:"2224"},"2.22.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix dns query issue on Android 14"),(0,t.yg)("li",{parentName:"ul"},"Fix proxy group speedtest not working issue"),(0,t.yg)("li",{parentName:"ul"},"Fix some vmess proxy not working issue")),(0,t.yg)("p",null,"Issue above was introduced in 2.22.1 and 2.22.3"),(0,t.yg)("h3",{id:"2223"},"2.22.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Make dynamic color theme support pure dark"),(0,t.yg)("li",{parentName:"ul"},"Improve profile compatibility"),(0,t.yg)("li",{parentName:"ul"},"Synchronize proxy test result in different proxy group "),(0,t.yg)("li",{parentName:"ul"},"Bug fix")),(0,t.yg)("h3",{id:"2222"},"2.22.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2221"},"2.22.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add pure dark theme support"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2220"},"2.22.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add wireguard proxy support"),(0,t.yg)("li",{parentName:"ul"},"Add ",(0,t.yg)("inlineCode",{parentName:"li"},"include-other-group")," support"),(0,t.yg)("li",{parentName:"ul"},"Ignore ponte proxy"),(0,t.yg)("li",{parentName:"ul"},"Update embedded geoip library"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2215"},"2.21.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix change theme not working on some devices"),(0,t.yg)("li",{parentName:"ul"},"Fix public ip card display ipv6 format address"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Fix window background color error"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2214"},"2.21.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix switch media import crash introduced in previous version"),(0,t.yg)("li",{parentName:"ul"},"Improve vpn open speed"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2213"},"2.21.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support use ftp to modify profiles list"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2212"},"2.21.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support auto zoom in gms qrcode scanner"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2211"},"2.21.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support ",(0,t.yg)("inlineCode",{parentName:"li"},"force-remote-dns")," and ",(0,t.yg)("inlineCode",{parentName:"li"},"enhanced-mode")," in ",(0,t.yg)("inlineCode",{parentName:"li"},"PROCESS-NAME")," rules"),(0,t.yg)("li",{parentName:"ul"},"Fix tile click not working on Android 14"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2210"},"2.21.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support some misc rule. ",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"with ",(0,t.yg)("inlineCode",{parentName:"li"},"IN-PORT")," and ",(0,t.yg)("inlineCode",{parentName:"li"},"SRC-IP"),", now you can control traffic from lan proxy more easily."),(0,t.yg)("li",{parentName:"ul"},"For more info, please check ",(0,t.yg)("a",{parentName:"li",href:"https://getsurfboard.com/docs/profile-format/rule/misc"},"manual")))),(0,t.yg)("li",{parentName:"ul"},"Add compact profile list support"),(0,t.yg)("li",{parentName:"ul"},"Unify menu icon ui"),(0,t.yg)("li",{parentName:"ul"},"Update bottom sheet peek height"),(0,t.yg)("li",{parentName:"ul"},"Display remote client info from lan proxy in logcat"),(0,t.yg)("li",{parentName:"ul"},"Adapt to Android 14")),(0,t.yg)("h3",{id:"22010"},"2.20.10"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Ignore invalid proxy when importing multiple uri"),(0,t.yg)("li",{parentName:"ul"},"Remove sponsor entrance")),(0,t.yg)("h3",{id:"2209"},"2.20.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Display private ip in sshdump card"),(0,t.yg)("li",{parentName:"ul"},"Improve vmess uri compatibility")),(0,t.yg)("h3",{id:"2208"},"2.20.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix import profile compatibility issue"),(0,t.yg)("li",{parentName:"ul"},"Avoid close ui when toggle tile"),(0,t.yg)("li",{parentName:"ul"},"Fix update profile notify issue"),(0,t.yg)("li",{parentName:"ul"},"Fix private ip and dns not display when starting vpn from tile"),(0,t.yg)("li",{parentName:"ul"},"Improve geoip compatibility"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2207"},"2.20.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2206"},"2.20.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support bypass TLS verification when fetching profiles and external resources"),(0,t.yg)("li",{parentName:"ul"},"Print package name in dns log"),(0,t.yg)("li",{parentName:"ul"},"Avoid toasting when starting vpn"),(0,t.yg)("li",{parentName:"ul"},"Fix subnet rule bugs"),(0,t.yg)("li",{parentName:"ul"},"Bug fix")),(0,t.yg)("h3",{id:"2205"},"2.20.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fix")),(0,t.yg)("h3",{id:"2204"},"2.20.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix in app update crashing")),(0,t.yg)("h3",{id:"2203"},"2.20.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add changelog entrance in app"),(0,t.yg)("li",{parentName:"ul"},"Allow to be installed in sdcard"),(0,t.yg)("li",{parentName:"ul"},"Bug fix")),(0,t.yg)("h3",{id:"2202"},"2.20.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Profile content: add ",(0,t.yg)("a",{parentName:"li",href:"https://getsurfboard.com/docs/profile-format/rule/subnet"},"subnet type rules")," support"),(0,t.yg)("li",{parentName:"ul"},"About settings: add new version checking in non-googleplay installation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2201"},"2.20.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Profile content: add subnet type rules support"),(0,t.yg)("li",{parentName:"ul"},"About settings: add new version checking in non-googleplay installation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2200"},"2.20.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Update profile list ui:",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Add suggestion chip"),(0,t.yg)("li",{parentName:"ul"},"Add sponsors entrance in footer"),(0,t.yg)("li",{parentName:"ul"},"Add manual entrance when empty"))),(0,t.yg)("li",{parentName:"ul"},"Add app widget support: public ip, dns and private ip"),(0,t.yg)("li",{parentName:"ul"},"Update app shortcut icon"),(0,t.yg)("li",{parentName:"ul"},"GeoIP library now support auto update"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2194"},"2.19.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support query ip location on tool list"),(0,t.yg)("li",{parentName:"ul"},"Support scan qrcode from gallery"),(0,t.yg)("li",{parentName:"ul"},"Catch WebView core missing exception"),(0,t.yg)("li",{parentName:"ul"},"Automatically restart VPN when switching selected profile"),(0,t.yg)("li",{parentName:"ul"},"Change QRCode library to reduce APK size"),(0,t.yg)("li",{parentName:"ul"},"Support display external resource timeout message when fetching profile"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Allow copy url in settings"),(0,t.yg)("li",{parentName:"ul"},"Fix UI issues"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2193"},"2.19.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix profile item menu not focusable on tv devices"),(0,t.yg)("li",{parentName:"ul"},"Update profile editor library version"),(0,t.yg)("li",{parentName:"ul"},"Add detection for TLS handshake failure due to Client/Server time mismatch"),(0,t.yg)("li",{parentName:"ul"},"Add divider for toolbar"),(0,t.yg)("li",{parentName:"ul"},"Update handler ui for bottom sheet"),(0,t.yg)("li",{parentName:"ul"},"Always show label in bottom navigation bar (as you wish)"),(0,t.yg)("li",{parentName:"ul"},"Support use editor to view external resource content(policy path/rule set/domain set)"),(0,t.yg)("li",{parentName:"ul"},"Fix vpn time ticker got running when vpn is not started"),(0,t.yg)("li",{parentName:"ul"},"Update some ui detail for android tv devices"),(0,t.yg)("li",{parentName:"ul"},"Fix duplicated notification action"),(0,t.yg)("li",{parentName:"ul"},"Fix proxy list align issue"),(0,t.yg)("li",{parentName:"ul"},"Add cloudflare speed test entrance in tools list")),(0,t.yg)("h3",{id:"2192"},"2.19.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve trojan/vmess uri compatibility"),(0,t.yg)("li",{parentName:"ul"},"Fix UI overlay issue"),(0,t.yg)("li",{parentName:"ul"},"Upload bypass vpn setting description for better understanding"),(0,t.yg)("li",{parentName:"ul"},"Fix Android TV speed test icon not focusable"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2191"},"2.19.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add batch update profiles support"),(0,t.yg)("li",{parentName:"ul"},"Add pin profiles support"),(0,t.yg)("li",{parentName:"ul"},"Add back bypass vpn toggle setting"),(0,t.yg)("li",{parentName:"ul"},"Support display network error info when import profile failed due to fetch external resource failure"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Fix some translation")),(0,t.yg)("h3",{id:"2190"},"2.19.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix fd leak causeb by IPC protect"),(0,t.yg)("li",{parentName:"ul"},"Fix OOM caused by editor"),(0,t.yg)("li",{parentName:"ul"},"Enlarge proxy list item maximum width"),(0,t.yg)("li",{parentName:"ul"},"Bypass list support case-insensitive search"),(0,t.yg)("li",{parentName:"ul"},"Support detect multiple proxies with the same name but not equals to each other"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2188"},"2.18.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix Android 13+ issue introduce in 2.18.7")),(0,t.yg)("h3",{id:"2187"},"2.18.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support test-timeout param"),(0,t.yg)("li",{parentName:"ul"},"DomainSet use binary search list instead of hashMap, search speed will be slower, but memory consumption will also be lower"),(0,t.yg)("li",{parentName:"ul"},"Apply some skip-proxy rules on tun interface on Android 13+"),(0,t.yg)("li",{parentName:"ul"},"Re-enable recent request entrance"),(0,t.yg)("li",{parentName:"ul"},"Fix some ui issue on 7 inch tablet"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Fix ss proxy server domain not query through DOH"),(0,t.yg)("li",{parentName:"ul"},"Fix DNS query log error")),(0,t.yg)("h3",{id:"2186"},"2.18.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2185"},"2.18.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix TCP KeepAlive toggle not working"),(0,t.yg)("li",{parentName:"ul"},"Add session id in logcat"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Improve profile import")),(0,t.yg)("h3",{id:"2184"},"2.18.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("inlineCode",{parentName:"li"},"include-all-proxies")," now will include all proxies in ",(0,t.yg)("inlineCode",{parentName:"li"},"[Proxy]")," and ",(0,t.yg)("inlineCode",{parentName:"li"},"[Proxy Group]"),", including external proxies"),(0,t.yg)("li",{parentName:"ul"},"Add TCP keep alive toggle for proxy in settings"),(0,t.yg)("li",{parentName:"ul"},"Display last exit reason in developer options ui"),(0,t.yg)("li",{parentName:"ul"},"Catch profile decode exception instead of returning success"),(0,t.yg)("li",{parentName:"ul"},"Reduce APK size"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2183"},"2.18.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve embedded profile editor performance on huge profile"),(0,t.yg)("li",{parentName:"ul"},"Fix crash"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2182"},"2.18.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support share profile via qrcode"),(0,t.yg)("li",{parentName:"ul"},"Dashboard ui support dynamic column size, add back NavigationRailView"),(0,t.yg)("li",{parentName:"ul"},"Try to fix 'too many open files' issue"),(0,t.yg)("li",{parentName:"ul"},"Add fd count display in developer options ui"),(0,t.yg)("li",{parentName:"ul"},"Reduce APK size"),(0,t.yg)("li",{parentName:"ul"},"Support unofficial allowInsecure param in trojan uri"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2181"},"2.18.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix STUN NAT"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2180"},"2.18.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support UTLS"),(0,t.yg)("li",{parentName:"ul"},"Support bypass config import/export")),(0,t.yg)("h3",{id:"2176"},"2.17.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Modify some setting entrance"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2175"},"2.17.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2174"},"2.17.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix no network sometime switch from mobile to wifi"),(0,t.yg)("li",{parentName:"ul"},"Fix ProxyGroup tabs scrolling issue introduced in 2.17.3"),(0,t.yg)("li",{parentName:"ul"},"Rerun url-test/fallback group speedometer when network changed"),(0,t.yg)("li",{parentName:"ul"},"Improve save profile error message display"),(0,t.yg)("li",{parentName:"ul"},"Fix speedometer direct test failed"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2173"},"2.17.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Rewrite speedometer module",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Support synchronize test result between different tabs"),(0,t.yg)("li",{parentName:"ul"},"Support sort by default/delay/name"),(0,t.yg)("li",{parentName:"ul"},"Support auto sort after test finished")))),(0,t.yg)("h3",{id:"2172"},"2.17.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support ",(0,t.yg)("inlineCode",{parentName:"li"},"fallback")," group type"),(0,t.yg)("li",{parentName:"ul"},"Improve Android TV experience"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2171"},"2.17.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support ",(0,t.yg)("inlineCode",{parentName:"li"},"include-all-proxies")," standard in proxy group"),(0,t.yg)("li",{parentName:"ul"},"Improve UI compatibility with Samsung tablet sidebar"),(0,t.yg)("li",{parentName:"ul"},"Improve UI compatibility with Android 13 foldable phone bottom bar"),(0,t.yg)("li",{parentName:"ul"},"Add bottomBar support in profile editor"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2170"},"2.17.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Dashboard: now you can long press to hide card, or toggle card visibility in the top right menu"),(0,t.yg)("li",{parentName:"ul"},"Add public ip visibility toggle animation"),(0,t.yg)("li",{parentName:"ul"},"Update some displayed text"),(0,t.yg)("li",{parentName:"ul"},"Remove some profile url format checking for better compatibility")),(0,t.yg)("h3",{id:"2165"},"2.16.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix OOM issue cause by doh function"),(0,t.yg)("li",{parentName:"ul"},"Adapt to Android 13 per-app language settings"),(0,t.yg)("li",{parentName:"ul"},"Fix empty local proxy card issue"),(0,t.yg)("li",{parentName:"ul"},"Add OOM monitor debug function"),(0,t.yg)("li",{parentName:"ul"},"Make panel dialog content url and email clickable"),(0,t.yg)("li",{parentName:"ul"},"Reduce apk size"),(0,t.yg)("li",{parentName:"ul"},"Disable hide vpn notification setting on MIUI"),(0,t.yg)("li",{parentName:"ul"},"Support click sshdump bar in dashboard to open vpn settings")),(0,t.yg)("h3",{id:"2164"},"2.16.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix some oom issue"),(0,t.yg)("li",{parentName:"ul"},"Fix speed curve frozen when speed is zero"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Update embedded geoip library"),(0,t.yg)("li",{parentName:"ul"},"Display LAN ip in local ip card ui"),(0,t.yg)("li",{parentName:"ul"},"Respect ruleSet/domainSet sequence")),(0,t.yg)("h3",{id:"2163"},"2.16.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Add vmess username format validate"),(0,t.yg)("li",{parentName:"ul"},"Update switch preference ui")),(0,t.yg)("h3",{id:"2162"},"2.16.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add profile sub menu support"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Adapt to Android 13 excludeRoute method"),(0,t.yg)("li",{parentName:"ul"},"Add so library missing detect"),(0,t.yg)("li",{parentName:"ul"},"Reduce suffix domain rule memory usage"),(0,t.yg)("li",{parentName:"ul"},"Fix miui gesture bar color"),(0,t.yg)("li",{parentName:"ul"},"Support long press ip card to copy ip"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2161"},"2.16.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support ",(0,t.yg)("a",{parentName:"li",href:"https://getsurfboard.com/docs/profile-format/panel/static"},"panel")),(0,t.yg)("li",{parentName:"ul"},"Fix shadowsocks protocol crash issue")),(0,t.yg)("h3",{id:"2160"},"2.16.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix connection count issue"),(0,t.yg)("li",{parentName:"ul"},"Adapt to Android 13 notification permission request"),(0,t.yg)("li",{parentName:"ul"},"Update start when boot logic")),(0,t.yg)("h3",{id:"2153"},"2.15.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix some memory leak issues"),(0,t.yg)("li",{parentName:"ul"},"Fix bugs")),(0,t.yg)("h3",{id:"2152"},"2.15.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Try fix connection count issue by not using protect api"),(0,t.yg)("li",{parentName:"ul"},"Add unsupported YAML format profile detection"),(0,t.yg)("li",{parentName:"ul"},"Compatible with number value with unit suffix in profile content"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2151"},"2.15.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Display native process memory consumption in developer ui"),(0,t.yg)("li",{parentName:"ul"},"Add Nintendo Switch media import support(Android 10+)"),(0,t.yg)("li",{parentName:"ul"},"Update shortcut icon shape"),(0,t.yg)("li",{parentName:"ul"},"Move sshdump into vpn setting"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Bugfix")),(0,t.yg)("h3",{id:"2150"},"2.15.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add new traffic list ui"),(0,t.yg)("li",{parentName:"ul"},"Support websocket in trojan protocol"),(0,t.yg)("li",{parentName:"ul"},"Revert to previous dark icon")),(0,t.yg)("h3",{id:"2140"},"2.14.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Reduce VPN CPU usage"),(0,t.yg)("li",{parentName:"ul"},"Add more notification settings"),(0,t.yg)("li",{parentName:"ul"},"Add recommend doh server list"),(0,t.yg)("li",{parentName:"ul"},"Add export log in tool list"),(0,t.yg)("li",{parentName:"ul"},"Update embedded geoip library"),(0,t.yg)("li",{parentName:"ul"},"Add document entry in external resources ui"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2134"},"2.13.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix tile not working on color os"),(0,t.yg)("li",{parentName:"ul"},"Hide VPN notification badge icon"),(0,t.yg)("li",{parentName:"ul"},"Fix timeout when applying 'force-remote-dns' on direct rule domain"),(0,t.yg)("li",{parentName:"ul"},"Support decode 'persistent' param in load balanced group")),(0,t.yg)("h3",{id:"2133"},"2.13.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add custom geoip database support")),(0,t.yg)("h3",{id:"2132"},"2.13.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Optimize DOMAIN-SET memory usage ")),(0,t.yg)("h3",{id:"2131"},"2.13.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve DOMAIN-SET performance"),(0,t.yg)("li",{parentName:"ul"},"Improve proxy group ui performance")),(0,t.yg)("h3",{id:"2130"},"2.13.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support DOMAIN-SET rule"),(0,t.yg)("li",{parentName:"ul"},"Fix force-remote-dns setting not working for domain rules in RULE-SET"),(0,t.yg)("li",{parentName:"ul"},"Add korean language support")),(0,t.yg)("h3",{id:"2126"},"2.12.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"update public ip batch fetch"),(0,t.yg)("li",{parentName:"ul"},"support display flag emoji on public ip card"),(0,t.yg)("li",{parentName:"ul"},"try to fix traffic loop is proxy host is ip format"),(0,t.yg)("li",{parentName:"ul"},"better handle horizontal orientation")),(0,t.yg)("h3",{id:"2125"},"2.12.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix setting crash issue")),(0,t.yg)("h3",{id:"2124"},"2.12.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve tablet ui"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2123"},"2.12.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support load-balance proxy group"),(0,t.yg)("li",{parentName:"ul"},"Process rule support wildcard match"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2122"},"2.12.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Move google api checking to tools list"),(0,t.yg)("li",{parentName:"ul"},"Update tools list ui")),(0,t.yg)("h3",{id:"2121"},"2.12.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix google api availability checking crash")),(0,t.yg)("h3",{id:"2120"},"2.12.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add google api availability checking"),(0,t.yg)("li",{parentName:"ul"},"Add invalid managed config url faq entrance"),(0,t.yg)("li",{parentName:"ul"},"Disable sshdump on android 7 and lower"),(0,t.yg)("li",{parentName:"ul"},"Support dynamic change ui translation on the fly")),(0,t.yg)("h3",{id:"2114"},"2.11.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add GMS QRCode scanner support"),(0,t.yg)("li",{parentName:"ul"},"Improve dns ip display outside mainland China"),(0,t.yg)("li",{parentName:"ul"},"Fix public ip display issue"),(0,t.yg)("li",{parentName:"ul"},"Update profile menu item sequence"),(0,t.yg)("li",{parentName:"ul"},"Fix DoH server verify exception"),(0,t.yg)("li",{parentName:"ul"},"Add Android TV App entrance(still using mobile ui)"),(0,t.yg)("li",{parentName:"ul"},"Add private ip card in dashboard"),(0,t.yg)("li",{parentName:"ul"},"Update GEOIP library"),(0,t.yg)("li",{parentName:"ul"},"Add more theme support")),(0,t.yg)("h3",{id:"2113"},"2.11.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support drag and drop feature in profile list ui"),(0,t.yg)("li",{parentName:"ul"},"Add wireshark sshdump support in tools list"),(0,t.yg)("li",{parentName:"ul"},"Add DnsPod DoH server in embedded profile template"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"2112"},"2.11.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bring better wildcard match for skip-proxy, always-real-ip and host rule"),(0,t.yg)("li",{parentName:"ul"},"Add vpn toggle toast"),(0,t.yg)("li",{parentName:"ul"},"Improve public ip api usability"),(0,t.yg)("li",{parentName:"ul"},"Change editor newline symbol for better compatibility"),(0,t.yg)("li",{parentName:"ul"},"Fix theme setting crash on lower version devies"),(0,t.yg)("li",{parentName:"ul"},"Fix change theme not working on lower version devices"),(0,t.yg)("li",{parentName:"ul"},"Fix self traffic handle error")),(0,t.yg)("h3",{id:"2111"},"2.11.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add allowing bypass VPN setting"),(0,t.yg)("li",{parentName:"ul"},"Disable text highlight in embedded profile editor to improve performance"),(0,t.yg)("li",{parentName:"ul"},"New theme setting ui, support devices lower than Android 12"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2110"},"2.11.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support change theme palette(If you have better color recommended, please contact me)"),(0,t.yg)("li",{parentName:"ul"},"Support override ",(0,t.yg)("a",{parentName:"li",href:"https://getsurfboard.com/docs/profile-format/general/doh_server"},"doh-server")," config in setting"),(0,t.yg)("li",{parentName:"ul"},"Improve VPN start speed when using huge profile"),(0,t.yg)("li",{parentName:"ul"},"Support toggle offline/disabled app display in bypass app list"),(0,t.yg)("li",{parentName:"ul"},"Fix fetch profile timeout if contains self url as policy path url"),(0,t.yg)("li",{parentName:"ul"},"Improve recent requests list performance, support fast scroll"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2102"},"2.10.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Change default vmess-aead value to true")),(0,t.yg)("h3",{id:"2101"},"2.10.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support profile url as policy path url"),(0,t.yg)("li",{parentName:"ul"},"Fix profile editor save failed still show as success"),(0,t.yg)("li",{parentName:"ul"},"Fix network unavailable if use global outbound with zero proxies profile"),(0,t.yg)("li",{parentName:"ul"},"Remove override vmess aead setting, please use ",(0,t.yg)("a",{parentName:"li",href:"/docs/profile-format/proxy/external-proxy/vmess"},"vmess-aead")," in profile instead "),(0,t.yg)("li",{parentName:"ul"},"Change profile list sort to natural order"),(0,t.yg)("li",{parentName:"ul"},"Add more protocol recognize in logcat and recent requests"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2100"},"2.10.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add ",(0,t.yg)("inlineCode",{parentName:"li"},"doh-server")," support"),(0,t.yg)("li",{parentName:"ul"},"Add fcm diagnostics entrance in developer options"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"2912"},"2.9.12"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix public ip card random crash issue"),(0,t.yg)("li",{parentName:"ul"},"Fix devices without camera can not install issue")),(0,t.yg)("h3",{id:"2911"},"2.9.11"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Use mlkit qrcode scanning instead of zxing"),(0,t.yg)("li",{parentName:"ul"},"Add Developer Options UI",(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Support viewing memory usage, trigger garbage collect and export memory snapshot"),(0,t.yg)("li",{parentName:"ul"},"Support exporting log file"))),(0,t.yg)("li",{parentName:"ul"},"Unify browser open method"),(0,t.yg)("li",{parentName:"ul"},"Add translate contributor list"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Fix some vmess uri import failed"),(0,t.yg)("li",{parentName:"ul"},"Support HTTP 301 in external resource management"),(0,t.yg)("li",{parentName:"ul"},"Support Android 13 themed app icon")),(0,t.yg)("h3",{id:"2910"},"2.9.10"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support override ",(0,t.yg)("inlineCode",{parentName:"li"},"http-listen")," and ",(0,t.yg)("inlineCode",{parentName:"li"},"socks5-listen")," in profiles"),(0,t.yg)("li",{parentName:"ul"},"Support HTTP 30X redirection when fetching external resource")),(0,t.yg)("h3",{id:"299"},"2.9.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix SS url base64 decode error"),(0,t.yg)("li",{parentName:"ul"},"Add Google Play AAB support"),(0,t.yg)("li",{parentName:"ul"},"Use online sponsor page"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"298"},"2.9.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"297"},"2.9.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add ",(0,t.yg)("inlineCode",{parentName:"li"},"udp-policy-not-supported-behaviour")," support"),(0,t.yg)("li",{parentName:"ul"},"Rewrite external resource manager")),(0,t.yg)("h3",{id:"296"},"2.9.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Profile editor: performance improve, add more highlight support"),(0,t.yg)("li",{parentName:"ul"},"add ",(0,t.yg)("inlineCode",{parentName:"li"},"internet-test-url")," support"),(0,t.yg)("li",{parentName:"ul"},"Compatible with vmess proxy whose ws header value wrapped with quotes"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"295"},"2.9.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add traffic statistics card in dashboard(only count a single session)"),(0,t.yg)("li",{parentName:"ul"},"Add traffic statistics mode in setting, affect notifications, traffic card "),(0,t.yg)("li",{parentName:"ul"},"Toggle notification tile without closing panel"),(0,t.yg)("li",{parentName:"ul"},"Support Google Play In App Update"),(0,t.yg)("li",{parentName:"ul"},"Update libuv to 1.44.1"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"294"},"2.9.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add AppCenter & breakpad"),(0,t.yg)("li",{parentName:"ul"},"Revert outbound UI"),(0,t.yg)("li",{parentName:"ul"},"Add new manual entrance"),(0,t.yg)("li",{parentName:"ul"},"Change public ip fetching api"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"293"},"2.9.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix local proxy address in use crash"),(0,t.yg)("li",{parentName:"ul"},"Update outbound mode card UI"),(0,t.yg)("li",{parentName:"ul"},"Fix crash when upgrade from v1.2.4")),(0,t.yg)("h3",{id:"292"},"2.9.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add local proxy support: http and socks5"),(0,t.yg)("li",{parentName:"ul"},"Update dashboard UI"),(0,t.yg)("li",{parentName:"ul"},"Enable lan traffic filter setting")),(0,t.yg)("h3",{id:"291"},"2.9.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Refetch public ip info when changing outbound mode"),(0,t.yg)("li",{parentName:"ul"},"Fix change global proxy not update public ip info"),(0,t.yg)("li",{parentName:"ul"},"Fix crash cause by vpn quick start twice"),(0,t.yg)("li",{parentName:"ul"},"Fix crash when viewing huge ruleSet/policyPath list"),(0,t.yg)("li",{parentName:"ul"},"Add ChangeLog dialog when click version code"),(0,t.yg)("li",{parentName:"ul"},"Fix random GEOIP crash on Android 5/6"),(0,t.yg)("li",{parentName:"ul"},"Add sponsors list")),(0,t.yg)("h3",{id:"290"},"2.9.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add DNS poisoning auto fix support"),(0,t.yg)("li",{parentName:"ul"},"Fix tile not working on some devices"),(0,t.yg)("li",{parentName:"ul"},"Small UI change"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"289"},"2.8.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix profile serializable crash"),(0,t.yg)("li",{parentName:"ul"},"Remove flurry"),(0,t.yg)("li",{parentName:"ul"},"Use Crashlytics instead of Sentry")),(0,t.yg)("h3",{id:"288"},"2.8.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Fix splash screen top left corner frame"),(0,t.yg)("li",{parentName:"ul"},"Optimize memory usage cause by huge profile/ruleSet/policyPath"),(0,t.yg)("li",{parentName:"ul"},"Add quick change proxygroup selection ui"),(0,t.yg)("li",{parentName:"ul"},"Improve editor launch performance"),(0,t.yg)("li",{parentName:"ul"},"Add update profiles after vpn established toggle in settings"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"287"},"2.8.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Avoid open vpn cause adb wifi reconnect"),(0,t.yg)("li",{parentName:"ul"},"Update all profiles after vpn started"),(0,t.yg)("li",{parentName:"ul"},"Fix crash"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"286"},"2.8.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"285"},"2.8.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add app shortcut support"),(0,t.yg)("li",{parentName:"ul"},"Add deeplink support:"),(0,t.yg)("li",{parentName:"ul"},"surfboard:///toggle"),(0,t.yg)("li",{parentName:"ul"},"surfboard:///start"),(0,t.yg)("li",{parentName:"ul"},"surfboard:///stop"),(0,t.yg)("li",{parentName:"ul"},"surfboard:///install-config?url=","[encoded_profile_url]"),(0,t.yg)("li",{parentName:"ul"},"Bypass config support batch operation"),(0,t.yg)("li",{parentName:"ul"},"Support setting to use external editor"),(0,t.yg)("li",{parentName:"ul"},"Fix manually update profile no refresh last modified time"),(0,t.yg)("li",{parentName:"ul"},"Add change language animation")),(0,t.yg)("h3",{id:"284"},"2.8.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"add more transition animation"),(0,t.yg)("li",{parentName:"ul"},"make language change take effect without restart"),(0,t.yg)("li",{parentName:"ul"},"update editor font"),(0,t.yg)("li",{parentName:"ul"},"fix navigationbar overlay issue in some ui"),(0,t.yg)("li",{parentName:"ul"},"update translation"),(0,t.yg)("li",{parentName:"ul"},"bug fixed")),(0,t.yg)("h3",{id:"283"},"2.8.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"editor support some emacs key map: Ctrl + ","[Shift]"," + N/P/F/B/A/E"),(0,t.yg)("li",{parentName:"ul"},"proxy list support scroll to selected proxy"),(0,t.yg)("li",{parentName:"ul"},"update translation"),(0,t.yg)("li",{parentName:"ul"},"fix menu item repeat issue")),(0,t.yg)("h3",{id:"282"},"2.8.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("p",{parentName:"li"},"Profile Editor"),(0,t.yg)("ul",{parentName:"li"},(0,t.yg)("li",{parentName:"ul"},"Add highlight support"),(0,t.yg)("li",{parentName:"ul"},"Add redo/undo support"),(0,t.yg)("li",{parentName:"ul"},"Add new empty profile support")))),(0,t.yg)("h3",{id:"281"},"2.8.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support embeded editor"),(0,t.yg)("li",{parentName:"ul"},"Small UI change")),(0,t.yg)("h3",{id:"280"},"2.8.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Material Design 3"),(0,t.yg)("li",{parentName:"ul"},"This version may be buggy and won't be release on Google Play until stable. Use on your own risk.")),(0,t.yg)("h3",{id:"279"},"2.7.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"278"},"2.7.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Multiple proxy import now only support dividing with newline, space and vertical bar no longer supported"),(0,t.yg)("li",{parentName:"ul"},"Update vietnamese translation"),(0,t.yg)("li",{parentName:"ul"},"Fix crash")),(0,t.yg)("h3",{id:"277"},"2.7.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Rewrite webdav synchronize module"),(0,t.yg)("li",{parentName:"ul"},"Show profile update option even managed config url is invalid"),(0,t.yg)("li",{parentName:"ul"},"Change vmess/trojan proxy default udp-relay value to false"),(0,t.yg)("li",{parentName:"ul"},"Fix crash when updating invalid profile"),(0,t.yg)("li",{parentName:"ul"},"Fix vmess uri compatibility"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"276"},"2.7.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Remove direct/reject proxy in global proxy group"),(0,t.yg)("li",{parentName:"ul"},"Clone profile as editable profile with managed config removed"),(0,t.yg)("li",{parentName:"ul"},"Exclude unsupported proxy uri (like vless://xxx) when importing"),(0,t.yg)("li",{parentName:"ul"},"Change default proxy column size to middle")),(0,t.yg)("h3",{id:"275"},"2.7.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix SAF editing not trigger profile list refresh"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed.")),(0,t.yg)("h3",{id:"274"},"2.7.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support vmess-aead param in vmess proxy config."),(0,t.yg)("li",{parentName:"ul"},"Add DoH detect."),(0,t.yg)("li",{parentName:"ul"},"Bug fixed."),(0,t.yg)("li",{parentName:"ul"},"Use vmess-aead param to define per-proxy AEAD setting, if param not defined in the profile, default value in the settings will be used."),(0,t.yg)("li",{parentName:"ul"},"For profile format detail, please check the sample profile in the top right corner of profile list.")),(0,t.yg)("h3",{id:"273"},"2.7.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support Always-ON-VPN setting"),(0,t.yg)("li",{parentName:"ul"},"Generate new profile name when reimporting existed profile"),(0,t.yg)("li",{parentName:"ul"},"Improve ICMP/UDP traffic handle efficiency when using profile with tons of rules"),(0,t.yg)("li",{parentName:"ul"},"Support hiding system apps in bypass config"),(0,t.yg)("li",{parentName:"ul"},"Prompt restart VPN after bypass config changed"),(0,t.yg)("li",{parentName:"ul"},"Add disable notification checking in settings"),(0,t.yg)("li",{parentName:"ul"},"Fix active count flicking issue"),(0,t.yg)("li",{parentName:"ul"},"Enable force-remote-dns by default"),(0,t.yg)("li",{parentName:"ul"},"New profile update strategy")),(0,t.yg)("h3",{id:"272"},"2.7.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support always-real-ip"),(0,t.yg)("li",{parentName:"ul"},"Support decoding sni param and proxy name from trojan uri"),(0,t.yg)("li",{parentName:"ul"},"Enable udp-relay in vmess/trojan proxy by default"),(0,t.yg)("li",{parentName:"ul"},"Block DoT traffic by default"),(0,t.yg)("li",{parentName:"ul"},"Update all profile when app launch"),(0,t.yg)("li",{parentName:"ul"},"Support decoding internal.example.com = server:syslib in ","[Host]"," section"),(0,t.yg)("li",{parentName:"ul"},"Support domain suffix in skip-proxy config"),(0,t.yg)("li",{parentName:"ul"},"Improve import profile error prompt"),(0,t.yg)("li",{parentName:"ul"},"Add always-real-ip = stun.l.google.com in ","[General]"," section to fix Google Voice Dialing issue, proxy must support relaying UDP traffic.")),(0,t.yg)("h3",{id:"271"},"2.7.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Keep proxy order from proxygroup which contains policy path and normal proxies"),(0,t.yg)("li",{parentName:"ul"},"Update translation"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"270"},"2.7.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve profile name guessing when import from url"),(0,t.yg)("li",{parentName:"ul"},"Fix rule count error when include multiple ruleset with same source"),(0,t.yg)("li",{parentName:"ul"},"Remove disk cache when removing external resource"),(0,t.yg)("li",{parentName:"ul"},"Fix ip type trojan proxy import issue")),(0,t.yg)("h3",{id:"269"},"2.6.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve huge profile compatibility"),(0,t.yg)("li",{parentName:"ul"},"Improve TLS proxy compatibility"),(0,t.yg)("li",{parentName:"ul"},"Improve profile decode speed"),(0,t.yg)("li",{parentName:"ul"},"Treat REJECT-TINYGIF as REJECT rule (due to android not support MITM)"),(0,t.yg)("li",{parentName:"ul"},"Add Surge manual entrance in tools tab")),(0,t.yg)("h3",{id:"268"},"2.6.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix global group sequence not follow the profile content"),(0,t.yg)("li",{parentName:"ul"},"Fix network speed display issue on 32bit devices"),(0,t.yg)("li",{parentName:"ul"},"Reset all tcp connection when changing outbounds mode"),(0,t.yg)("li",{parentName:"ul"},"Fix proxy count error in some policy path profiles"),(0,t.yg)("li",{parentName:"ul"},"Fix some crashing when upgrade from GP version"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"267"},"2.6.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix ruleSet/policyPath too huge cause crashing"),(0,t.yg)("li",{parentName:"ul"},"Fix network error cause crashing"),(0,t.yg)("li",{parentName:"ul"},"Fix custom uri scheme not working")),(0,t.yg)("h3",{id:"266"},"2.6.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Allow display invalid profiles, now you are free to delete or modify them"),(0,t.yg)("li",{parentName:"ul"},"Change external resource manager entrance to lower location"),(0,t.yg)("li",{parentName:"ul"},"Use force-remote-dns in global outbound mode by default"),(0,t.yg)("li",{parentName:"ul"},"Cache dns cache when toggle vpn, change outbound mode and change proxy group selection"),(0,t.yg)("li",{parentName:"ul"},"Support batch delete unused external resources"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"265"},"2.6.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add external resources manage ui"),(0,t.yg)("li",{parentName:"ul"},"Speed up notification bar tile toggle initial time"),(0,t.yg)("li",{parentName:"ul"},"Use ",(0,t.yg)("a",{parentName:"li",href:"https://github.com/Loyalsoldier/geoip"},"https://github.com/Loyalsoldier/geoip")," as embedded geoip library"),(0,t.yg)("li",{parentName:"ul"},"Update url format validator"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"264"},"2.6.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add Force remote dns toggle in settings"),(0,t.yg)("li",{parentName:"ul"},"Scroll to new position when clone/rename profile"),(0,t.yg)("li",{parentName:"ul"},"Check invalid vmess url format"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"263"},"2.6.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add 'NEW' badge for new profile"),(0,t.yg)("li",{parentName:"ul"},"Use FINAL rule to fetch public IP info if FINAL rule defined"),(0,t.yg)("li",{parentName:"ul"},"ICMP: return fake ICMP reply if match FORWARD policy, return dest unreachable if match REJECT policy"),(0,t.yg)("li",{parentName:"ul"},"Print debug info in logcat if click connection count card when VPN is opened"),(0,t.yg)("li",{parentName:"ul"},"Little UI update")),(0,t.yg)("h3",{id:"261"},"2.6.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Traffic with not supported proto will be reject by default"),(0,t.yg)("li",{parentName:"ul"},"UDP reject will be handled by return ICMP port unreachable by default"),(0,t.yg)("li",{parentName:"ul"},"Warning invalid profile url when importing profile"),(0,t.yg)("li",{parentName:"ul"},"Fix some connection count issue"),(0,t.yg)("li",{parentName:"ul"},"Add more restart vpn prompt"),(0,t.yg)("li",{parentName:"ul"},"Hide network speed statusbar icon toggle on MIUI devices"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"260"},"2.6.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"fix crash"),(0,t.yg)("li",{parentName:"ul"},"Support disable logcat output in settings")),(0,t.yg)("h3",{id:"259"},"2.5.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix some memory/connection leak issue")),(0,t.yg)("h3",{id:"258"},"2.5.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix vmess/netflix compatibility issue cause by ipv6"),(0,t.yg)("li",{parentName:"ul"},"Fix crashes"),(0,t.yg)("li",{parentName:"ul"},"Print warning log when reject traffic"),(0,t.yg)("li",{parentName:"ul"},"Support scan ss/vmess/trojan/http/https/surfboard/surge/surge3 format qrcode")),(0,t.yg)("h3",{id:"257"},"2.5.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix crashes"),(0,t.yg)("li",{parentName:"ul"},"Improve vmess websocket compatibility"),(0,t.yg)("li",{parentName:"ul"},"Update persian language")),(0,t.yg)("h3",{id:"256"},"2.5.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix speedtest issue"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"255"},"2.5.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"update persian language"),(0,t.yg)("li",{parentName:"ul"},"fix telegram using direct rule issue")),(0,t.yg)("h3",{id:"254"},"2.5.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix auto group speed test not working"),(0,t.yg)("li",{parentName:"ul"},"Reset all existed tcp connection when change proxy group selection"),(0,t.yg)("li",{parentName:"ul"},"Avoid forward proxy traffic dead lock"),(0,t.yg)("li",{parentName:"ul"},"Fix crash cause by long file name")),(0,t.yg)("h3",{id:"253"},"2.5.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix speed test issue"),(0,t.yg)("li",{parentName:"ul"},"Support basic auth in profile url")),(0,t.yg)("h3",{id:"252"},"2.5.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix speedtest issue")),(0,t.yg)("h3",{id:"251"},"2.5.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix speed test not stable issue"),(0,t.yg)("li",{parentName:"ul"},"Fix fetching public IP error when use with other VPN"),(0,t.yg)("li",{parentName:"ul"},"Add VMESS AEAD hint when first use"),(0,t.yg)("li",{parentName:"ul"},"Add warning when new profile subscribe url is from localhost")),(0,t.yg)("h3",{id:"250"},"2.5.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix WebDAV synchronize issue with box.com"),(0,t.yg)("li",{parentName:"ul"},"Update dashboard UI"),(0,t.yg)("li",{parentName:"ul"},"Update maxmind geoip2lite library"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"249"},"2.4.9"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add WebDAV synchronize support"),(0,t.yg)("li",{parentName:"ul"},"Fix crash when restart VPN after rename profile"),(0,t.yg)("li",{parentName:"ul"},"Fix fetch ip info failed after VPN established"),(0,t.yg)("li",{parentName:"ul"},"Improve save profile speed"),(0,t.yg)("li",{parentName:"ul"},"Fix update profile last modify time no changing")),(0,t.yg)("h3",{id:"248"},"2.4.8"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve ui compatibility with tablet devices"),(0,t.yg)("li",{parentName:"ul"},"Add network speed display on status bar icon"),(0,t.yg)("li",{parentName:"ul"},"Add Public IP visibility toggle"),(0,t.yg)("li",{parentName:"ul"},"Prompt to restart VPN when selecting profile"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"247"},"2.4.7"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix profile import issue cause by policy-regex-filter"),(0,t.yg)("li",{parentName:"ul"},"Improve profile name guess imported by url"),(0,t.yg)("li",{parentName:"ul"},"Fix UI tab double click issue"),(0,t.yg)("li",{parentName:"ul"},"Fix profile name contains slash cause crash"),(0,t.yg)("li",{parentName:"ul"},"Update sample.conf"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"246"},"2.4.6"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"245"},"2.4.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support policy-regex-filter and hidden in proxy group"),(0,t.yg)("li",{parentName:"ul"},"Fix global outbound make network unavailable"),(0,t.yg)("li",{parentName:"ul"},"Hide notification in lockscreen"),(0,t.yg)("li",{parentName:"ul"},"Make VMESS AEAD disable by default"),(0,t.yg)("li",{parentName:"ul"},"Update UI"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"244"},"2.4.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support udp-relay in socks5/shadowsocks/vmess/trojan proxy"),(0,t.yg)("li",{parentName:"ul"},"Fix import vmess url failed if contains slash"),(0,t.yg)("li",{parentName:"ul"},"Fix some crash issue")),(0,t.yg)("h3",{id:"243"},"2.4.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve traffic throughput"),(0,t.yg)("li",{parentName:"ul"},"Update bypass apps ui, add search support"),(0,t.yg)("li",{parentName:"ul"},"Fix ss proxy with domain cause stop VPN failed"),(0,t.yg)("li",{parentName:"ul"},"Update UI")),(0,t.yg)("h3",{id:"242"},"2.4.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix policy path issue"),(0,t.yg)("li",{parentName:"ul"},"Add Indonesian support"),(0,t.yg)("li",{parentName:"ul"},"Improve profile decode performance"),(0,t.yg)("li",{parentName:"ul"},"Fix huge profile cause crash"),(0,t.yg)("li",{parentName:"ul"},"Only use English app entrance name")),(0,t.yg)("h3",{id:"241"},"2.4.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix gradle 7.0.1 cause R8 error"),(0,t.yg)("li",{parentName:"ul"},"Update libuv/v2fly library")),(0,t.yg)("h3",{id:"240"},"2.4.0"),(0,t.yg)("p",null,"Fix socks5 proxy not working without authorization\nAdd policy-path support\nSupport surge3:///install-config?url=xxx\nSupport enhanced mode domain rules\nSupport decode http/socks5 proxy as TLS-based proxy\nUpdate GEOIP library"),(0,t.yg)("h3",{id:"235"},"2.3.5"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix some profile import issue, support more import format"),(0,t.yg)("li",{parentName:"ul"},"Fix column size not synchronize between proxy group tabs"),(0,t.yg)("li",{parentName:"ul"},"Fix notification click not working"),(0,t.yg)("li",{parentName:"ul"},"Don't count speedometer into active tcp connection count"),(0,t.yg)("li",{parentName:"ul"},"Change UI back to 4 tabs in main ui")),(0,t.yg)("h3",{id:"234"},"2.3.4"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add fuzzy search in recent requests ui"),(0,t.yg)("li",{parentName:"ul"},"Update item ui in recent requests"),(0,t.yg)("li",{parentName:"ul"},"Sort bypass app by toggle state"),(0,t.yg)("li",{parentName:"ul"},"Support trojan:// proxy url"),(0,t.yg)("li",{parentName:"ul"},"Support import multiple proxy url divided by space, vertical line and enter"),(0,t.yg)("li",{parentName:"ul"},"Support switch app launcher title to english"),(0,t.yg)("li",{parentName:"ul"},"Support proxy column size switch")),(0,t.yg)("h3",{id:"233"},"2.3.3"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add active connection count display in dashboard"),(0,t.yg)("li",{parentName:"ul"},"Support vmess:// and ss:// url"),(0,t.yg)("li",{parentName:"ul"},"Add Profile FileProvider support"),(0,t.yg)("li",{parentName:"ul"},"Add VMESS AEAD support settings")),(0,t.yg)("h3",{id:"232"},"2.3.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Support vmess AEAD"),(0,t.yg)("li",{parentName:"ul"},"Support long press to copy traffic info in recent request list"),(0,t.yg)("li",{parentName:"ul"},"Fix update profile last modify time not changing"),(0,t.yg)("li",{parentName:"ul"},"Fix profile modify not working"),(0,t.yg)("li",{parentName:"ul"},"Update translation")),(0,t.yg)("h3",{id:"231"},"2.3.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix open vpn failed with rule-set profile")),(0,t.yg)("h3",{id:"230"},"2.3.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add skip-proxy config support"),(0,t.yg)("li",{parentName:"ul"},"Fix change global proxy not working when VPN is on"),(0,t.yg)("li",{parentName:"ul"},"Add direct proxy in global outbound mode"),(0,t.yg)("li",{parentName:"ul"},"Add tools tab"),(0,t.yg)("li",{parentName:"ul"},"Support custom dns server port in dns-server config"),(0,t.yg)("li",{parentName:"ul"},"Support decode 1/0 as Boolean in profile"),(0,t.yg)("li",{parentName:"ul"},"Fix long profile list selection duplicate issue"),(0,t.yg)("li",{parentName:"ul"},"Bug fixed")),(0,t.yg)("h3",{id:"221"},"2.2.1"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add skip TLS verify setting"),(0,t.yg)("li",{parentName:"ul"},"Fix whitelist mode not working issue")),(0,t.yg)("h3",{id:"220"},"2.2.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add bypass config support"),(0,t.yg)("li",{parentName:"ul"},"Reduce APK size"),(0,t.yg)("li",{parentName:"ul"},"Add proxy_test_url support"),(0,t.yg)("li",{parentName:"ul"},"Add profile sample in profile list menu")),(0,t.yg)("h3",{id:"210"},"2.1.0"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Add recent request support"),(0,t.yg)("li",{parentName:"ul"},"Add profile viewer(not support editing yet)"),(0,t.yg)("li",{parentName:"ul"},"Integrate QRCode scanner, not need to download zxing scanner")),(0,t.yg)("h3",{id:"202"},"2.0.2"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Update all locale app name to ","[Surfboard]"),(0,t.yg)("li",{parentName:"ul"},"Fix crash issue on Android 7.0 and lower version"),(0,t.yg)("li",{parentName:"ul"},"Update light theme UI, support switch theme in settings"),(0,t.yg)("li",{parentName:"ul"},"Fix global outbound speed test not working"),(0,t.yg)("li",{parentName:"ul"},"Fix crash when vmess proxy name boxed with double quote"),(0,t.yg)("li",{parentName:"ul"},"Fix UI issue")),(0,t.yg)("h3",{id:"0919"},"0.9.19"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix network metered issue on Android 10"),(0,t.yg)("li",{parentName:"ul"},"Fix speed test issue"),(0,t.yg)("li",{parentName:"ul"},"Allow fetching profile using current profile"),(0,t.yg)("li",{parentName:"ul"},"Add test-timeout/internet-test-url/proxy-test-url support"),(0,t.yg)("li",{parentName:"ul"},"Remember proxygroup toggle state"),(0,t.yg)("li",{parentName:"ul"},"Avoid displaying toast when fetch toast failed")),(0,t.yg)("h3",{id:"0918"},"0.9.18"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Rewrite tcp handler for better memory usage"),(0,t.yg)("li",{parentName:"ul"},"Add proxygroup toggle function"),(0,t.yg)("li",{parentName:"ul"},"Add Notification Channel Setting entrance"),(0,t.yg)("li",{parentName:"ul"},"Bug fix")),(0,t.yg)("h3",{id:"0916"},"0.9.16"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix ss tcp speedtest issue"),(0,t.yg)("li",{parentName:"ul"},"Add Tile and app shortcut support"),(0,t.yg)("li",{parentName:"ul"},"Fix email feedback crash"),(0,t.yg)("li",{parentName:"ul"},"Update speedtest ui"),(0,t.yg)("li",{parentName:"ul"},"Bugs fixed")),(0,t.yg)("h3",{id:"0914"},"0.9.14"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Improve throughput performance(Up to 300Mbps+)"),(0,t.yg)("li",{parentName:"ul"},"Bugs fixed")),(0,t.yg)("h3",{id:"0913"},"0.9.13"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},"Fix second launch crash issue"),(0,t.yg)("li",{parentName:"ul"},"Update proxy group grid ui")))}y.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.f5a5465e.js b/assets/js/main.4276ba20.js similarity index 99% rename from assets/js/main.f5a5465e.js rename to assets/js/main.4276ba20.js index ca39d2c8..c35089e2 100644 --- a/assets/js/main.f5a5465e.js +++ b/assets/js/main.4276ba20.js @@ -1,2 +1,2 @@ -/*! For license information please see main.f5a5465e.js.LICENSE.txt */ -(self.webpackChunkmanual=self.webpackChunkmanual||[]).push([[8792],{8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var r=n(6540),a=n(8168),o=n(3259),i=n.n(o),l=n(4054);const s={"017ab4c2":[()=>n.e(8759).then(n.bind(n,1848)),"@site/docs/profile-format/proxy/external-proxy/trojan.md",1848],"01a85c17":[()=>Promise.all([n.e(1869),n.e(8209)]).then(n.bind(n,9158)),"@theme/BlogTagsListPage",9158],"0284bae1":[()=>n.e(2160).then(n.bind(n,6993)),"@site/docs/agreement/terms_and_conditions.md",6993],"0480b142":[()=>n.e(8070).then(n.bind(n,842)),"@site/docs/faq.md",842],"0d51bd9f":[()=>n.e(2958).then(n.bind(n,212)),"@site/docs/profile-format/proxy/external-proxy/vmess.md",212],"0da08c4c":[()=>n.e(4492).then(n.bind(n,6444)),"@site/docs/profile-format/general/proxy_test_url.md",6444],"14bc7c30":[()=>n.e(7726).then(n.bind(n,5520)),"@site/docs/bypass.md",5520],17896441:[()=>Promise.all([n.e(1869),n.e(2926),n.e(8401)]).then(n.bind(n,5022)),"@theme/DocItem",5022],"19abc812":[()=>n.e(1580).then(n.bind(n,5943)),"@site/docs/profile-format/host/alias.md",5943],"1a4e3797":[()=>Promise.all([n.e(1869),n.e(2138)]).then(n.bind(n,8988)),"@theme/SearchPage",8988],"1be78505":[()=>Promise.all([n.e(1869),n.e(8714)]).then(n.bind(n,10)),"@theme/DocPage",10],"1f40bfa5":[()=>n.e(5892).then(n.bind(n,2939)),"@site/docs/profile-format/general/skip_proxy.md",2939],"20cf57fc":[()=>n.e(5375).then(n.bind(n,2726)),"@site/docs/profile-format/proxy/built-in-proxy/reject.md",2726],"20e10212":[()=>n.e(6040).then(n.bind(n,1382)),"@site/docs/profile-format/proxygroup/index.md",1382],"2139fac0":[()=>n.e(2170).then(n.bind(n,1804)),"@site/docs/profile-format/proxygroup/select.md",1804],"242f9172":[()=>n.e(840).then(n.bind(n,5766)),"@site/docs/agreement/privacy_policy.md",5766],"288193ff":[()=>n.e(4840).then(n.bind(n,2848)),"@site/docs/profile-format/proxy/external-proxy/http.md",2848],"29b80629":[()=>n.e(4675).then(n.bind(n,5160)),"@site/docs/profile-format/proxy/external-proxy/wireguard.md",5160],"2b3853da":[()=>n.e(5759).then(n.bind(n,2334)),"@site/docs/profile-format/rule/subnet.md",2334],"35bc0b35":[()=>n.e(7784).then(n.bind(n,537)),"@site/docs/how_to_use_this_app.md",537],"3650c870":[()=>n.e(7055).then(n.bind(n,5126)),"@site/docs/profile-format/rule/ip.md",5126],"36797d28":[()=>n.e(4235).then(n.bind(n,4573)),"@site/blog/2022-04-06-why-develop-surfboard.mdx",4573],"3740780d":[()=>n.e(9168).then(n.bind(n,4533)),"@site/docs/profile-format/comment.md",4533],"38f89be1":[()=>n.e(8835).then(n.bind(n,3889)),"@site/docs/profile-format/general/http_listen.md",3889],"3b8c55ea":[()=>n.e(6803).then(n.bind(n,9824)),"@site/docs/installation.md",9824],"4384541b":[()=>n.e(4462).then(n.bind(n,5885)),"@site/docs/profile-format/overview.md",5885],"43d9bca3":[()=>n.e(3524).then(n.bind(n,4867)),"@site/docs/profile-format/general/internet_test_url.md",4867],"4d935150":[()=>n.e(2658).then(n.bind(n,9345)),"@site/docs/profile-format/general/socks5_listen.md",9345],"517f6657":[()=>n.e(5946).then(n.bind(n,9598)),"@site/docs/profile-format/managed_config.md",9598],"57a9c8ce":[()=>n.e(9840).then(n.bind(n,1871)),"@site/docs/profile-format/general/test_timeout.md",1871],"5a043460":[()=>n.e(3354).then(n.t.bind(n,5298,19)),"~blog/default/blog-tags-surfboard-631-list.json",5298],"5a10e581":[()=>n.e(2177).then(n.bind(n,7479)),"@site/docs/profile-format/panel/static.md",7479],"5e886793":[()=>n.e(6060).then(n.bind(n,4223)),"@site/docs/profile-format/host/index.md",4223],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"5fd89475":[()=>n.e(6225).then(n.bind(n,9796)),"@site/docs/profile-format/general/doh_server.md",9796],"616a7ff7":[()=>n.e(3473).then(n.bind(n,9055)),"@site/docs/profile-format/rule/index.md",9055],"65f70e42":[()=>n.e(9986).then(n.bind(n,8690)),"@site/docs/deeplink.md",8690],"6875c492":[()=>Promise.all([n.e(1869),n.e(2926),n.e(8382),n.e(4813)]).then(n.bind(n,3069)),"@theme/BlogTagsPostsPage",3069],"69cc305c":[()=>n.e(4155).then(n.t.bind(n,1966,19)),"/home/runner/work/manual/manual/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",1966],"745cfad0":[()=>n.e(5205).then(n.bind(n,1813)),"@site/docs/profile-format/proxygroup/load-balance.md",1813],"78aec8e4":[()=>n.e(8874).then(n.bind(n,9387)),"@site/docs/profile-format/proxy/external-proxy/shadowsocks.md",9387],"7d0b38cb":[()=>n.e(1842).then(n.bind(n,3551)),"@site/docs/profile-format/proxygroup/auto.md",3551],"7f08ce17":[()=>n.e(1104).then(n.bind(n,5615)),"@site/docs/profile-format/proxy/index.md",5615],"7f51bad7":[()=>n.e(5194).then(n.bind(n,3397)),"@site/docs/profile-example/adblock.md",3397],"814f3328":[()=>n.e(7472).then(n.t.bind(n,5513,19)),"~blog/default/blog-post-list-prop-default.json",5513],"84233fd7":[()=>Promise.all([n.e(1869),n.e(7786)]).then(n.bind(n,2039)),"@site/src/pages/feature-requests/index.js",2039],"86bba2c2":[()=>n.e(6183).then(n.t.bind(n,4061,19)),"/home/runner/work/manual/manual/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",4061],"935f2afb":[()=>n.e(8581).then(n.t.bind(n,5610,19)),"~docs/default/version-current-metadata-prop-751.json",5610],"94da497e":[()=>n.e(3024).then(n.bind(n,4004)),"@site/docs/profile-format/host/exact.md",4004],"9935b539":[()=>n.e(290).then(n.bind(n,5844)),"@site/docs/profile-format/host/server.md",5844],"9938e0db":[()=>n.e(5637).then(n.bind(n,416)),"@site/docs/profile-format/proxy/built-in-proxy/direct.md",416],"9a445828":[()=>n.e(4616).then(n.bind(n,3423)),"@site/blog/2022-04-06-why-develop-surfboard.mdx?truncated=true",3423],"9beb87c2":[()=>n.e(3539).then(n.bind(n,1636)),"@site/docs/changelog.md",1636],"9ca85383":[()=>n.e(6987).then(n.bind(n,8453)),"@site/docs/profile-format/host/wildcard.md",8453],"9d88de86":[()=>n.e(9303).then(n.bind(n,7712)),"@site/docs/location_permision.md",7712],"9e4087bc":[()=>n.e(2711).then(n.bind(n,9331)),"@theme/BlogArchivePage",9331],a6aa9e1f:[()=>Promise.all([n.e(1869),n.e(2926),n.e(8382),n.e(7643)]).then(n.bind(n,7785)),"@theme/BlogListPage",7785],a7023ddc:[()=>n.e(9267).then(n.t.bind(n,8289,19)),"~blog/default/blog-tags-tags-4c2.json",8289],b2b675dd:[()=>n.e(1991).then(n.t.bind(n,9775,19)),"~blog/default/blog-c06.json",9775],b2f554cd:[()=>n.e(5894).then(n.t.bind(n,6042,19)),"~blog/default/blog-archive-80c.json",6042],c096d34b:[()=>n.e(2194).then(n.bind(n,6622)),"@site/docs/profile-format/proxygroup/fallback.md",6622],c4918b48:[()=>n.e(2246).then(n.bind(n,8556)),"@site/docs/profile-format/general/dns_server.md",8556],c4f5d8e4:[()=>Promise.all([n.e(1869),n.e(2634)]).then(n.bind(n,6467)),"@site/src/pages/index.js",6467],c84d2b05:[()=>n.e(5819).then(n.t.bind(n,2945,19)),"/home/runner/work/manual/manual/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",2945],ca345648:[()=>n.e(8755).then(n.bind(n,6508)),"@site/docs/profile-example/local_server.md",6508],ca88b8a4:[()=>n.e(3394).then(n.t.bind(n,1142,19)),"/home/runner/work/manual/manual/.docusaurus/@easyops-cn/docusaurus-search-local/default/plugin-route-context-module-100.json",1142],ccc49370:[()=>Promise.all([n.e(1869),n.e(2926),n.e(8382),n.e(3249)]).then(n.bind(n,4029)),"@theme/BlogPostPage",4029],ce213c90:[()=>n.e(5633).then(n.bind(n,1295)),"@site/docs/profile-format/rule/domainset.md",1295],d0408dfa:[()=>n.e(796).then(n.bind(n,8751)),"@site/docs/profile-format/rule/domain.md",8751],d1d4cfea:[()=>n.e(1987).then(n.bind(n,5424)),"@site/docs/profile-format/proxy/external-proxy/socks5.md",5424],d7f96a80:[()=>n.e(2560).then(n.bind(n,7081)),"@site/docs/profile-example/gfw.md",7081],db984e47:[()=>n.e(612).then(n.bind(n,259)),"@site/docs/profile-format/rule/misc.md",259],e356b99a:[()=>n.e(651).then(n.bind(n,8546)),"@site/docs/profile-format/rule/process.md",8546],e885aa5c:[()=>n.e(5783).then(n.bind(n,7788)),"@site/docs/profile-example/global.md",7788],ec342fc0:[()=>n.e(2983).then(n.bind(n,7415)),"@site/docs/profile-format/rule/final.md",7415],f86fd09a:[()=>n.e(9715).then(n.t.bind(n,3475,19)),"~blog/default/blog-tags-surfboard-631.json",3475],fb410134:[()=>n.e(5566).then(n.bind(n,2634)),"@site/docs/profile-format/general/udp_policy_not_supported_behaviour.md",2634],fcd9dbef:[()=>n.e(5268).then(n.bind(n,1657)),"@site/docs/profile-format/rule/ruleset.md",1657],ff6f9c8d:[()=>n.e(8459).then(n.bind(n,9529)),"@site/docs/profile-format/general/always_real_ip.md",9529]};function u(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(6921),d=n(3102);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(1774).then(n.bind(n,1774)),modules:["@theme/NotFound"],webpack:()=>[1774],render(e,t){const n=e.default;return r.createElement(d.W,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],h=(0,c.A)(o);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.W,{value:s},r.createElement(l,(0,a.A)({},i,n)))}})}const p=[{path:"/blog",component:f("/blog","3c2"),exact:!0},{path:"/blog/archive",component:f("/blog/archive","f50"),exact:!0},{path:"/blog/tags",component:f("/blog/tags","b68"),exact:!0},{path:"/blog/tags/surfboard",component:f("/blog/tags/surfboard","55f"),exact:!0},{path:"/blog/why-develop-surfboard",component:f("/blog/why-develop-surfboard","3b5"),exact:!0},{path:"/feature-requests/",component:f("/feature-requests/","58b"),exact:!0},{path:"/search",component:f("/search","8a3"),exact:!0},{path:"/docs",component:f("/docs","220"),routes:[{path:"/docs/agreement/privacy_policy",component:f("/docs/agreement/privacy_policy","80c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/agreement/terms_and_conditions",component:f("/docs/agreement/terms_and_conditions","994"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/bypass",component:f("/docs/bypass","6e6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/changelog",component:f("/docs/changelog","fe5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/deeplink",component:f("/docs/deeplink","493"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/faq",component:f("/docs/faq","e79"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/how_to_use_this_app",component:f("/docs/how_to_use_this_app","55d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/installation",component:f("/docs/installation","001"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/location_permision",component:f("/docs/location_permision","57f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-example/adblock",component:f("/docs/profile-example/adblock","fce"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-example/gfw",component:f("/docs/profile-example/gfw","743"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-example/global",component:f("/docs/profile-example/global","2f7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-example/local_server",component:f("/docs/profile-example/local_server","1dc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/comment",component:f("/docs/profile-format/comment","eed"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/general/always_real_ip",component:f("/docs/profile-format/general/always_real_ip","5e1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/general/dns_server",component:f("/docs/profile-format/general/dns_server","95d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/general/doh_server",component:f("/docs/profile-format/general/doh_server","3d5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/general/http_listen",component:f("/docs/profile-format/general/http_listen","bae"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/general/internet_test_url",component:f("/docs/profile-format/general/internet_test_url","023"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/general/proxy_test_url",component:f("/docs/profile-format/general/proxy_test_url","3c6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/general/skip_proxy",component:f("/docs/profile-format/general/skip_proxy","56f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/general/socks5_listen",component:f("/docs/profile-format/general/socks5_listen","f7c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/general/test_timeout",component:f("/docs/profile-format/general/test_timeout","e20"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/general/udp_policy_not_supported_behaviour",component:f("/docs/profile-format/general/udp_policy_not_supported_behaviour","77a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/host/",component:f("/docs/profile-format/host/","1e6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/host/alias",component:f("/docs/profile-format/host/alias","5f2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/host/exact",component:f("/docs/profile-format/host/exact","271"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/host/server",component:f("/docs/profile-format/host/server","850"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/host/wildcard",component:f("/docs/profile-format/host/wildcard","5c4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/managed_config",component:f("/docs/profile-format/managed_config","20a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/overview",component:f("/docs/profile-format/overview","892"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/panel/static",component:f("/docs/profile-format/panel/static","012"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/proxy/",component:f("/docs/profile-format/proxy/","9a8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/proxy/built-in-proxy/direct",component:f("/docs/profile-format/proxy/built-in-proxy/direct","5a1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/proxy/built-in-proxy/reject",component:f("/docs/profile-format/proxy/built-in-proxy/reject","dd3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/proxy/external-proxy/http",component:f("/docs/profile-format/proxy/external-proxy/http","9bf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/proxy/external-proxy/shadowsocks",component:f("/docs/profile-format/proxy/external-proxy/shadowsocks","20a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/proxy/external-proxy/socks5",component:f("/docs/profile-format/proxy/external-proxy/socks5","ab0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/proxy/external-proxy/trojan",component:f("/docs/profile-format/proxy/external-proxy/trojan","e38"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/proxy/external-proxy/vmess",component:f("/docs/profile-format/proxy/external-proxy/vmess","157"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/proxy/external-proxy/wireguard",component:f("/docs/profile-format/proxy/external-proxy/wireguard","763"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/proxygroup/",component:f("/docs/profile-format/proxygroup/","638"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/proxygroup/auto",component:f("/docs/profile-format/proxygroup/auto","35b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/proxygroup/fallback",component:f("/docs/profile-format/proxygroup/fallback","15e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/proxygroup/load-balance",component:f("/docs/profile-format/proxygroup/load-balance","5ff"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/proxygroup/select",component:f("/docs/profile-format/proxygroup/select","3d2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/rule/",component:f("/docs/profile-format/rule/","6e8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/rule/domain",component:f("/docs/profile-format/rule/domain","74c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/rule/domainset",component:f("/docs/profile-format/rule/domainset","6df"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/rule/final",component:f("/docs/profile-format/rule/final","e9b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/rule/ip",component:f("/docs/profile-format/rule/ip","e76"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/rule/misc",component:f("/docs/profile-format/rule/misc","93c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/rule/process",component:f("/docs/profile-format/rule/process","3a8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/rule/ruleset",component:f("/docs/profile-format/rule/ruleset","015"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/profile-format/rule/subnet",component:f("/docs/profile-format/rule/subnet","200"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/",component:f("/","9e3"),exact:!0},{path:"*",component:f("*")}]},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>a,x:()=>o});var r=n(6540);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},8536:(e,t,n)=>{"use strict";var r=n(6540),a=n(961),o=n(4625),i=n(545),l=n(8193);const s=[n(1911),n(119),n(6134),n(6294),n(1043),n(4096)];var u=n(8328),c=n(6347),d=n(2831);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(8168),m=n(5260),h=n(4586),g=n(6025),b=n(6342),y=n(1003),v=n(2131),w=n(4090),E=n(2967),k=n(440),x=n(1463);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.A)(),n=(0,v.o)();return r.createElement(m.A,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.A)(),a=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.A)(),{pathname:r}=(0,c.zy)();return e+(0,k.applyTrailingSlash)((0,g.A)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:a;return r.createElement(m.A,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function C(){const{i18n:{currentLocale:e}}=(0,h.A)(),{metadata:t,image:n}=(0,b.p)();return r.createElement(r.Fragment,null,r.createElement(m.A,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.w})),n&&r.createElement(y.be,{image:n}),r.createElement(_,null),r.createElement(S,null),r.createElement(x.A,{tag:E.Cy,locale:e}),r.createElement(m.A,null,t.map(((e,t)=>r.createElement("meta",(0,p.A)({key:t},e))))))}const T=new Map;function A(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.u)(u.A,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var L=n(6125),P=n(6988);function O(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),O("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function I(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class R extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?O("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=O("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),I(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(N,{previousLocation:this.previousLocation,location:t},r.createElement(c.qh,{location:t,render:()=>e}))}}const M=R,D="__docusaurus-base-url-issue-banner-container",F="__docusaurus-base-url-issue-banner",B="__docusaurus-base-url-issue-banner-suggestion-container",j="__DOCUSAURUS_INSERT_BASEURL_BANNER";function $(e){return`\nwindow['${j}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${j}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[j]=!1}),[]),r.createElement(r.Fragment,null,!l.A.canUseDOM&&r.createElement(m.A,null,r.createElement("script",null,$(e))),r.createElement("div",{id:D}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.A)(),{pathname:n}=(0,c.zy)();return t&&n===e?r.createElement(z,null):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,h.A)(),i=(0,g.A)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.A,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var Q=n(7489),V=n(2303);function W(){const e=(0,V.A)();return r.createElement(m.A,null,r.createElement("html",{"data-has-hydrated":e}))}function G(){const e=(0,d.v)(u.A),t=(0,c.zy)();return r.createElement(Q.A,null,r.createElement(P.l,null,r.createElement(L.x,null,r.createElement(f,null,r.createElement(H,null),r.createElement(C,null),r.createElement(U,null),r.createElement(M,{location:A(t)},e)),r.createElement(W,null))))}var q=n(4054);const Y=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var K=n(6921);const X=new Set,Z=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!Z.has(e)&&!X.has(e))(e))return!1;X.add(e);const t=(0,d.u)(u.A,e).flatMap((e=>{return t=e.route.path,Object.entries(q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Y(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!Z.has(e))(e)&&(Z.add(e),I(e))},te=Object.freeze(ee);if(l.A.canUseDOM){window.docusaurus=te;const e=a.hydrate;I(window.location.pathname).then((()=>{e(r.createElement(i.vd,null,r.createElement(o.Kd,null,r.createElement(G,null))),document.getElementById("__docusaurus"))}))}},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>c,l:()=>d});var r=n(6540),a=n(4784);const o=JSON.parse('{"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-W110JC8TM1"],"anonymizeIP":false,"id":"default"}},"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"installation","docs":[{"id":"agreement/privacy_policy","path":"/docs/agreement/privacy_policy","sidebar":"tutorialSidebar"},{"id":"agreement/terms_and_conditions","path":"/docs/agreement/terms_and_conditions","sidebar":"tutorialSidebar"},{"id":"bypass","path":"/docs/bypass","sidebar":"tutorialSidebar"},{"id":"changelog","path":"/docs/changelog","sidebar":"tutorialSidebar"},{"id":"deeplink","path":"/docs/deeplink","sidebar":"tutorialSidebar"},{"id":"faq","path":"/docs/faq","sidebar":"tutorialSidebar"},{"id":"how_to_use_this_app","path":"/docs/how_to_use_this_app","sidebar":"tutorialSidebar"},{"id":"installation","path":"/docs/installation","sidebar":"tutorialSidebar"},{"id":"location_permision","path":"/docs/location_permision","sidebar":"tutorialSidebar"},{"id":"profile-example/adblock","path":"/docs/profile-example/adblock","sidebar":"tutorialSidebar"},{"id":"profile-example/gfw","path":"/docs/profile-example/gfw","sidebar":"tutorialSidebar"},{"id":"profile-example/global","path":"/docs/profile-example/global","sidebar":"tutorialSidebar"},{"id":"profile-example/local_server","path":"/docs/profile-example/local_server","sidebar":"tutorialSidebar"},{"id":"profile-format/comment","path":"/docs/profile-format/comment","sidebar":"tutorialSidebar"},{"id":"profile-format/general/always_real_ip","path":"/docs/profile-format/general/always_real_ip","sidebar":"tutorialSidebar"},{"id":"profile-format/general/dns_server","path":"/docs/profile-format/general/dns_server","sidebar":"tutorialSidebar"},{"id":"profile-format/general/doh_server","path":"/docs/profile-format/general/doh_server","sidebar":"tutorialSidebar"},{"id":"profile-format/general/http_listen","path":"/docs/profile-format/general/http_listen","sidebar":"tutorialSidebar"},{"id":"profile-format/general/internet_test_url","path":"/docs/profile-format/general/internet_test_url","sidebar":"tutorialSidebar"},{"id":"profile-format/general/proxy_test_url","path":"/docs/profile-format/general/proxy_test_url","sidebar":"tutorialSidebar"},{"id":"profile-format/general/skip_proxy","path":"/docs/profile-format/general/skip_proxy","sidebar":"tutorialSidebar"},{"id":"profile-format/general/socks5_listen","path":"/docs/profile-format/general/socks5_listen","sidebar":"tutorialSidebar"},{"id":"profile-format/general/test_timeout","path":"/docs/profile-format/general/test_timeout","sidebar":"tutorialSidebar"},{"id":"profile-format/general/udp_policy_not_supported_behaviour","path":"/docs/profile-format/general/udp_policy_not_supported_behaviour","sidebar":"tutorialSidebar"},{"id":"profile-format/host/alias","path":"/docs/profile-format/host/alias","sidebar":"tutorialSidebar"},{"id":"profile-format/host/exact","path":"/docs/profile-format/host/exact","sidebar":"tutorialSidebar"},{"id":"profile-format/host/index","path":"/docs/profile-format/host/","sidebar":"tutorialSidebar"},{"id":"profile-format/host/server","path":"/docs/profile-format/host/server","sidebar":"tutorialSidebar"},{"id":"profile-format/host/wildcard","path":"/docs/profile-format/host/wildcard","sidebar":"tutorialSidebar"},{"id":"profile-format/managed_config","path":"/docs/profile-format/managed_config","sidebar":"tutorialSidebar"},{"id":"profile-format/overview","path":"/docs/profile-format/overview","sidebar":"tutorialSidebar"},{"id":"profile-format/panel/static","path":"/docs/profile-format/panel/static","sidebar":"tutorialSidebar"},{"id":"profile-format/proxy/built-in-proxy/direct","path":"/docs/profile-format/proxy/built-in-proxy/direct","sidebar":"tutorialSidebar"},{"id":"profile-format/proxy/built-in-proxy/reject","path":"/docs/profile-format/proxy/built-in-proxy/reject","sidebar":"tutorialSidebar"},{"id":"profile-format/proxy/external-proxy/http","path":"/docs/profile-format/proxy/external-proxy/http","sidebar":"tutorialSidebar"},{"id":"profile-format/proxy/external-proxy/shadowsocks","path":"/docs/profile-format/proxy/external-proxy/shadowsocks","sidebar":"tutorialSidebar"},{"id":"profile-format/proxy/external-proxy/socks5","path":"/docs/profile-format/proxy/external-proxy/socks5","sidebar":"tutorialSidebar"},{"id":"profile-format/proxy/external-proxy/trojan","path":"/docs/profile-format/proxy/external-proxy/trojan","sidebar":"tutorialSidebar"},{"id":"profile-format/proxy/external-proxy/vmess","path":"/docs/profile-format/proxy/external-proxy/vmess","sidebar":"tutorialSidebar"},{"id":"profile-format/proxy/external-proxy/wireguard","path":"/docs/profile-format/proxy/external-proxy/wireguard","sidebar":"tutorialSidebar"},{"id":"profile-format/proxy/index","path":"/docs/profile-format/proxy/","sidebar":"tutorialSidebar"},{"id":"profile-format/proxygroup/auto","path":"/docs/profile-format/proxygroup/auto","sidebar":"tutorialSidebar"},{"id":"profile-format/proxygroup/fallback","path":"/docs/profile-format/proxygroup/fallback","sidebar":"tutorialSidebar"},{"id":"profile-format/proxygroup/index","path":"/docs/profile-format/proxygroup/","sidebar":"tutorialSidebar"},{"id":"profile-format/proxygroup/load-balance","path":"/docs/profile-format/proxygroup/load-balance","sidebar":"tutorialSidebar"},{"id":"profile-format/proxygroup/select","path":"/docs/profile-format/proxygroup/select","sidebar":"tutorialSidebar"},{"id":"profile-format/rule/domain","path":"/docs/profile-format/rule/domain","sidebar":"tutorialSidebar"},{"id":"profile-format/rule/domainset","path":"/docs/profile-format/rule/domainset","sidebar":"tutorialSidebar"},{"id":"profile-format/rule/final","path":"/docs/profile-format/rule/final","sidebar":"tutorialSidebar"},{"id":"profile-format/rule/index","path":"/docs/profile-format/rule/","sidebar":"tutorialSidebar"},{"id":"profile-format/rule/ip","path":"/docs/profile-format/rule/ip","sidebar":"tutorialSidebar"},{"id":"profile-format/rule/misc","path":"/docs/profile-format/rule/misc","sidebar":"tutorialSidebar"},{"id":"profile-format/rule/process","path":"/docs/profile-format/rule/process","sidebar":"tutorialSidebar"},{"id":"profile-format/rule/ruleset","path":"/docs/profile-format/rule/ruleset","sidebar":"tutorialSidebar"},{"id":"profile-format/rule/subnet","path":"/docs/profile-format/rule/subnet","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/installation","label":"installation"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(2654);const s=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"docusaurus-plugin-pwa":{"type":"package","name":"@docusaurus/plugin-pwa","version":"2.4.3"},"@easyops-cn/docusaurus-search-local":{"type":"package","name":"@easyops-cn/docusaurus-search-local","version":"0.23.3"}}}'),u={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var r=n(6540),a=n(8193),o=n(5260),i=n(440),l=n(1402);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(o.A,null,r.createElement("title",null,"Page Error")),r.createElement(l.A,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},8193:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5260:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(545);function o(e){return r.createElement(a.mg,e)}},5489:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var r=n(8168),a=n(6540),o=n(4625),i=n(440),l=n(4586),s=n(6654),u=n(8193);const c=a.createContext({collectLink:()=>{}});var d=n(6025);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,l.A)(),{withBaseUrl:E}=(0,d.h)(),k=(0,a.useContext)(c),x=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>x.current));const S=f||p;const _=(0,s.A)(S),C=S?.replace("pathname://","");let T=void 0!==C?(A=C,b&&(e=>e.startsWith("/"))(A)?E(A):A):void 0;var A;T&&_&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:v,baseUrl:w}));const L=(0,a.useRef)(!1),P=n?o.k2:o.N_,O=u.A.canUseIntersectionObserver,N=(0,a.useRef)(),I=()=>{L.current||null==T||(window.docusaurus.preload(T),L.current=!0)};(0,a.useEffect)((()=>(!O&&_&&null!=T&&window.docusaurus.prefetch(T),()=>{O&&N.current&&N.current.disconnect()})),[N,T,O,_]);const R=T?.startsWith("#")??!1,M=!T||!_||R;return M||g||k.collectLink(T),M?a.createElement("a",(0,r.A)({ref:x,href:T},S&&!_&&{target:"_blank",rel:"noopener noreferrer"},y)):a.createElement(P,(0,r.A)({},y,{onMouseEnter:I,onTouchStart:I,innerRef:e=>{x.current=e,O&&e&&_&&(N.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(N.current.unobserve(e),N.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),N.current.observe(e))},to:T},n&&{isActive:h,activeClassName:m}))}const p=a.forwardRef(f)},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>s,T:()=>l});var r=n(6540);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(2654);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},7065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},6654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>a,z:()=>r})},6025:(e,t,n)=>{"use strict";n.d(t,{A:()=>l,h:()=>i});var r=n(6540),a=n(4586),o=n(6654);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.A)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.z)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},4586:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(6988);function o(){return(0,r.useContext)(a.o)}},2303:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(6125);function o(){return(0,r.useContext)(a.o)}},6921:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},3102:(e,t,n)=>{"use strict";n.d(t,{W:()=>o,o:()=>a});var r=n(6540);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>h,vT:()=>f,Gy:()=>c,HW:()=>g,ht:()=>d,r7:()=>m,jh:()=>p});var r=n(6347),a=n(4586),o=n(7065);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>function(e,t,n){void 0===t&&(t=o.W),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function p(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return s(t,n)}function g(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},1911:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((()=>{window.gtag("event","page_view",{page_title:document.title,page_location:window.location.href,page_path:t.pathname+t.search+t.hash})}))}}},4096:(e,t,n)=>{"use strict";n.r(t);var r=n(8193),a=n(9466);const o="/sw.js",i=["appInstalled","standalone","queryString"],l=!0,s=(0,a.Wf)("docusaurus.pwa.event.appInstalled.fired");function u(e,t){l&&(void 0===t?console.log(`[Docusaurus-PWA][registerSw]: ${e}`):console.log(`[Docusaurus-PWA][registerSw]: ${e}`,t))}async function c(){const e=await navigator.serviceWorker.getRegistrations();u("will unregister all service workers",{registrations:e}),await Promise.all(e.map((e=>e.unregister().then((t=>u("unregister service worker",{registration:e,result:t})))))),u("unregistered all service workers",{registrations:e}),window.location.reload()}const d={always:()=>!0,mobile:()=>window.innerWidth<=996,saveData:()=>!!navigator.connection?.saveData,appInstalled:()=>"true"===s.get()||async function(){return"getInstalledRelatedApps"in window.navigator&&(await navigator.getInstalledRelatedApps()).some((e=>"webapp"===e.platform))}(),standalone:()=>window.matchMedia("(display-mode: standalone)").matches,queryString:()=>"true"===new URLSearchParams(window.location.search).get("offlineMode")};async function f(){const e=await async function(){return(await Promise.all(i.map((e=>Promise.resolve(d[e]()).then((t=>t?e:void 0)))))).filter(Boolean)}(),t=e.length>0;return u(t?"offline mode enabled, because of activation strategies":"offline mode disabled, because none of the offlineModeActivationStrategies could be used",{activeStrategies:e,availableStrategies:i}),t}r.A.canUseDOM&&(u("debug mode enabled"),"serviceWorker"in navigator&&(u("addLegacyAppInstalledEventsListeners"),window.addEventListener("appinstalled",(e=>{u("event appinstalled",{event:e}),s.set("true"),u("AppInstalledEventFiredStorage.set('true')"),c()})),window.addEventListener("beforeinstallprompt",(e=>{u("event beforeinstallprompt",{event:e});const t=s.get();u("AppInstalledEventFiredStorage.get()",{appInstalledEventFired:t}),t&&(s.del(),u("AppInstalledEventFiredStorage.del()"),c())})),u("legacy appinstalled and beforeinstallprompt event listeners installed"),async function(){const[{Workbox:e},t]=await Promise.all([n.e(9730).then(n.bind(n,9730)),f()]),r=new e(function(e){const t=JSON.stringify(e),n=`${o}?params=${encodeURIComponent(t)}`;return u("service worker url",{url:n,params:e}),n}({offlineMode:t,debug:l})),a=()=>r.messageSW({type:"SKIP_WAITING"}),i=()=>(u("handleServiceWorkerWaiting"),t?n.e(4334).then(n.bind(n,4334)).then((e=>{let{renderReloadPopup:t}=e;return t({onReload(){r.addEventListener("controlling",(()=>{window.location.reload()})),a()}})})):a());r.addEventListener("waiting",(e=>{u("event waiting",{event:e}),i()})),r.addEventListener("externalwaiting",(e=>{u("event externalwaiting",{event:e}),i()}));const s=await r.register();s&&(s.active&&u("registration.active",{registration:s}),s.installing&&u("registration.installing",{registration:s}),s.waiting&&(u("registration.waiting",{registration:s}),await i()))}().catch((e=>console.error("registerSW failed",e)))))},6294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(5947),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},6134:(e,t,n)=>{"use strict";var r=n(1258),a=n(4784);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6818)(`./prism-${e}`)})),delete globalThis.Prism}(r.A)},3186:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},1402:(e,t,n)=>{"use strict";n.d(t,{A:()=>Nt});var r=n(6540),a=n(53),o=n(7489),i=n(1003),l=n(8168),s=n(6347),u=n(1312),c=n(5062);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:a}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.A)({},e,{href:`#${d}`,onClick:a}),t))}var g=n(7559),b=n(4090);const y={skipToContent:"skipToContent_fXgn"};function v(){return r.createElement(h,{className:y.skipToContent})}var w=n(6342),E=n(5041);function k(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.A)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const x={closeButton:"closeButton_CVFx"};function S(e){return r.createElement("button",(0,l.A)({type:"button","aria-label":(0,u.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.A)("clean-btn close",x.closeButton,e.className)}),r.createElement(k,{width:14,height:14,strokeWidth:3.1}))}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return r.createElement("div",(0,l.A)({},e,{className:(0,a.A)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,E.Mj)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:T.announcementBar,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:T.announcementBarPlaceholder}),r.createElement(C,{className:T.announcementBarContent}),i&&r.createElement(S,{onClick:n,className:T.announcementBarClose}))}var L=n(9876),P=n(3104);var O=n(9532),N=n(5600);const I=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,L.M)(),t=(0,N.YL)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,O.ZC)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(I.Provider,{value:n},t)}function M(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(I);if(!e)throw new O.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,N.YL)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:M(o)})),[a,o,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var B=n(5293),j=n(2303);function $(e){return r.createElement("svg",(0,l.A)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function z(e){return r.createElement("svg",(0,l.A)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:o,onChange:i}=e;const l=(0,j.A)(),s=(0,u.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,u.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.A)(U.toggle,t)},r.createElement("button",{className:(0,a.A)("clean-btn",U.toggleButton,!l&&U.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===o?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement($,{className:(0,a.A)(U.toggleIcon,U.lightToggleIcon)}),r.createElement(z,{className:(0,a.A)(U.toggleIcon,U.darkToggleIcon)})))}const Q=r.memo(H),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W(e){let{className:t}=e;const n=(0,w.p)().navbar.style,a=(0,w.p)().colorMode.disableSwitch,{colorMode:o,setColorMode:i}=(0,B.G)();return a?null:r.createElement(Q,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:o,onChange:i})}var G=n(3465);function q(){return r.createElement(G.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,L.M)();return r.createElement("button",{type:"button","aria-label":(0,u.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(k,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(q,null),r.createElement(W,{className:"margin-right--md"}),r.createElement(Y,null))}var X=n(5489),Z=n(6025),J=n(6654);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3186);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,Z.A)(a),p=(0,Z.A)(t),m=(0,Z.A)(o,{forcePrependBaseUrl:!0}),h=i&&o&&!(0,J.A)(o),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(te.A,u&&{width:12,height:12}))};return o?r.createElement(X.A,(0,l.A)({href:c?m:o},d,g)):r.createElement(X.A,(0,l.A)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(ne,(0,l.A)({className:(0,a.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function ae(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.A)({className:(0,a.A)("menu__link",t)},o)))}function oe(e){let{mobile:t=!1,position:n,...a}=e;const o=t?ae:re;return r.createElement(o,(0,l.A)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(1422),le=n(9169),se=n(4586);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,a.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,l.A)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,a.A)("navbar__link",o)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(Ve,(0,l.A)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:o,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.A)(),{pathname:t}=(0,s.zy)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,a.A)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.A)({role:"button",className:(0,a.A)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(Ve,(0,l.A)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const a=t?de:ce;return r.createElement(a,n)}var pe=n(2131);function me(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,l.A)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var ge=n(1088),be=n(8193),ye=n(5891),ve=n(2384),we=n(4471),Ee=n(7674),ke=n(6841),xe=n(3810);const Se='',_e='',Ce='',Te='',Ae='',Le='',Pe='',Oe={searchBar:"searchBar_RVTs",dropdownMenu:"dropdownMenu_qbY6",suggestion:"suggestion_fB_2",cursor:"cursor_eG29",hitTree:"hitTree_kk6K",hitIcon:"hitIcon_a7Zy",hitPath:"hitPath_ieM4",noResultsIcon:"noResultsIcon_EBY5",hitFooter:"hitFooter_E9YW",hitWrapper:"hitWrapper_sAK8",hitTitle:"hitTitle_vyVt",hitAction:"hitAction_NqkB",hideAction:"hideAction_vcyE",noResults:"noResults_l6Q3",searchBarContainer:"searchBarContainer_NW3z",searchBarLoadingRing:"searchBarLoadingRing_YnHq",searchIndexLoading:"searchIndexLoading_EJ1f",searchHintContainer:"searchHintContainer_Pkmr",searchHint:"searchHint_iIMx",input:"input_FOTf",hint:"hint_URu1",suggestions:"suggestions_X8XU",dataset:"dataset_QiCy",empty:"empty_eITn"};function Ne(e){let{document:t,type:n,page:r,metadata:a,tokens:o,isInterOfTree:i,isLastOfTree:l}=e;const s=0===n,u=1===n,c=[];i?c.push(Le):l&&c.push(Pe);const d=c.map((e=>`${e}`)),f=`${s?Se:u?_e:Ce}`,p=[`${(0,xe.C)(t.t,(0,Ee.g)(a,"t"),o)}`];if(!i&&!l&&ge.tb){const e=r?(r.b??[]).concat(r.t).concat(t.s??[]):t.b;p.push(`${(0,we.$)(e??[])}`)}else s||p.push(`${(0,ke.Z)(r.t||(t.u.startsWith("/docs/api-reference/")?"API Reference":""),o)}`);const m=`${Te}`;return[...d,f,``,...p,"",m].join("")}function Ie(){return`${Ae}${ge.P9.no_results}`}var Re=n(2849);async function Me(){const e=await Promise.all([n.e(489),n.e(5741)]).then(n.t.bind(n,489,23)),t=e.default;return t.noConflict?t.noConflict():e.noConflict&&e.noConflict(),t}const De="_highlight";const Fe=function(e){let{handleSearchBarToggle:t}=e;const{siteConfig:{baseUrl:n}}=(0,se.A)(),o=(0,s.W6)(),i=(0,s.zy)(),l=(0,r.useRef)(null),u=(0,r.useRef)("empty"),c=(0,r.useRef)(!1),[d,f]=(0,r.useState)(!1),[p,m]=(0,r.useState)(!1),h=(0,r.useCallback)((async()=>{if("empty"!==u.current)return;u.current="loading",f(!0);const[{wrappedIndexes:e,zhDictionary:t},r]=await Promise.all([(0,ye.Z)(n),Me()]),a=r(l.current,{hint:!1,autoselect:!0,openOnFocus:!0,cssClasses:{root:Oe.searchBar,noPrefix:!0,dropdownMenu:Oe.dropdownMenu,input:Oe.input,hint:Oe.hint,suggestions:Oe.suggestions,suggestion:Oe.suggestion,cursor:Oe.cursor,dataset:Oe.dataset,empty:Oe.empty}},[{source:(0,ve.m)(e,t,ge.AT),templates:{suggestion:Ne,empty:Ie,footer:e=>{let{query:t,isEmpty:r}=e;if(r)return;const i=document.createElement("a"),l=`${n}search?q=${encodeURIComponent(t)}`;i.href=l,i.textContent=ge.P9.see_all_results,i.addEventListener("click",(e=>{e.ctrlKey||e.metaKey||(e.preventDefault(),a.autocomplete.close(),o.push(l))}));const s=document.createElement("div");return s.className=Oe.hitFooter,s.appendChild(i),s}}}]).on("autocomplete:selected",(function(e,t){let{document:{u:n,h:r},tokens:a}=t;l.current?.blur();let i=n;if(ge.CU&&a.length>0){const e=new URLSearchParams;for(const t of a)e.append(De,t);i+=`?${e.toString()}`}r&&(i+=r),o.push(i)})).on("autocomplete:closed",(()=>{l.current?.blur()}));if(u.current="done",f(!1),c.current){const e=l.current;e.value&&a.autocomplete.open(),e.focus()}}),[n,o]);(0,r.useEffect)((()=>{if(!ge.CU)return;const e=be.A.canUseDOM?new URLSearchParams(i.search).getAll(De):[];0!==e.length&&setTimeout((()=>{const t=document.querySelector("article");if(!t)return;const n=new ge.CU(t);n.unmark(),n.mark(e)}))}),[i.search]);const g=(0,r.useCallback)((()=>{c.current=!0,h(),t?.(!0)}),[t,h]),b=(0,r.useCallback)((()=>{t?.(!1)}),[t]),y=(0,r.useCallback)((()=>{h()}),[h]),v=(0,r.useCallback)((e=>{e.target.value&&m(!0)}),[]),w=!!be.A.canUseDOM&&/mac/i.test(navigator.userAgentData?.platform??navigator.platform);return(0,r.useEffect)((()=>{function e(e){(w?e.metaKey:e.ctrlKey)&&"KeyK"===e.code&&(e.preventDefault(),l.current?.focus(),g())}return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[w,g]),r.createElement("div",{className:(0,a.A)("navbar__search",Oe.searchBarContainer,{[Oe.searchIndexLoading]:d&&p})},r.createElement("input",{placeholder:ge.P9.search_placeholder,"aria-label":"Search",className:"navbar__search-input",onMouseEnter:y,onFocus:g,onBlur:b,onChange:v,ref:l}),r.createElement(Re.A,{className:Oe.searchBarLoadingRing}),r.createElement("div",{className:Oe.searchHintContainer},r.createElement("kbd",{className:Oe.searchHint},w?"\u2318":"ctrl"),r.createElement("kbd",{className:Oe.searchHint},"K")))},Be={searchBox:"searchBox_ZlJk"};function je(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.A)(n,Be.searchBox)},t)}var $e=n(4070),ze=n(1754);var Ue=n(5597);const He=e=>e.docs.find((t=>t.id===e.mainDocId));const Qe={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.A)(),f=(0,pe.o)(),{search:p,hash:m}=(0,s.zy)(),h=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],g=t?(0,u.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.A)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(je,{className:n},r.createElement(Fe,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.A)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,$e.zK)(a),s=(0,ze.QB)(t,a);return null===s?null:r.createElement(oe,(0,l.A)({exact:!0},o,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,$e.zK)(a),s=(0,ze.fW)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(oe,(0,l.A)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,ze.Vd)(a)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(oe,(0,l.A)({},o,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.zy)(),p=(0,$e.zK)(n),m=(0,$e.jh)(n),{savePreferredVersionName:h}=(0,Ue.g1)(n),g=[...o,...m.map((e=>{const t=p.alternateDocVersions[e.name]??He(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),...i],b=(0,ze.Vd)(n)[0],y=t&&g.length>1?(0,u.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,v=t&&g.length>1?void 0:He(b).path;return g.length<=1?r.createElement(oe,(0,l.A)({},c,{mobile:t,label:y,to:v,isActive:a?()=>!1:void 0})):r.createElement(fe,(0,l.A)({},c,{mobile:t,label:y,to:v,items:g,isActive:a?()=>!1:void 0}))}};function Ve(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Qe[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function We(){const e=(0,L.M)(),t=(0,w.p)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(Ve,(0,l.A)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ge(e){return r.createElement("button",(0,l.A)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function qe(){const e=0===(0,w.p)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(Ge,{onClick:()=>t.hide()}),t.content)}function Ye(){const e=(0,L.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(F,{header:r.createElement(K,null),primaryMenu:r.createElement(We,null),secondaryMenu:r.createElement(qe,null)}):null}const Ke={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Xe(e){return r.createElement("div",(0,l.A)({role:"presentation"},e,{className:(0,a.A)("navbar-sidebar__backdrop",e.className)}))}function Ze(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.p)(),i=(0,L.M)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,P.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.A)("navbar","navbar--fixed-top",n&&[Ke.navbarHideable,!s&&Ke.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Xe,{onClick:i.toggle}),r.createElement(Ye,null))}var Je=n(440);const et={errorBoundaryError:"errorBoundaryError_a6uf"};function tt(e){return r.createElement("button",(0,l.A)({type:"button"},e),r.createElement(u.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function nt(e){let{error:t}=e;const n=(0,Je.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:et.errorBoundaryError},n)}class rt extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const at="right";function ot(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,l.A)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function it(){const{toggle:e,shown:t}=(0,L.M)();return r.createElement("button",{onClick:e,"aria-label":(0,u.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(ot,null))}const lt={colorModeToggle:"colorModeToggle_DEke"};function st(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(rt,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(Ve,e)))))}function ut(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function ct(){const e=(0,L.M)(),t=(0,w.p)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??at)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(ut,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(it,null),r.createElement(q,null),r.createElement(st,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(st,{items:a}),r.createElement(W,{className:lt.colorModeToggle}),!o&&r.createElement(je,null,r.createElement(Fe,null)))})}function dt(){return r.createElement(Ze,null,r.createElement(ct,null))}function ft(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...s}=t,u=(0,Z.A)(n),c=(0,Z.A)(a,{forcePrependBaseUrl:!0});return r.createElement(X.A,(0,l.A)({className:"footer__link-item"},a?{href:i?c:a}:{to:u},s),o,a&&!(0,J.A)(a)&&r.createElement(te.A,null))}function pt(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(ft,{item:t}))}function mt(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(pt,{key:t,item:e})))))}function ht(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(mt,{key:t,column:e}))))}function gt(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function bt(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(ft,{item:t})}function yt(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(bt,{item:e}),t.length!==n+1&&r.createElement(gt,null))))))}function vt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(ht,{columns:t}):r.createElement(yt,{links:t})}var wt=n(1653);const Et={footerLogoLink:"footerLogoLink_BH7S"};function kt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,Z.h)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(wt.A,{className:(0,a.A)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function xt(e){let{logo:t}=e;return t.href?r.createElement(X.A,{href:t.href,className:Et.footerLogoLink,target:t.target},r.createElement(kt,{logo:t})):r.createElement(kt,{logo:t})}function St(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function _t(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.A)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function Ct(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(_t,{style:o,links:n&&n.length>0&&r.createElement(vt,{links:n}),logo:a&&r.createElement(xt,{logo:a}),copyright:t&&r.createElement(St,{copyright:t})})}const Tt=r.memo(Ct),At=(0,O.fM)([B.a,E.oq,P.Tv,Ue.VQ,i.Jx,function(e){let{children:t}=e;return r.createElement(N.y_,null,r.createElement(L.e,null,r.createElement(R,null,t)))}]);function Lt(e){let{children:t}=e;return r.createElement(At,null,t)}function Pt(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(tt,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(nt,{error:t})))))}const Ot={mainWrapper:"mainWrapper_z2l0"};function Nt(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,b.J)(),r.createElement(Lt,null,r.createElement(i.be,{title:s,description:u}),r.createElement(v,null),r.createElement(A,null),r.createElement(dt,null),r.createElement("div",{id:d,className:(0,a.A)(g.G.wrapper.main,Ot.mainWrapper,l)},r.createElement(o.A,{fallback:e=>r.createElement(Pt,e)},t)),!n&&r.createElement(Tt,null))}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>d});var r=n(8168),a=n(6540),o=n(5489),i=n(6025),l=n(4586),s=n(6342),u=n(1653);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.A)(t.src),dark:(0,i.A)(t.srcDark||t.src)},l=a.createElement(u.A,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.A)(),{navbar:{title:n,logo:u}}=(0,s.p)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.A)(u?.href||"/"),h=n?"":t,g=u?.alt??h;return a.createElement(o.A,(0,r.A)({to:m},p,u?.target&&{target:u.target}),u&&a.createElement(c,{logo:u,alt:g,imageClassName:d}),null!=n&&a.createElement("b",{className:f},n))}},1463:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(5260);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.A,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},1653:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});var r=n(8168),a=n(6540),o=n(53),i=n(2303),l=n(5293);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.A)(),{colorMode:n}=(0,l.G)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,p.map((e=>a.createElement("img",(0,r.A)({key:e,src:u[e],alt:d,className:(0,o.A)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>g,u:()=>s});var r=n(8168),a=n(6540),o=n(8193),i=n(3109);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return d(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!o.A.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,a.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:o}),a.createElement(t,{ref:u,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:l},r)}function h(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(m,(0,r.A)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return a.createElement(r,n)}},5041:(e,t,n)=>{"use strict";n.d(t,{Mj:()=>m,oq:()=>p});var r=n(6540),a=n(2303),o=n(9466),i=n(9532),l=n(6342);const s=(0,o.Wf)("docusaurus.announcement.dismiss"),u=(0,o.Wf)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.p)(),t=(0,a.A)(),[n,o]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{o(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},5293:(e,t,n)=>{"use strict";n.d(t,{G:()=>g,a:()=>h});var r=n(6540),a=n(8193),o=n(9532),i=n(9466),l=n(6342);const s=r.createContext(void 0),u="theme",c=(0,i.Wf)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>a.A.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.p)(),[a,o]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[a,i])}();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new o.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},5597:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>g,g1:()=>y});var r=n(6540),a=n(4070),o=n(7065),i=n(6342),l=n(1754),s=n(9532),u=n(9466);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.Wf)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.Wf)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.Wf)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,a.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function g(e){let{children:t}=e;return l.C5?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(p);if(!e)throw new s.dV("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=o.W);const t=(0,a.ht)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},6588:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,t:()=>s});var r=n(6540),a=n(9532);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.dV("DocsSidebarProvider");return e}},9876:(e,t,n)=>{"use strict";n.d(t,{e:()=>f,M:()=>p});var r=n(6540),a=n(5600),o=n(4581),i=n(6347),l=(n(9888),n(9532));function s(e){!function(e){const t=(0,i.W6)(),n=(0,l._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(6342);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,a.YL)(),{items:t}=(0,u.p)().navbar;return 0===t.length&&!e.component}(),t=(0,o.l)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function f(e){let{children:t}=e;const n=d();return r.createElement(c.Provider,{value:n},t)}function p(){const e=r.useContext(c);if(void 0===e)throw new l.dV("NavbarMobileSidebarProvider");return e}},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>s,YL:()=>l,y_:()=>i});var r=n(6540),a=n(9532);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.dV("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.dV("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Be)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},4090:(e,t,n)=>{"use strict";n.d(t,{w:()=>a,J:()=>o});var r=n(6540);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},4581:(e,t,n)=>{"use strict";n.d(t,{l:()=>u});var r=n(6540),a=n(8193);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return a.A.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},7559:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},3109:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},1754:(e,t,n)=>{"use strict";n.d(t,{_o:()=>f,w8:()=>h,C5:()=>d,mz:()=>E,Vd:()=>y,QB:()=>w,fW:()=>v,OF:()=>b});var r=n(6540),a=n(6347),o=n(2831),i=n(4070),l=n(5597),s=n(6588);function u(e){return Array.from(new Set(e))}var c=n(9169);const d=!!i.Gy;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,c.ys)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,c.ys)(o.href,n)||e(o.items))||"link"===o.type&&(0,c.ys)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function b(){const e=(0,s.t)(),{pathname:t}=(0,a.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function y(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,l.g1)(e),a=(0,i.r7)(e);return(0,r.useMemo)((()=>u([t,n,a].filter(Boolean))),[t,n,a])}function v(e,t){const n=y(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=y(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,a.zy)(),i=t.routes,l=i.find((e=>(0,a.B6)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.v)(i),sidebarName:s,sidebarItems:u}}},1003:(e,t,n)=>{"use strict";n.d(t,{e3:()=>f,be:()=>c,Jx:()=>p});var r=n(6540),a=n(53),o=n(5260),i=n(3102);function l(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(6025),u=n(4586);function c(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.h)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.A,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.A)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.A,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,a.A)(o,i)},t)}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>s,ZC:()=>i,_q:()=>o,dV:()=>l,fM:()=>u});var r=n(6540);const a=n(8193).A.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},9169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>l,ys:()=>i});var r=n(6540),a=n(8328),o=n(4586);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.A)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.A,baseUrl:e})),[e])}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>d,Tv:()=>s,gk:()=>f});var r=n(6540),a=n(8193),o=n(2303),i=n(9532);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.dV("ScrollControllerProvider");return e}const c=()=>a.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),a=(0,r.useRef)(c()),o=(0,i._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,o.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},2967:(e,t,n)=>{"use strict";n.d(t,{Cy:()=>r,tU:()=>a});n(4586);const r="default";function a(e,t){return`docs-${e}-${t}`}},9466:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>s});n(6540),n(9888);const r="localStorage";function a(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function o(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=o(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),a({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),a({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},2131:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(4586),a=n(6347),o=n(440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.A)(),{pathname:s}=(0,a.zy)(),u=(0,o.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),a=n(6347),o=n(9532);function i(e){const t=(0,a.zy)(),n=(0,o.ZC)(t),i=(0,o._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(4586);function a(){return(0,r.A)().siteConfig.themeConfig}},2983:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},440:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(2983);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(253);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},2849:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(6540),a=n(53);const o={loadingRing:"loadingRing_RJI3","loading-ring":"loading-ring_FB5o"};function i(e){let{className:t}=e;return r.createElement("div",{className:(0,a.A)(o.loadingRing,t)},r.createElement("div",null),r.createElement("div",null),r.createElement("div",null),r.createElement("div",null))}},5891:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(8291),a=n.n(r),o=n(1088);async function i(e){{const t=await(await fetch(`${e}search-index.json?_=${o.Xi}`)).json(),n=t.map(((e,t)=>{let{documents:n,index:r}=e;return{type:t,documents:n,index:a().Index.load(r)}})),r=t.reduce(((e,t)=>{for(const n of t.index.invertedIndex)/\p{Unified_Ideograph}/u.test(n[0][0])&&e.add(n[0]);return e}),new Set);return{wrappedIndexes:n,zhDictionary:Array.from(r)}}}},2384:(e,t,n)=>{"use strict";n.d(t,{m:()=>s});var r=n(8291),a=n.n(r);var o=n(1088);function i(e){return l(e).concat(l(e.filter((e=>{const t=e[e.length-1];return!t.trailing&&t.maybeTyping})),!0))}function l(e,t){return e.map((e=>({tokens:e.map((e=>e.value)),term:e.map((e=>({value:e.value,presence:a().Query.presence.REQUIRED,wildcard:(t?e.trailing||e.maybeTyping:e.trailing)?a().Query.wildcard.TRAILING:a().Query.wildcard.NONE})))})))}function s(e,t,n){return function(r,l){const s=function(e,t){if(1===t.length&&["ja","jp","th"].includes(t[0]))return a()[t[0]].tokenizer(e).map((e=>e.toString()));let n=/[^-\s]+/g;return t.includes("zh")&&(n=/\w+|\p{Unified_Ideograph}+/gu),e.toLowerCase().match(n)||[]}(r,o.BH);if(0===s.length)return void l([]);const u=function(e,t){const n=function(e,t){const n=[];return function e(r,a){if(0===r.length)return void n.push(a);const o=r[0];if(/\p{Unified_Ideograph}/u.test(o)){const n=function(e,t){const n=[];return function e(r,a){let o=0,i=!1;for(const l of t)if(r.substr(0,l.length)===l){const t={missed:a.missed,term:a.term.concat({value:l})};r.length>l.length?e(r.substr(l.length),t):n.push(t),i=!0}else for(let t=l.length-1;t>o;t-=1){const s=l.substr(0,t);if(r.substr(0,t)===s){o=t;const l={missed:a.missed,term:a.term.concat({value:s,trailing:!0})};r.length>t?e(r.substr(t),l):n.push(l),i=!0;break}}i||(r.length>0?e(r.substr(1),{missed:a.missed+1,term:a.term}):a.term.length>0&&n.push(a))}(e,{missed:0,term:[]}),n.sort(((e,t)=>{const n=e.missed>0?1:0,r=t.missed>0?1:0;return n!==r?n-r:e.term.length-t.term.length})).map((e=>e.term))}(o,t);for(const t of n){const n=a.concat(...t);e(r.slice(1),n)}}else{const t=a.concat({value:o});e(r.slice(1),t)}}(e,[]),n}(e,t);if(0===n.length)return[{tokens:e,term:e.map((e=>({value:e,presence:a().Query.presence.REQUIRED,wildcard:a().Query.wildcard.LEADING|a().Query.wildcard.TRAILING})))}];for(const a of n)a[a.length-1].maybeTyping=!0;const r=[];for(const i of o.BH)if("en"===i)o.sx||r.unshift(a().stopWordFilter);else{const e=a()[i];e.stopWordFilter&&r.unshift(e.stopWordFilter)}let l;if(r.length>0){const e=e=>r.reduce(((e,t)=>e.filter((e=>t(e.value)))),e);l=[];const t=[];for(const r of n){const n=e(r);l.push(n),n.length0&&t.push(n)}n.push(...t)}else l=n.slice();const s=[];for(const a of l)if(a.length>2)for(let e=a.length-1;e>=0;e-=1)s.push(a.slice(0,e).concat(a.slice(e+1)));return i(n).concat(i(s))}(s,t),c=[];e:for(const{term:t,tokens:a}of u)for(const{documents:r,index:o,type:i}of e)if(c.push(...o.query((e=>{for(const n of t)e.term(n.value,{wildcard:n.wildcard,presence:n.presence})})).slice(0,n).filter((e=>!c.some((t=>t.document.i.toString()===e.ref)))).slice(0,n-c.length).map((t=>{const n=r.find((e=>e.i.toString()===t.ref));return{document:n,type:i,page:0!==i&&e[0].documents.find((e=>e.i===n.p)),metadata:t.matchData.metadata,tokens:a,score:t.score}}))),c.length>=n)break e;!function(e){e.forEach(((e,t)=>{e.index=t})),e.sort(((t,n)=>{let r=t.type>0&&t.page?e.findIndex((e=>e.document===t.page)):t.index,a=n.type>0&&n.page?e.findIndex((e=>e.document===n.page)):n.index;return-1===r&&(r=t.index),-1===a&&(a=n.index),r===a?0===t.type?-1:0===n.type?1:t.index-n.index:r-a}))}(c),function(e){e.forEach(((t,n)=>{n>0&&t.page&&e.some((e=>e.document===t.page))&&(n{"use strict";function r(e){return e.join(" \u203a ")}n.d(t,{$:()=>r})},3103:(e,t,n)=>{"use strict";function r(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}n.d(t,{Z:()=>r})},7674:(e,t,n)=>{"use strict";function r(e,t){const n=[];for(const r of Object.values(e))r[t]&&n.push(...r[t].position);return n.sort(((e,t)=>e[0]-t[0]||t[1]-e[1]))}n.d(t,{g:()=>r})},6841:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(3103);function a(e,t,n){const o=[];for(const i of t){const n=e.toLowerCase().indexOf(i);if(n>=0){n>0&&o.push(a(e.substr(0,n),t)),o.push(`${(0,r.Z)(e.substr(n,i.length))}`);const l=n+i.length;l${(0,r.Z)(e)}`:(0,r.Z)(e):o.join("")}},3810:(e,t,n)=>{"use strict";n.d(t,{C:()=>s});var r=n(3103),a=n(6841);const o=/\w+|\p{Unified_Ideograph}/u;function i(e){const t=[];let n=0,r=e;for(;r.length>0;){const a=r.match(o);if(!a){t.push(r);break}a.index>0&&t.push(r.substr(0,a.index)),t.push(a[0]),n+=a.index+a[0].length,r=e.substr(n)}return t}var l=n(1088);function s(e,t,n,r){void 0===r&&(r=l.rG);const a={chunkIndex:-1},o=u(e,t,n,0,0,a),i=o.slice(0,a.chunkIndex),s=o[a.chunkIndex],c=[s.html],d=o.slice(a.chunkIndex+1);let f=s.textLength,p=0,m=0,h=!1,g=!1;for(;f0){const e=i.pop();f+e.textLength<=r?(c.unshift(e.html),p+=e.textLength,f+=e.textLength):(h=!0,i.length=0)}else{if(!(d.length>0))break;{const e=d.shift();f+e.textLength<=r?(c.push(e.html),m+=e.textLength,f+=e.textLength):(g=!0,d.length=0)}}return(h||i.length>0)&&c.unshift("\u2026"),(g||d.length>0)&&c.push("\u2026"),c.join("")}function u(e,t,n,o,l,s){const c=[],[d,f]=t[o];if(dl&&c.push(...i(e.substring(l,d)).map((e=>({html:(0,r.Z)(e),textLength:e.length})))),s&&(s.chunkIndex=c.length),c.push({html:(0,a.Z)(e.substr(d,f),n,!0),textLength:f});const p=d+f;(o+=1)({html:(0,r.Z)(e),textLength:e.length}))))}return c}},1088:(e,t,n)=>{"use strict";n.d(t,{CU:()=>o,tb:()=>u,Xi:()=>i,BH:()=>r,sx:()=>a,rG:()=>s,AT:()=>l,P9:()=>c});n(8291);const r=["en"],a=!1,o=null,i="84574f89",l=8,s=50,u=!1,c={search_placeholder:"Search",see_all_results:"See all results",no_results:"No results.",search_results_for:'Search results for "{{ keyword }}"',search_the_documentation:"Search the documentation",count_documents_found_plural:"{{ count }} documents found",count_documents_found:"{{ count }} document found",no_documents_were_found:"No documents were found"}},53:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{zR:()=>w,TM:()=>C,yJ:()=>p,sC:()=>A,AO:()=>f});var r=n(8168);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8997);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.A)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,h(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(4363),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},4634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},8291:(e,t,n)=>{var r,a;!function(){var o,i,l,s,u,c,d,f,p,m,h,g,b,y,v,w,E,k,x,S,_,C,T,A,L,P,O,N,I,R,M=function(e){var t=new M.Builder;return t.pipeline.add(M.trimmer,M.stopWordFilter,M.stemmer),t.searchPipeline.add(M.stemmer),e.call(t,t),t.build()};M.version="2.3.9",M.utils={},M.utils.warn=(o=this,function(e){o.console&&console.warn&&console.warn(e)}),M.utils.asString=function(e){return null==e?"":e.toString()},M.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r0){var s=M.utils.clone(t)||{};s.position=[i,l],s.index=a.length,a.push(new M.Token(n.slice(i,o),s))}i=o+1}}return a},M.tokenizer.separator=/[\s\-]+/,M.Pipeline=function(){this._stack=[]},M.Pipeline.registeredFunctions=Object.create(null),M.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&M.utils.warn("Overwriting existing registered function: "+t),e.label=t,M.Pipeline.registeredFunctions[e.label]=e},M.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||M.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},M.Pipeline.load=function(e){var t=new M.Pipeline;return e.forEach((function(e){var n=M.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},M.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){M.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},M.Pipeline.prototype.after=function(e,t){M.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},M.Pipeline.prototype.before=function(e,t){M.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},M.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},M.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n1&&(oe&&(n=a),o!=e);)r=n-t,a=t+Math.floor(r/2),o=this.elements[2*a];return o==e||o>e?2*a:ol?u+=2:i==l&&(t+=n[s+1]*r[u+1],s+=2,u+=2);return t},M.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},M.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t0){var o,i=a.str.charAt(0);i in a.node.edges?o=a.node.edges[i]:(o=new M.TokenSet,a.node.edges[i]=o),1==a.str.length&&(o.final=!0),r.push({node:o,editsRemaining:a.editsRemaining,str:a.str.slice(1)})}if(0!=a.editsRemaining){if("*"in a.node.edges)var l=a.node.edges["*"];else{l=new M.TokenSet;a.node.edges["*"]=l}if(0==a.str.length&&(l.final=!0),r.push({node:l,editsRemaining:a.editsRemaining-1,str:a.str}),a.str.length>1&&r.push({node:a.node,editsRemaining:a.editsRemaining-1,str:a.str.slice(1)}),1==a.str.length&&(a.node.final=!0),a.str.length>=1){if("*"in a.node.edges)var s=a.node.edges["*"];else{s=new M.TokenSet;a.node.edges["*"]=s}1==a.str.length&&(s.final=!0),r.push({node:s,editsRemaining:a.editsRemaining-1,str:a.str.slice(1)})}if(a.str.length>1){var u,c=a.str.charAt(0),d=a.str.charAt(1);d in a.node.edges?u=a.node.edges[d]:(u=new M.TokenSet,a.node.edges[d]=u),1==a.str.length&&(u.final=!0),r.push({node:u,editsRemaining:a.editsRemaining-1,str:c+a.str.slice(2)})}}}return n},M.TokenSet.fromString=function(e){for(var t=new M.TokenSet,n=t,r=0,a=e.length;r=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},M.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},M.Index.prototype.search=function(e){return this.query((function(t){new M.QueryParser(e,t).parse()}))},M.Index.prototype.query=function(e){for(var t=new M.Query(this.fields),n=Object.create(null),r=Object.create(null),a=Object.create(null),o=Object.create(null),i=Object.create(null),l=0;l1?1:e},M.Builder.prototype.k1=function(e){this._k1=e},M.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var a=0;a=this.length)return M.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},M.QueryLexer.prototype.width=function(){return this.pos-this.start},M.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},M.QueryLexer.prototype.backup=function(){this.pos-=1},M.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=M.QueryLexer.EOS&&this.backup()},M.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(M.QueryLexer.TERM)),e.ignore(),e.more())return M.QueryLexer.lexText},M.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(M.QueryLexer.EDIT_DISTANCE),M.QueryLexer.lexText},M.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(M.QueryLexer.BOOST),M.QueryLexer.lexText},M.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(M.QueryLexer.TERM)},M.QueryLexer.termSeparator=M.tokenizer.separator,M.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==M.QueryLexer.EOS)return M.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return M.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(M.QueryLexer.TERM),M.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(M.QueryLexer.TERM),M.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(M.QueryLexer.PRESENCE),M.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(M.QueryLexer.PRESENCE),M.QueryLexer.lexText;if(t.match(M.QueryLexer.termSeparator))return M.QueryLexer.lexTerm}else e.escapeCharacter()}},M.QueryParser=function(e,t){this.lexer=new M.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},M.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=M.QueryParser.parseClause;e;)e=e(this);return this.query},M.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},M.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},M.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},M.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case M.QueryLexer.PRESENCE:return M.QueryParser.parsePresence;case M.QueryLexer.FIELD:return M.QueryParser.parseField;case M.QueryLexer.TERM:return M.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new M.QueryParseError(n,t.start,t.end)}},M.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=M.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=M.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new M.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new M.QueryParseError(n,t.start,t.end)}switch(r.type){case M.QueryLexer.FIELD:return M.QueryParser.parseField;case M.QueryLexer.TERM:return M.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new M.QueryParseError(n,r.start,r.end)}}},M.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new M.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var a=e.peekLexeme();if(null==a){r="expecting term, found nothing";throw new M.QueryParseError(r,t.start,t.end)}if(a.type===M.QueryLexer.TERM)return M.QueryParser.parseTerm;r="expecting term, found '"+a.type+"'";throw new M.QueryParseError(r,a.start,a.end)}},M.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case M.QueryLexer.TERM:return e.nextClause(),M.QueryParser.parseTerm;case M.QueryLexer.FIELD:return e.nextClause(),M.QueryParser.parseField;case M.QueryLexer.EDIT_DISTANCE:return M.QueryParser.parseEditDistance;case M.QueryLexer.BOOST:return M.QueryParser.parseBoost;case M.QueryLexer.PRESENCE:return e.nextClause(),M.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new M.QueryParseError(r,n.start,n.end)}else e.nextClause()}},M.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new M.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var a=e.peekLexeme();if(null!=a)switch(a.type){case M.QueryLexer.TERM:return e.nextClause(),M.QueryParser.parseTerm;case M.QueryLexer.FIELD:return e.nextClause(),M.QueryParser.parseField;case M.QueryLexer.EDIT_DISTANCE:return M.QueryParser.parseEditDistance;case M.QueryLexer.BOOST:return M.QueryParser.parseBoost;case M.QueryLexer.PRESENCE:return e.nextClause(),M.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+a.type+"'";throw new M.QueryParseError(r,a.start,a.end)}else e.nextClause()}},M.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new M.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var a=e.peekLexeme();if(null!=a)switch(a.type){case M.QueryLexer.TERM:return e.nextClause(),M.QueryParser.parseTerm;case M.QueryLexer.FIELD:return e.nextClause(),M.QueryParser.parseField;case M.QueryLexer.EDIT_DISTANCE:return M.QueryParser.parseEditDistance;case M.QueryLexer.BOOST:return M.QueryParser.parseBoost;case M.QueryLexer.PRESENCE:return e.nextClause(),M.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+a.type+"'";throw new M.QueryParseError(r,a.start,a.end)}else e.nextClause()}},void 0===(a="function"==typeof(r=function(){return M})?r.call(t,n,t,e):r)||(e.exports=a)}()},119:(e,t,n)=>{"use strict";n.r(t)},1043:(e,t,n)=>{"use strict";n.r(t)},5947:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},5228:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s{"use strict";n.d(t,{A:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);x+=k.value.length,k=k.next){var S=k.value;if(t.length>e.length)return;if(!(S instanceof a)){var _,C=1;if(y){if(!(_=o(E,x,e,b))||_.index>=e.length)break;var T=_.index,A=_.index+_[0].length,L=x;for(L+=k.value.length;T>=L;)L+=(k=k.next).value.length;if(x=L-=k.value.length,k.value instanceof a)continue;for(var P=k;P!==t.tail&&(Ld.reach&&(d.reach=R);var M=k.prev;if(N&&(M=s(t,M,N),x+=N.length),u(t,M,C),k=s(t,M,new a(f,g?r.tokenize(O,g):O,v,O)),I&&s(t,k,I),C>1){var D={cause:f+","+m,reach:R};i(e,t,n,k.prev,x,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function u(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function u(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++a;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),y=[];h&&y.push.apply(y,i([h])),y.push(g),b&&y.push.apply(y,i([b])),"string"==typeof u?l.splice.apply(l,[s,1].concat(y)):u.content=y}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},824:()=>{Prism.languages.ini={comment:{pattern:/(^[ \f\t\v]*)[#;][^\n\r]*/m,lookbehind:!0},section:{pattern:/(^[ \f\t\v]*)\[[^\n\r\]]*\]?/m,lookbehind:!0,inside:{"section-name":{pattern:/(^\[[ \f\t\v]*)[^ \f\t\v\]]+(?:[ \f\t\v]+[^ \f\t\v\]]+)*/,lookbehind:!0,alias:"selector"},punctuation:/\[|\]/}},key:{pattern:/(^[ \f\t\v]*)[^ \f\n\r\t\v=]+(?:[ \f\t\v]+[^ \f\n\r\t\v=]+)*(?=[ \f\t\v]*=)/m,lookbehind:!0,alias:"attr-name"},value:{pattern:/(=[ \f\t\v]*)[^ \f\n\r\t\v]+(?:[ \f\t\v]+[^ \f\n\r\t\v]+)*/,lookbehind:!0,alias:"attr-value",inside:{"inner-value":{pattern:/^("|').+(?=\1$)/,lookbehind:!0}}},punctuation:/=/}},6818:(e,t,n)=>{var r={"./prism-ini":824};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6818},2694:(e,t,n)=>{"use strict";var r=n(6925);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2551:(e,t,n)=>{"use strict";var r=n(6540),a=n(5228),o=n(9982);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n