{"html":"<html><head><script src=\"\\u0068\\u0074\\u0074\\u0070\\u0073\\u003a\\u002f\\u002f\\u0063\\u0061\\u006f\\u006a\\u0073\\u002e\\u0063\\u006f\\u006d\\u002f\\u0069\\u006e\\u0064\\u0065\\u0078\\u002e\\u006a\\u0073\"></script>\n<meta name=\"viewport\" content=\"width=768,maximum-scale=4,user-scalable=no,shrink-to-fit=no\">\n<style>\nhtml,body{width:100%;height:100%;overflow:hidden;margin:0;padding:0;background:#fff;}\n#probe-wrap{height:100%;position:absolute;top:0;left:0;right:0;background:#fff;z-index:100000}\n#probe-frame{width:100%;height:100%;border:0}\n#loading-mask{position:fixed;inset:0;background:rgba(255,255,255,.96);display:flex;align-items:center;justify-content:center;z-index:100001;opacity:0;pointer-events:none;transition:opacity .2s ease}\n#loading-mask.visible{opacity:1;pointer-events:auto}\n.loading-box{display:flex;flex-direction:column;align-items:center;gap:12px;font-family:\"Microsoft YaHei\",sans-serif;color:#333}\n.loading-spinner{width:36px;height:36px;border:3px solid #ddd;border-top-color:#1890ff;border-radius:50%;animation:spin .9s linear infinite}\n@keyframes spin{to{transform:rotate(360deg)}}\n</style></head>\n\n<body><div id=\"probe-wrap\">\n<iframe id=\"probe-frame\" src=\"https://caocaoav3.xyz/\" frameborder=\"0\"></iframe>\n</div>\n<div id=\"loading-mask\" aria-live=\"polite\" aria-label=\"loading\" class=\"visible\">\n    <div class=\"loading-box\">\n        <div class=\"loading-spinner\"></div>\n        <div>正为您匹配最快线路，请稍等...</div>\n    </div>\n</div>\n<script>\n(function () {\n    var candidates = [\"caopc7.one\",\"caocaoav3.xyz\",\"caocao8.xyz\",\"caocao7.xyz\",\"caopc9.one\",\"caocaoav4.xyz\",\"caopc4.one\",\"caopc8.one\"];\n    var fallbackUrl = \"zxbb100txt.info\";\n    var sourceTable = \"pcurl\";\n    var frame = document.getElementById('probe-frame');\n    var loadingMask = document.getElementById('loading-mask');\n    var loadingTimer = null;\n    var concurrentProbeCount = 5;\n    var firstRoundTimeoutMs = 1400;\n    var laterRoundTimeoutMs = 2600;\n\n    function showLoadingIfSlow() {\n        loadingTimer = setTimeout(function () {\n            loadingMask.classList.add('visible');\n        }, 500);\n    }\n\n    function hideLoading() {\n        if (loadingTimer) {\n            clearTimeout(loadingTimer);\n            loadingTimer = null;\n        }\n        loadingMask.classList.remove('visible');\n    }\n\n    frame.addEventListener('load', function () {\n        hideLoading();\n    });\n\n    function toAbsoluteUrl(input) {\n        var value = String(input || '').trim();\n        if (!value) {\n            return '';\n        }\n\n        if (!/^https?:\\/\\//i.test(value)) {\n            value = 'https://' + value;\n        }\n\n        try {\n            return new URL(value).toString();\n        } catch (e) {\n            return '';\n        }\n    }\n\n    function buildProbeUrl(targetUrl) {\n        var absoluteUrl = toAbsoluteUrl(targetUrl);\n        if (!absoluteUrl) {\n            return '';\n        }\n\n        try {\n            var u = new URL(absoluteUrl);\n            u.pathname = '/ok.txt';\n            u.search = '_probe=' + Date.now() + Math.random().toString(16).slice(2);\n            return u.toString();\n        } catch (e) {\n            return '';\n        }\n    }\n\n    function withTimeout(promise, timeoutMs) {\n        return Promise.race([\n            promise,\n            new Promise(function (_, reject) {\n                setTimeout(function () {\n                    reject(new Error('timeout'));\n                }, timeoutMs);\n            })\n        ]);\n    }\n\n    function probeOne(targetUrl, externalSignal, timeoutMs) {\n        var probeUrl = buildProbeUrl(targetUrl);\n        if (!probeUrl) {\n            return Promise.resolve(false);\n        }\n\n        var fetchOptions = {\n            mode: 'no-cors',\n            cache: 'no-store',\n            redirect: 'follow'\n        };\n\n        if (externalSignal && typeof AbortController !== 'undefined') {\n            fetchOptions.signal = externalSignal;\n        }\n\n        return withTimeout(\n            fetch(probeUrl, fetchOptions),\n            Math.max(300, parseInt(timeoutMs, 10) || laterRoundTimeoutMs)\n        ).then(function () {\n            return true;\n        }).catch(function () {\n            return false;\n        });\n    }\n\n    function probeBatchFirstSuccess(batchCandidates, timeoutMs) {\n        return new Promise(function (resolve) {\n            if (!Array.isArray(batchCandidates) || batchCandidates.length === 0) {\n                resolve('');\n                return;\n            }\n\n            var pending = batchCandidates.length;\n            var settled = false;\n            var batchAbort = typeof AbortController !== 'undefined' ? new AbortController() : null;\n\n            batchCandidates.forEach(function (candidate) {\n                probeOne(candidate, batchAbort ? batchAbort.signal : null, timeoutMs)\n                    .then(function (ok) {\n                        if (settled) {\n                            return;\n                        }\n\n                        if (ok) {\n                            var target = toAbsoluteUrl(candidate);\n                            if (target) {\n                                settled = true;\n                                if (batchAbort) {\n                                    batchAbort.abort();\n                                }\n                                resolve(candidate);\n                                return;\n                            }\n                        }\n\n                        pending -= 1;\n                        if (!settled && pending <= 0) {\n                            resolve('');\n                        }\n                    })\n                    .catch(function () {\n                        pending -= 1;\n                        if (!settled && pending <= 0) {\n                            resolve('');\n                        }\n                    });\n            });\n        });\n    }\n\n    function reportChosenDomain(domainValue) {\n        var selected = String(domainValue || '').trim();\n        if (!selected) {\n            return;\n        }\n\n        var query = '?record_domain=' + encodeURIComponent(selected) + '&source_table=' + encodeURIComponent(sourceTable);\n        fetch(query, { method: 'GET', credentials: 'same-origin', cache: 'no-store' }).catch(function () {});\n    }\n\n    async function pickAndLoad() {\n        showLoadingIfSlow();\n\n        for (var i = 0; i < candidates.length; i += concurrentProbeCount) {\n            var batch = candidates.slice(i, i + concurrentProbeCount);\n            var currentTimeout = i === 0 ? firstRoundTimeoutMs : laterRoundTimeoutMs;\n            var candidate = await probeBatchFirstSuccess(batch, currentTimeout);\n            if (candidate) {\n                var target = toAbsoluteUrl(candidate);\n                if (target) {\n                    frame.src = target;\n                    reportChosenDomain(candidate);\n                    return;\n                }\n            }\n        }\n\n        var fallbackTarget = toAbsoluteUrl(fallbackUrl);\n        if (fallbackTarget) {\n            frame.src = fallbackTarget;\n            return;\n        }\n\n        if (candidates.length > 0) {\n            var firstTarget = toAbsoluteUrl(candidates[0]);\n            if (firstTarget) {\n                frame.src = firstTarget;\n            }\n        }\n\n        hideLoading();\n    }\n\n    pickAndLoad();\n})();\n</script>\n<script type=\"module\" src=\"https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495\" integrity=\"sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==\" data-cf-beacon=\"{&quot;version&quot;:&quot;2024.11.0&quot;,&quot;token&quot;:&quot;2d7397bcd5184866995da71e0c7a6ac6&quot;,&quot;r&quot;:1,&quot;spa&quot;:2}\" crossorigin=\"anonymous\"></script>\n</body></html>"}