💐 Sync 2026-06-25 20:51:16

This commit is contained in:
github-actions[bot] committed 2026-06-25 20:51:16 +08:00
1 parent 56a37a798f
commit a324d02661
18 files changed
+734 -55

No files matched your search

+8 -8
View File
@@ -11,8 +11,8 @@ PKG_ARCH_DDNSTO:=$(ARCH)
PKG_NAME:=ddnsto
# use PKG_SOURCE_DATE instead of PKG_VERSION for compatible
PKG_SOURCE_DATE:=4.2.0
PKG_RELEASE:=2
PKG_SOURCE_DATE:=4.2.2
PKG_RELEASE:=3
# 构建类型:standard 或 lite
DDNSTO_TYPE?=standard
@@ -36,15 +36,15 @@ PKG_SOURCE_VERSION:=$(ARCH_HEXCODE)
# 根据类型选择下载地址和文件名
ifeq ($(DDNSTO_TYPE),lite)
PKG_SOURCE:=$(PKG_NAME)-binary-lite-$(PKG_SOURCE_DATE).tar.gz
PKG_SOURCE_URL:=https://github.com/linkease/ddnsto-openwrt-package/raw/refs/heads/main/
PKG_SOURCE:=$(PKG_NAME)-lite-$(PKG_SOURCE_DATE).tar.gz
PKG_SOURCE_URL:=https://fw0.koolcenter.com/binary/ddnsto/linux-binary/
PKG_HASH:=skip
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-lite-$(PKG_SOURCE_DATE)
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-lite-$(PKG_SOURCE_DATE)
else
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_SOURCE_DATE).tar.gz
PKG_SOURCE_URL:=https://github.com/linkease/ddnsto-openwrt-package/raw/refs/heads/main/
PKG_SOURCE:=$(PKG_NAME)-standard-$(PKG_SOURCE_DATE).tar.gz
PKG_SOURCE_URL:=https://fw0.koolcenter.com/binary/ddnsto/linux-binary/
PKG_HASH:=skip
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-$(PKG_SOURCE_DATE)
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-standard-$(PKG_SOURCE_DATE)
endif
PKG_BUILD_PARALLEL:=1
+2 -2
View File
@@ -5,8 +5,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=dnsproxy
PKG_VERSION:=0.81.4
PKG_RELEASE:=10
PKG_VERSION:=0.82.0
PKG_RELEASE:=11
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/AdguardTeam/dnsproxy/tar.gz/v$(PKG_VERSION)?
+2 -2
View File
@@ -1,8 +1,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=fan2go
PKG_VERSION:=0.14.0
PKG_RELEASE:=5
PKG_VERSION:=0.15.0
PKG_RELEASE:=6
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/markusressel/fan2go/tar.gz/$(PKG_VERSION)?
+2 -2
View File
@@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for ddnsto
LUCI_DEPENDS:=+ddnsto +block-mount
LUCI_PKGARCH:=all
PKG_VERSION:=4.0.3-r1
PKG_RELEASE:=2
PKG_VERSION:=4.2.2-r1
PKG_RELEASE:=3
include $(TOPDIR)/feeds/luci/luci.mk
+394 -1
View File
@@ -70,6 +70,17 @@ local function method_not_allowed()
write_json({ ok = false, error = "method not allowed" })
end
local function conflict_request(msg, detail, code)
local http = require "luci.http"
http.status(409, msg or "conflict")
write_json({
ok = false,
error = msg or "conflict",
detail = detail or "",
code = code or "conflict",
})
end
local function read_json_body()
local http = require "luci.http"
local jsonc = require "luci.jsonc"
@@ -123,6 +134,203 @@ local function fetch_device_id(index)
return parse_device_id(get_command(cmd))
end
local function shell_quote(value)
local raw = tostring(value or "")
return "'" .. raw:gsub("'", [['"'"']]) .. "'"
end
local function read_file(path, binary)
local mode = binary and "rb" or "r"
local fp = io.open(path, mode)
if not fp then
return nil
end
local data = fp:read("*a")
fp:close()
return data
end
local function remove_file(path)
if path and #path > 0 then
os.remove(path)
end
end
local function temp_path(suffix)
local random = tostring(math.random(100000, 999999))
return string.format("/tmp/ddnsto-luci-%d-%s%s", os.time(), random, suffix or "")
end
local function file_exists(path)
local fp = io.open(path, "rb")
if fp then
fp:close()
return true
end
return false
end
local function service_running()
local sys = require "luci.sys"
local jsonc = require "luci.jsonc"
local raw = sys.exec([[ubus call service list '{"name":"ddnsto"}' 2>/dev/null]]) or ""
local ok, obj = pcall(jsonc.parse, raw)
if ok and type(obj) == "table" and type(obj.ddnsto) == "table" and type(obj.ddnsto.instances) == "table" then
for _, inst in pairs(obj.ddnsto.instances) do
if type(inst) == "table" and inst.running == true then
return true
end
end
end
return false
end
local function read_identity_state()
local uci = require "luci.model.uci".cursor()
local state = {
router_id = "",
identity_mode = "",
device_uuid = "",
}
uci:foreach("ddnsto", "ddnsto", function(s)
state.router_id = s.router_id or state.router_id
state.identity_mode = s.identity_mode or state.identity_mode
state.device_uuid = s.device_uuid or state.device_uuid
end)
return state
end
local function run_init_action(action)
local sys = require "luci.sys"
return sys.call(string.format("/etc/init.d/ddnsto %s >/dev/null 2>&1", shell_quote(action)))
end
local function run_capture(cmd)
local sys = require "luci.sys"
local stdout_path = temp_path(".stdout")
local stderr_path = temp_path(".stderr")
local wrapped = string.format("%s >%s 2>%s", cmd, shell_quote(stdout_path), shell_quote(stderr_path))
local rc = sys.call(wrapped)
local stdout = read_file(stdout_path, true) or ""
local stderr = read_file(stderr_path, true) or ""
remove_file(stdout_path)
remove_file(stderr_path)
return rc, stdout, stderr
end
local function diagnostics_logs_via_cli(lines)
local jsonc = require "luci.jsonc"
local cmd = string.format("/usr/sbin/ddnsto diagnostics logs --tail %d", tonumber(lines) or 200)
local rc, stdout = run_capture(cmd)
if rc ~= 0 or stdout == "" then
return nil
end
local ok, parsed = pcall(jsonc.parse, stdout)
if not ok or type(parsed) ~= "table" or type(parsed.lines) ~= "table" then
return nil
end
return parsed.lines
end
local function diagnostics_bundle_via_cli(output_path)
local cmd = string.format(
"/usr/sbin/ddnsto diagnostics bundle --output %s --reason %s",
shell_quote(output_path),
shell_quote("luci-support")
)
local rc, stdout, stderr = run_capture(cmd)
if rc == 0 and file_exists(output_path) then
return true, stdout
end
return false, stderr ~= "" and stderr or stdout
end
local function diagnostics_bundle_via_http(output_path)
local jsonc = require "luci.jsonc"
local request_body = [[{"reason":"luci-support","tail":500}]]
local request_cmd = string.format(
"curl -fsS -X POST -H 'Content-Type: application/json' --data %s %s",
shell_quote(request_body),
shell_quote("http://127.0.0.1:18333/diagnostics/bundle")
)
local rc, stdout, stderr = run_capture(request_cmd)
if rc ~= 0 or stdout == "" then
return false, stderr ~= "" and stderr or stdout
end
local ok, parsed = pcall(jsonc.parse, stdout)
local download_path = ok and type(parsed) == "table" and parsed.downloadPath or nil
if type(download_path) ~= "string" or download_path == "" then
return false, "missing downloadPath"
end
local download_cmd = string.format(
"curl -fsS %s -o %s",
shell_quote("http://127.0.0.1:18333" .. download_path),
shell_quote(output_path)
)
local download_rc, _, download_stderr = run_capture(download_cmd)
if download_rc == 0 and file_exists(output_path) then
return true, "http"
end
return false, download_stderr ~= "" and download_stderr or "bundle download failed"
end
local function offline_diagnosis_via_http()
local jsonc = require "luci.jsonc"
local cmd = string.format("curl -fsS %s", shell_quote("http://127.0.0.1:18333/offline-diagnosis"))
local rc, stdout, stderr = run_capture(cmd)
if rc ~= 0 or stdout == "" then
return nil, stderr ~= "" and stderr or stdout
end
local ok, parsed = pcall(jsonc.parse, stdout)
if not ok or type(parsed) ~= "table" then
return nil, "invalid offline diagnosis response"
end
return parsed, "http_status"
end
local function offline_diagnosis_via_cli()
local jsonc = require "luci.jsonc"
local rc, stdout, stderr = run_capture("/usr/sbin/ddnsto offline-diagnosis --json")
if rc ~= 0 or stdout == "" then
return nil, stderr ~= "" and stderr or stdout
end
local ok, parsed = pcall(jsonc.parse, stdout)
if not ok or type(parsed) ~= "table" then
return nil, "invalid offline diagnosis response"
end
return parsed, "cli_fallback"
end
local function stream_download(path, filename, content_type)
local http = require "luci.http"
local fp = io.open(path, "rb")
if not fp then
http.status(500, "open failed")
http.prepare_content("application/json")
http.write('{"ok":false,"error":"bundle open failed"}')
return
end
http.header("Content-Disposition", string.format('attachment; filename="%s"', filename))
http.header("Cache-Control", "no-store")
http.prepare_content(content_type or "application/octet-stream")
while true do
local chunk = fp:read(8192)
if not chunk then
break
end
http.write(chunk)
end
fp:close()
end
local function param(body, key)
local http = require "luci.http"
if type(body) == "table" and body[key] ~= nil then
@@ -287,6 +495,7 @@ function index()
-- entry({"admin", "ddnsto_dev"}, call("action_ddnsto_dev"), _("DDNSTO (Dev)"), 99).leaf = true
entry({"admin", "services", "ddnsto", "api", "config"}, call("api_config")).leaf = true
entry({"admin", "services", "ddnsto", "api", "migrate_identity"}, call("api_migrate_identity")).leaf = true
entry({"admin", "services", "ddnsto", "api", "service"}, call("api_service")).leaf = true
entry({"admin", "services", "ddnsto", "api", "run"}, call("api_run")).leaf = true
entry({"admin", "services", "ddnsto", "api", "restart"}, call("api_restart")).leaf = true
@@ -296,6 +505,8 @@ function index()
entry({"admin", "services", "ddnsto", "api", "connectivity"}, call("api_connectivity")).leaf = true
entry({"admin", "services", "ddnsto", "api", "status"}, call("api_status")).leaf = true
entry({"admin", "services", "ddnsto", "api", "logs"}, call("api_logs")).leaf = true
entry({"admin", "services", "ddnsto", "api", "offline_diagnosis"}, call("api_offline_diagnosis")).leaf = true
entry({"admin", "services", "ddnsto", "api", "support_bundle"}, call("api_support_bundle")).leaf = true
end
function action_page()
@@ -427,6 +638,120 @@ function api_config()
write_json({ ok = true })
end
function api_migrate_identity()
local http = require "luci.http"
local uci = require "luci.model.uci".cursor()
local method = http.getenv("REQUEST_METHOD") or ""
if method ~= "POST" then
method_not_allowed()
return
end
if not require_csrf() then return end
local body = read_json_body()
local enabled = param(body, "enabled")
local ddnsto_token = param(body, "ddnsto_token")
local index = param(body, "index")
local logger = param(body, "logger")
local feat_enabled = param(body, "feat_enabled")
local feat_port = param(body, "feat_port")
local feat_username = param(body, "feat_username")
local feat_password = param(body, "feat_password")
local feat_disk_path_selected = param(body, "feat_disk_path_selected")
local confirm_reidentity = param(body, "confirm_reidentity")
if confirm_reidentity ~= "1" then
return bad_request("missing identity migration confirmation")
end
if enabled and not is_bool01(enabled) then return bad_request("bad enabled") end
if logger and not is_bool01(logger) then return bad_request("bad logger") end
if feat_enabled and not is_bool01(feat_enabled) then return bad_request("bad feat_enabled") end
if ddnsto_token ~= nil and has_space(ddnsto_token) then
return bad_request("令牌勿包含空格")
end
if not is_uint(index) then
return bad_request("请填写正确的设备编号,仅允许数字")
end
local index_num = tonumber(index)
if index_num < 0 or index_num > 99 then
return bad_request("请填写正确的设备编号,仅允许数字")
end
local enabled_on = enabled == "1"
local feat_on = feat_enabled == "1"
if enabled_on and is_empty(ddnsto_token) then
return bad_request("请填写正确用户Token(令牌)")
end
if feat_on then
if not is_uint(feat_port) then
return bad_request("请填写正确的端口")
end
local port_num = tonumber(feat_port)
if not port_num or port_num == 0 or port_num > 65535 then
return bad_request("请填写正确的端口")
end
if is_empty(feat_username) then
return bad_request("请填写授权用户名")
end
if has_space(feat_username) then
return bad_request("用户名请勿包含空格")
end
if is_empty(feat_password) then
return bad_request("请填写授权用户密码")
end
if has_space(feat_password) then
return bad_request("用户密码请勿包含空格")
end
if is_empty(feat_disk_path_selected) then
return bad_request("请填写共享磁盘路径")
end
end
local old_identity = read_identity_state()
local current = read_config()
local old_index = tostring(current.index or "0")
local identity_missing = is_empty(old_identity.router_id)
if tostring(index) == old_index and not identity_missing then
return conflict_request("identity migration not required", "index unchanged", "identity_migration_not_required")
end
local sid = ensure_ddnsto_section()
run_init_action("stop")
if enabled then uci:set("ddnsto", sid, "enabled", enabled) end
if ddnsto_token ~= nil then uci:set("ddnsto", sid, "token", ddnsto_token) end
if index then uci:set("ddnsto", sid, "index", index) end
if logger then uci:set("ddnsto", sid, "logger", logger) end
if feat_enabled then uci:set("ddnsto", sid, "feat_enabled", feat_enabled) end
if feat_port then uci:set("ddnsto", sid, "feat_port", feat_port) end
if feat_username then uci:set("ddnsto", sid, "feat_username", feat_username) end
if feat_password then uci:set("ddnsto", sid, "feat_password", feat_password) end
if feat_disk_path_selected then uci:set("ddnsto", sid, "feat_disk_path_selected", feat_disk_path_selected) end
uci:delete("ddnsto", sid, "router_id")
uci:delete("ddnsto", sid, "identity_mode")
uci:delete("ddnsto", sid, "device_uuid")
uci:commit("ddnsto")
local restart_rc = 0
if enabled ~= "0" then
restart_rc = run_init_action("start")
end
write_json({
ok = true,
data = {
old_index = old_index,
new_index = tostring(index),
old_router_id = old_identity.router_id or "",
service_started = restart_rc == 0 and enabled ~= "0" or false,
message = "设备身份已重置,服务正在使用新的设备编号重新生成设备 ID",
}
})
end
-- ==========
-- API: service
-- ==========
@@ -696,6 +1021,12 @@ function api_logs()
if lines < 10 then lines = 10 end
if lines > 2000 then lines = 2000 end
local cli_lines = diagnostics_logs_via_cli(lines)
if cli_lines ~= nil then
write_json({ ok = true, data = { lines = cli_lines, total = #cli_lines, source = "diagnostics_cli" } })
return
end
local cmd = string.format("logread 2>/dev/null | grep -E 'ddnsto|ddnstod' | tail -n %d", lines)
local out = sys.exec(cmd) or ""
local arr = {}
@@ -706,7 +1037,69 @@ function api_logs()
end
end
write_json({ ok = true, data = { lines = arr, total = #arr } })
write_json({ ok = true, data = { lines = arr, total = #arr, source = "logread_fallback" } })
end
function api_offline_diagnosis()
local http = require "luci.http"
local method = http.getenv("REQUEST_METHOD") or ""
if method ~= "GET" then
method_not_allowed()
return
end
if not service_running() then
write_json({
ok = false,
error = "offline diagnosis unavailable",
detail = "ddnsto not running",
code = "ddnsto_not_running",
})
return
end
local data, source = offline_diagnosis_via_http()
if data ~= nil then
write_json({ ok = true, data = data, source = source })
return
end
write_json({ ok = false, error = "offline diagnosis unavailable" })
end
function api_support_bundle()
local http = require "luci.http"
local method = http.getenv("REQUEST_METHOD") or ""
if method ~= "GET" then
method_not_allowed()
return
end
if not service_running() then
http.status(409, "ddnsto not running")
write_json({
ok = false,
error = "diagnostics bundle unavailable",
detail = "ddnsto not running",
code = "ddnsto_not_running",
})
return
end
local output_path = temp_path(".zip")
local ok, err = diagnostics_bundle_via_http(output_path)
if not ok then
remove_file(output_path)
http.status(500, "bundle failed")
write_json({ ok = false, error = "diagnostics bundle unavailable", detail = err or "" })
return
end
local filename = string.format("ddnsto-openwrt-support-%d.zip", os.time())
stream_download(output_path, filename, "application/zip")
remove_file(output_path)
end
function action_ddnsto_dev()
@@ -1,4 +1,4 @@
(function(){const E=document.createElement("link").relList;if(E&&E.supports&&E.supports("modulepreload"))return;for(const T of document.querySelectorAll('link[rel="modulepreload"]'))U(T);new MutationObserver(T=>{for(const L of T)if(L.type==="childList")for(const B of L.addedNodes)B.tagName==="LINK"&&B.rel==="modulepreload"&&U(B)}).observe(document,{childList:!0,subtree:!0});function d(T){const L={};return T.integrity&&(L.integrity=T.integrity),T.referrerPolicy&&(L.referrerPolicy=T.referrerPolicy),T.crossOrigin==="use-credentials"?L.credentials="include":T.crossOrigin==="anonymous"?L.credentials="omit":L.credentials="same-origin",L}function U(T){if(T.ep)return;T.ep=!0;const L=d(T);fetch(T.href,L)}})();function Vd(y){return y&&y.__esModule&&Object.prototype.hasOwnProperty.call(y,"default")?y.default:y}var Mi={exports:{}},Nr={},Oi={exports:{}},J={};/**
(function(){const N=document.createElement("link").relList;if(N&&N.supports&&N.supports("modulepreload"))return;for(const I of document.querySelectorAll('link[rel="modulepreload"]'))V(I);new MutationObserver(I=>{for(const M of I)if(M.type==="childList")for(const Z of M.addedNodes)Z.tagName==="LINK"&&Z.rel==="modulepreload"&&V(Z)}).observe(document,{childList:!0,subtree:!0});function d(I){const M={};return I.integrity&&(M.integrity=I.integrity),I.referrerPolicy&&(M.referrerPolicy=I.referrerPolicy),I.crossOrigin==="use-credentials"?M.credentials="include":I.crossOrigin==="anonymous"?M.credentials="omit":M.credentials="same-origin",M}function V(I){if(I.ep)return;I.ep=!0;const M=d(I);fetch(I.href,M)}})();function Bd(v){return v&&v.__esModule&&Object.prototype.hasOwnProperty.call(v,"default")?v.default:v}var Ii={exports:{}},Cr={},Oi={exports:{}},ne={};/**
* @license React
* react.production.min.js
*
@@ -6,7 +6,7 @@
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var Iu;function Wd(){if(Iu)return J;Iu=1;var y=Symbol.for("react.element"),E=Symbol.for("react.portal"),d=Symbol.for("react.fragment"),U=Symbol.for("react.strict_mode"),T=Symbol.for("react.profiler"),L=Symbol.for("react.provider"),B=Symbol.for("react.context"),G=Symbol.for("react.forward_ref"),A=Symbol.for("react.suspense"),Q=Symbol.for("react.memo"),Z=Symbol.for("react.lazy"),W=Symbol.iterator;function H(u){return u===null||typeof u!="object"?null:(u=W&&u[W]||u["@@iterator"],typeof u=="function"?u:null)}var q={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},ae=Object.assign,V={};function Y(u,v,M){this.props=u,this.context=v,this.refs=V,this.updater=M||q}Y.prototype.isReactComponent={},Y.prototype.setState=function(u,v){if(typeof u!="object"&&typeof u!="function"&&u!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,u,v,"setState")},Y.prototype.forceUpdate=function(u){this.updater.enqueueForceUpdate(this,u,"forceUpdate")};function we(){}we.prototype=Y.prototype;function ze(u,v,M){this.props=u,this.context=v,this.refs=V,this.updater=M||q}var ke=ze.prototype=new we;ke.constructor=ze,ae(ke,Y.prototype),ke.isPureReactComponent=!0;var fe=Array.isArray,Ce=Object.prototype.hasOwnProperty,K={current:null},Re={key:!0,ref:!0,__self:!0,__source:!0};function he(u,v,M){var b,X={},O=null,re=null;if(v!=null)for(b in v.ref!==void 0&&(re=v.ref),v.key!==void 0&&(O=""+v.key),v)Ce.call(v,b)&&!Re.hasOwnProperty(b)&&(X[b]=v[b]);var ee=arguments.length-2;if(ee===1)X.children=M;else if(1<ee){for(var oe=Array(ee),Ue=0;Ue<ee;Ue++)oe[Ue]=arguments[Ue+2];X.children=oe}if(u&&u.defaultProps)for(b in ee=u.defaultProps,ee)X[b]===void 0&&(X[b]=ee[b]);return{$$typeof:y,type:u,key:O,ref:re,props:X,_owner:K.current}}function xe(u,v){return{$$typeof:y,type:u.type,key:v,ref:u.ref,props:u.props,_owner:u._owner}}function ue(u){return typeof u=="object"&&u!==null&&u.$$typeof===y}function Qe(u){var v={"=":"=0",":":"=2"};return"$"+u.replace(/[=:]/g,function(M){return v[M]})}var Le=/\/+/g;function me(u,v){return typeof u=="object"&&u!==null&&u.key!=null?Qe(""+u.key):v.toString(36)}function ge(u,v,M,b,X){var O=typeof u;(O==="undefined"||O==="boolean")&&(u=null);var re=!1;if(u===null)re=!0;else switch(O){case"string":case"number":re=!0;break;case"object":switch(u.$$typeof){case y:case E:re=!0}}if(re)return re=u,X=X(re),u=b===""?"."+me(re,0):b,fe(X)?(M="",u!=null&&(M=u.replace(Le,"$&/")+"/"),ge(X,v,M,"",function(Ue){return Ue})):X!=null&&(ue(X)&&(X=xe(X,M+(!X.key||re&&re.key===X.key?"":(""+X.key).replace(Le,"$&/")+"/")+u)),v.push(X)),1;if(re=0,b=b===""?".":b+":",fe(u))for(var ee=0;ee<u.length;ee++){O=u[ee];var oe=b+me(O,ee);re+=ge(O,v,M,oe,X)}else if(oe=H(u),typeof oe=="function")for(u=oe.call(u),ee=0;!(O=u.next()).done;)O=O.value,oe=b+me(O,ee++),re+=ge(O,v,M,oe,X);else if(O==="object")throw v=String(u),Error("Objects are not valid as a React child (found: "+(v==="[object Object]"?"object with keys {"+Object.keys(u).join(", ")+"}":v)+"). If you meant to render a collection of children, use an array instead.");return re}function Ie(u,v,M){if(u==null)return u;var b=[],X=0;return ge(u,b,"","",function(O){return v.call(M,O,X++)}),b}function Ne(u){if(u._status===-1){var v=u._result;v=v(),v.then(function(M){(u._status===0||u._status===-1)&&(u._status=1,u._result=M)},function(M){(u._status===0||u._status===-1)&&(u._status=2,u._result=M)}),u._status===-1&&(u._status=0,u._result=v)}if(u._status===1)return u._result.default;throw u._result}var ie={current:null},x={transition:null},I={ReactCurrentDispatcher:ie,ReactCurrentBatchConfig:x,ReactCurrentOwner:K};function g(){throw Error("act(...) is not supported in production builds of React.")}return J.Children={map:Ie,forEach:function(u,v,M){Ie(u,function(){v.apply(this,arguments)},M)},count:function(u){var v=0;return Ie(u,function(){v++}),v},toArray:function(u){return Ie(u,function(v){return v})||[]},only:function(u){if(!ue(u))throw Error("React.Children.only expected to receive a single React element child.");return u}},J.Component=Y,J.Fragment=d,J.Profiler=T,J.PureComponent=ze,J.StrictMode=U,J.Suspense=A,J.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=I,J.act=g,J.cloneElement=function(u,v,M){if(u==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+u+".");var b=ae({},u.props),X=u.key,O=u.ref,re=u._owner;if(v!=null){if(v.ref!==void 0&&(O=v.ref,re=K.current),v.key!==void 0&&(X=""+v.key),u.type&&u.type.defaultProps)var ee=u.type.defaultProps;for(oe in v)Ce.call(v,oe)&&!Re.hasOwnProperty(oe)&&(b[oe]=v[oe]===void 0&&ee!==void 0?ee[oe]:v[oe])}var oe=arguments.length-2;if(oe===1)b.children=M;else if(1<oe){ee=Array(oe);for(var Ue=0;Ue<oe;Ue++)ee[Ue]=arguments[Ue+2];b.children=ee}return{$$typeof:y,type:u.type,key:X,ref:O,props:b,_owner:re}},J.createContext=function(u){retuLine truncated
*/var bu;function Wd(){if(bu)return ne;bu=1;var v=Symbol.for("react.element"),N=Symbol.for("react.portal"),d=Symbol.for("react.fragment"),V=Symbol.for("react.strict_mode"),I=Symbol.for("react.profiler"),M=Symbol.for("react.provider"),Z=Symbol.for("react.context"),ee=Symbol.for("react.forward_ref"),R=Symbol.for("react.suspense"),Y=Symbol.for("react.memo"),te=Symbol.for("react.lazy"),J=Symbol.iterator;function W(u){return u===null||typeof u!="object"?null:(u=J&&u[J]||u["@@iterator"],typeof u=="function"?u:null)}var re={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},fe=Object.assign,Q={};function q(u,g,F){this.props=u,this.context=g,this.refs=Q,this.updater=F||re}q.prototype.isReactComponent={},q.prototype.setState=function(u,g){if(typeof u!="object"&&typeof u!="function"&&u!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,u,g,"setState")},q.prototype.forceUpdate=function(u){this.updater.enqueueForceUpdate(this,u,"forceUpdate")};function xe(){}xe.prototype=q.prototype;function Le(u,g,F){this.props=u,this.context=g,this.refs=Q,this.updater=F||re}var me=Le.prototype=new xe;me.constructor=Le,fe(me,q.prototype),me.isPureReactComponent=!0;var ce=Array.isArray,_e=Object.prototype.hasOwnProperty,K={current:null},Ee={key:!0,ref:!0,__self:!0,__source:!0};function je(u,g,F){var H,X={},U=null,j=null;if(g!=null)for(H in g.ref!==void 0&&(j=g.ref),g.key!==void 0&&(U=""+g.key),g)_e.call(g,H)&&!Ee.hasOwnProperty(H)&&(X[H]=g[H]);var D=arguments.length-2;if(D===1)X.children=F;else if(1<D){for(var _=Array(D),pe=0;pe<D;pe++)_[pe]=arguments[pe+2];X.children=_}if(u&&u.defaultProps)for(H in D=u.defaultProps,D)X[H]===void 0&&(X[H]=D[H]);return{$$typeof:v,type:u,key:U,ref:j,props:X,_owner:K.current}}function Ue(u,g){return{$$typeof:v,type:u.type,key:g,ref:u.ref,props:u.props,_owner:u._owner}}function Ne(u){return typeof u=="object"&&u!==null&&u.$$typeof===v}function ze(u){var g={"=":"=0",":":"=2"};return"$"+u.replace(/[=:]/g,function(F){return g[F]})}var ye=/\/+/g;function le(u,g){return typeof u=="object"&&u!==null&&u.key!=null?ze(""+u.key):g.toString(36)}function de(u,g,F,H,X){var U=typeof u;(U==="undefined"||U==="boolean")&&(u=null);var j=!1;if(u===null)j=!0;else switch(U){case"string":case"number":j=!0;break;case"object":switch(u.$$typeof){case v:case N:j=!0}}if(j)return j=u,X=X(j),u=H===""?"."+le(j,0):H,ce(X)?(F="",u!=null&&(F=u.replace(ye,"$&/")+"/"),de(X,g,F,"",function(pe){return pe})):X!=null&&(Ne(X)&&(X=Ue(X,F+(!X.key||j&&j.key===X.key?"":(""+X.key).replace(ye,"$&/")+"/")+u)),g.push(X)),1;if(j=0,H=H===""?".":H+":",ce(u))for(var D=0;D<u.length;D++){U=u[D];var _=H+le(U,D);j+=de(U,g,F,_,X)}else if(_=W(u),typeof _=="function")for(u=_.call(u),D=0;!(U=u.next()).done;)U=U.value,_=H+le(U,D++),j+=de(U,g,F,_,X);else if(U==="object")throw g=String(u),Error("Objects are not valid as a React child (found: "+(g==="[object Object]"?"object with keys {"+Object.keys(u).join(", ")+"}":g)+"). If you meant to render a collection of children, use an array instead.");return j}function Ae(u,g,F){if(u==null)return u;var H=[],X=0;return de(u,H,"","",function(U){return g.call(F,U,X++)}),H}function ie(u){if(u._status===-1){var g=u._result;g=g(),g.then(function(F){(u._status===0||u._status===-1)&&(u._status=1,u._result=F)},function(F){(u._status===0||u._status===-1)&&(u._status=2,u._result=F)}),u._status===-1&&(u._status=0,u._result=g)}if(u._status===1)return u._result.default;throw u._result}var oe={current:null},E={transition:null},L={ReactCurrentDispatcher:oe,ReactCurrentBatchConfig:E,ReactCurrentOwner:K};function S(){throw Error("act(...) is not supported in production builds of React.")}return ne.Children={map:Ae,forEach:function(u,g,F){Ae(u,function(){g.apply(this,arguments)},F)},count:function(u){var g=0;return Ae(u,function(){g++}),g},toArray:function(u){return Ae(u,function(g){return g})||[]},only:function(u){if(!Ne(u))throw Error("React.Children.only expected to receive a single React element child.");return u}},ne.Component=q,ne.Fragment=d,ne.Profiler=I,ne.PureComponent=Le,ne.StrictMode=V,ne.Suspense=R,ne.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=L,ne.act=S,ne.cloneElement=function(u,g,F){if(u==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+u+".");var H=fe({},u.props),X=u.key,U=u.ref,j=u._owner;if(g!=null){if(g.ref!==void 0&&(U=g.ref,j=K.current),g.key!==void 0&&(X=""+g.key),u.type&&u.type.defaultProps)var D=u.type.defaultProps;for(_ in g)_e.call(g,_)&&!Ee.hasOwnProperty(_)&&(H[_]=g[_]===void 0&&D!==void 0?D[_]:g[_])}var _=arguments.length-2;if(_===1)H.children=F;else if(1<_){D=Array(_);for(var pe=0;pe<_;pe++)D[pe]=arguments[pe+2];H.children=D}return{$$typeof:v,type:u.type,key:X,ref:U,props:H,_owner:j}},ne.createContext=function(u){return u={$$typeof:Z,_currentValue:u,_currentValueLine truncated
* @license React
* react-jsx-runtime.production.min.js
*
@@ -14,7 +14,7 @@
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var Ou;function Bd(){if(Ou)return Nr;Ou=1;var y=Ai(),E=Symbol.for("react.element"),d=Symbol.for("react.fragment"),U=Object.prototype.hasOwnProperty,T=y.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,L={key:!0,ref:!0,__self:!0,__source:!0};function B(G,A,Q){var Z,W={},H=null,q=null;Q!==void 0&&(H=""+Q),A.key!==void 0&&(H=""+A.key),A.ref!==void 0&&(q=A.ref);for(Z in A)U.call(A,Z)&&!L.hasOwnProperty(Z)&&(W[Z]=A[Z]);if(G&&G.defaultProps)for(Z in A=G.defaultProps,A)W[Z]===void 0&&(W[Z]=A[Z]);return{$$typeof:E,type:G,key:H,ref:q,props:W,_owner:T.current}}return Nr.Fragment=d,Nr.jsx=B,Nr.jsxs=B,Nr}var Du;function Qd(){return Du||(Du=1,Mi.exports=Bd()),Mi.exports}var m=Qd(),C=Ai();const Kd=Vd(C);var Fl={},Di={exports:{}},Je={},Fi={exports:{}},bi={};/**
*/var Ou;function Qd(){if(Ou)return Cr;Ou=1;var v=Ai(),N=Symbol.for("react.element"),d=Symbol.for("react.fragment"),V=Object.prototype.hasOwnProperty,I=v.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,M={key:!0,ref:!0,__self:!0,__source:!0};function Z(ee,R,Y){var te,J={},W=null,re=null;Y!==void 0&&(W=""+Y),R.key!==void 0&&(W=""+R.key),R.ref!==void 0&&(re=R.ref);for(te in R)V.call(R,te)&&!M.hasOwnProperty(te)&&(J[te]=R[te]);if(ee&&ee.defaultProps)for(te in R=ee.defaultProps,R)J[te]===void 0&&(J[te]=R[te]);return{$$typeof:N,type:ee,key:W,ref:re,props:J,_owner:I.current}}return Cr.Fragment=d,Cr.jsx=Z,Cr.jsxs=Z,Cr}var Mu;function Kd(){return Mu||(Mu=1,Ii.exports=Qd()),Ii.exports}var f=Kd(),C=Ai();const Yd=Bd(C);var Dl={},Mi={exports:{}},tt={},Di={exports:{}},Fi={};/**
* @license React
* scheduler.production.min.js
*
@@ -22,7 +22,7 @@
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var Fu;function Yd(){return Fu||(Fu=1,(function(y){function E(x,I){var g=x.length;x.push(I);e:for(;0<g;){var u=g-1>>>1,v=x[u];if(0<T(v,I))x[u]=I,x[g]=v,g=u;else break e}}function d(x){return x.length===0?null:x[0]}function U(x){if(x.length===0)return null;var I=x[0],g=x.pop();if(g!==I){x[0]=g;e:for(var u=0,v=x.length,M=v>>>1;u<M;){var b=2*(u+1)-1,X=x[b],O=b+1,re=x[O];if(0>T(X,g))O<v&&0>T(re,X)?(x[u]=re,x[O]=g,u=O):(x[u]=X,x[b]=g,u=b);else if(O<v&&0>T(re,g))x[u]=re,x[O]=g,u=O;else break e}}return I}function T(x,I){var g=x.sortIndex-I.sortIndex;return g!==0?g:x.id-I.id}if(typeof performance=="object"&&typeof performance.now=="function"){var L=performance;y.unstable_now=function(){return L.now()}}else{var B=Date,G=B.now();y.unstable_now=function(){return B.now()-G}}var A=[],Q=[],Z=1,W=null,H=3,q=!1,ae=!1,V=!1,Y=typeof setTimeout=="function"?setTimeout:null,we=typeof clearTimeout=="function"?clearTimeout:null,ze=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function ke(x){for(var I=d(Q);I!==null;){if(I.callback===null)U(Q);else if(I.startTime<=x)U(Q),I.sortIndex=I.expirationTime,E(A,I);else break;I=d(Q)}}function fe(x){if(V=!1,ke(x),!ae)if(d(A)!==null)ae=!0,Ne(Ce);else{var I=d(Q);I!==null&&ie(fe,I.startTime-x)}}function Ce(x,I){ae=!1,V&&(V=!1,we(he),he=-1),q=!0;var g=H;try{for(ke(I),W=d(A);W!==null&&(!(W.expirationTime>I)||x&&!Qe());){var u=W.callback;if(typeof u=="function"){W.callback=null,H=W.priorityLevel;var v=u(W.expirationTime<=I);I=y.unstable_now(),typeof v=="function"?W.callback=v:W===d(A)&&U(A),ke(I)}else U(A);W=d(A)}if(W!==null)var M=!0;else{var b=d(Q);b!==null&&ie(fe,b.startTime-I),M=!1}return M}finally{W=null,H=g,q=!1}}var K=!1,Re=null,he=-1,xe=5,ue=-1;function Qe(){return!(y.unstable_now()-ue<xe)}function Le(){if(Re!==null){var x=y.unstable_now();ue=x;var I=!0;try{I=Re(!0,x)}finally{I?me():(K=!1,Re=null)}}else K=!1}var me;if(typeof ze=="function")me=function(){ze(Le)};else if(typeof MessageChannel<"u"){var ge=new MessageChannel,Ie=ge.port2;ge.port1.onmessage=Le,me=function(){Ie.postMessage(null)}}else me=function(){Y(Le,0)};function Ne(x){Re=x,K||(K=!0,me())}function ie(x,I){he=Y(function(){x(y.unstable_now())},I)}y.unstable_IdlePriority=5,y.unstable_ImmediatePriority=1,y.unstable_LowPriority=4,y.unstable_NormalPriority=3,y.unstable_Profiling=null,y.unstable_UserBlockingPriority=2,y.unstable_cancelCallback=function(x){x.callback=null},y.unstable_continueExecution=function(){ae||q||(ae=!0,Ne(Ce))},y.unstable_forceFrameRate=function(x){0>x||125<x?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):xe=0<x?Math.floor(1e3/x):5},y.unstable_getCurrentPriorityLevel=function(){return H},y.unstable_getFirstCallbackNode=function(){return d(A)},y.unstable_next=function(x){switch(H){case 1:case 2:case 3:var I=3;break;default:I=H}var g=H;H=I;try{return x()}finally{H=g}},y.unstable_pauseExecution=function(){},y.unstable_requestPaint=function(){},y.unstable_runWithPriority=function(x,I){switch(x){case 1:case 2:case 3:case 4:case 5:break;default:x=3}var g=H;H=x;try{return I()}finally{H=g}},y.unstable_scheduleCallback=function(x,I,g){var u=y.unstable_now();switch(typeof g=="object"&&g!==null?(g=g.delay,g=typeof g=="number"&&0<g?u+g:u):g=u,x){case 1:var v=-1;break;case 2:v=250;break;case 5:v=1073741823;break;case 4:v=1e4;break;default:v=5e3}return v=g+v,x={id:Z++,callback:I,priorityLevel:x,startTime:g,expirationTime:v,sortIndex:-1},g>u?(x.sortIndex=g,E(Q,x),d(A)===null&&x===d(Q)&&(V?(we(he),he=-1):V=!0,ie(fe,g-u))):(x.sortIndex=v,E(A,x),ae||q||(ae=!0,Ne(Ce))),x},y.unstable_shouldYield=Qe,y.unstable_wrapCallback=function(x){var I=H;return function(){var g=H;H=I;try{return x.apply(this,arguments)}finally{H=g}}}})(bi)),bi}var bu;function Xd(){return bu||(bu=1,Fi.exports=Yd()),Fi.exports}/**
*/var Du;function Xd(){return Du||(Du=1,(function(v){function N(E,L){var S=E.length;E.push(L);e:for(;0<S;){var u=S-1>>>1,g=E[u];if(0<I(g,L))E[u]=L,E[S]=g,S=u;else break e}}function d(E){return E.length===0?null:E[0]}function V(E){if(E.length===0)return null;var L=E[0],S=E.pop();if(S!==L){E[0]=S;e:for(var u=0,g=E.length,F=g>>>1;u<F;){var H=2*(u+1)-1,X=E[H],U=H+1,j=E[U];if(0>I(X,S))U<g&&0>I(j,X)?(E[u]=j,E[U]=S,u=U):(E[u]=X,E[H]=S,u=H);else if(U<g&&0>I(j,S))E[u]=j,E[U]=S,u=U;else break e}}return L}function I(E,L){var S=E.sortIndex-L.sortIndex;return S!==0?S:E.id-L.id}if(typeof performance=="object"&&typeof performance.now=="function"){var M=performance;v.unstable_now=function(){return M.now()}}else{var Z=Date,ee=Z.now();v.unstable_now=function(){return Z.now()-ee}}var R=[],Y=[],te=1,J=null,W=3,re=!1,fe=!1,Q=!1,q=typeof setTimeout=="function"?setTimeout:null,xe=typeof clearTimeout=="function"?clearTimeout:null,Le=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function me(E){for(var L=d(Y);L!==null;){if(L.callback===null)V(Y);else if(L.startTime<=E)V(Y),L.sortIndex=L.expirationTime,N(R,L);else break;L=d(Y)}}function ce(E){if(Q=!1,me(E),!fe)if(d(R)!==null)fe=!0,ie(_e);else{var L=d(Y);L!==null&&oe(ce,L.startTime-E)}}function _e(E,L){fe=!1,Q&&(Q=!1,xe(je),je=-1),re=!0;var S=W;try{for(me(L),J=d(R);J!==null&&(!(J.expirationTime>L)||E&&!ze());){var u=J.callback;if(typeof u=="function"){J.callback=null,W=J.priorityLevel;var g=u(J.expirationTime<=L);L=v.unstable_now(),typeof g=="function"?J.callback=g:J===d(R)&&V(R),me(L)}else V(R);J=d(R)}if(J!==null)var F=!0;else{var H=d(Y);H!==null&&oe(ce,H.startTime-L),F=!1}return F}finally{J=null,W=S,re=!1}}var K=!1,Ee=null,je=-1,Ue=5,Ne=-1;function ze(){return!(v.unstable_now()-Ne<Ue)}function ye(){if(Ee!==null){var E=v.unstable_now();Ne=E;var L=!0;try{L=Ee(!0,E)}finally{L?le():(K=!1,Ee=null)}}else K=!1}var le;if(typeof Le=="function")le=function(){Le(ye)};else if(typeof MessageChannel<"u"){var de=new MessageChannel,Ae=de.port2;de.port1.onmessage=ye,le=function(){Ae.postMessage(null)}}else le=function(){q(ye,0)};function ie(E){Ee=E,K||(K=!0,le())}function oe(E,L){je=q(function(){E(v.unstable_now())},L)}v.unstable_IdlePriority=5,v.unstable_ImmediatePriority=1,v.unstable_LowPriority=4,v.unstable_NormalPriority=3,v.unstable_Profiling=null,v.unstable_UserBlockingPriority=2,v.unstable_cancelCallback=function(E){E.callback=null},v.unstable_continueExecution=function(){fe||re||(fe=!0,ie(_e))},v.unstable_forceFrameRate=function(E){0>E||125<E?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):Ue=0<E?Math.floor(1e3/E):5},v.unstable_getCurrentPriorityLevel=function(){return W},v.unstable_getFirstCallbackNode=function(){return d(R)},v.unstable_next=function(E){switch(W){case 1:case 2:case 3:var L=3;break;default:L=W}var S=W;W=L;try{return E()}finally{W=S}},v.unstable_pauseExecution=function(){},v.unstable_requestPaint=function(){},v.unstable_runWithPriority=function(E,L){switch(E){case 1:case 2:case 3:case 4:case 5:break;default:E=3}var S=W;W=E;try{return L()}finally{W=S}},v.unstable_scheduleCallback=function(E,L,S){var u=v.unstable_now();switch(typeof S=="object"&&S!==null?(S=S.delay,S=typeof S=="number"&&0<S?u+S:u):S=u,E){case 1:var g=-1;break;case 2:g=250;break;case 5:g=1073741823;break;case 4:g=1e4;break;default:g=5e3}return g=S+g,E={id:te++,callback:L,priorityLevel:E,startTime:S,expirationTime:g,sortIndex:-1},S>u?(E.sortIndex=S,N(Y,E),d(R)===null&&E===d(Y)&&(Q?(xe(je),je=-1):Q=!0,oe(ce,S-u))):(E.sortIndex=g,N(R,E),fe||re||(fe=!0,ie(_e))),E},v.unstable_shouldYield=ze,v.unstable_wrapCallback=function(E){var L=W;return function(){var S=W;W=L;try{return E.apply(this,arguments)}finally{W=S}}}})(Fi)),Fi}var Fu;function Gd(){return Fu||(Fu=1,Di.exports=Xd()),Di.exports}/**
* @license React
* react-dom.production.min.js
*
@@ -30,73 +30,83 @@
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var Uu;function Gd(){if(Uu)return Je;Uu=1;var y=Ai(),E=Xd();function d(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var U=new Set,T={};function L(e,t){B(e,t),B(e+"Capture",t)}function B(e,t){for(T[e]=t,e=0;e<t.length;e++)U.add(t[e])}var G=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),A=Object.prototype.hasOwnProperty,Q=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Z={},W={};function H(e){return A.call(W,e)?!0:A.call(Z,e)?!1:Q.test(e)?W[e]=!0:(Z[e]=!0,!1)}function q(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function ae(e,t,n,r){if(t===null||typeof t>"u"||q(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function V(e,t,n,r,l,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var Y={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Y[e]=new V(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Y[t]=new V(t,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){Y[e]=new V(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Y[e]=new V(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Y[e]=new V(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){Y[e]=new V(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){Y[e]=new V(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){Y[e]=new V(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){Y[e]=new V(e,5,!1,e.toLowerCase(),null,!1,!1)});var we=/[\-:]([a-z])/g;function ze(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(we,ze);Y[t]=new V(t,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(we,ze);Y[t]=new V(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(we,ze);Y[t]=new V(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){Y[e]=new V(e,1,!1,e.toLowerCase(),null,!1,!1)}),Y.xlinkHref=new V("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){Y[e]=new V(e,1,!1,e.toLowerCase(),null,!0,!0)});function ke(e,t,n,r){var l=Y.hasOwnProperty(t)?Y[t]:null;(l!==null?l.type!==0:r||!(2<t.length)||t[0]!=="o"&&t[0]!=="O"||t[1]!==" Line truncated
`+u+e}var M=!1;function b(e,t){if(!e||M)return"";M=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(t,[])}catch(h){var r=h}Reflect.construct(e,[],t)}else{try{t.call()}catch(h){r=h}e.call(t.prototype)}else{try{throw Error()}catch(h){r=h}e()}}catch(h){if(h&&r&&typeof h.stack=="string"){for(var l=h.stack.split(`
*/var Uu;function Zd(){if(Uu)return tt;Uu=1;var v=Ai(),N=Gd();function d(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var V=new Set,I={};function M(e,t){Z(e,t),Z(e+"Capture",t)}function Z(e,t){for(I[e]=t,e=0;e<t.length;e++)V.add(t[e])}var ee=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),R=Object.prototype.hasOwnProperty,Y=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,te={},J={};function W(e){return R.call(J,e)?!0:R.call(te,e)?!1:Y.test(e)?J[e]=!0:(te[e]=!0,!1)}function re(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function fe(e,t,n,r){if(t===null||typeof t>"u"||re(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Q(e,t,n,r,l,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var q={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){q[e]=new Q(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];q[t]=new Q(t,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){q[e]=new Q(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){q[e]=new Q(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){q[e]=new Q(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){q[e]=new Q(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){q[e]=new Q(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){q[e]=new Q(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){q[e]=new Q(e,5,!1,e.toLowerCase(),null,!1,!1)});var xe=/[\-:]([a-z])/g;function Le(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(xe,Le);q[t]=new Q(t,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(xe,Le);q[t]=new Q(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(xe,Le);q[t]=new Q(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){q[e]=new Q(e,1,!1,e.toLowerCase(),null,!1,!1)}),q.xlinkHref=new Q("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){q[e]=new Q(e,1,!1,e.toLowerCase(),null,!0,!0)});function me(e,t,n,r){var l=q.hasOwnProperty(t)?q[t]:null;(l!==null?l.type!==0:r||!(2<t.length)||t[0]!=="o"&&t[0]!=="O"||t[ Line truncated
`+u+e}var F=!1;function H(e,t){if(!e||F)return"";F=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(t,[])}catch(h){var r=h}Reflect.construct(e,[],t)}else{try{t.call()}catch(h){r=h}e.call(t.prototype)}else{try{throw Error()}catch(h){r=h}e()}}catch(h){if(h&&r&&typeof h.stack=="string"){for(var l=h.stack.split(`
`),o=r.stack.split(`
`),i=l.length-1,a=o.length-1;1<=i&&0<=a&&l[i]!==o[a];)a--;for(;1<=i&&0<=a;i--,a--)if(l[i]!==o[a]){if(i!==1||a!==1)do if(i--,a--,0>a||l[i]!==o[a]){var s=`
`+l[i].replace(" at new "," at ");return e.displayName&&s.includes("<anonymous>")&&(s=s.replace("<anonymous>",e.displayName)),s}while(1<=i&&0<=a);break}}}finally{M=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?v(e):""}function X(e){switch(e.tag){case 5:return v(e.type);case 16:return v("Lazy");case 13:return v("Suspense");case 19:return v("SuspenseList");case 0:case 2:case 15:return e=b(e.type,!1),e;case 11:return e=b(e.type.render,!1),e;case 1:return e=b(e.type,!0),e;default:return""}}function O(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Re:return"Fragment";case K:return"Portal";case xe:return"Profiler";case he:return"StrictMode";case me:return"Suspense";case ge:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Qe:return(e.displayName||"Context")+".Consumer";case ue:return(e._context.displayName||"Context")+".Provider";case Le:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Ie:return t=e.displayName||null,t!==null?t:O(e.type)||"Memo";case Ne:t=e._payload,e=e._init;try{return O(e(t))}catch{}}return null}function re(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return O(t);case 8:return t===he?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function ee(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function oe(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Ue(e){var t=oe(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function fn(e){e._valueTracker||(e._valueTracker=Ue(e))}function Un(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=oe(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Tt(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function An(e,t){var n=t.checked;return g({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Zt(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=ee(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function $i(e,t){t=t.checked,t!=null&&ke(e,"checked",t,!1)}function $l(e,t){$i(e,t);var n=ee(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Hl(e,t.type,n):t.hasOwnProperty("defaultValue")&&Hl(e,t.type,ee(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Hi(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Hl(e,t,n){(t!=="number"||Tt(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var $n=Array.isArray;function pn(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l<n.length;l++)t["$"+n[l]]=!0;for(n=0;n<e.length;n++)l=t.hasOwnProperty("$"+e[n].value),e[n].selected!==l&&(e[n].selected=l),l&&r&&(e[n].defaultSelected=!0)}else{for(n=""+ee(n),t=null,l=0;l<e.length;l++){if(e[l].value===n){e[l].selected=!0,r&&(e[l].defaultSelected=!0);return}t!==null||e[l].disabled||(t=e[l])}t!==null&&(t.selected=!0)}}function Vl(e,t){if(t.dangerouslySetInner Line truncated
`).replace(nd,"")}function Gr(e,t,n){if(t=Ja(t),Ja(e)!==t&&n)throw Error(d(425))}function Zr(){}var Co=null,No=null;function jo(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var zo=typeof setTimeout=="function"?setTimeout:void 0,rd=typeof clearTimeout=="function"?clearTimeout:void 0,qa=typeof Promise=="function"?Promise:void 0,ld=typeof queueMicrotask=="function"?queueMicrotask:typeof qa<"u"?function(e){return qa.resolve(null).then(e).catch(od)}:zo;function od(e){setTimeout(function(){throw e})}function Po(e,t){var n=t,r=0;do{var l=n.nextSibling;if(e.removeChild(n),l&&l.nodeType===8)if(n=l.data,n==="/$"){if(r===0){e.removeChild(l),qn(t);return}r--}else n!=="$"&&n!=="$?"&&n!=="$!"||r++;n=l}while(n);qn(t)}function Ft(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?")break;if(t==="/$")return null}}return e}function es(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="$"||n==="$!"||n==="$?"){if(t===0)return e;t--}else n==="/$"&&t++}e=e.previousSibling}return null}var Sn=Math.random().toString(36).slice(2),yt="__reactFiber$"+Sn,cr="__reactProps$"+Sn,St="__reactContainer$"+Sn,To="__reactEvents$"+Sn,id="__reactListeners$"+Sn,ad="__reactHandles$"+Sn;function qt(e){var t=e[yt];if(t)return t;for(var n=e.parentNode;n;){if(t=n[St]||n[yt]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=es(e);e!==null;){if(n=e[yt])return n;e=es(e)}return t}e=n,n=e.parentNode}return null}function dr(e){return e=e[yt]||e[St],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function _n(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(d(33))}function Jr(e){return e[cr]||null}var Ro=[],En=-1;function bt(e){return{current:e}}function de(e){0>En||(e.current=Ro[En],Ro[En]=null,En--)}function se(e,t){En++,Ro[En]=e.current,e.current=t}var Ut={},Ae=bt(Ut),Ke=bt(!1),en=Ut;function Cn(e,t){var n=e.type.contextTypes;if(!n)return Ut;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in n)l[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function Ye(e){return e=e.childContextTypes,e!=null}function qr(){de(Ke),de(Ae)}function ts(e,t,n){if(Ae.current!==Ut)throw Error(d(168));se(Ae,t),se(Ke,n)}function ns(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(d(108,re(e)||"Unknown",l));return g({},n,r)}function el(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ut,en=Ae.current,se(Ae,e),se(Ke,Ke.current),!0}function rs(e,t,n){var r=e.stateNode;if(!r)throw Error(d(169));n?(e=ns(e,t,en),r.__reactInternalMemoizedMergedChildContext=e,de(Ke),de(Ae),se(Ae,e)):de(Ke),se(Ke,n)}var _t=null,tl=!1,Lo=!1;function ls(e){_t===null?_t=[e]:_t.push(e)}function sd(e){tl=!0,ls(e)}function At(){if(!Lo&&_t!==null){Lo=!0;var e=0,t=le;try{var n=_t;for(le=1;e<n.length;e++){var r=n[e];do r=r(!0);while(r!==null)}_t=null,tl=!1}catch(l){throw _t!==null&&(_t=_t.slice(e+1)),ia(ql,At),l}finally{le=t,Lo=!1}}return null}var Nn=[],jn=0,nl=null,rl=0,rt=[],lt=0,tn=null,Et=1,Ct="";function nn(e,t){Nn[jn++]=rl,Nn[jn++]=nl,nl=e,rl=t}function os(e,t,n){rt[lt++]=Et,rt[lt++]=Ct,rt[lt++]=tn,tn=e;var r=Et;e=Ct;var l=32-ut(r)-1;r&=~(1<<l),n+=1;var o=32-ut(t)+l;if(30<o){var i=l-l%5;o=(r&(1<<i)-1).toString(32),r>>=i,l-=i,Et=1<<32-ut(t)+l|n<<l|r,Ct=o+e}else Et=1<<o|n<<l|r,Ct=e}function Io(e){e.return!==null&&(nn(e,1),os(e,1,0))}function Mo(e){for(;e===nl;)nl=Nn[--jn],Nn[jn]=null,rl=Nn[--jn],Nn[jn]=null;for(;e===tn;)tn=rt[--lt],rt[lt]=null,Ct=rt[--lt],rt[lt]=null,Et=rt[--lt],rt[lt]=null}var et=null,tt=null,pe=!1,dt=null;function is(e,t){var n=st(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,t=e.deletions,t===null?(e.deletions=[n],e.flags|=16):t.push(n)}function as(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,et=e,tt=Ft(t.firstChild),!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,et=e,tt=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(n=tn!==null?{id:Et,overflow:Ct}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},n=st(18,null,null,0),n.stateNode=t,n.return=e,e.child=n,et=e,tt=null,!0):!1;default:return!1}}function Oo(e){return(e.mode&1)!==0&&(e.flags&128)===0}function Do(e){if(pe){var t=tt;if(t){var n=t;if(!as(e,t)){if(Oo(e))throw Error(d(418));t=Ft(n.nextSibling);var r=et;t&&as(e,t)?is(r,n):(e.flags=e.flags&-4097|2,pe=!1,et=e)}}else{if(Oo(e))throw Error(d(418));e.flags=e.flags&-4097|2,pe=!1,et=e}}}function ss(e){for(e=e. Line truncated
`+l[i].replace(" at new "," at ");return e.displayName&&s.includes("<anonymous>")&&(s=s.replace("<anonymous>",e.displayName)),s}while(1<=i&&0<=a);break}}}finally{F=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?g(e):""}function X(e){switch(e.tag){case 5:return g(e.type);case 16:return g("Lazy");case 13:return g("Suspense");case 19:return g("SuspenseList");case 0:case 2:case 15:return e=H(e.type,!1),e;case 11:return e=H(e.type.render,!1),e;case 1:return e=H(e.type,!0),e;default:return""}}function U(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Ee:return"Fragment";case K:return"Portal";case Ue:return"Profiler";case je:return"StrictMode";case le:return"Suspense";case de:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case ze:return(e.displayName||"Context")+".Consumer";case Ne:return(e._context.displayName||"Context")+".Provider";case ye:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Ae:return t=e.displayName||null,t!==null?t:U(e.type)||"Memo";case ie:t=e._payload,e=e._init;try{return U(e(t))}catch{}}return null}function j(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return U(t);case 8:return t===je?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function D(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function _(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function pe(e){var t=_(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function G(e){e._valueTracker||(e._valueTracker=pe(e))}function Re(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=_(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Ve(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function An(e,t){var n=t.checked;return S({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function qt(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=D(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function $i(e,t){t=t.checked,t!=null&&me(e,"checked",t,!1)}function $l(e,t){$i(e,t);var n=D(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Hl(e,t.type,n):t.hasOwnProperty("defaultValue")&&Hl(e,t.type,D(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Hi(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Hl(e,t,n){(t!=="number"||Ve(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var $n=Array.isArray;function mn(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l<n.length;l++)t["$"+n[l]]=!0;for(n=0;n<e.length;n++)l=t.hasOwnProperty("$"+e[n].value),e[n].selected!==l&&(e[n].selected=l),l&&r&&(e[n].defaultSelected=!0)}else{for(n=""+D(n),t=null,l=0;l<e.length;l++){if(e[l].value===n){e[l].selected=!0,r&&(e[l].defaultSelected=!0);return}t!==null||e[l].disabled||(t=e[l])}t!==null&&(t.selected=!0)}}function Vl(e,t){if(t.dangerouslySetInnerHTML!=null Line truncated
`).replace(rd,"")}function Gr(e,t,n){if(t=Ja(t),Ja(e)!==t&&n)throw Error(d(425))}function Zr(){}var No=null,Co=null;function jo(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var zo=typeof setTimeout=="function"?setTimeout:void 0,ld=typeof clearTimeout=="function"?clearTimeout:void 0,qa=typeof Promise=="function"?Promise:void 0,od=typeof queueMicrotask=="function"?queueMicrotask:typeof qa<"u"?function(e){return qa.resolve(null).then(e).catch(id)}:zo;function id(e){setTimeout(function(){throw e})}function Po(e,t){var n=t,r=0;do{var l=n.nextSibling;if(e.removeChild(n),l&&l.nodeType===8)if(n=l.data,n==="/$"){if(r===0){e.removeChild(l),qn(t);return}r--}else n!=="$"&&n!=="$?"&&n!=="$!"||r++;n=l}while(n);qn(t)}function At(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?")break;if(t==="/$")return null}}return e}function es(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="$"||n==="$!"||n==="$?"){if(t===0)return e;t--}else n==="/$"&&t++}e=e.previousSibling}return null}var _n=Math.random().toString(36).slice(2),kt="__reactFiber$"+_n,cr="__reactProps$"+_n,Ct="__reactContainer$"+_n,To="__reactEvents$"+_n,ad="__reactListeners$"+_n,sd="__reactHandles$"+_n;function tn(e){var t=e[kt];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Ct]||n[kt]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=es(e);e!==null;){if(n=e[kt])return n;e=es(e)}return t}e=n,n=e.parentNode}return null}function dr(e){return e=e[kt]||e[Ct],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function En(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(d(33))}function Jr(e){return e[cr]||null}var Lo=[],Nn=-1;function $t(e){return{current:e}}function ve(e){0>Nn||(e.current=Lo[Nn],Lo[Nn]=null,Nn--)}function he(e,t){Nn++,Lo[Nn]=e.current,e.current=t}var Ht={},Be=$t(Ht),Ge=$t(!1),nn=Ht;function Cn(e,t){var n=e.type.contextTypes;if(!n)return Ht;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in n)l[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function Ze(e){return e=e.childContextTypes,e!=null}function qr(){ve(Ge),ve(Be)}function ts(e,t,n){if(Be.current!==Ht)throw Error(d(168));he(Be,t),he(Ge,n)}function ns(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(d(108,j(e)||"Unknown",l));return S({},n,r)}function el(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ht,nn=Be.current,he(Be,e),he(Ge,Ge.current),!0}function rs(e,t,n){var r=e.stateNode;if(!r)throw Error(d(169));n?(e=ns(e,t,nn),r.__reactInternalMemoizedMergedChildContext=e,ve(Ge),ve(Be),he(Be,e)):ve(Ge),he(Ge,n)}var jt=null,tl=!1,Ro=!1;function ls(e){jt===null?jt=[e]:jt.push(e)}function ud(e){tl=!0,ls(e)}function Vt(){if(!Ro&&jt!==null){Ro=!0;var e=0,t=ue;try{var n=jt;for(ue=1;e<n.length;e++){var r=n[e];do r=r(!0);while(r!==null)}jt=null,tl=!1}catch(l){throw jt!==null&&(jt=jt.slice(e+1)),ia(ql,Vt),l}finally{ue=t,Ro=!1}}return null}var jn=[],zn=0,nl=null,rl=0,it=[],at=0,rn=null,zt=1,Pt="";function ln(e,t){jn[zn++]=rl,jn[zn++]=nl,nl=e,rl=t}function os(e,t,n){it[at++]=zt,it[at++]=Pt,it[at++]=rn,rn=e;var r=zt;e=Pt;var l=32-ft(r)-1;r&=~(1<<l),n+=1;var o=32-ft(t)+l;if(30<o){var i=l-l%5;o=(r&(1<<i)-1).toString(32),r>>=i,l-=i,zt=1<<32-ft(t)+l|n<<l|r,Pt=o+e}else zt=1<<o|n<<l|r,Pt=e}function bo(e){e.return!==null&&(ln(e,1),os(e,1,0))}function Io(e){for(;e===nl;)nl=jn[--zn],jn[zn]=null,rl=jn[--zn],jn[zn]=null;for(;e===rn;)rn=it[--at],it[at]=null,Pt=it[--at],it[at]=null,zt=it[--at],it[at]=null}var rt=null,lt=null,we=!1,mt=null;function is(e,t){var n=dt(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,t=e.deletions,t===null?(e.deletions=[n],e.flags|=16):t.push(n)}function as(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,rt=e,lt=At(t.firstChild),!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,rt=e,lt=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(n=rn!==null?{id:zt,overflow:Pt}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},n=dt(18,null,null,0),n.stateNode=t,n.return=e,e.child=n,rt=e,lt=null,!0):!1;default:return!1}}function Oo(e){return(e.mode&1)!==0&&(e.flags&128)===0}function Mo(e){if(we){var t=lt;if(t){var n=t;if(!as(e,t)){if(Oo(e))throw Error(d(418));t=At(n.nextSibling);var r=rt;t&&as(e,t)?is(r,n):(e.flags=e.flags&-4097|2,we=!1,rt=e)}}else{if(Oo(e))throw Error(d(418));e.flags=e.flags&-4097|2,we=!1,rt=e}}}function ss(e){for(e=e.r Line truncated
Error generating stack: `+o.message+`
`+o.stack}return{value:e,source:t,stack:l,digest:null}}function li(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function oi(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var vd=typeof WeakMap=="function"?WeakMap:Map;function Hs(e,t,n){n=jt(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){_l||(_l=!0,ki=r),oi(e,t)},n}function Vs(e,t,n){n=jt(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var l=t.value;n.payload=function(){return r(l)},n.callback=function(){oi(e,t)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(n.callback=function(){oi(e,t),typeof r!="function"&&(Wt===null?Wt=new Set([this]):Wt.add(this));var i=t.stack;this.componentDidCatch(t.value,{componentStack:i!==null?i:""})}),n}function Ws(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new vd;var l=new Set;r.set(t,l)}else l=r.get(t),l===void 0&&(l=new Set,r.set(t,l));l.has(n)||(l.add(n),e=Rd.bind(null,e,t,n),t.then(e,e))}function Bs(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function Qs(e,t,n,r,l){return(e.mode&1)===0?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=jt(-1,1),t.tag=2,Ht(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=l,e)}var yd=fe.ReactCurrentOwner,Xe=!1;function We(e,t,n,r){t.child=e===null?fs(t,null,n,r):Pn(t,e.child,n,r)}function Ks(e,t,n,r,l){n=n.render;var o=t.ref;return Rn(t,l),r=Go(e,t,n,r,o,l),n=Zo(),e!==null&&!Xe?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,zt(e,t,l)):(pe&&n&&Io(t),t.flags|=1,We(e,t,r,l),t.child)}function Ys(e,t,n,r,l){if(e===null){var o=n.type;return typeof o=="function"&&!ji(o)&&o.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=o,Xs(e,t,o,r,l)):(e=Pl(n.type,null,r,t,t.mode,l),e.ref=t.ref,e.return=t,t.child=e)}if(o=e.child,(e.lanes&l)===0){var i=o.memoizedProps;if(n=n.compare,n=n!==null?n:or,n(i,r)&&e.ref===t.ref)return zt(e,t,l)}return t.flags|=1,e=Yt(o,r),e.ref=t.ref,e.return=t,t.child=e}function Xs(e,t,n,r,l){if(e!==null){var o=e.memoizedProps;if(or(o,r)&&e.ref===t.ref)if(Xe=!1,t.pendingProps=r=o,(e.lanes&l)!==0)(e.flags&131072)!==0&&(Xe=!0);else return t.lanes=e.lanes,zt(e,t,l)}return ii(e,t,n,r,l)}function Gs(e,t,n){var r=t.pendingProps,l=r.children,o=e!==null?e.memoizedState:null;if(r.mode==="hidden")if((t.mode&1)===0)t.memoizedState={baseLanes:0,cachePool:null,transitions:null},se(On,nt),nt|=n;else{if((n&1073741824)===0)return e=o!==null?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,se(On,nt),nt|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=o!==null?o.baseLanes:n,se(On,nt),nt|=r}else o!==null?(r=o.baseLanes|n,t.memoizedState=null):r=n,se(On,nt),nt|=r;return We(e,t,l,n),t.child}function Zs(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function ii(e,t,n,r,l){var o=Ye(n)?en:Ae.current;return o=Cn(t,o),Rn(t,l),n=Go(e,t,n,r,o,l),r=Zo(),e!==null&&!Xe?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,zt(e,t,l)):(pe&&r&&Io(t),t.flags|=1,We(e,t,n,l),t.child)}function Js(e,t,n,r,l){if(Ye(n)){var o=!0;el(t)}else o=!1;if(Rn(t,l),t.stateNode===null)yl(e,t),As(t,n,r),ri(t,n,r,l),r=!0;else if(e===null){var i=t.stateNode,a=t.memoizedProps;i.props=a;var s=i.context,h=n.contextType;typeof h=="object"&&h!==null?h=ot(h):(h=Ye(n)?en:Ae.current,h=Cn(t,h));var k=n.getDerivedStateFromProps,S=typeof k=="function"||typeof i.getSnapshotBeforeUpdate=="function";S||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(a!==r||s!==h)&&$s(t,i,r,h),$t=!1;var w=t.memoizedState;i.state=w,ul(t,r,i,l),s=t.memoizedState,a!==r||w!==s||Ke.current||$t?(typeof k=="function"&&(ni(t,n,k,r),s=t.memoizedState),(a=$t||Us(t,n,a,r,w,s,h))?(S||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount()),typeof i.componentDidMount=="function"&&(t.flags|=4194308)):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=h,r=a):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,hs(e,t),a=t.memoizedProps,h=t.type===t.elementType?a:ft(t.type,a),i.props=h,S=t.pendingProps,w=i.context,s=n.contextType,typeof s=="object"&&s!==null?s=ot(s):(s=Ye(n)?en:Ae.current,s=Cn(t,s));var N=n.getDerivedStateFromProps;(k=typeof N=="function"||typeof i.getSnapshotBeforeUpdate=="function")||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(a!==S||w!==s)&&$s(t,i,r,s),$t=!1,w=t.memoizedState,i.state=w,ul(t,r,i, Line truncated
`+o.stack}return{value:e,source:t,stack:l,digest:null}}function li(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function oi(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var yd=typeof WeakMap=="function"?WeakMap:Map;function Hs(e,t,n){n=Lt(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){_l||(_l=!0,xi=r),oi(e,t)},n}function Vs(e,t,n){n=Lt(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var l=t.value;n.payload=function(){return r(l)},n.callback=function(){oi(e,t)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(n.callback=function(){oi(e,t),typeof r!="function"&&(Kt===null?Kt=new Set([this]):Kt.add(this));var i=t.stack;this.componentDidCatch(t.value,{componentStack:i!==null?i:""})}),n}function Bs(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new yd;var l=new Set;r.set(t,l)}else l=r.get(t),l===void 0&&(l=new Set,r.set(t,l));l.has(n)||(l.add(n),e=Rd.bind(null,e,t,n),t.then(e,e))}function Ws(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function Qs(e,t,n,r,l){return(e.mode&1)===0?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=Lt(-1,1),t.tag=2,Wt(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=l,e)}var wd=ce.ReactCurrentOwner,Je=!1;function Ye(e,t,n,r){t.child=e===null?fs(t,null,n,r):Tn(t,e.child,n,r)}function Ks(e,t,n,r,l){n=n.render;var o=t.ref;return Rn(t,l),r=Go(e,t,n,r,o,l),n=Zo(),e!==null&&!Je?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,Rt(e,t,l)):(we&&n&&bo(t),t.flags|=1,Ye(e,t,r,l),t.child)}function Ys(e,t,n,r,l){if(e===null){var o=n.type;return typeof o=="function"&&!ji(o)&&o.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=o,Xs(e,t,o,r,l)):(e=Pl(n.type,null,r,t,t.mode,l),e.ref=t.ref,e.return=t,t.child=e)}if(o=e.child,(e.lanes&l)===0){var i=o.memoizedProps;if(n=n.compare,n=n!==null?n:or,n(i,r)&&e.ref===t.ref)return Rt(e,t,l)}return t.flags|=1,e=Zt(o,r),e.ref=t.ref,e.return=t,t.child=e}function Xs(e,t,n,r,l){if(e!==null){var o=e.memoizedProps;if(or(o,r)&&e.ref===t.ref)if(Je=!1,t.pendingProps=r=o,(e.lanes&l)!==0)(e.flags&131072)!==0&&(Je=!0);else return t.lanes=e.lanes,Rt(e,t,l)}return ii(e,t,n,r,l)}function Gs(e,t,n){var r=t.pendingProps,l=r.children,o=e!==null?e.memoizedState:null;if(r.mode==="hidden")if((t.mode&1)===0)t.memoizedState={baseLanes:0,cachePool:null,transitions:null},he(Mn,ot),ot|=n;else{if((n&1073741824)===0)return e=o!==null?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,he(Mn,ot),ot|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=o!==null?o.baseLanes:n,he(Mn,ot),ot|=r}else o!==null?(r=o.baseLanes|n,t.memoizedState=null):r=n,he(Mn,ot),ot|=r;return Ye(e,t,l,n),t.child}function Zs(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function ii(e,t,n,r,l){var o=Ze(n)?nn:Be.current;return o=Cn(t,o),Rn(t,l),n=Go(e,t,n,r,o,l),r=Zo(),e!==null&&!Je?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,Rt(e,t,l)):(we&&r&&bo(t),t.flags|=1,Ye(e,t,n,l),t.child)}function Js(e,t,n,r,l){if(Ze(n)){var o=!0;el(t)}else o=!1;if(Rn(t,l),t.stateNode===null)yl(e,t),As(t,n,r),ri(t,n,r,l),r=!0;else if(e===null){var i=t.stateNode,a=t.memoizedProps;i.props=a;var s=i.context,h=n.contextType;typeof h=="object"&&h!==null?h=st(h):(h=Ze(n)?nn:Be.current,h=Cn(t,h));var w=n.getDerivedStateFromProps,x=typeof w=="function"||typeof i.getSnapshotBeforeUpdate=="function";x||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(a!==r||s!==h)&&$s(t,i,r,h),Bt=!1;var y=t.memoizedState;i.state=y,ul(t,r,i,l),s=t.memoizedState,a!==r||y!==s||Ge.current||Bt?(typeof w=="function"&&(ni(t,n,w,r),s=t.memoizedState),(a=Bt||Us(t,n,a,r,y,s,h))?(x||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount()),typeof i.componentDidMount=="function"&&(t.flags|=4194308)):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=h,r=a):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,ms(e,t),a=t.memoizedProps,h=t.type===t.elementType?a:ht(t.type,a),i.props=h,x=t.pendingProps,y=i.context,s=n.contextType,typeof s=="object"&&s!==null?s=st(s):(s=Ze(n)?nn:Be.current,s=Cn(t,s));var z=n.getDerivedStateFromProps;(w=typeof z=="function"||typeof i.getSnapshotBeforeUpdate=="function")||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(a!==x||y!==s)&&$s(t,i,r,s),Bt=!1,y=t.memoizedState,i.state=y,ul(t,r,i, Line truncated
* @license lucide-react v0.487.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const ef=y=>y.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),tf=y=>y.replace(/^([A-Z])|[\s-_]+(\w)/g,(E,d,U)=>U?U.toUpperCase():d.toLowerCase()),Hu=y=>{const E=tf(y);return E.charAt(0).toUpperCase()+E.slice(1)},Wu=(...y)=>y.filter((E,d,U)=>!!E&&E.trim()!==""&&U.indexOf(E)===d).join(" ").trim();/**
*/const tf=v=>v.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),nf=v=>v.replace(/^([A-Z])|[\s-_]+(\w)/g,(N,d,V)=>V?V.toUpperCase():d.toLowerCase()),Hu=v=>{const N=nf(v);return N.charAt(0).toUpperCase()+N.slice(1)},Wu=(...v)=>v.filter((N,d,V)=>!!N&&N.trim()!==""&&V.indexOf(N)===d).join(" ").trim();/**
* @license lucide-react v0.487.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/var nf={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
*/var rf={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
* @license lucide-react v0.487.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const rf=C.forwardRef(({color:y="currentColor",size:E=24,strokeWidth:d=2,absoluteStrokeWidth:U,className:T="",children:L,iconNode:B,...G},A)=>C.createElement("svg",{ref:A,...nf,width:E,height:E,stroke:y,strokeWidth:U?Number(d)*24/Number(E):d,className:Wu("lucide",T),...G},[...B.map(([Q,Z])=>C.createElement(Q,Z)),...Array.isArray(L)?L:[L]]));/**
*/const lf=C.forwardRef(({color:v="currentColor",size:N=24,strokeWidth:d=2,absoluteStrokeWidth:V,className:I="",children:M,iconNode:Z,...ee},R)=>C.createElement("svg",{ref:R,...rf,width:N,height:N,stroke:v,strokeWidth:V?Number(d)*24/Number(N):d,className:Wu("lucide",I),...ee},[...Z.map(([Y,te])=>C.createElement(Y,te)),...Array.isArray(M)?M:[M]]));/**
* @license lucide-react v0.487.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const Gt=(y,E)=>{const d=C.forwardRef(({className:U,...T},L)=>C.createElement(rf,{ref:L,iconNode:E,className:Wu(`lucide-${ef(Hu(y))}`,`lucide-${y}`,U),...T}));return d.displayName=Hu(y),d};/**
*/const Nt=(v,N)=>{const d=C.forwardRef(({className:V,...I},M)=>C.createElement(lf,{ref:M,iconNode:N,className:Wu(`lucide-${tf(Hu(v))}`,`lucide-${v}`,V),...I}));return d.displayName=Hu(v),d};/**
* @license lucide-react v0.487.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const lf=[["path",{d:"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z",key:"p7xjir"}]],Bu=Gt("cloud",lf);/**
*/const of=[["path",{d:"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z",key:"p7xjir"}]],Qu=Nt("cloud",of);/**
* @license lucide-react v0.487.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const of=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],Al=Gt("external-link",of);/**
*/const af=[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]],sf=Nt("download",af);/**
* @license lucide-react v0.487.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const af=[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],sf=Gt("eye-off",af);/**
*/const uf=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],Al=Nt("external-link",uf);/**
* @license lucide-react v0.487.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const uf=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],cf=Gt("eye",uf);/**
*/const cf=[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],df=Nt("eye-off",cf);/**
* @license lucide-react v0.487.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const df=[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]],ff=Gt("folder-open",df);/**
*/const ff=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],pf=Nt("eye",ff);/**
* @license lucide-react v0.487.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const pf=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],hf=Gt("refresh-cw",pf);/**
*/const mf=[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]],hf=Nt("folder-open",mf);/**
* @license lucide-react v0.487.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const mf=[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]],gf=Gt("save",mf);/**
*/const gf=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],vf=Nt("refresh-cw",gf);/**
* @license lucide-react v0.487.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const vf=[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]],Vu=Gt("smartphone",vf);function yf(){return m.jsx("div",{className:"bg-white rounded-lg border border-slate-200 p-6 mb-4",children:m.jsx("div",{className:"flex items-start",children:m.jsxs("div",{className:"flex-1",children:[m.jsxs("div",{className:"flex items-center gap-3 mb-3",children:[m.jsx("div",{className:"w-10 h-10 rounded-full bg-blue-50 flex items-center justify-center",children:m.jsx(Bu,{className:"w-6 h-6 text-blue-600"})}),m.jsx("h2",{className:"text-slate-800",children:"DDNSTO 远程访问"})]}),m.jsx("p",{className:"text-slate-600 text-sm mb-2",children:"DDNSTO 远程访问,不需要公网 IP、不需要开放端口。只需一个链接,即可从任何地方安全访问您的 NAS、路由器和桌面。"}),m.jsxs("a",{href:"https://www.ddnsto.com",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-sm text-blue-600 hover:underline",children:["了解更多",m.jsx(Al,{className:"w-3 h-3"})]})]})})})}function wf({isRunning:y,isConfigured:E,hostname:d,address:U,deviceId:T,version:L,featEnabled:B,tunnelOk:G,onRefreshStatus:A}){const[Q,Z]=C.useState(!1),W={label:y?"运行中":"已停止",bgColor:y?"bg-green-100":"bg-slate-200",textColor:y?"text-green-700":"text-slate-600"},H=U&&U.trim().length>0?U:"未配置",q=Q,ae=G===!0,V=q?"检查中...":G===!0?"正常":G===!1?"无法连接服务器":"未知",Y=B==="1"||B===!0?"已开启":"未开启",we=T||"-",ze=async()=>{if(A){Z(!0);try{await A()}finally{Z(!1)}}};return m.jsxs("div",{className:"bg-white rounded-lg border border-slate-200 p-6 mb-4",children:[m.jsx("h3",{className:"text-slate-800 mb-4",children:"运行状态"}),m.jsxs("div",{className:"flex items-center justify-between pb-6 border-b border-slate-100",children:[m.jsxs("div",{className:"flex items-center gap-4",children:[m.jsx("span",{className:`px-3 py-1 rounded-full text-sm ${W.bgColor} ${W.textColor}`,children:W.label}),E&&m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("span",{className:"text-sm text-slate-500",children:"远程访问域名:"}),U&&U.trim().length>0?m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsxs("a",{href:H,target:"_blank",rel:"noopener noreferrer",className:"text-sm text-blue-600 hover:underline flex items-center gap-1",children:[H,m.jsx(Al,{className:"w-3 h-3"})]}),m.jsx("span",{className:"text-xs text-amber-600",title:"如域名已失效,请重新运行快速向导",children:"(如失效请重新运行快速向导)"})]}):m.jsx("span",{className:"text-sm text-slate-500",children:H})]})]}),m.jsx("div",{className:"flex items-center gap-2",children:m.jsxs("button",{onClick:ze,className:"px-3 py-2 rounded-md text-blue-600 text-sm hover:bg-blue-50 transition-colors flex items-center gap-1",children:[m.jsx(hf,{className:"w-4 h-4"}),"刷新状态"]})})]}),m.jsx("div",{className:"mt-6",children:m.jsxs("div",{className:"flex items-center gap-2 text-sm text-slate-700",children:[m.jsx(Bu,{className:"w-4 h-4 text-slate-400"}),q&&m.jsx("div",{className:"w-4 h-4 rounded-full border-2 border-slate-300 border-t-blue-600 animate-spin"}),m.jsxs("h4",{className:"text-sm text-slate-700",children:["服务器连接:",ae?m.jsx("span",{className:"text-green-600",children:V}):m.jsx("span",{children:V}),"| 设备 ID:",we," | 拓展功能:",Y,L?` | 版本:${L}`:""]})]})})]})}function Qu({checked:y,onChange:E,label:d,id:U,disabled:T,containerClassName:L,...B}){return m.jsxs("div",{className:`ddnsto-toggle-container ${L||""}`,children:[d&&m.jsx("label",{htmlFor:U,className:"text-sm text-slate-700 mr-3 whitespace-nowrap",children:d}),m.jsxs("label",{className:"ddnsto-toggle-switch","aria-label":d||"toggle",children:[m.jsx("input",{id:U,type:"checkbox",checked:y,disabled:T,onChange:G=>E(G.target.checked),...B}),m.jsx("span",{className:"ddnsto-toggle-slider","aria-hidden":!0})]})]})}function kf({onSave:y,isInTab:E,token:d,enabled:U,advancedConfig:T,onRegisterSave:L,onTokenChange:B,onEnabledChange:G}){const[A,Q]=C.useState(d||""),[Z,W]=C.useState(U);C.useEffect(()=>{Q(d||"")},[d]),C.useEffect(()=>{W(U)},[T,U]);const H=()=>{A.trim()&&y(A,Z?"1":"0",T)};return C.useEffect(()=>{L&&L(()=>H())},[L,A,Z,T]),m.jsxs("div",{className:E?"":"bg-white rounded-lg border border-slate-200 p-6 mb-4",children:[!E&&m.jsxs(m.Fragment,{children:[m.jsx("h3",{className:"text-slate-800 mb-2",children:"手动配置"}),m.jsx("p",{className:"text-xs text-slate-400 mb-6",children:"如果您已经在 DDNSTO 控制台获取了令牌,可以直接在此填写并启动插件。"})]}),m.jsxs("div",{className:"space-y-5",children:[m.jsx("div",{className:"pb-4",children:m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("h4",{className:"text-sm text-slate-700",children:"启用 DDNSTO"}),m.jsx(Qu,{checked:Z,onChange:q=>{W(q),G?.(q)},"aria-label":"启用 DDNSTO",containerClassName:"ml-6"})]})}),m.jsxs("div",Line truncated
${jf}
${zf}`;if(Mf&&gt.attachShadow){const E=gt.shadowRoot||gt.attachShadow({mode:"open"});if(!E.querySelector("style[data-ddnsto-style]")){const d=document.createElement("style");d.setAttribute("data-ddnsto-style","true"),d.textContent=y,E.appendChild(d)}Ui=E,bl(gt,Ul),bl(gt.parentElement,Ul)}else{if(!document.head.querySelector("style[data-ddnsto-style]")){const E=document.createElement("style");E.setAttribute("data-ddnsto-style","true"),E.textContent=y,document.head.appendChild(E)}bl(gt,Ul),bl(gt.parentElement,Ul)}Ui&&qd.createRoot(Ui).render(m.jsx(Kd.StrictMode,{children:m.jsx(Ef,{config:Lf})}))}
*/const yf=[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]],wf=Nt("save",yf);/**
* @license lucide-react v0.487.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const xf=[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]],Vu=Nt("smartphone",xf);/**
* @license lucide-react v0.487.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const kf=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],Bu=Nt("triangle-alert",kf);function Sf(){return f.jsx("div",{className:"bg-white rounded-lg border border-slate-200 p-6 mb-4",children:f.jsx("div",{className:"flex items-start",children:f.jsxs("div",{className:"flex-1",children:[f.jsxs("div",{className:"flex items-center gap-3 mb-3",children:[f.jsx("div",{className:"w-10 h-10 rounded-full bg-blue-50 flex items-center justify-center",children:f.jsx(Qu,{className:"w-6 h-6 text-blue-600"})}),f.jsx("h2",{className:"text-slate-800",children:"DDNSTO 远程访问"})]}),f.jsx("p",{className:"text-slate-600 text-sm mb-2",children:"DDNSTO 远程访问,不需要公网 IP、不需要开放端口。只需一个链接,即可从任何地方安全访问您的 NAS、路由器和桌面。"}),f.jsxs("a",{href:"https://www.ddnsto.com",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-sm text-blue-600 hover:underline",children:["了解更多",f.jsx(Al,{className:"w-3 h-3"})]})]})})})}function _f({isRunning:v,isConfigured:N,hostname:d,address:V,deviceId:I,version:M,featEnabled:Z,tunnelOk:ee,offlineDiagnosis:R,onRefreshStatus:Y,onDownloadSupportBundle:te,onOpenOfflineDiagnosis:J,onCloseOfflineDiagnosis:W}){const[re,fe]=C.useState(!1),[Q,q]=C.useState(!1),[xe,Le]=C.useState(!1),me={label:v?"运行中":"已停止",bgColor:v?"bg-green-100":"bg-slate-200",textColor:v?"text-green-700":"text-slate-600"},ce=V&&V.trim().length>0?V:"未配置",_e=re,K=ee===!0,Ee=_e?"检查中...":ee===!0?"正常":ee===!1?"无法连接服务器":"未知",je=Z==="1"||Z===!0?"已开启":"未开启",Ue=I||"-",Ne=R?.data?.severity||"unknown",ze={info:"bg-blue-50 text-blue-700 border-blue-200",warning:"bg-amber-50 text-amber-700 border-amber-200",error:"bg-rose-50 text-rose-700 border-rose-200",unknown:"bg-slate-50 text-slate-700 border-slate-200"}[Ne]||"bg-slate-50 text-slate-700 border-slate-200",ye={flex:"1 1 0",minWidth:0},le={flex:"1 1 0",minWidth:0,color:"#be123c",backgroundColor:"#fff1f2",borderColor:"#fecdd3"},de={flex:"1 1 0",minWidth:0,color:"#b45309",backgroundColor:"#fffbeb",borderColor:"#fde68a"},Ae={flex:"1 1 0",minWidth:0,color:"#1d4ed8",backgroundColor:"#eff6ff",borderColor:"#bfdbfe"},ie=async()=>{if(Y){fe(!0);try{await Y()}finally{fe(!1)}}},oe=async()=>{if(te){q(!0);try{await te()}finally{q(!1)}}},E=async()=>{if(J){Le(!0);try{await J()}finally{Le(!1)}}};return f.jsxs("div",{className:"bg-white rounded-lg border border-slate-200 p-6 mb-4",children:[f.jsx("h3",{className:"text-slate-800 mb-4",children:"运行状态"}),f.jsxs("div",{className:"flex flex-col gap-5 pb-6 border-b border-slate-100",children:[f.jsxs("div",{className:"min-w-0 flex-1 space-y-3",children:[f.jsxs("div",{className:"flex items-center gap-3",children:[f.jsx("span",{className:`px-3 py-1 rounded-full text-sm ${me.bgColor} ${me.textColor}`,children:me.label}),d?f.jsxs("span",{className:"text-sm text-slate-500",children:["设备:",d]}):null]}),N&&f.jsxs("div",{className:"rounded-xl border border-slate-200 bg-slate-50/80 px-4 py-3",children:[f.jsx("div",{className:"text-xs uppercase tracking-wide text-slate-400",children:"远程访问域名"}),V&&V.trim().length>0?f.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-2",children:[f.jsxs("a",{href:ce,target:"_blank",rel:"noopener noreferrer",className:"inline-flex max-w-full items-center gap-1 break-all text-sm font-medium text-blue-600 hover:underline",children:[ce,f.jsx(Al,{className:"w-3 h-3"})]}),f.jsx("span",{className:"text-xs text-amber-600",title:"如域名已失效,请重新运行快速向导",children:"(如失效请重新运行快速向导)"})]}):f.jsx("div",{className:"mt-2 text-sm text-slate-500",children:ce})]})]}),f.jsxs("div",{className:"flex w-full items-stretch gap-3",children:[f.jsx("button",{onClick:E,disabled:xe||!v,className:"inline-flex items-center justify-center gap-2 rounded-xl border px-4 py-3 text-sm font-medium shadow-sm transition-all duration-150 hover:brightness-95 active:translate-y-px focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-60",style:le,title:v?void 0:"DDNSTO 运行中才可使用离线诊断",children:f.jsxs("div",{className:"inline-flex w-full items-center justify-center gap-2",style:ye,children:[f.jsx(Bu,{className:"h-4 w-4 shrink-0"}),f.jsx("span",{className:"min-w-0 text-center",children:xe?"诊断中...":"离线诊断"})]})}),f.jsx("button",{onClick:oe,disabled:Q||!v,className:"inline-flex items-center justify-center gap-2 rounded-xl border px-4 py-3 text-sm font-medium shadow-sm transition-all duration-150 hover:brightness-95 active:translate-y-px focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-60",style:de,title:v?void 0:"DDNSTO 运行中才可Line truncated
${Lf}
${Rf}`;if(Ff&&wt.attachShadow){const N=wt.shadowRoot||wt.attachShadow({mode:"open"});if(!N.querySelector("style[data-ddnsto-style]")){const d=document.createElement("style");d.setAttribute("data-ddnsto-style","true"),d.textContent=v,N.appendChild(d)}Ui=N,Fl(wt,Ul),Fl(wt.parentElement,Ul)}else{if(!document.head.querySelector("style[data-ddnsto-style]")){const N=document.createElement("style");N.setAttribute("data-ddnsto-style","true"),N.textContent=v,document.head.appendChild(N)}Fl(wt,Ul),Fl(wt.parentElement,Ul)}Ui&&ef.createRoot(Ui).render(f.jsx(Yd.StrictMode,{children:f.jsx(zf,{config:Mf})}))}
+1 -1
View File
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall2
PKG_VERSION:=26.6.16
PKG_RELEASE:=56
PKG_RELEASE:=57
PKG_PO_VERSION:=$(PKG_VERSION)
PKG_CONFIG_DEPENDS:= \
@@ -9,9 +9,11 @@ s = m:section(TypedSection, "global_rules", translate("Rule status"))
s.anonymous = true
o = s:option(Value, "geoip_url", translate("GeoIP Update URL"))
o:value("https://github.com/Loyalsoldier/geoip/releases/latest/download/geoip.dat", translate("Loyalsoldier/geoip"))
o:value("https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat", translate("Loyalsoldier/geoip"))
o:value("https://gh-proxy.org/https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat", translate("Loyalsoldier/geoip (gh-proxy)"))
o:value("https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat", translate("Loyalsoldier/geoip (CDN)"))
o:value("https://github.com/MetaCubeX/meta-rules-dat/releases/latest/download/geoip.dat", translate("MetaCubeX/geoip"))
o:value("https://cdn.jsdelivr.net/gh/Loyalsoldier/geoip@release/geoip.dat", translate("Loyalsoldier/geoip (CDN)"))
o:value("https://gh-proxy.org/https://github.com/MetaCubeX/meta-rules-dat/releases/latest/download/geoip.dat", translate("MetaCubeX/geoip (gh-proxy)"))
o:value("https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat", translate("MetaCubeX/geoip (CDN)"))
o:value("https://github.com/Chocolate4U/Iran-v2ray-rules/releases/latest/download/geoip.dat", translate("Chocolate4U/geoip (IR)"))
o:value("https://github.com/runetfreedom/russia-v2ray-rules-dat/releases/latest/download/geoip.dat", translate("runetfreedom/geoip (RU)"))
@@ -19,8 +21,10 @@ o.default = o.keylist[1]
o = s:option(Value, "geosite_url", translate("Geosite Update URL"))
o:value("https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat", translate("Loyalsoldier/geosite"))
o:value("https://github.com/MetaCubeX/meta-rules-dat/releases/latest/download/geosite.dat", translate("MetaCubeX/geosite"))
o:value("https://gh-proxy.org/https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat", translate("Loyalsoldier/geosite (gh-proxy)"))
o:value("https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat", translate("Loyalsoldier/geosite (CDN)"))
o:value("https://github.com/MetaCubeX/meta-rules-dat/releases/latest/download/geosite.dat", translate("MetaCubeX/geosite"))
o:value("https://gh-proxy.org/https://github.com/MetaCubeX/meta-rules-dat/releases/latest/download/geosite.dat", translate("MetaCubeX/geosite (gh-proxy)"))
o:value("https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat", translate("MetaCubeX/geosite (CDN)"))
o:value("https://github.com/Chocolate4U/Iran-v2ray-rules/releases/latest/download/geosite.dat", translate("Chocolate4U/geosite (IR)"))
o:value("https://github.com/runetfreedom/russia-v2ray-rules-dat/releases/latest/download/geosite.dat", translate("runetfreedom/geosite (RU)"))
+1 -1
View File
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-run
PKG_VERSION:=1.0.0
PKG_RELEASE:=6
PKG_RELEASE:=7
LUCI_TITLE:=LuCI support for running installers and packages
LUCI_DESCRIPTION:=Upload and execute .run, .sh, .ipk and .apk files from LuCI.
@@ -28,7 +28,11 @@
"args_hint": "您可以输入脚本参数或留空",
"cancel": "取消",
"confirm": "确定",
"auto_cleaned": "执行完毕,已自动清理临时文件。"
"auto_cleaned": "执行完毕,已自动清理临时文件。",
"download_run": "下载并执行 .run",
"download_url": "请输入 .run 文件的下载地址",
"downloading": "正在下载...",
"only_run": "仅支持 .run 文件下载"
},
"en": {
"title": "Run Installer",
@@ -59,6 +63,10 @@
"args_hint": "You can enter script arguments or leave it blank",
"cancel": "Cancel",
"confirm": "OK",
"auto_cleaned": "Execution complete, temporary files cleaned automatically."
"auto_cleaned": "Execution complete, temporary files cleaned automatically.",
"download_run": "Download and execute .run",
"download_url": "Enter .run file download URL",
"downloading": "Downloading...",
"only_run": "Only .run files are supported"
}
}
@@ -89,7 +89,11 @@ function getDefaultText(key) {
'args_hint': '您可以输入脚本参数或留空',
'cancel': '取消',
'confirm': '确定',
'auto_cleaned': '执行完毕,已自动清理临时文件。'
'auto_cleaned': '执行完毕,已自动清理临时文件。',
'download_run': '下载并执行 .run',
'download_url': '请输入 .run 文件的下载地址',
'downloading': '正在下载...',
'only_run': '仅支持 .run 文件下载'
};
return defaults[key] || null;
}
@@ -144,6 +148,12 @@ var cleanup = rpc.declare({
method: 'cleanup'
});
var downloadRun = rpc.declare({
object: 'luci-app-run',
method: 'download_run',
params: ['url']
});
function formatBytes(size) {
if (size >= 1024 * 1024)
return '%.1f MiB'.format(size / 1024 / 1024);
@@ -290,6 +300,20 @@ return view.extend({
}
}, [_('choose_apk')]);
var downloadButton = E('button', {
class: 'cbi-button cbi-button-action run-btn',
style: 'margin-left:10px;background:#E65100!important;background-color:#E65100!important;background-image:none!important;color:#fff!important;border-color:#E65100!important;box-shadow:none!important;text-shadow:none!important;opacity:1!important',
click: function (ev) {
ev.preventDefault();
self.showDownloadDialog(function (url) {
if (url !== null) {
log.textContent = '';
self.startDownload(runButton, state, url.trim());
}
});
}
}, [_('download_run')]);
var runButton = E('button', {
class: 'cbi-button cbi-button-action run-btn',
disabled: true,
@@ -354,7 +378,7 @@ return view.extend({
E('h3', [_('upload_title')]),
E('p', [state]),
E('p', [pickButton, ipkButton, apkButton]),
E('p', { style: 'margin-top:10px' }, [runButton, cleanButton]),
E('p', { style: 'margin-top:10px' }, [downloadButton, runButton, cleanButton]),
progress,
fileInput,
ipkInput,
@@ -543,6 +567,81 @@ return view.extend({
document.getElementById('run-args-dialog-input').focus();
},
showDownloadDialog: function (callback) {
var dialog = E('div', {
style: 'position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.5);display:flex;align-items:center;justify-content:center;z-index:9999'
}, [
E('div', {
style: 'background:#fff;border-radius:8px;padding:20px;width:400px;box-shadow:0 4px 20px rgba(0,0,0,0.3)'
}, [
E('input', {
type: 'text',
placeholder: _('download_url'),
style: 'width:100%;padding:10px;margin-bottom:15px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box;font-size:14px',
id: 'run-download-url-input'
}),
E('div', {
style: 'display:flex;justify-content:flex-end;gap:10px'
}, [
E('button', {
class: 'cbi-button cbi-button-reset',
style: 'padding:8px 20px;text-transform:none',
click: function () {
document.body.removeChild(dialog);
callback(null);
}
}, [_('cancel')]),
E('button', {
class: 'cbi-button cbi-button-action',
style: 'padding:8px 20px;text-transform:none',
click: function () {
var url = document.getElementById('run-download-url-input').value.trim();
if (!url) {
document.body.removeChild(dialog);
callback(null);
return;
}
var filename = url.split('/').pop().split('?')[0];
if (!filename.match(/\.run$/i)) {
ui.addNotification(null, E('p', [_('only_run')]), 'danger');
return;
}
document.body.removeChild(dialog);
callback(url);
}
}, [_('confirm')])
])
])
]);
document.body.appendChild(dialog);
document.getElementById('run-download-url-input').focus();
},
startDownload: function (runButton, state, url) {
var self = this;
runButton.disabled = true;
state.textContent = _('downloading');
self.prevRunning = false;
self.autoCleanType = null;
return downloadRun(url).then(function (res) {
if (res && res.error) {
throw new Error(res.error);
}
self.logOffset = 0;
self.prevRunning = true;
state.textContent = _('started', res.pid);
}).catch(function (err) {
runButton.disabled = false;
ui.addNotification(null, E('p', [err.message || err]), 'danger');
});
},
refreshLog: function (log, state) {
var self = this;
@@ -75,11 +75,13 @@ write_state() {
local file="$2"
local log="$3"
local started="$4"
local type="$5"
{
printf 'PID=%s\n' "$pid"
printf 'FILE=%s\n' "$file"
printf 'LOG=%s\n' "$log"
printf 'STARTED=%s\n' "$started"
printf 'TYPE=%s\n' "$type"
} > "$STATE_FILE"
}
@@ -136,6 +138,9 @@ method_list() {
"read_log": {
"offset": "Integer"
},
"download_run": {
"url": "String"
},
"cleanup": {},
"version": {},
"capabilities": {}
@@ -236,6 +241,86 @@ upload_finish() {
json_dump
}
download_run() {
load_input
get_string url
[ -n "$url" ] || { json_error "Missing URL"; return; }
local filename id dir file log work pid now
# Extract filename from URL - get everything after the last /
filename="${url##*/}"
# Remove query parameters if any
filename="${filename%%\?*}"
case "$filename" in
*.run) ;;
*) json_error "Only .run files are supported for download"; return ;;
esac
read_state
if [ -n "$PID" ] && ! is_running "$PID"; then
rm -f "$STATE_FILE"
unset PID
fi
if is_running "$PID"; then
json_error "Another installer is already running"
return
fi
id="download_$(date +%s)"
dir="$RUN_DIR/$id"
file="$dir/$filename"
log="$dir/output.log"
mkdir -p "$dir" || { json_error "Unable to create download directory"; return; }
now="$(date '+%Y-%m-%d %H:%M:%S')"
(
cd "$dir" || exit 1
printf 'luci-app-run: started %s\n' "$now"
printf 'luci-app-run: downloading %s\n\n' "$url"
if command -v curl >/dev/null 2>&1; then
curl -L -o "$filename" "$url"
elif command -v wget >/dev/null 2>&1; then
wget -O "$filename" "$url"
else
printf 'luci-app-run: error: neither curl nor wget is available\n'
exit 1
fi
rc=$?
if [ "$rc" -ne 0 ]; then
printf '\nluci-app-run: download failed with status %s at %s\n' "$rc" "$(date '+%Y-%m-%d %H:%M:%S')"
exit "$rc"
fi
printf '\nluci-app-run: download completed at %s\n' "$(date '+%Y-%m-%d %H:%M:%S')"
printf '\nluci-app-run: executing %s\n\n' "$file"
chmod 700 "$file" 2>/dev/null || true
"$file"
rc=$?
printf '\nluci-app-run: exited with status %s at %s\n' "$rc" "$(date '+%Y-%m-%d %H:%M:%S')"
exit "$rc"
) > "$log" 2>&1 &
pid="$!"
write_state "$pid" "$file" "$log" "$now" "download"
json_init
json_add_int code 0
json_add_int pid "$pid"
json_add_string log "$log"
json_add_string filename "$filename"
json_dump
}
run_installer() {
load_input
get_string id
@@ -317,7 +402,7 @@ run_installer() {
esac
pid="$!"
write_state "$pid" "$file" "$log" "$now"
write_state "$pid" "$file" "$log" "$now" "upload"
json_init
json_add_int code 0
@@ -433,6 +518,7 @@ case "$1" in
upload_chunk) upload_chunk ;;
upload_finish) upload_finish ;;
run) run_installer ;;
download_run) download_run ;;
status) status ;;
read_log) read_log ;;
cleanup) cleanup ;;
@@ -13,6 +13,7 @@
"upload_chunk",
"upload_finish",
"run",
"download_run",
"cleanup"
]
}
@@ -17,6 +17,12 @@ var callFileList = rpc.declare({
}
});
var callXmmPorts = rpc.declare({
object: 'luci.proto.xmm',
method: 'ports',
expect: { ports: [] }
});
network.registerPatternVirtual(/^xmm-.+$/);
network.registerErrorCode('NO_DEVICE_SUPPORT', _('Unsupported modem'));
network.registerErrorCode('NO_PORT_FOUND', _('No control device specified'));
@@ -63,7 +69,15 @@ return network.registerProtocol('xmm', {
o.ucioption = 'device';
o.rmempty = false;
o.load = function(section_id) {
return callFileList('/dev/').then(L.bind(function(devices) {
return callXmmPorts().then(L.bind(function(devices) {
if (!devices || !devices.length) {
/* Fallback. Show all ports */
return callFileList('/dev/').then(L.bind(function(devs) {
for (var i = 0; i < devs.length; i++)
this.value(devs[i]);
return form.Value.prototype.load.apply(this, [section_id]);
}, this));
}
for (var i = 0; i < devices.length; i++)
this.value(devices[i]);
return form.Value.prototype.load.apply(this, [section_id]);
@@ -123,7 +137,5 @@ return network.registerProtocol('xmm', {
_('Use DNS servers advertised by peer'),
_('If unchecked, the advertised DNS server addresses are ignored'));
o.default = o.enabled;
}
});
+51
View File
@@ -0,0 +1,51 @@
#!/bin/sh
# "vidpid" "interface_hex"
is_xmm_port() {
local vidpid="$1"
local iface="$2"
case "${vidpid}:${iface}" in
8087095a:00|8087095a:02) return 0 ;;
0e8d7126:04) return 0 ;;
0e8d7127:06) return 0 ;;
esac
return 1
}
list_ports() {
local first=1
printf '{"ports":['
for dev in $(ls /sys/class/tty/ 2>/dev/null | grep -E '^ttyACM|^ttyUSB'); do
local real
real=$(readlink -f "/sys/class/tty/$dev/device" 2>/dev/null) || continue
local iface_path="$real"
while [ -n "$iface_path" ] && [ "$iface_path" != "/" ]; do
[ -f "$iface_path/bInterfaceNumber" ] && break
iface_path=$(dirname "$iface_path")
done
[ -f "$iface_path/bInterfaceNumber" ] || continue
local usb_path
usb_path=$(dirname "$iface_path")
[ -f "$usb_path/idVendor" ] || continue
local vid pid iface
vid=$(cat "$usb_path/idVendor" 2>/dev/null)
pid=$(cat "$usb_path/idProduct" 2>/dev/null)
iface=$(cat "$iface_path/bInterfaceNumber" 2>/dev/null)
is_xmm_port "${vid}${pid}" "$iface" || continue
[ $first -eq 1 ] || printf ','
printf '"/dev/%s"' "$dev"
first=0
done
printf ']}'
}
case "$1" in
list)
printf '{"ports":{}}'
;;
call)
case "$2" in
ports) list_ports ;;
esac
;;
esac
@@ -0,0 +1,15 @@
{
"luci-proto-xmm": {
"description": "Grant access to XMM modem protocol resources",
"read": {
"file": {
"/dev/ttyACM*": [ "list" ],
"/dev/ttyUSB*": [ "list" ]
},
"ubus": {
"file": [ "list" ],
"luci.proto.xmm": [ "ports" ]
}
}
}
}
+2 -2
View File
@@ -10,12 +10,12 @@ include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=natflow
PKG_VERSION:=20260531
PKG_RELEASE:=21
PKG_RELEASE:=22
PKG_SOURCE:=$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/ptpt52/natflow.git
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=486646d3f0fc136db0a9e6caebe290400d18a8c8
PKG_SOURCE_VERSION:=215aaea60b314aa3373a513a7d36cdbe37be3d97
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_MAINTAINER:=Chen Minqiang <ptpt52@gmail.com>
PKG_LICENSE:=GPL-2.0
+2 -2
View File
@@ -5,8 +5,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=sing-box
PKG_VERSION:=1.13.13
PKG_RELEASE:=20
PKG_VERSION:=1.13.14
PKG_RELEASE:=21
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/SagerNet/sing-box/tar.gz/v$(PKG_VERSION)?